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