(материалы для выполнения курсового проекта)
Содержание
Вернуться к списку преподавателей |
Процедура 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.
Язык программирования - ПАСКАЛЬ
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.
Вернуться к содержанию раздела | Вернуться к списку преподавателей |