N2:=StrToInt(ComboBox4.Text);
//проверка коэффициента датчика
if Kdat=0 then
begin//Kdat
messagedlg('Коэффициент датчика не должен быть,'#13+
' равен нулю!',mtError,[mbOK],0);
Exit;
end;//Kdat
//проверка коэффициента исполнительного механизма
if Kim=0 then
begin//Kim
messagedlg('Коэффициент ИМ не должен быть,'#13+
' равен нулю!',mtError,[mbOK],0);
Exit;
end;//Kim
//проверка коэффициента регулирующего органа
if Kro=0 then
begin//Kro
messagedlg('Коэффициент РО не должен быть,'#13+
' равен нулю!',mtError,[mbOK],0);
Exit;
end;//Kro
//учет или неучет нелинейности РО
if RadioButton3.Checked=true then
begin//lin
C1:=1000;
C2:=-1000;
B1:=0;
B2:=0;
goto L2;
end//lin
else
if RadioButton4.Checked=false then goto L2;
L2:
//расчет постоянных вспомогателных переменных
m:=round(Tau/T0);
mmax:=m;
Vr:=-T0;
d:=exp(-T0/T);
B11:=(C1+B1*Kro)/Kro;
B22:=(C2+B2*Kro)/Kro;
//задание начальных условий
n:=mmax;
R:=0;
C0:=0;
//обнуление массивов
For I:=1 To n do
begin//nul
X[I]:=0;
U[I]:=0;
Y0[I]:=0;
end;//nul
n:=n+1;
//заголовок таблицы
With StringGrid2 do
begin//zag_tabl_1
Cells[0,0]:='Время';
Cells[1,0]:='Возмущение Сf1';
Cells[2,0]:='Выход системы';
RowCount:=2;
end;//Заголовок таблицы
//основной цикл расчета
Vr:=Vr+T0;
for I:=0 to N2 do
begin//rab_cikl
y0[n]:=U[n-m-1]*T*k-U[n-m-2]*T0*k*d-U[n-m-1]*T*k+U[n-m-1]*d*k*T+U[n-m-2]*T*k-U[n-m-2]*d*k*T+y0[n-1]*d+y0[n-1]-y0[n-2]*d;
Yf1:=Cf1*Kf1*(1-exp(-I*T0/Tf1));
Y:=Y0[n]+Yf1;
Y1:=Kdat*Y;
X[n]:=Kdat*C0-Y1;
R:=R+X[n]*K1-X[n-1]*K2;
S:=Kim*R;
if S<B22 then U[n]:=C2
else
if S>B11 then U[n]:=C1
else
if (S>B22) and (S<B2) then U[n]:=Kro*(S-B2)
else
if (S>B1) and (S<B11) then U[n]:=Kro*(S-B1)
else
U[n]:=0;
//отражение расчета в таблице
With StringGrid2 do
begin//1
cells[0,I+1]:=FloatToStrF(Vr,ffFixed,3,0);
cells[1,I+1]:=FloatToStrF(Cf1,ffFixed,8,4);
cells[2,I+1]:=FloatToStrF(Y,ffFixed,8,4);
RowCount:=RowCount+1;
end;//1
//построение графиков
if RadioButton3.Checked=true then
Begin
Series4.AddXY(Vr,Y);
Series5.AddXY(Vr,Cf1);
End;
if RadioButton4.Checked=true then
begin//in & out
Series6.AddXY(Vr,Y);
Series5.AddXY(Vr,Cf1);
end;//in & out
Vr:=Vr+T0;
n:=n+1;
end;//rab_cikl
end;//перех.пр.по возмущению
procedure TForm1.DChange(Sender: TObject);
var
I,N1,N2: integer;
begin//0
N1:=StrToInt(ComboBox2.Text);
N2:=StrToInt(ComboBox4.Text);
Series1.Clear;
Series2.Clear;
Series3.Clear;
Series4.Clear;
Series5.Clear;
Series6.Clear;
For I:=1 To N1 do
With StringGrid1 do
begin//1
Cells[0,I]:='';
Cells[1,I]:='';
Cells[2,I]:='';
Cells[3,I]:='';
Cells[4,I]:='';
RowCount:=2;
end;//1
For I:=1 To N2 do
With StringGrid2 do
begin//2
Cells[0,I]:='';
Cells[1,I]:='';
Cells[2,I]:='';
Cells[3,I]:='';
Cells[4,I]:='';
RowCount:=2;
end;//2
end;//0
procedure TForm1.Button3Click(Sender: TObject);
label LSys,NelSys;//описание меток
Var
f:TextFile;
NameFile:string;
I,N1:Integer;
begin//1
//проверка существования расчета
if stringgrid2.Cells[0,1]=''then
begin//2
messagedlg('Нет расчета переходного процесса по заданию !',mtError,[mbOK],0);
exit;
end;//2
N1:=StrToInt(ComboBox1.text);
if OpenDialog1.execute then
begin//3
NameFile:=OpenDialog1.FileName;
AssignFile(f,NameFile);
Rewrite(f);
Writeln(f,' РЕЗУЛЬТАТЫ МОДЕЛИРОВАНИЯ ПЕРЕХОДНОГО ПРОЦЕССА');
if RadioButton1.Checked=true then//если система линейная
begin//lin
writeln(f,' ПО ЗАДАЮЩЕМУ ВОЗДЕЙСТВИЮ');
writeln(f,' Линейная система');
end;//lin
if RadioButton1.Checked=false then//если система нелинейная
begin//nelin
writeln(f,' ПО ЗАДАЮЩЕМУ ВОЗДЕЙСТВИЮ');
writeln(f,' Нелинейная система');
end;//nelin
Writeln(f);
Writeln(f,' Передаточная функция объекта:');
Writeln(f);
Writeln(f,' -Tau*p');
Writeln(f,' K*e ');
Writeln(f,' Wo(p)=-------------');
Writeln(f,' p(1+Tp)');
Writeln(f);
Writeln(f,' где:');
Writeln(f,' коэффициент передачи К=',Edit7.text);
Writeln(f,' постоянная времени Т=',Edit8.text);
Writeln(f,' запаздывание Tau=',Edit9.text);
Writeln(f);
Writeln(f,'*********************************************************');
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.