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);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.