Аналитический метод кинематического исследования рычажных механизмов

(материалы для выполнения курсового проекта)


Содержание

  1. Подпрограммы-процедуры
  2. Структура программы расчета положений звеньев
  3. Пример программы расчета положений звеньев
  4. Структура программы расчета положений, скоростей и ускорений
  5. Пример программы расчета положений, скоростей и ускорений

 

Вернуться к списку преподавателей

1. Подпрограммы-процедуры

Процедура assur1 предназначена для расчета группы Ассура с тремя вращательными парами.

procedure assur1(x1,y1,x2,y2,r1,r2:real; m:integer; var x3,y3,fi1,fi2:real);

function beta(r,r1,r2: real): real;

begin

beta:= abs(arcos((r*r+sqr(r1)-sqr(r2))/2.0/r/r1));

end;

var r,psi: real;

begin

r:= sqrt(sqr(x2-x1)+sqr(y2-y1));

psi:= arsin((y2-y1)/r);

if x2 < x1 then psi:=pi-psi;

fi1:= psi+beta(r,r1,r2)*m;

fi2:= psi-beta(r,r2,r1)*m;

x3:= x1+r1*cos(fi1);

y3:= y1+r1*sin(fi1);

end;

Процедура assur2 предназначена для расчета группы Ассура с двумя вращательными и внешней поступательной парами.

procedure assur2(x1,y1,r,psi,dl: real; m: integer; var x2,y2,fi: real);

var z,beta: real ;

begin

z:= (r+x1*sin(psi) - y1*cos(psi)) / dl;

beta:= pi/2.0 - m*(pi/2.-arsin(z));

fi:= psi+beta;

x2:= x1+dl*cos(fi);

y2:= y1+dl*sin(fi);

end;

2. Структура программы расчета положений звеньев

Структура программы расчета положений звеньев (координат шарнирных точек и угловых положений звеньев). Схема из учебного пособия: Подольский М.Е., Сенчурин Л.П., Цыганков А.В. Автоматизированное проектирование рычажных механизмов. Л.: Изд. ЛКИ, 1987.
Язык программирования - ПАСКАЛЬ

  1. Заголовок программы, например: program shemap ( input, output ) ;
  2. Функции: function arsin ( ... ) : real ; function arcos ( ... ) : real ;
  3. Процедуры: procedure assur1 ( ... ) ; procedure assur2 ( ... ) ;
  4. Описание переменных.
  5. Открытие файлов ввода - вывода.
  6. Чтение исходных данных из файла.
  7. Закрытие файла ввода исходных данных.
  8. Вывод в файл общей информации и исходных данных для расчета.
  9. Подготовительная часть головной программы.
  10. Организация цикла по числу положений (по переменной i ) - цикл for.
  11. Определение угла поворота начального звена fi1.
  12. Определение координат точки А кривошипа - , .
  13. Обращение к процедуре assur1; на выходе: координаты точки В и угловые положения звеньев 2 и 3 - xB, yB, fi2, fi3.
  14. Определение координат точки D: xD, yD.
  15. Обращение к процедуре assur2; на выходе: координаты точки Е и угловое положение звена 4 - , , fi4.
  16. Перевод углов поворота звеньев в градусы.
  17. Вывод результатов расчета в файл.
  18. Оператор end - конец цикла по переменной i.
  19. Печать сообщения об окончании расчета.
  20. Закрытие файла вывода.
  21. Оператор end. - конец программы.

3. Пример программы расчета положений звеньев

Пример программы расчета положений звеньев (координат шарнирных точек и угловых положений звеньев). Схема из учебного пособия: Подольский М.Е., Сенчурин Л.П., Цыганков А.В. Автоматизированное проектирование рычажных механизмов. Л.: Изд. ЛКИ, 1987.

program shemap (input,output);

{Определение положений звеньев и координат шарнирных точек}

{Функции}

function arsin(x: real): real;

begin

arsin:= arctan(x/sqrt(1.0-sqr(x)));

end;

function arcos(x: real): real;

begin

arcos:=pi/2.0-arsin(x);

end;

{Процедуры}

procedure assur1(x1,y1,x2,y2,r1,r2:real; m:integer; var x3,y3,fi1,fi2:real);

function beta(r,r1,r2: real): real;

begin

beta:= abs(arcos((r*r+sqr(r1)-sqr(r2))/2./r/r1));

