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

Series7: TLineSeries;

Series8: TLineSeries;

Label33: TLabel;

Label34: TLabel;

OpenDialog1: TOpenDialog;

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Edit1Change(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject); //переходный процесс по заданию

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

var

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

A, k, T1,T2,  kd, k1, k2, kim, kro, b1, b2, Cf2,Alf :real;

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

Z, S, R, f2:real;

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

X, U, Y1, Y : array of real;

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

Vr, T0: real;

N1,N2: integer;

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

d1, d2, a1, a2: real;

n :integer;

begin

//считывание данных с визуальных элементов

k:=StrToFloat(Edit1.Text);

T1:=StrToFloat(Edit2.Text);

T2:=StrToFloat(Edit3.Text);

A:=StrToFloat(Edit4.Text);

kd:=StrToFloat(Edit5.Text);

kim:=StrToFloat(Edit6.Text);

k1:=StrToFloat(Edit7.Text);

k2:=StrToFloat(Edit8.Text);

kro:=StrToFloat(Edit12.Text);

b1:=StrToFloat(Edit13.Text);

b2:=StrToFloat(Edit14.Text);

N1:=StrToInt(ComboBox1.Text);

T0:=StrToInt(Edit15.Text);

Alf:=StrToFloat(Edit16.Text);

Cf2:=StrToFloat(Edit9.Text);

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

//проверка параметров объекта

If k=0 then

begin

MessageDlg('Введите значение k не равным 0 !',mtError,[mbOK],0);

Exit;

End;

If T1<=0 then

begin

MessageDlg('Введите значение T1 больше 0!',mtError,[mbOK],0);

Exit;

End;

If T2<=0 then

begin

MessageDlg('Введите значение T2 больше 0!',mtError,[mbOK],0);

Exit;

End;

If T1<=T2 then

begin

MessageDlg('Введите значение T1 больше T2!',mtError,[mbOK],0);

Exit;

End;

//проверка kd

If kd<=0 then

begin

MessageDlg('Введите значение kd больше 0!',mtError,[mbOK],0);

Exit;

End;

//проверка kim

If kim<=0 then

begin

MessageDlg('Введите значение kim больше 0!',mtError,[mbOK],0);

Exit;

End;

// проверка kro

If kro<=0 then

begin

MessageDlg('Введите значение kro больше 0!',mtError,[mbOK],0);

Exit;

End;

//проверка T0

If T0<=0 then

begin

MessageDlg('Введите значение T0 больше 0!',mtError,[mbOK],0);

Exit;

End;

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

Setlength (X,N1+1);

Setlength (U,N1+1);

Setlength (Y,N1+1);

Setlength (Y1,N1+1);

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

d1:=exp(-T0/T1);

d2:=exp(-T0/T2);

a1:=T1/(T1-T2);

a2:=T2/(T1-T2);

//задание начальных значений переменных

R:=0;

Vr:=-T0;

//заголовок таблицы

with StringGrid1 do

begin

Cells[0,0]:=' Такт ';

Cells[1,0]:=' Задание ';

Cells[2,0]:=' Вход РО ';

Cells[3,0]:=' Выход РО ';

Cells[4,0]:=' Система ';

Cells[5,0]:=' Выход регулятора ';

Cells[6,0]:=' Выход датчика ';

RowCount:=2;

end;

// основной цикл расчета

for N:=0 to N1 do

begin //2

Vr:=Vr+T0;

Cf2:=0;

X[n]:=kd*A-Y1[n-1];

R:=R+X[n]*k1-X[n-1]*k2;

f2:=Cf2*exp(-Alf*N*T0);

Z:=R+f2;

S:=kim*Z;

If S<b1 then

U[n]:=kro*(S-b1)

else

If S>b2 then

U[n]:=kro*(S-b2)

else

U[n]:=0;

Y[n]:=Y[n-1]*(d2+d1)-Y[n-2]*d1*d2+U[n]*k*(1-a1+a2)-U[n-1]*k*(d2+d1-a1*d2-a1+a2*d1+a2)+U[n-2]*k*(d1*d2-a1*d2+a2*d1);

Y1[n]:=kd*Y[n];

//условие нелинейности

If (b1=0) and (b2=0)  then

Label34.Caption:='Расчет линейной системы'

else

Label34.Caption:='Расчет нелинейной системы';

//отражение расчета в таблице

With StringGrid1 do

begin //3

Cells[0,N+1]:=FloatToStrF(N,ffFixed,3,0);

Cells[1,N+1]:=FloatToStrF(A,ffFixed,8,4);

Cells[2,N+1]:=FloatToStrF(S,ffFixed,8,4);

Cells[3,N+1]:=FloatToStrF(U[n],ffFixed,8,4);

Cells[4,N+1]:=FloatToStrF(Y[n],ffFixed,8,4);

Cells[5,N+1]:=FloatToStrF(R,ffFixed,8,4);