Структурная схема моделируемой системы управления. Система управления, структурная схема. Математическое описание исходных данных, страница 3

if Tau=0 then begin

messagedlg('Введите запаздывание объекта. Tau', mterror,[mbok],0);

pageControl1.TabIndex := 1;

ActiveControl:=Edit4;

exit;

end;

if Tau<0 then begin

messagedlg('Запаздывание объекта должно быть больше нуля!!!', mterror,[mbok],0);

pageControl1.TabIndex := 1;

ActiveControl:=Edit2;

exit;

end;

if kd=0 then begin

messagedlg('Введите коэффициент передачи датчика. кд', mterror,[mbok],0);

pageControl1.TabIndex := 1;

ActiveControl:=Edit5;

exit;

end;

if k1=0 then begin

messagedlg('Введите настройки регулятора. к1', mterror,[mbok],0);

pageControl1.TabIndex := 1;

ActiveControl:=Edit6;

exit;

end;

if k2=0 then begin

messagedlg('Введите настройки регулятора. к2', mterror,[mbok],0);

pageControl1.TabIndex := 1;

ActiveControl:=Edit7;

exit;

end;

if kim=0 then begin

messagedlg('Введите коэффициент передачи исполнительного механизма. ким', mterror,[mbok],0);

pageControl1.TabIndex := 1;

ActiveControl:=Edit9;

exit;

end;

if kro=0 then begin

messagedlg('Введите коэффициент передачи регулирующего органа. кро', mterror,[mbok],0);

pageControl1.TabIndex := 1;

ActiveControl:=Edit10;

exit;

end;

// очистка элементов предыдущего расчета

for i:=0 to n+1 do

begin

with stringgrid1 do begin

cells[0,i+1]:=' ';

cells[1,i+1]:=' ';

cells[2,i+1]:=' ';

cells[3,i+1]:=' ';

cells[4,i+1]:=' ';

cells[5,i+1]:=' ';

rowcount:=2;

end;

series1.Clear;

series2.Clear;

series3.Clear;

end;

//задание размеров массивов

setlength(y0, n+1);

setlength(x, n+1);

setlength(yro, n+1);

//обнуление параметров

R:=0;

yd:=0;

yim:=0;

//определение начальных условий

d1 := exp(-T0/T1);

d2 := exp(-T0/T2);

a := -T1/(T1-T2);

b := T2/(T1-T2);

m := trunc(tau/T0);

vr := -T0;

//расчет переходного процесса

for i:=0 to n do

begin

vr := vr + T0;

y0[i] := y0[i-1]*d1 + y0[i-1]*d2 - y0[i-2]*d1*d2 + yro[i-m]*k - yro[i-m-1]*k*d1 - yro[i-m-1]*k*d2 + yro[i-m-2]*k*d1*d2 + yro[i-m]*a*k - yro[i-m-1]*a*k - yro[i-m-1]*a*k*d2 + yro[i-m-2]*a*k*d2 + yro[i-m]*b*k - yro[i-m-1]*b*k - yro[i-m-1]*b*k*d1 + yro[i-m-2]*b*k*d1;

if (Y0[i]<=C2) or (Y0[i]>=C1) then

yd:=kd*y0[i]

else

Yd:=0;

x[i]:=G*kd-yd;

R:=R+k1*x[i]-k2*x[i-1];

yim:=R*kim;

yro[i]:=yim*kro;

//вывод данных в таблицу

with stringgrid1 do begin

cells[0,i+1]:=floattostrf(i,fffixed,3,0);

cells[1,i+1]:=floattostrf(vr,fffixed,3,0);

cells[2,i+1]:=floattostrf(G,fffixed,8,4);

cells[3,i+1]:=floattostrf(y0[i],fffixed,8,4);

cells[4,i+1]:=floattostrf(yd,fffixed,8,4);

rowcount:=rowcount+1

end;

//вывод данных на график

Series1.AddXY(i,y0[i],'',clteecolor);

series2.AddXY(i,G,'',clteecolor);

series3.AddXY(i,Yd,'',clteecolor);

end;

//освобождение памяти

Y0:=Nil;

X:=Nil;

Yro:=Nil;

end;

//---------------//ПЕРЕХОДНЫЙ ПРОЦЕСС ПО ВОЗМУЩЕНИЮ//--------------------procedure TForm1.Button4Click(Sender: TObject);

var

//описание параметров системы

k, T1, T2, TAu, kd, k1, k2, kim, kro, G, C1, C2,C,Kf,Tf,Gf :real;

//описание сигналов и простых переменных с первоначальным значением

Yd,Y,Yim,R,Yf:real;

//описание сигналов в виде массивов

y0, x, yro :array of real;

//описание целочисленных переменных

m :integer;

//описание режимных показателей модуля

Vr,T0:real;

n :integer;

//описание вспомогательных переменных

i:integer;

d1,d2,a,b:real;

begin

//ввод данных из визуальных элементов в программу

k:=strtofloat(edit1.Text);

T1:=strtofloat(edit2.Text);

T2:=strtofloat(edit3.Text);

Tau:=strtofloat(edit4.Text);

T0:=strtofloat(combobox2.text);

kd:=strtofloat(edit5.Text);

k1:=strtofloat(edit6.Text);

k2:=strtofloat(edit7.Text);

kim:=strtofloat(edit9.Text);

kro:=strtofloat(edit10.Text);

n:=strtoint(combobox3.Text);

C1:=strtofloat(edit11.Text);

C2:=strToFloat(edit12.Text);

Kf:=StrToFloat(Edit13.Text);

Tf:=StrToFloat(Edit14.Text);

Gf:=StrToFloat(Edit15.Text);

//проверка ввода данных

if k=0 then begin

messagedlg('Введите коэффициент передачи объекта. к', mterror,[mbok],0);

pageControl1.TabIndex := 1;

ActiveControl:=Edit1;

exit;

end;

if T1=0 then begin

messagedlg('Введите постоянную времени объекта. T1', mterror,[mbok],0);