end;

var r,psi: real;

begin

r:=sqrt(sqr(x2-x1)+sqr(y2-y1));

psi:= arsin((y2-y1)/r);

if x2<x1 then psi:=pi-psi;

fi1:=psi+beta(r,r1,r2)*m;

fi2:=psi-beta(r,r2,r1)*m;

x3:=x1+r1*cos(fi1);

y3:=y1+r1*sin(fi1);

end;

procedure assur2(x1,y1,r,psi,dl: real; m: integer; var x2,y2,fi: real);

var z,beta: real ;

begin

z:=(r+x1*sin(psi)-y1*cos(psi))/dl;

beta:=pi/2.0-m*(pi/2.0-arsin(z));

fi:=psi+beta;

x2:=x1+dl*cos(fi);

y2:=y1+dl*sin(fi);

end;

{Конец процедур}

{Описание переменных}

var

fin,fo: text; {Файловые переменные}

var

i,n,n1,m1,m2: integer;

xa,ya,xb,yb,xd,yd,xe,ye: real;

fi1,fi2,fi3,fi4: real;

oa,ab,bc,bd,de,a,c,b,psig,psi,dfi: real;

{Головная программа}

begin

{ОТКРЫТИЕ ФАЙЛОВ ВВОДА-ВЫВОДА }

assign (fin, 'shemap.dat'); {standard input}

reset(fin);

assign (fo, 'shemap.rez'); {standard output}

rewrite(fo);

{ ЧТЕНИЕ ИСХОДНЫХ ДАННЫХ }

readln (fin,oa,ab,bc,bd,de,a,c,b,psig,n,m1,m2);

close (fin); {ЗАКРЫТИЕ ФАЙЛА ВВОДА}

{ВЫВОД ОБЩЕЙ ИНФОРМАЦИИ И ИСХОДНЫХ ДАННЫХ}

writeln(fo,'СТУДЕНТ: ИВАНОВ И.И.');

writeln(fo,'ГРУППА: 23ЭУ1');

writeln(fo,'ПРЕПОДАВАТЕЛЬ: ПОЛОВИНКИНА Н.Б.');

writeln(fo,'КАФЕДРА "ДЕТАЛИ МАШИН И ПТМ"');

writeln(fo,'ДАТА НАЧАЛА РАСЧЕТА: СЕНТЯБРЯ 2000 Г.');

writeln(fo,'СХЕМА № , ВАРИАНТ № ');

writeln(fo,' ИСХОДНЫЕ ДАННЫЕ');

writeln(fo,' OA=', oa:8:1,' AB=', ab:8:1,' BC=', bc:8:1);

writeln(fo,' BD=', bd:8:1,' DE=', de:8:1, ' A=', a:8:1);

writeln(fo,' C=', c:8:1, ' B=', b:8:1,' PSI=', psig:8:1);

writeln(fo,' N=', n:8, ' M1=', m1:8 ,' M2=', m2:8);

writeln(fo,' РЕЗУЛЬТАТЫ РАСЧЕТОВ');

psi:=psig*pi/180.0;

dfi:=2.0*pi/n; {шаг по углу поворота начального звена}

n1:=n+1; { ДЛЯ ПОВТОРЕНИЯ РАСЧЕТА В ПЕРВОНАЧАЛЬНОМ ПОЛОЖЕНИИ }

{Начало цикла по i}

for i:=1 to n1 do

begin

fi1:=dfi*(i-1);

xa:=oa*cos(fi1);

ya:=oa*sin(fi1);

{Обращение к подпрограмме - процедуре assur1}

assur1(xa,ya,a,c,ab,bc,m1,xb,yb,fi2,fi3);

xd:=xb+bd*cos(fi3);

yd:=yb+bd*sin(fi3);

{Обращение к подпрограмме - процедуре assur2}

assur2(xd,yd,b,psi,de,m2,xe,ye,fi4);

{ПЕРЕВОД УГЛОВ В ГРАДУСЫ}

fi1:=fi1*180.0/pi;

fi2:=fi2*180.0/pi;

fi3:=fi3*180.0/pi;

fi4:=fi4*180.0/pi;

{КОНЕЦ РАСЧЕТНОЙ ЧАСТИ ПРОГРАММЫ}

{Вывод результатов расчета}

