Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Передаточные функции.rtf
Скачиваний:
3
Добавлен:
08.08.2019
Размер:
11.08 Mб
Скачать

Приложение и Программа для моделирования механизма чушколомателя по схеме на рис. .5 (фиктивное начальное звено - ползун)

Program Mech_3_class;

Uses Crt, Graph, Mpf0; {Перечень используемых модулей }

{Описание констант }

Const fioa0g=40.0; {Начальное значение ОК }

h=0;

Lnapr=50;

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

Var lc, q, j : Real;

i, k, r : Integer;

xo, yo, xb, yb, xd, yd, xe, ye,

xc, yc, xn, yn, xa, ya : Real;

loa, lab, lbc, ldc, Lbe : Real;

ALFAEBCg : Real;

fing, fibcg, Fiabg, fidcg, fioag, fibeg : Real;

Procedure Mech (Xe : Real); {Процедура для расчета фиктивного }

Var l : Real; { механизма }

Begin

kr (xo, yo, loa, fioag, q, xa, ya);

As1 (xa, ya, xe, yn, lab, lbe, 1, q, fiabg, fibeg);

Poi (xa, ya, fiabg, lab, 0, q, 2, Xb, Yb);

Poi (xb, yb, fibeg, lbc, 180-AlfaEBCg, q, 2, Xc, yc);

zveno(xn, yn, 0, 300, q);

zveno_(xe, yn, xc, yc, q);

zveno_(xb, yb, xc, yc, q);

zveno_(xd, yd, xc, yc, q);

Opora (xo, yo, 10, q, 1);

Opora (xd, yd, 10, q, 1);

End; { Procedure }

Function CF (X : Real) : Real; { Вычисление целевой функции }

Begin

Mech (X); {Расчет фиктивного механизма }

CF:=Sqrt(Sqr(xd-xc)+Sqr(yd-yc))-ldc;

End; { Function }

Begin {Начало основной программы }

InitG; {Инициализация графического экрана }

masg:=0.5; {Масштаб отрисовки }

xo:=0; yo:=0; {Задание параметров механизма }

xn:=0; yn:=50;

xd:=100; yd:=0;

loa:=20;

Lab:=70;

Lbe:=100;

Lbc:=70;

ldc:=65;

alfaEBCg:=60;

fing:=0;

{Цикл для определения ПФ0 элементов механизма }

For i:=1 to 49 do Begin

fioag:=fioa0g+DFi*(i-1); {Определяю следующее значение ОК}

q:=0; {Механизм не отображать на экране}

kr (xo, yo, loa, fioag, q, xa, ya); {Расчет ПФ0 первичного мех-ма}

Xe:=Find(CF); {Поиск значения через цел. функцию}

q:=1; {Механизм отображать на экране}

ClearDevice; {Очистка экрана}

Kr (Xo, Yo, Loa, Fioag, q, Xa, Ya); {Расчет ПФ0 первичного мех-ма}

Mech (Xe); {Нарисовать фиктивный механизм}

ReadKey;

End; {For}

End. {Program} {Конец программы}

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

{$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} {Конец программы }