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