writeln(fo,' ПОЛОЖЕНИЕ НОМЕР ',I:3);

writeln(fo,' fI1=',fI1:8:2,' fi2=',fi2:8:2,' fi3=',fi3:8:2,' fi4=',fi4:8:2);

writeln(fo,' xa=', xa:8:2, ' ya=', ya:8:2,' xb=', xb:8:2,' yb=', yb:8:2);

writeln(fo,' xd=',xd:8:2, ' yd=', yd:8:2,' xe=', xe:8:2,' ye=', ye:8:2);

writeln(fo);

end; {Конец цикла по i}

writeln(fo,' РАСЧЕТ ОКОНЧЕН');

close (fo); {ЗАКРЫТИЕ ФАЙЛА ВЫВОДА}

end.

4. Структура программы расчета положений, скоростей и ускорений

Структура программы кинематического расчета рычажного механизма (положений звеньев, линейных и угловых скоростей и ускорений). Схема из учебного пособия: Подольский М.Е., Сенчурин Л.П., Цыганков А.В. Автоматизированное проектирование рычажных механизмов. Л.: Изд. ЛКИ, 1987.
Язык программирования - ПАСКАЛЬ

1.Заголовок программы, например: program shemap1 ( input, output ) ;

2.Объявление глобальных типов данных.

3. Функции:

4. Процедуры:

5. Объявление локальных типов данных.

6. Описание локальных переменных.

7. Открытие файлов ввода - вывода.

8. Чтение исходных данных из файла.

9. Закрытие файла ввода исходных данных.

10. Вывод в файл общей информации и исходных данных для расчета.

11. Подготовительная часть головной программы.

12. Организация цикла по числу положений механизма (по i ) - цикл for.

13. Определение угла поворота начального звена fi1.

14.Организация цикла по j для дифференцирования. В этом цикле выполняется:

15. Организация цикла по числу звеньев (по k). В этом цикле выполняется:

16. Определение проекций скоростей шарнирных точек с помощью модуля-функции dif11 и полных скоростей этих точек.

17. Определение проекций ускорений шарнирных точек с помощью модуля-функции dif21 и полных ускорений этих точек.

18. Перевод углов поворота звеньев в градусы.

19. Вывод результатов расчета в файл.

20. Оператор end - конец цикла по переменной i.

21. Печать сообщения об окончании расчета.

22. Закрытие файла вывода.

23. Оператор end. - конец программы.

5. Пример программы расчета положений, скоростей и ускорений

Пример программы кинематического расчета рычажного механизма (положений звеньев, линейных и угловых скоростей и ускорений). Схема из учебного пособия: Подольский М.Е., Сенчурин Л.П., Цыганков А.В. Автоматизированное проектирование рычажных механизмов. Л.: Изд. ЛКИ, 1987.

program shemap1 (input,output);

{Программа кинематического расчета рычажного механизма}

type

massiv1 = array [1..4,1..3] of real;

massiv2 = array [1..3] of real;

{Функции}

function arsin(x: real):real;

begin

arsin := arctan(x/sqrt(1.-sqr(x)));

end;

function arcos(x: real):real;

begin

arcos :=pi/2.0-arsin(x);

end;

function dif1(f:massiv1;k,j0:integer;dt:real):real;

begin

dif1:=(f[k,j0+1]-f[k,j0-1])/2./dt;

end;

function dif2(f:massiv1;k,j0:integer;dt:real):real;

begin

dif2:=(f[k,j0+1]-2.*f[k,j0]+f[k,j0-1])/sqr(dt);

end;

function dif11(f:massiv2;j0:integer;dt:real):real;

begin

dif11:=(f[j0+1]-f[j0-1])/2./dt;

end;

function dif21(f:massiv2;j0:integer;dt:real):real;

begin

dif21:=(f[j0+1]-2.*f[j0]+f[j0-1])/sqr(dt);

end;

{Процедуры}

procedure assur1(x1,y1,x2,y2,r1,r2:real; m:integer; var x3,y3,fi1,fi2:real);

function beta(r,r1,r2:real):real;

begin

beta := abs(arcos((r*r+sqr(r1)-sqr(r2))/2./r/r1));

end;

var r,psi:real;

begin

r:=sqrt(sqr(x2-x1)+sqr(y2-y1));

psi:= arsin((y2-y1)/r);

if x2<x1 then psi:=pi-psi;

