Имитационное моделирование АЧХ колебательного звена. Анализ графика моделируемой функции, страница 2

// Определение исходных данных, введенных пользователем

S_NUL:='Введите параметры объекта';

If (Edit1.Text='') or (Edit2.Text='')or (Edit3.Text='') Then

Begin //

MessageDlg(S_NUL,mtError,[mbok],0);

Exit;

end;

K:=StrToFloat(Edit1.Text);

T:=StrToFloat(Edit2.Text);

E:=StrToFloat(Edit3.Text);

N:=StrToInt(ComboBox1.Text);

S_NUL:='Значение  "Т"  должно быть  '#13+'  БОЛЬШЕ НУЛЯ!!! ';

If T<=0 Then

Begin//

MessageDlg(S_NUL,mtError,[mbok],0);

ActiveControl:=Edit2;

Exit;

end;

S_NUL:='Значение  "E"  должно быть  '#13+'  0<E<0.707!!!';

If (E<=0) or (E>=0.707) Then

Begin//

MessageDlg(S_NUL,mtError,[mbok],0);

ActiveControl:=Edit3;

Exit;

end;

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

Max:=(1/T)*sqrt(1-2*sqr(E));

step1:=Max/15;

step2:=Max/20;

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

W:=-step1;

//Расчет по алгоритму выходных переменных

For I:=1 To N Do

begin //2

If W<=Max Then

step:=step1

Else

step:=step2;

W:=W+step;

A:=abs(K)/sqrt(sqr(1-sqr(W)*sqr(T))+4*sqr(E)*sqr(W)*sqr(T));

//Отражение расчета в визуальных элементах

With StringGrid1 Do

begin //3

Cells[0,I]:=FloatToStrF(W,ffFixed,8,4);

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

RowCount:=RowCount+1;

end;//3

Series1.AddXY(W,A,'',ClTeeColor);

end;//2

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

With StringGrid1 Do

begin //

Cells[0,0]:='    Частота';

Cells[1,0]:='Амплитуда';

RowCount:=2;

end;//

end;

//Обнуление элементов вывода

procedure TForm1.Edit1Change(Sender: TObject);

Var

N,I:Integer;

begin

Series1.Clear;

N:=StrToInt(ComboBox1.Text);

For I:=1 To N Do

With StringGrid1 Do

begin //2

Cells[0,I]:='';

Cells[1,I]:='';

RowCount:=2;

end;//2

end;

procedure TForm1.Button2Click(Sender: TObject);

Var

F:TextFile;

NameFile:string;

I,N:Integer;

begin//1

//Проверка существования расчета

If StringGrid1.Cells[0,1]='' then

Begin//2

MessageDlg ('Нет расчета амплитудной частотной характеристики',mtError,[mbok],0);

Exit;

end;//2

N:=StrToInt(ComboBox1.Text);

If OpenDialog1.Execute then

begin//3

NameFile:=OpenDialog1.FileName;

AssignFile(F,NameFile);//Назначение файлу имени файловой переменной F

//Открытие файла для записи

Rewrite(F);

Writeln(F,'  Амплитудная частотная характеристика колебательного звена');

Writeln(F);

Writeln(F,'  Параметры звена: ');

Writeln(F,' Коэффициент передачи К = ',Edit1.Text);

Writeln(F,' Постоянная времени Т = ',Edit2.Text);

Writeln(F,' Коэффициент затухания Е = ',Edit3.Text);

Writeln(F);

Writeln(F,' Частота  ','Амплитуда');

With StringGrid1 Do

For I:=1 To N Do

Writeln(F,'  ',Cells[0,I],'  ',Cells[1,I]);

//Закрытие файла

CloseFile(F);

//Сообщение о завершении операции записи

MessageDlg ('Амплитудная частотная характеристика записана в файл',mtInformation,[mbok],0);

end;//3

end;//1

end.

Пример расчета АЧХ:

Текстовый файл:

Амплитудная частотная характеристика колебательного звена

Параметры звена:

Коэффициент передачи К = 5

Постоянная времени Т = 20

Коэффициент затухания Е = 0,4

Частота  Амплитуда

0,0000  5,0000

0,0027  5,0103

0,0055  5,0412

0,0082  5,0932

0,0110  5,1665

0,0137  5,2618

0,0165  5,3796

0,0192  5,5198

0,0220  5,6820

0,0247  5,8641

0,0275  6,0620

0,0302  6,2677

0,0330  6,4683

0,0357  6,6446

0,0385  6,7711

0,0412  6,8193

0,0440  6,7643

0,0460  6,6472

0,0481  6,4663

0,0502  6,2293

0,0522  5,9484

0,0543  5,6381

0,0563  5,3125

0,0584  4,9840

0,0605  4,6619

0,0625  4,3529

0,0646  4,0612

0,0667  3,7888

0,0687  3,5364

0,0708  3,3038

0,0728  3,0902

0,0749  2,8943

0,0770  2,7149

0,0790  2,5506

0,0811  2,4000

0,0831  2,2618

0,0852  2,1349

0,0873  2,0181

0,0893  1,9106

0,0914  1,8113

0,0935  1,7196

0,0955  1,6347

0,0976  1,5559

0,0996  1,4828

0,1017  1,4147

0,1038  1,3513

0,1058  1,2921

0,1079  1,2367

0,1099  1,1849

0,1120  1,1363

0,1141  1,0907

0,1161  1,0479

0,1182  1,0075

0,1203  0,9695

0,1223  0,9337

0,1244  0,8998

0,1264  0,8678

0,1285  0,8375

0,1306  0,8087

0,1326  0,7815