Имитационное моделирование цифровой автоматической системы. Определение дискретной модели непрерывной части системы и соответствующего разностного уравнения

Страницы работы

Фрагмент текста работы

Министерство Образования РФ

Санкт-Петербургский Государственный Технологический Университет Растительных Полимеров

Кафедра  АТЭП

КУРСОВАЯ  РАБОТА

по дисциплине: «МОДЕЛИРОВАНИЕ СИСТЕМ»

на тему: «Имитационное моделирование цифровой автоматической системы.

ВЫПОЛНИЛ:                                                                                                                                      ПРОВЕРИЛ:

Ст. гр.542                                                                                          

Санкт – Петербург

2006г.

Содержание.

1.Структурная схема моделируемой …………………………………………………

2.Математическое описание исходных данных ……………………………………..

3.Определение дискретной модели непрерывной части системы и соответствующего разностного уравнения.………………………………………………………………….

4.Определение непрерывной и дискретной модели  нелинейной характеристики заданного элемента системы………………………………………………………………………….

5. Составление системы разностных уравнений по дискретным передаточным функциям и заданным дискретным функциям………………………………………………………...

6.Эскиз формы ввода,редактирования данных,вывода результатов

моделирования в табличном,графическом виде и запись их в текстовый файл…..

7.Распечатка текста основного программного модуля……………………………....

8.Распечатка текстового файла результатов моделирования………………………..

  1. Структурная схема моделируемой системы.

2.Математическое описание исходных данных.

-непрерывная часть

               

                     

-дискретная часть

-нелинейная характеристика датчика

-модели сигналов

*            

3.Определение дискретной модели непрерывной части системы и соответствующего разностного уравнения.

Получение разностного уравнения:

  1. Определение непрерывной и дискретной модели  нелинейной характеристики заданного элемента системы.

-задающее воздействие:

                              

         

-по возмущению f1 на входе канала управления объектом:

          

-по сигналу f2 на входе канала возмущения объекта:

                               

       

Задана нелинейность датчика, которая имеет вид:

Кусочно-линейная зависимость, содержащая три участка.

С1 и  Сзаданы;    ;    

          

         

  1. Составление системы разностных уравнений по дискретным передаточным функциям и заданным дискретным функциям.

-сигнал ошибки (рассогласования):

      

-сигнал регулятора:

       

-уравнение сигнала f2:

        

-уравнение сумматора:

       

-уравнение объекта:

       

-уравнение yf :

      

-уравнение выхода системы:

              

-уравнение датчика:

        

6.  Эскиз формы ввода, редактирования данных, вывода результатов

моделирования в табличном, графическом виде.

Рис. «Элементы системы, нелинейность»

Рис. «Структурная схема системы»

Рис. «Переходные процессы (линейная система)»

Рис. «Переходные процессы (нелинейная система)»

7.Распечатка текста основного программного модуля.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls, ExtCtrls, Grids, TeEngine, Series, TeeProcs,

Chart, jpeg;

type

TForm1 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

Button1: TButton;

Button2: TButton;

Button3: TButton;

TabSheet4: TTabSheet;

Label28: TLabel;

ComboBox1: TComboBox;

StringGrid1: TStringGrid;

Chart1: TChart;

Series1: TLineSeries;

Series2: TLineSeries;

Series3: TLineSeries;

Series4: TLineSeries;

OpenDialog1: TOpenDialog;

GroupBox1: TGroupBox;

Edit10: TEdit;

Label16: TLabel;

Label27: TLabel;

Image4: TImage;

GroupBox2: TGroupBox;

Image5: TImage;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Label3: TLabel;

Edit3: TEdit;

Label4: TLabel;

GroupBox3: TGroupBox;

Edit4: TEdit;

Edit5: TEdit;

Label7: TLabel;

Label6: TLabel;

Image6: TImage;

GroupBox4: TGroupBox;

Label26: TLabel;

Edit13: TEdit;

Label21: TLabel;

Image7: TImage;

GroupBox5: TGroupBox;

Edit8: TEdit;

