Программа для моделирования механизма чушколомателя
{$F+}
Program Proect;
Uses Crt, Graph, MPF, Tm1m; {Перечень используемых модулей }
{Описание констант }
Const fioa0g=70.0; {Начальное значение ОК }
h=0; {Длина поводка }
Lnapr=50; {Длина направляющей для ползунов }
{ Описание типов }
Type ArraySqVar=Array[1..10, 1..10] of Real;
ArrayVar=Array[1..10] of Real;
Var A1 : ArraySqVar;
B1, B2, X, X1 : ArrayVar;
lc, q, j, jk, Dfi, DFir : Real;
i, k, r, n : Integer;
zz, Ok, Fiabg, Fiabr,
Xa, Ya, Xa_1, Ya_1, Xa_2, Ya_2,
Xb, Yb, Xb_1, Yb_1, Xb_2, Yb_2,
Xe, Ye, Xe_1, Ye_1, Xe_2, Xe2,
Xc, Yc, Xc_1, Yc_1, Xc_2, Yc_2 : Massiv;
{Описание используемых процедур}
{$i Gauss.pas}
{$i TestUniv.pas}
Procedure Mech (Fiabg : Real); { Процедура для расчета фиктивного }
Var l: Real; { механизма }
Begin
j:=1;
jk:=1;
Kriv (Xo, Yo, Loa, FIoag, q, jk, Masg,
Xa[i], Ya[i], Xa_1[i], Ya_1[i], Xa_2[i], Ya_2[i]);
Kr (Xa[i], Ya[i], Lab, Fiabg, q, Xb[i], Yb[i]);
l:=0;
As2 (Xb[i], Yb[i], Xn, Yn, Fing, l, Lbe, h, lcc, j, q, fibeg);
Poi (Xb[i], Yb[i], fibeg, lbe, 0, q, 2, Xe[i], Ye[i]);
Poi (Xb[i], Yb[i], fibeg, lbc, -alfaEBCg, q, 2, Xc[i], Yc[i]);
Zveno (Xb[i], Yb[i], fibeg, Lbe, q);
Zveno (Xb[i], Yb[i], fibeg-AlfaEBCg, Lbc, q);
Zveno_ (Xc[i], Yc[i], Xd, Yd, q);
Zveno_ (Xe[i], Ye[i], Xc[i], Yc[i], q);
|
|
Opora (Xo, Yo, 10, q, 1);
Opora (Xd, Yd, 10, q, 1);
End; { Procedure }
Function CF (X : Real) : Real; { Вычисление целевой функции }
Begin
q:=0;
Mech (X); {Расчет фиктивного механизма }
CF:=Sqrt(Sqr(Xd-Xc[i])+Sqr(Yd-Yc[i]))-ldc; { Целевая функция }
End; { Function }
Begin {Начало основной программы }
InitG; {Инициализация графического экрана }
masg:=0.5; {Масштаб отрисовки }
xo:=0; yo:=0; {Параметры механизма }
xn:=80; yn:=50;
xd:=100; yd:=0;
loa:=20;
Lab:=70;
Lbe:=100;
Lbc:=70;
ldc:=65;
alfaEBCg:=60;
fing:=0;
DFi:=7.5;
Dfir:=DFi/180*pi;
For i:=1 to m+1 do Begin
zz[i]:=0;
fioag:=fioa0g+DFi*(i-1); { Расчет текущего значения ОК }
FiAbg[i]:=Find(CF); { Поиск угла АB через целевую функцию }
Fiabr[i]:=Fiabg[i]/180*pi; { Перевожу в радианы }
q:=1;
ClearDevice; { Очистка экрана }
Mech (Fiabg[i]); {Нарисовать фиктивный механизм }
Ok[i]:=Fioag;
Kr (Xo, Yo, Loa, FIoag, q, Xa[i], Ya[i]);
Poi (Xa[i], Ya[i], Fiabg[i], Lab, 0, q, 2, Xb[i], Yb[i]);
|
|
As2 (Xb[i], Yb[i], Xn, Yn, Fing, 100, Lbe, h, lcc, j, q, Fibeg);
Poi (Xb[i], Yb[i], Fibeg, Lbe, 0, q, 2, Xe[i], Ye[i]);
Poi (Xb[i], Yb[i], Fibeg, lbc, -alfaEBCg, q, 2, Xc[i], Yc[i]);
ReadKey;
End; { For }
{Тестирование ПФ точки А }
Closegraph;
TestPF(m, Xa, Xa_1, Xa_2, 'Xa');
Grafik(m, Ok, Xa, Xa_1, Xa_2, 'Xa', 'Xa_1', 'Xa_2');
TestPF(m, Ya, Ya_1, Ya_2, 'Ya');
Grafik(m, Ok, Ya, Ya_1, Ya_2, 'Ya', 'Ya_1', 'Ya_2');
n:=5;
For k:=1 to n Do { Обнуление массивов }
For r:=1 to n Do A1[k, r]:=0;
For i:=1 to m+1 Do Begin { Цикл для расчета ПФ1 }
A1[1,1]:=Xb[i]-Xa[i]; A1[1,2]:=Yb[i]-Ya[i];
A1[2,1]:=Xb[i]-Xe[i]; A1[2,2]:=Yb[i]-Ye[i]; A1[2,3]:=-(Xb[i]-Xe[i]);
A1[3,1]:=Xb[i]-Xc[i]; A1[3,2]:=Yb[i]-Yc[i]; A1[3,4]:=-(Xb[i]-Xc[i]);
A1[3,5]:=-(Yb[i]-Yc[i]);
A1[4,3]:=-(Xc[i]-Xe[i]); A1[4,4]:=Xc[i]-Xe[i]; A1[4,5]:=Yc[i]-Ye[i];
A1[5,4]:=Xc[i]-Xd; A1[5,5]:=Yc[i]-Yd;
B1[1]:=(Xb[i]-Xa[i])*Xa_1[i]+(Yb[i]-Ya[i])*Ya_1[i];
B1[2]:=0;
B1[3]:=0;
B1[4]:=0;
B1[5]:=0;
Gauss(N, A1, B1, X); { Расчет методом Гаусса }
Xb_1[i]:=X[1]; Yb_1[i]:=X[2];
Xe_1[i]:=X[3];
Xc_1[i]:=X[4]; Yc_1[i]:=X[5];
End; { For }
For i:=1 to m+1 Do Begin { Цикл для расчета ПФ2 }
A1[1, 1]:=Xb[i]-Xa[i]; A1[1, 2]:=Yb[i]-Ya[i];
A1[2, 1]:=Xb[i]-Xe[i]; A1[2, 2]:=Yb[i]-Ye[i]; A1[2, 3]:=-(Xb[i]-Xe[i]);
|
|
A1[3, 1]:=Xb[i]-Xc[i]; A1[3, 2]:=Yb[i]-Yc[i]; A1[3, 4]:=-(Xb[i]-Xc[i]);
A1[3, 5]:=-(Yb[i]-Yc[i]);
A1[4, 3]:=-(Xc[i]-Xe[i]); A1[4, 4]:=Xc[i]-Xe[i]; A1[4, 5]:=Yc[i]-Ye[i];
A1[5, 4]:=Xc[i]-Xd; A1[5, 5]:=Yc[i]-Yd;
B2[1]:=(Xb_1[i]-Xa_1[i])*Xa_1[i]+(Xb[i]-Xa[i])*Xa_2[i]+(Yb_1[i]-Ya_1[i])*
Ya_1[i]+(Yb[i]-Ya[i])*Ya_2[i]-(Xb_1[i]-Xa_1[i])*Xb_1[i]-
(Yb_1[i]-Ya_1[i])*Yb_1[i];
B2[2]:=(Xb_1[i]-Xe_1[i])*Xe_1[i]-(Xb_1[i]-Xe_1[i])*Xb_1[i]-
(Yb_1[i]{-Ye_1[i]})*Yb_1[i];
B2[3]:=-(Xb_1[i]-Xc_1[i])*Xb_1[i]-(Yb_1[i]-Yc_1[i])*Yb_1[i]+
(Xb_1[i]-Xc_1[i])*Xc_1[i]+(Yb_1[i]-Yc_1[i])*Yc_1[i];
B2[4]:=-(Xc_1[i]-Xe_1[i])*Xc_1[i]-(Yc_1[i]{-Ye_1[i]})*Yc_1[i]+
(Xc_1[i]-Xe_1[i])*Xe_1[i];
B2[5]:=-(Xc_1[i])*Xc_1[i]-(Yc_1[i])*Yc_1[i];
Gauss(N, A1, B2, X1); { Расчет методом Гаусса }
Xb_2[i]:=X1[1]; Yb_2[i]:=X1[2];
Xe_2[i]:=X1[3];
Xc_2[i]:=X1[4]; Yc_2[i]:=X1[5];
End; { For }
{Тестирование ПФ }
TestPF(m, Xb, Xb_1, Xb_2, 'Xb');
Grafik(m+1, Ok, Xb, Xb_1, Xb_2, 'Xb', 'Xb_1', 'Xb_2');
TestPF(m, Yb, Yb_1, Yb_2, 'Yb');
Grafik(m+1, Ok, Yb, Yb_1, Yb_2, 'Yb', 'Yb_1', 'Yb_2');
TestPF(m, Xe, Xe_1, Xe_2, 'Xe');
Grafik(m+1, Ok, Xe, Xe_1, Xe_2, 'Xe', 'Xe_1', 'Xe_2');
TestPF(m, Xc, Xc_1, Xc_2, 'Xc');
Grafik(m+1, Ok, Xc, Xc_1, Xc_2, 'Xc', 'Xc_1', 'Xc_2');
TestPF(m, Yc, Yc_1, Yc_2, 'Yc');
Grafik(m+1, Ok, Yc, Yc_1, Yc_2, 'Yc', 'Yc_1', 'Yc_2');
End. {Program} { Конец программы }
Приложение Л
Программа для определения ПФ механизма, представленного на рис. 13.1
{$F+}
Program Primer1;
Uses Crt, Graph, MPF, tm1m; {Перечень используемых модулей }
|
|
Const fioa0g=180.0; { Начальное значение ПФ0 }
h=0; { Длина поводка }
Lnapr=50; { Длина направляющей для ползунов }
Type ArraySqVar=Array[1..10, 1..10] of Real;
ArrayVar=Array[1..10] of Real;
Var A1 : ArraySqVar;
B1, B2, X, X1 : ArrayVar;
lc, q, j, alfaag, Ldk,
alfadg, Xk, Yk, Lfk : Real;
i, k, r, n : Integer;
Fidcg, mFiabg, OK, zz,
mXa, mYa, mXb, mYb,
mXf, mYf, mXc, mYc,
mXk, mYk, Xa_1, Ya_1,
Xa_2, Ya_2, Xb_1, Yb_1, Xf_1, Yf_1, Xc_1, Yc_1,
Xk_1, Yk_1, Xb_2, Yb_2, Xf_2, Yf_2, Xc_2, Yc_2,
Xk_2, Yk_2, Fiabr, Fiab_1, Fiab_2 : Massiv;
{Описание используемых процедур}
{$i Gauss.pas}
Procedure Mech (Fiabg : Real); { Варьируемый параметр механизма }
Var l : Real;
Begin
Kr (Xo, Yo, Loa, Fioag, q, Xa, Ya); { Первичный механизм }
Kr (Xa, Ya, Lab, Fiabg, q, Xb, Yb); { Первичный механизм }
l:=0; { фиктивного механизма }
{ Первая присоединенная группа}
As1 (Xb, Yb, Xd, Yd, Lbc, Ldc, L, q, Fibcg, Fidcg[i]);
Poi (Xa, Ya, Fiabg, Laf, Alfaag, q, 5, Xf, Yf);
Poi (Xd, Yd, Fidcg[i], Ldk, Alfadg, q, 5, Xk, Yk);
Poi (Xd, Yd, Fidcg[i], Ldc, 0, q, 5, Xc, Yc);
Zveno_(Xb, Yb, Xf, Yf, q);
Zveno_(Xf, Yf, Xk, Yk, q);
Zveno_(Xd, Yd, Xk, Yk, q);
Zveno_(Xc, Yc, Xk, Yk, q);
Zveno_(Xa, Ya, Xf, Yf, q);
Opora (Xo, Yo, 10, q, 1);
Opora (Xd, Yd, 10, q, 1);
OK[i]:=Fioag;
mFiabg[i]:=Fiabg-180;
Xa_1[i]:=-Loa*sin(Fioag/180*pi);
Ya_1[i]:=Loa*cos(Fioag/180*pi);
Xa_2[i]:=-Loa*cos(Fioag/180*pi);
Ya_2[i]:=-Loa*sin(Fioag/180*pi);
mXa[i]:=Xa; mYa[i]:=Ya;
mXb[i]:=Xb; mYb[i]:=Yb;
mXf[i]:=Xf; mYf[i]:=Yf;
mXc[i]:=Xc; mYc[i]:=Yc;
mXk[i]:=Xk; mYk[i]:=Yk;
End; { Procedure }
Function CF (X : Real) : Real;
Begin
q:=0; { Механизм выводить на экран
не надо }
Mech (X);
CF:=sqrt(sqr(Xf-Xk)+sqr(Yf-Yk))-Lfk; { Целевая функция }
End; { Function }
Begin
InitG; {Инициализация графического экрана }
Masg:=0.6 ; {Масштабный коэффициент }
{Параметры механизма }
Xo:=0; Yo:=100; {Координаты точки О }
Xd:=15; Yd:=-18; {Координаты точки D }
Loa:=30; {Длина звена oa }
Lab:=80; {Длина звена ab }
Lbc:=100; {Длина звена bc }
ldc:=60; {Длина звена dc }
alfaBg:=112.5;
Laf:=133;
alfaag:=33.75;
Ldk:=60;
alfadg:=75;
Lfk:=60;
For i:=1 to 49 do Begin
fioag:=fioa0g+dFi*(i-1); { Расчет текущего угла }
OK[i]:=Fioag;
FiAbg:=Find(CF);
q:=1;
ClearDevice;
Mech (Fiabg);
ReadKey;
End; { Конец цикла }
n:=8;
For k:=1 to n do
For r:=1 to n do A1[k,r]:=0;
For i:=1 to m+1 do Begin
A1[1,1]:=mXb[i]-mXa[i]; A1[1,2]:=mYb[i]-mYa[i];
A1[2,1]:=mXb[i]-mXf[i]; A1[2,2]:=mYb[i]-mYf[i];
A1[2,3]:=mXf[i]-mXb[i]; A1[2,4]:=mYf[i]-mYb[i];
A1[3,3]:=mXf[i]-mXa[i]; A1[3,4]:=mYf[i]-mYa[i];
A1[4,1]:=mXb[i]-mXc[i]; A1[4,2]:=mYb[i]-mYc[i];
A1[4,5]:=mXc[i]-mXb[i]; A1[4,6]:=mYc[i]-mYb[i];
A1[5,3]:=mXf[i]-mXk[i]; A1[5,4]:=mYf[i]-mYk[i];
A1[5,7]:=mXk[i]-mXf[i]; A1[5,8]:=mYk[i]-mYf[i];
A1[6,5]:=mXc[i]-Xd; A1[6,6]:=mYc[i]-Yd;
A1[7,7]:=mXk[i]-Xd; A1[7,8]:=mYk[i]-Yd;
A1[8,5]:=mXc[i]-mXk[i]; A1[8,6]:=mYc[i]-mYk[i];
A1[8,7]:=mXk[i]-mXc[i]; A1[8,8]:=mYk[i]-mYc[i];
B1[1]:=(mXb[i]-mXa[i])*Xa_1[i]+(mYb[i]-mYa[i])*Ya_1[i];
B1[2]:=0;
B1[3]:=(mXf[i]-mXa[i])*Xa_1[i]+(mYf[i]-mYa[i])*Ya_1[i];
B1[4]:=0;
B1[5]:=0;
B1[6]:=0;
B1[7]:=0;
B1[8]:=0;
Gauss(N,A1,B1,X); { Расчет методом Гаусса }
Xb_1[i]:=X[1]; Yb_1[i]:=X[2];
Xf_1[i]:=X[3]; Yf_1[i]:=X[4];
Xc_1[i]:=X[5]; Yc_1[i]:=X[6];
Xk_1[i]:=X[7]; Yk_1[i]:=X[8];
End; { For }
For i:=1 to m+1 Do Begin
A1[1,1]:=mXb[i]-mXa[i]; A1[1,2]:=mYb[i]-mYa[i];
A1[2,1]:=mXb[i]-mXf[i]; A1[2,2]:=mYb[i]-mYf[i];
A1[2,3]:=mXf[i]-mXb[i]; A1[2,4]:=mYf[i]-mYb[i];
A1[3,3]:=mXf[i]-mXa[i]; A1[3,4]:=mYf[i]-mYa[i];
A1[4,1]:=mXb[i]-mXc[i]; A1[4,2]:=mYb[i]-mYc[i];
A1[4,5]:=mXc[i]-mXb[i]; A1[4,6]:=mYc[i]-mYb[i];
A1[5,3]:=mXf[i]-mXk[i]; A1[5,4]:=mYf[i]-mYk[i];
A1[5,7]:=mXk[i]-mXf[i]; A1[5,8]:=mYk[i]-mYf[i];
A1[6,5]:=mXc[i]-Xd; A1[6,6]:=mYc[i]-Yd;
A1[7,7]:=mXk[i]-Xd; A1[7,8]:=mYk[i]-Yd;
A1[8,5]:=mXc[i]-mXk[i]; A1[8,6]:=mYc[i]-mYk[i];
A1[8,7]:=mXk[i]-mXc[i]; A1[8,8]:=mYk[i]-mYc[i];
B1[1]:=Xa_2[i]*(mXb[i]-mXa[i])+Xa_1[i]*(Xb_1[i]-Xa_1[i])+
Ya_2[i]*(mYb[i]-mYa[i])+Ya_1[i]*(Yb_1[i]-Ya_1[i])-
Xb_1[i]*(Xb_1[i]-Xa_1[i])-Yb_1[i]*(Yb_1[i]-Ya_1[i]);
B1[2]:=-Xb_1[i]*(Xb_1[i]-Xf_1[i])-Yb_1[i]*(Yb_1[i]-Yf_1[i])-
Xf_1[i]*(Xf_1[i]-Xb_1[i])-Yf_1[i]*(Yf_1[i]-Yb_1[i]);
B1[3]:=Xa_2[i]*(mXf[i]-mXa[i])+Xa_1[i]*(Xf_1[i]-Xa_1[i])+
Ya_2[i]*(mYf[i]-mYa[i])+Ya_1[i]*(Yf_1[i]-Ya_1[i])-
Xf_1[i]*(Xf_1[i]-Xa_1[i])-Yf_1[i]*(Yf_1[i]-Ya_1[i]);
B1[4]:=-Xb_1[i]*(Xb_1[i]-Xc_1[i])-Yb_1[i]*(Yb_1[i]-Yc_1[i])-
Xc_1[i]*(Xc_1[i]-Xb_1[i])-Yc_1[i]*(Yc_1[i]-Yb_1[i]);
B1[5]:=-Xf_1[i]*(Xf_1[i]-Xk_1[i])-Yf_1[i]*(Yf_1[i]-Yk_1[i])-
Xk_1[i]*(Xk_1[i]-Xf_1[i])-Yk_1[i]*(Yk_1[i]-Yf_1[i]);
B1[6]:=-Xc_1[i]*Xc_1[i]-Yc_1[i]*Yc_1[i];
B1[7]:=-Xk_1[i]*Xk_1[i]-Yk_1[i]*Yk_1[i];
B1[8]:=-Xc_1[i]*(Xc_1[i]-Xk_1[i])-Yc_1[i]*(Yc_1[i]-Yk_1[i])-
Xk_1[i]*(Xk_1[i]-Xc_1[i])-Yk_1[i]*(Yk_1[i]-Yc_1[i]);
Gauss(N,A1,B1,X); { Расчет методом Гаусса }
Xb_2[i]:=X[1]; Yb_2[i]:=X[2];
Xf_2[i]:=X[3]; Yf_2[i]:=X[4];
Xc_2[i]:=X[5]; Yc_2[i]:=X[6];
Xk_2[i]:=X[7]; Yk_2[i]:=X[8];
End; {For}
Closegraph;
For i:=1 to m+1 do Begin
Fiabr[i]:=arctan((mYb[i]-mYa[i])/(mXb[i]-mXa[i]));
Fiab_1[i]:=-(Yb_1[i]-Ya_1[i])/Lab/cos(Fiabr[i]);
Fiab_2[i]:=(-Yb_2[i]+Ya_2[i]+Lab*sin(Fiabr[i])*sqr(Fiab_1[i]))/Lab/cos(Fiabr[i]);
End; {For}
Grafik (m, OK, Fiabr, Fiab_1, Fiab_2, 'Fiabr', 'Fiab_1', 'Fiab_2');
Testpf (48, Fiabr, Fiab_1, Fiab_2, 'Fiab');
Grafik(m, OK, mFiabg, Fidcg, zz, 'Fiabg', 'Fidcg', '');
Grafik(m, OK, mXa, Xa_1, Xa_2, 'Xa', 'Xa_1', 'Xa_2');
TestPF(48, mXa, Xa_1, Xa_2, 'Xa');
TestPF(48, mXb, Xb_1, Xb_2, 'Xb');
Grafik(m, OK, mXb, Xb_1, Xb_2, 'Xb', 'Xb_1', 'Xb_2');
TestPF(48, mYb, Yb_1, Yb_2, 'Yb');
TestPF(48, mXf, Xf_1, Xf_2, 'Xf');
TestPF(48, mYf, Yf_1, Yf_2, 'Yf');
TestPF(48, mXc, Xc_1, Xc_2, 'Xc');
TestPF(48, mYc, Yc_1, Yc_2, 'Yc');
TestPF(48, mXk, Xk_1, Xk_2, 'Xk');
TestPF(48, mYk, Yk_1, Yk_2, 'Yk');
Grafik(m, OK, mYb, Yb_1, Yb_2, 'Yb', 'Yb_1', 'Yb_2');
Grafik(m, OK, mXf, Xf_1, Xf_2, 'Xf', 'Xf_1', 'Xf_2');
Grafik(m, OK, mXf, Xf_1, Xf_2, 'Xf', 'Xf_1', 'Xf_2');
Grafik(m, OK, mYf, Yf_1, Yf_2, 'Yf', 'Yf_1', 'Yf_2');
Grafik(m, OK, mXc, Xc_1, Xc_2, 'Xc', 'Xc_1', 'Xc_2');
Grafik(m, OK, mYc, Yc_1, Yc_2, 'Yc', 'Yc_1', 'Yc_2');
Grafik(m, OK, mXk, Xk_1, Xk_2, 'Xk', 'Xk_1', 'Xk_2');
Grafik(m, OK, mYk, Yk_1, Yk_2, 'Yk', 'Yk_1', 'Yk_2');
End. { Program }
Приложение М
Дата добавления: 2018-10-26; просмотров: 207; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!