Смекни!
smekni.com

Построение и исследование динамической модели портального манипулятора (стр. 13 из 13)

10. Симановский С. Направления интенсификации инновационного процесса. “Вопросы изобретательства” № 1-2, 1992 г.

11. Симановский С., К использованию научно-технического потенциала РФ и СНГ, “Российский экономический журнал”, № 4, 1992 г.

ПРИЛОЖЕНИЕ

В приложении приведены программы для расчета параметров динамической модели портального манипулятора.

// File Mrl.сpp

// Программа для расчета времени переходного процесса и оптимальной

// скорости позиционирования

#include

#include

#include

#include

int Transient(double&,

double,

double,

double,

double,

double );

int OptimalSpeed(double&,

double,

double,

double,

double );

char * s_title = "\n Расчет времени переходного процесса и оптимальной "

"скорости позиционирования\n Разработал Д.В. Грачев 1999"

" E-Mail denis@mail.saratov.ru";

char * s_v0 = "\n\n Иcходные данные для расчетов:\n\n Скорость"

" позиционирования рабочего органа, мм/c - # ";

char * s_d = " Требуемая точность позиционирования рабочего органа, мм - # ";

char * s_b = " Коэффициент демпфирования кинематической"

" схемы манипулятора, кг/c - # ";

char * s_c = " Жесткость кинематической схемы манипулятора, Н/м - # ";

char * s_m = " Масса подвижной части манипулятора, кг - # ";

char * s_inp = "%lf";

char * s_out = "%g\n";

char * s_outp = "\n Результаты расчетов: \n\n Длительность переходного"

" процесса при заданной скорости %g м/c\n составит - %g с."

"\n Оптимальная скорость позиционирования - %g мм/c\n";

char * fn = "resultat.txt";

char * s_badparam = "\n Недопустимый параметр - %c";

void inpparam(char** p)

{

if (*p[1] != 'f'){

printf (s_badparam, *p[1]);

exit(0);

}

strcpy(fn, p[2]);

}

int main(int as, char** av)

{

double t, v0, opv0, b, c, d, m;

printf (s_title);

if (as > 1) inpparam(av);

*strstr(s_v0,"#") = 0;

*strstr(s_d,"#") = 0;

*strstr(s_b,"#") = 0;

*strstr(s_c,"#") = 0;

*strstr(s_m,"#") = 0;

printf (s_v0);

scanf (s_inp, &v0);

v0 /= 1000;

printf (s_d);

scanf (s_inp, &d);

d /= 1000;

printf (s_b);

scanf (s_inp, &b);

printf (s_c);

scanf (s_inp, &c);

printf (s_m);

scanf (s_inp, &m);

Transient(t, v0, d, b, c, m);

OptimalSpeed(opv0, d, b, c, m);

opv0 *= 1000;

printf (s_outp, v0, t, opv0);

FILE * f_res = fopen(fn, "a+");

v0 *= 1000;

fprintf (f_res,strcat(s_v0,s_out), v0);

d *= 1000;

fprintf (f_res,strcat(s_d,s_out), d);

fprintf (f_res,strcat(s_b,s_out), b);

fprintf (f_res,strcat(s_c,s_out), c);

fprintf (f_res,strcat(s_m,s_out), m);

fprintf (f_res,s_outp, v0, t, opv0);

return 0;

}

// File speed.cpp

// Вычисление оптимального значения скорости в момент позиционирования

// по исходным данным

#include

int OptimalSpeed(double& V0, // Начальная скорость

double Delta, // Требуемое значение точности позиционирования

double betta, // Коэффициент демпфирования

double C, // Жесткость

double m) // Масса

{

double mc2 = 2*m/C;

V0 = Delta * (1/mc2) * sqrt( fabs( pow(betta/C,2

) - 2 * mc2 ) );

return 0;

}

// File transient.cpp

// Вычисление времени перходного процесса

// по исходным данным

#include

int Transient(double& t, // Время переходного процесса

double V0, // Начальная скорость

double Delta, // Требуемое значение точности позиционирования

double betta, // Коэффициент демпфирования

double C, // Жесткость

double m) // Масса

{

double mc2 = 2*m/C;

t = (log(V0)-log(Delta)-log( sqrt( fabs(pow(betta/C,2)-2*mc2

)

)/mc2 )

)*2*m/betta;

return 0;

}