Edit9: TEdit;

Label14: TLabel;

Label13: TLabel;

Image8: TImage;

GroupBox6: TGroupBox;

Edit16: TEdit;

Label22: TLabel;

GroupBox7: TGroupBox;

Edit14: TEdit;

Edit15: TEdit;

Label24: TLabel;

Label25: TLabel;

Label1: TLabel;

Label5: TLabel;

GroupBox8: TGroupBox;

Edit6: TEdit;

Label9: TLabel;

GroupBox9: TGroupBox;

Edit7: TEdit;

Label11: TLabel;

GroupBox10: TGroupBox;

Edit17: TEdit;

Label32: TLabel;

GroupBox11: TGroupBox;

Edit11: TEdit;

Edit12: TEdit;

Label18: TLabel;

GroupBox12: TGroupBox;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

Image2: TImage;

Image1: TImage;

Image3: TImage;

procedure Button3Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Edit1Change(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

//Кнопка расчет

procedure TForm1.Button3Click(Sender: TObject);

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

var Kob,Kdat,Tob,tay,Kf,Tf,A,C1,C2,alfa,K1,K2,Kim,Kro,K,B1,B2,a1,a2,H,S,d:real;

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

y1,y,yf,f2,g:real;

R:array of real;

x:array of real;

U:array of real;

y0:array of real;

//Описание целочисленных переменных

m,n:integer;

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

Vr,T0:real;

N1:integer;

S_NUL:string;

begin//1

//Проверка существования исходных данных

S_NUL:='Введите исходные данные';

if(Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='') or (Edit4.Text='')then

begin//2

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

Exit;

end;//2

if(Edit5.Text='') or (Edit6.Text='') or (Edit7.Text='') or (Edit8.Text='')then

begin//3

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

Exit;

end;//3

if(Edit9.Text='') or (Edit10.Text='') or (Edit11.Text='')then

begin//4

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

Exit;

end;//4

if(Edit12.Text='') or (Edit13.Text='') or (Edit14.Text='')then

begin//5

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

Exit;

end;//5

if(Edit15.Text='') or (Edit16.Text='') or (Edit17.Text='')then

begin//6

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

Exit;

end;//6

//Определение исходных данных

Kob:=StrToFloat(Edit1.Text);

Tob:=StrToFloat(Edit2.Text);

tay:=StrToFloat(Edit3.Text);

K1:=StrToFloat(Edit8.Text);

K2:=StrToFloat(Edit9.Text);

Kro:=StrToFloat(Edit6.Text);

Kim:=StrToFloat(Edit7.Text);

Kf:=StrToFloat(Edit4.Text);

Tf:=StrToFloat(Edit5.Text);

C2:=StrToFloat(Edit11.Text);

alfa:=StrToFloat(Edit12.Text);

A:=StrToFloat(Edit13.Text);

C1:=StrToFloat(Edit10.Text);

T0:=StrToFloat(Edit16.Text);

B1:=StrToFloat(Edit14.Text);

B2:=StrToFloat(Edit15.Text);

Kdat:=StrToFloat(Edit17.Text);

N1:=StrToInt(ComboBox1.Text);

//Проверка правильности ввода данных

S_NUL:='Значение "Kob" должно быть'#13+'НЕ РАВНО НУЛЮ!!!';

if Kob=0 then

begin//7

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

ActiveControl:=Edit1;

Exit;

end;//7

S_NUL:='Значение "K1" должно быть'#13+'НЕ РАВНО НУЛЮ!!!';

if K1=0 then

begin//8

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

ActiveControl:=Edit8;

Exit;

end;//8

S_NUL:='Значение "K2" должно быть'#13+'НЕ РАВНО НУЛЮ!!!';

if K2=0 then

begin//9

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

ActiveControl:=Edit9;

Exit;

end;//9

S_NUL:='Значение "Kro" должно быть'#13+'НЕ РАВНО НУЛЮ!!!';

if Kro=0 then

begin//10

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

ActiveControl:=Edit6;

Exit;

end;//10

S_NUL:='Значение "Kim" должно быть'#13+'НЕ РАВНО НУЛЮ!!!';

if Kim=0 then

begin//11

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

ActiveControl:=Edit7;

Exit;

end;//11

S_NUL:='Значение "Kf" должно быть'#13+'НЕ РАВНО НУЛЮ!!!';

if Kf=0 then

begin//12

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

ActiveControl:=Edit4;

Exit;

end;//12

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

if T0<=0 then

begin//13

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

ActiveControl:=Edit16;

Exit;

end;//13

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

if Tob<=0 then

begin//14

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

ActiveControl:=Edit2;

Exit;

end;//14

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

if Tf<=0 then

begin//15

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

ActiveControl:=Edit5;

Exit;

end;//15

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

if b1<=0 then

begin//16

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

ActiveControl:=Edit14;

Exit;

end;//16

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

if b2>=0 then

begin//17

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

ActiveControl:=Edit15;

Exit;

end;//17

S_NUL:='Значение "Kdat" должно быть'#13+'НЕ РАВНО НУЛЮ!!!';

if Kdat=0 then

begin//18

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

ActiveControl:=Edit17;

Exit;

end;//18

//Очистка графиков

Series1.Clear;

Series2.Clear;

Series3.Clear;

Series4.Clear;

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

Setlength(R,N1+1);

Setlength(x,N1+1);

Setlength(U,N1+1);

Setlength(y0,N1+1);

//Начальные значения

y1:=0;

Vr:=-T0;

m:=TRUNC(tay/T0);

K:=Kim*Kro*Kob;

d:=exp(-T0/Tob);

H:=Tob*d+T0-Tob ;

S:=Tob*d+T0*d-Tob;

a1:=B1/Kdat;

a2:=B2/Kdat;

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

For n:=0 To N1 Do

begin//19

Vr:=Vr+T0;

if radiobutton1.checked=true then

begin//20

g:=A;

x[n]:=(Kdat*g)-y1;

R[n]:=R[n-1]+K1*x[n]-K2*x[n-1];

f2:=C2*exp(-alfa*n*T0);

U[n]:=R[n]+f2;

y0[n]:=(d+1)*y0[n-1]-d*y0[n-2]+K*H*U[n-m-1]-K*S*U[n-m-2];

yf:=C1*Kf*(1-exp((-n*T0)/Tf));

y:=y0[n]+yf;

y1:=Kdat*y;

end;//20

if radiobutton2.checked=true then

begin//21

g:=A;

x[n]:=Kdat*g-y1;

R[n]:=R[n-1]+K1*x[n]-K2*x[n-1];

f2:=C2*exp(-alfa*n*T0);

U[n]:=R[n]+f2;

y0[n]:=(d+1)*y0[n-1]-d*y0[n-2]+K*H*U[n-m-1]-K*S*U[n-m-2];

yf:=C1*Kf*(1-exp((-n*T0)/Tf));

y:=y0[n]+yf;

if y>a1 then y1:=b1

else if y<a2 then y1:=b2

else y1:=Kdat*y;

end;//21

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

With StringGrid1 Do

if radiobutton1.checked=true then

begin//22

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

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

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

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

RowCount:=RowCount+1;

end //22

else

begin//23

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

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

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

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

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

RowCount:=RowCount+1;

end;//23

//Оформление графика

if radiobutton1.checked=true then

begin

Series1.AddXY(n,g,''clTeeColor);

Series2.AddXY(n,C1,''clTeeColor);

Series3.AddXY(n,y,''clTeeColor);

end

else

begin

Series1.AddXY(n,g,''clTeeColor);

Series2.AddXY(n,C1,''clTeeColor);

Series3.AddXY(n,y,''clTeeColor);

Series4.AddXY(n,y1,''clTeeColor);

end;

end;//19

//Освободить память от массивов

x:=NIL;

U:=NIL;

y0:=NIL;

end;//1

procedure TForm1.Button1Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.Edit1Change(Sender: TObject);

var N1,n:integer;

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

begin//1

N1:=StrToInt(ComboBox1.Text);

For n:=0 To N1 Do

With StringGrid1 Do

begin//2

Cells[0,n+1]:='';

Cells[1,n+1]:='';

Cells[2,n+1]:='';

Cells[3,n+1]:='';

Cells[4,n+1]:='';

RowCount:=2;

Series1.Clear;

Series2.Clear;

Series3.Clear;

Series4.Clear;

end;//2

end;//1

procedure TForm1.FormCreate(Sender: TObject);

begin

With StringGrid1 Do

begin//1

Cells[0,0]:='  n';

Cells[1,0]:='  G';

Cells[2,0]:='  f1';

Cells[3,0]:=' y';

Cells[4,0]:=' y1';

RowCount:=2;

end;//1

end;

//кнопка запись

procedure TForm1.Button2Click(Sender: TObject);

var

F:textFile;

NameFile:string;

n,N1:integer;

begin//1

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

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

begin//2

MessageDlg('Сначала нажмите кнопочку РАСЧЕТ!!!',mtError,[mbOK],0);

Exit;

end;//2

N1:=StrToInt(ComboBox1.Text);

if openDialog1.Execute then

begin//3

NameFile:=openDialog1.FileName;

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

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

Rewrite(F);

Writeln(F,'ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ НЕЛИНЕЙНОЙ');

Writeln(F,'     ДИСКРЕТНОЙ СИСТЕМЫ');

Writeln(F);//Пропуск строки

Writeln(F);

Writeln(F,'Параметры объекта управления:');

Writeln(F,'   Kоб=',Edit1.Text);

Writeln(F,'   Tоб=',Edit2.Text);

Writeln(F,'   Тау=',Edit3.Text);

Writeln(F,'Параметры регулятора:');

Writeln(F,'   K1=',Edit8.Text);

Writeln(F,'   K2=',Edit9.Text);

Writeln(F,'Параметры регулирующего органа:');

Writeln(F,'   Kро=',Edit6.Text);

Writeln(F,'Параметры исполнительного механизма:');

Writeln(F,'   Kим=',Edit7.Text);

Writeln(F,'Параметры возмущения:');

Writeln(F,'   Kf=',Edit4.Text);

Writeln(F,'   Tf=',Edit5.Text);

Writeln(F,'Параметры датчика:');

Writeln(F,'   Кд=',Edit17.Text);

Writeln(F,'Сигнал возмущения f2=C2*e(-альфа*t):');

Writeln(F,'   C2=',Edit11.Text);

Writeln(F,'   альфа=',Edit12.Text);

Writeln(F,'Сигнал возмущения f1=C1:');

Writeln(F,'   C1=',Edit10.Text);

Writeln(F,'Задающее воздействие G=A:');

Writeln(F,'   A=',Edit13.Text);

Writeln(F,'Период дискретности:');

Writeln(F,'   Tо=',Edit16.Text);

Writeln(F,'Вид нелинейности- идеальное ограничение:');

Writeln(F,'   b1=',Edit14.Text);

Writeln(F,'   b2=',Edit15.Text);

Writeln(F);

if radiobutton1.checked=true then

begin

Writeln(F,'Результаты моделирования линейной ситсемы');

Writeln(F,'  n',  '        G','        f1','        y');

With StringGrid1 Do

For n:=0 to N1 do

Writeln (F,' ',Cells[0,n+1],'     ',Cells[1,n+1],'   ',Cells[2,n+1],'   ',Cells[3,n+1]);

end;

if radiobutton2.checked=true then

begin

Writeln(F,'Результаты моделирования нелинейной ситсемы');

Writeln(F,'  n',  '        G','       f1','        y','       y1');

With StringGrid1 Do

For n:=0 to N1 do

Writeln (F,' ',Cells[0,n+1],'     ',Cells[1,n+1],'   ',Cells[2,n+1],'   ',Cells[3,n+1],'    ',Cells[4,n+1]);

end;

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

CloseFile(F);

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

MessageDlg('Результаты моделирования записаны в файл',mtInformation

Похожие материалы

Информация о работе