fi1:=psi+beta(r,r1,r2)*m;

fi2:=psi-beta(r,r2,r1)*m;

x3:=x1+r1*cos(fi1);

y3:=y1+r1*sin(fi1);

end;

procedure assur2(x1,y1,r,psi,dl: real; m: integer; var x2,y2,fi: real);

var z,beta: real ;

begin

z:=(r+x1*sin(psi)-y1*cos(psi))/dl;

beta:=pi/2.-m*(pi/2.-arsin(z));

fi:=psi+beta;

x2:=x1+dl*cos(fi);

y2:=y1+dl*sin(fi);

end;

{Конец процедур}

{Описание переменных}

type

massiv3= array[1..4] of real;

var

fin,fo: text;

var

i,j,j0,k,n,n1,m1,m2: integer;

xa,ya,xb,yb,xd,yd,xe,ye: massiv2;

omega,eps: massiv3; fi: massiv1;

oa,ba,bc,bd,de,a,c,b,psig,psi,omega1: real;

dfi,dt,dfi1,fi1: real;

vxa,vya,va,vxb,vyb,vb,vxd,vyd,vd,vxe,vye,ve: real;

axa,aya,aa,axb,ayb,ab,axd,ayd,ad,axe,aye,ae: real;

{Головная программа}

begin

{ ОТКРЫТИЕ ФАЙЛОВ ВВОДА-ВЫВОДА }

assign (fin, 'shemap1.dat'); {standard input}

reset(fin);

assign (fo, 'shemap1.rez'); {standard output}

rewrite(fo);

{ ЧТЕНИЕ ИСХОДНЫХ ДАННЫХ }

readln (fin,oa,ba,bc,bd,de,a,c,b,psig,omega1);

readln (fin,n,m1,m2,j0);

close (fin); {ЗАКРЫТИЕ ФАЙЛА ВВОДА}

{ВЫВОД ОБЩЕЙ ИНФОРМАЦИИ И ИСХОДНЫХ ДАННЫХ}

writeln(fo,'СТУДЕНТ: ИВАНОВ И.И.');

writeln(fo,'ГРУППА: 23ЭУ1');

writeln(fo,'ПРЕПОДАВАТЕЛЬ: ПОЛОВИНКИНА Н.Б.');

writeln(fo,'КАФЕДРА "ДЕТАЛИ МАШИН И ПТМ"');

writeln(fo,'ДАТА НАЧАЛА РАСЧЕТА: СЕНТЯБРЯ 2000 Г.');

writeln(fo,'СХЕМА № , ВАРИАНТ № ');

writeln(fo,' ИСХОДНЫЕ ДАННЫЕ');

writeln(fo,' OA=', oa:6:3,' BA=',ba:6:3,' BC=',bc:6:3);

writeln(fo,' BD=', bd:6:3,' DE=',de:6:3,' A=',a:6:3);

writeln(fo,' C=', c:6:3,' B=', b:6:3,' PSI=',psig:6:3);

writeln(fo,'OMEGA1=',omega1:6:3,' N=', n:6 ,' M1=',m1:6);

writeln(fo,' M2=', m2:6 ,' J0=',j0:6);

writeln(fo,' РЕЗУЛЬТАТЫ РАСЧЕТОВ');

psi:=psig*pi/180.;

dfi:=0.05; {шаг сетки - расстояние между узлами шаблона}

dt:=dfi/omega1; {шаг по времени}

dfi1:=2.*pi/n; {шаг по углу поворота начального звена}

n1:=n+1; { ДЛЯ ПОВТОРЕНИЯ РАСЧЕТА В ПЕРВОНАЧАЛЬНОМ ПОЛОЖЕНИИ }

{Начало цикла по i }

for i:=1 to n1 do

begin

fI1:=dfi1*(i-1);

{Начало цикла по j}

for j:=1 to 3 do

begin

fi[1,j]:=fi1+dfi*(j-j0);

xa[j]:=oa*cos(fi[1,j]);

ya[j]:=oa*sIn(fi[1,j]);

{Обращение к подпрограмме assur1}

assur1(xa[j],ya[j],a,c,ba,bc,m1,xb[J],yb[J],fI[2,J],fI[3,J]);

xd[J]:=xb[J]+bd*cos(fI[3,J]);

yd[J]:=yb[J]+bd*sIn(fI[3,J]);

