pageControl1.TabIndex := 1;
ActiveControl:=Edit2;
exit;
end;
if T2=0 then begin
messagedlg('Введите постоянную времени объекта. T2', mterror,[mbok],0);
pageControl1.TabIndex := 1;
ActiveControl:=Edit3;
exit;
end;
if T1<0 then begin
messagedlg('Постоянная времени объекта Т1 должна быть больше нуля!!!', mterror,[mbok],0);
pageControl1.TabIndex := 1;
ActiveControl:=Edit2;
exit;
end;
if T1<0 then begin
messagedlg('Постоянная времени объекта Т2 должна быть больше нуля!!!', mterror,[mbok],0);
pageControl1.TabIndex := 1;
ActiveControl:=Edit3;
exit;
end;
if T1<T2 then begin
messagedlg('Постоянная времени объекта Т1 должна быть больше постоянной времени объекта Т2 !!!', mterror,[mbok],0);
pageControl1.TabIndex := 1;
ActiveControl:=Edit3;
exit;
end;
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;
if kf=0 then begin
messagedlg('Введите коэффициент передачи объекта по каналу возмущения.Kf', mterror,[mbok],0);
pageControl1.TabIndex := 1;
ActiveControl:=Edit13;
exit;
end;
if Tf=0 then begin
messagedlg('Введите постоянную времени объекта по каналу возмущения. Tf', mterror,[mbok],0);
pageControl1.TabIndex := 1;
ActiveControl:=Edit14;
exit;
end;
if Tf<0 then begin
messagedlg('Постоянная времени объекта по возмущению Тf должна быть больше нуля!!!', mterror,[mbok],0);
pageControl1.TabIndex := 1;
ActiveControl:=Edit2;
exit;
end;
// очистка элементов предыдущего расчета
for i:=1 to n+1 do
begin
with stringgrid2 do begin
cells[0,i]:=' ';
cells[1,i]:=' ';
cells[2,i]:=' ';
cells[3,i]:=' ';
cells[4,i]:=' ';
rowcount:=2;
end;
series5.Clear;
series6.Clear;
series7.Clear;
end;
//задание размеров массивов
setlength(y0, n+1);
setlength(x, n+1);
setlength(yro, n+1);
//обнуление параметров
R:=0;
yd:=0;
yim:=0;
G:=0;
y:=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 (Y<=C2) or (Y>=C1) then
yd:=kd*y
else
Yd:=0;
x[i]:=G*kd-yd;
R:=R+k1*x[i]-k2*x[i-1];
yim:=R*kim;
yro[i]:=yim*kro;
Yf:=Kf*Gf;
if i=0 then Y:=Y0[i] else
Y:=Y0[i]+Yf;
//вывод данных в таблицу
with stringgrid2 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(Gf,fffixed,8,4);
cells[3,i+1]:=floattostrf(Y,fffixed,8,4);
cells[4,i+1]:=floattostrf(Yd,fffixed,8,4);
rowcount:=rowcount+1
end;
//вывод данных на график
Series5.AddXY(i,Y,'',clteecolor);
series6.AddXY(i,Gf,'',clteecolor);
series7.AddXY(i,Yd,'',clteecolor);
end;
//освобождение памяти
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.