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

Image3: TImage;

procedure N10Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure ComboBox2Change(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure N3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.N10Click(Sender: TObject);

begin//Выход из программы

close

end;

procedure TForm1.N7Click(Sender: TObject);

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

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

tau,K1,K2,Kim,Kro,Kdat,Kob,Co,Kf,Tf,Cf,C1,C2: real;

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

yf, y, y1, R, Q :real;

y0,x,U: array[1..100]  of real ;

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

Vr:real;

m,mmax,n,i,N1,diskr:integer;

label lab1;//описание меток

begin//переходный процесс по заданию и возмущению

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

N1:=strtoint(combobox2.Text);

K1:=strtofloat(edit1.text);

K2:=strtofloat(edit2.text);

Kim:=strtofloat(edit3.text);

Kro:=strtofloat(edit4.text);

Kob:=strtofloat(edit5.text);

Kdat:=strtofloat(edit7.text);

Co:=strtofloat(edit8.text);

Cf:=strtofloat(edit9.text);

Kf:=strtofloat(edit10.text);

Tf:=strtofloat(edit11.text);

diskr:=strtoint(combobox1.text);

C1:=strtofloat(edit12.text);

C2:=strtofloat(edit13.text);

tau:=strtofloat(edit14.text);

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

m:=round(tau/diskr);

mmax:=m+1;

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

n:=mmax;

R:=0;

Cf:=0;

Vr:=-diskr;

//обнуление массивов

For i:=1 to n do

begin//nul

x[i]:=0;

U[i]:=0;

y0[i]:=0;

end;//nul

n:=n+1;

For i:=1 to N1 do

with stringgrid1 do

begin

cells[0,i]:='';

cells[1,i]:='';

cells[2,i]:='';

cells[3,i]:='';

cells[4,i]:='';

rowcount:=2;

series1.Clear;

series2.Clear;

series3.Clear;

series4.Clear;

series5.Clear;

end;

//проверка коэффициента датчика

if Kdat=0 then

begin

messagedlg('Система не замкнута!',mterror,[mbok],0);

exit;

end;//Kdat

//проверка коэффициента регулятора К1

if K1=0 then

begin

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

exit;

end;//K1

//проверка коэффициента регулятора К2

if K2=0 then

begin

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

exit;

end;//K2

//проверка коэффициента исполнительного механизма

if Kim=0 then

begin

messagedlg('Введите параметры ИМ!',mterror,[mbok],0);

exit;

end;//Kim

//проверка коэффициента регулирующего органа

if Kro=0 then

begin

messagedlg('Введите параметры РО!',mterror,[mbok],0);

exit;

end;//Kro

if C1<0 then

begin

messagedlg('Неправильно введен верхний предел нелинейности!',mterror,[mbok],0);

exit;

end;//C1

if C2>0 then

begin

messagedlg('Неправильно введен нижний предел нелинейности!',mterror,[mbok],0);

exit;

end;//C2

//учет или неучет нелинейности РО

if RadioButton1.checked=true then

begin//lin_zad

c1:=10000;

c2:=-10000;

Cf:=0;

goto lab1;

end//lin_zad

else if RadioButton2.checked=true then

begin//lin_vozm

c1:=10000;

c2:=-10000;

Co:=0;

goto lab1;

end//lin_vozm

else if RadioButton3.checked=true then

begin//nelin_zad

Cf:=0;

goto lab1;

end//nelin_zad

else if RadioButton4.checked=true then

begin//nelin_vozm

Co:=0;

goto lab1;

end;//nelin_vozm

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

lab1:

Vr:=Vr+diskr;

for i:=0 to N1 do

begin//rab_cikl

y0[n]:=y0[n-1]+kob*diskr*U[n-m-1];

yf:=(Cf*kf*(1-exp(-i*diskr/Tf)));

y:=y0[n]+yf;

y1:=kdat*y;

x[n]:=Co*kdat-y1;

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

Q:=R*Kim;

if Q>C1/kro then U[n]:=c1

else if Q<C2/kro then U[n]:=c2

else U[n]:=kro*Q;

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

with stringgrid1 do

If RadioButton1.checked=true or RadioButton3.checked=true then

begin//1

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

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

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

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