Программа для моделирования механизма чушколомателя



{$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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!