{Обращение к подпрограмме assur2}

assur2(xd[j],yd[j],b,psi,de,m2,xe[j],ye[j],fI[4,j]);

end; {Конец цикла по j}

{Начало цикла по k}

for k:=1 to 4 do

begin

omega[k]:=dif1(fi,k,j0,dt); {ОПРЕДЕЛЕНИЕ УГЛОВЫХ СКОРОСТЕЙ}

eps[k]:=dif2(fi,k,j0,dt); {ОПРЕДЕЛЕНИЕ УГЛОВЫХ УСКОРЕНИЙ}

end; {Конец цикла по k}

{ОПРЕДЕЛЕНИЕ ЛИНЕЙНЫХ СКОРОСТЕЙ ШАРНИРНЫХ ТОЧЕК}

vxa:=dif11(xa,j0,dt);

vya:=dif11(ya,j0,dt);

va:=sqrt(sqr(vxa)+sqr(vya));

vxb:=dif11(xb,j0,dt);

vyb:=dif11(yb,j0,dt);

vb:=sqrt(sqr(vxb)+sqr(vyb));

vxd:=dif11(xd,j0,dt);

vyd:=dif11(yd,j0,dt);

vd:=sqrt(sqr(vxd)+sqr(vyd));

vxe:=dif11(xe,j0,dt);

vye:=dif11(ye,j0,dt);

ve:=sqrt(sqr(vxe)+sqr(vye));

{ОПРЕДЕЛЕНИЕ ЛИНЕЙНЫХ УСКОРЕНИЙ ШАРНИРНЫХ ТОЧЕК}

axa:=dif21(xa,j0,dt);

aya:=dif21(ya,j0,dt);

aa:=sqrt(sqr(axa)+sqr(aya));

axb:=dif21(xb,j0,dt);

ayb:=dif21(yb,j0,dt);

ab:=sqrt(sqr(axb)+sqr(ayb));

axd:=dif21(xd,j0,dt);

ayd:=dif21(yd,j0,dt);

ad:=sqrt(sqr(axd)+sqr(ayd));

axe:=dif21(xe,j0,dt);

aye:=dif21(ye,j0,dt);

ae:=sqrt(sqr(axe)+sqr(aye));

{ПЕРЕВОД УГЛОВ В ГРАДУСЫ}

fi[1,j0]:=fi[1,j0]*180./pi;

fi[2,j0]:=fi[2,j0]*180./pi;

fi[3,j0]:=fi[3,j0]*180./pi;

fi[4,j0]:=fi[4,j0]*180./pi;

{КОНЕЦ РАСЧЕТНОЙ ЧАСТИ ПРОГРАММЫ}

{Вывод результатов расчета}

writeln(fo,' ПОЛОЖЕНИЕ НОМЕР ',I:3);

writeln(fo,' fI1=',fI[1,J0]:9:3,' omega1=',omega[1]:7:3,' eps1=',eps[1]:9:3);

writeln(fo,' fI2=',fI[2,J0]:9:3,' omega2=',omega[2]:7:3,' eps2=',eps[2]:9:3);

writeln(fo,' fI3=',fI[3,J0]:9:3,' omega3=',omega[3]:7:3,' eps3=',eps[3]:9:3);

writeln(fo,' fI4=',fI[4,J0]:9:3,' omega4=',omega[4]:7:3,' eps4=',eps[4]:9:3);

writeln(fo,' xa=',xa[J0]:6:3,' ya=',ya[J0]:6:3,' va=',va:7:3,' aa=',aa:9:3);

writeln(fo,' xb=',xb[J0]:6:3,' yb=',yb[J0]:6:3,' vb=',vb:7:3,' ab=',ab:9:3);

writeln(fo,' xd=',xd[J0]:6:3,' yd=',yd[J0]:6:3,' vd=',vd:7:3,' ad=',ad:9:3);

writeln(fo,' xe=',xe[J0]:6:3,' ye=',ye[J0]:6:3,' ve=',ve:7:3,' ae=',ae:9:3);

writeln(fo);

end; {Конец цикла по i}

writeln(fo,' РАСЧЕТ ОКОНЧЕН');

close (fo); {ЗАКРЫТИЕ ФАЙЛА ВЫВОДА}

end.

Вернуться к содержанию раздела Вернуться к списку преподавателей
Hosted by uCoz