Имитационное моделирование системы управления с учетом нелинейности «Идеальное ограничение»

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

27 страниц (Word-файл)

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

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

Дата выдачи задания                                                                             Дата представления работы

“ ______”___________ 200__г                                                           “______” _____________ 200__г

Руководитель ________________________            Исполнитель________________________             _____________________________

Содержание.

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

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

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

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

5.  Составление системы разностных уравнений, описывающих работу замкнутой системы управления……………………………………………………

6.  Блок-схема алгоритма имитационного моделирования системы в соответствии с задачей функционирования………………………………………

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

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

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

10.  Графики изменения переменных системы, соответствующие распечатке текстового файла. Оценка качественных показателей работы системы управления…………………………………………………………………………
1.Структурная схема моделируемой системы с обозначением переменных

системы.

W1 – передаточная функция по каналу возмущения

Wo - передаточная функция обьекта

f1 – возмущение

Х(t) – входной параметр

Y(t) - выходной параметр

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

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

1.Элементы моделируемой системы

2  Описание нелинейного элемента.

В моделируемой системе нелинейность присутствует в регулирующем органе. Вид нелинейности – «идеальное ограничение» (представлена на рис.1):

 


Рис.1.Вид нелинейности - «идеальное ограничение»

3. Описание  входных сигналов

По каналу передачи управляющего воздействия:

По каналу передачи возмущающего воздействия:

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

В итоге получили разностное уравнение в следующем виде:

Y[n]=U[n-m-1]*K*To - U[n-m-2]K*T0*d – U[n-m-1]K*T +U[n-m-1]*K*d*T

+U[n-m-1]K*d*T+U[n-m-2]*K*T- U[n-m-2]K*d*T+ Y[n-1]*d+Y[n-1]-Y[n-2]*d.

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

В системе имеет место нелинейность на выходе регулирующего органа. Входом нелинейного элемента является выход регулятора Q. Выходом – переменная нелинейного элемента U.

5.Составление системы разностных уравнений, описывающих работу замкнутой системы управления.

Для программирования данной системы необходимо перейти от дискретных функций элементов системы к разностным уравнениям.

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

Объединив выведенные ранее разностные уравнения, можно получить систему разностных уравнений для описания работы одного такта расчета:

6.Блок-схема алгоритма имитационного моделирования системы в соответствии с задачей функционирования.

G(t)

Сигнал задания

X(t)

Ошибка управления

R

Yo

Yf

Y(t)

Выходной сигнал

f(t)

Возмущение

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

Рис.3. «Схема системы»

Рис.4. «Элементы системы»

Рис.5. «Нелинейность»

Рис.6. «График выхода НЭ»

Рис.7. «График переходного процесса»

8.Распечатка текста основного программного

unit Progect;

interface

uses

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

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

Grids, jpeg;

type

TForm1 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

Label18: TLabel;

Button2: TButton;

Panel1: TPanel;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Image4: TImage;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Panel2: TPanel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Image3: TImage;

Label17: TLabel;

Edit4: TEdit;

Edit5: TEdit;

Panel3: TPanel;

Label9: TLabel;

Label10: TLabel;

Edit6: TEdit;

Panel4: TPanel;

Label11: TLabel;

Label12: TLabel;

Edit7: TEdit;

Panel5: TPanel;

Label13: TLabel;

Label14: TLabel;

Edit8: TEdit;

ComboBox1: TComboBox;

TabSheet3: TTabSheet;

TabSheet4: TTabSheet;

Panel7: TPanel;

Label19: TLabel;

StringGrid1: TStringGrid;

TabSheet5: TTabSheet;

Chart1: TChart;

Series1: TLineSeries;

Series2: TLineSeries;

Series5: TLineSeries;

Series6: TLineSeries;

TabSheet6: TTabSheet;

Chart2: TChart;

Series7: TLineSeries;

Panel6: TPanel;

Label15: TLabel;

Label16: TLabel;

Image2: TImage;

Edit9: TEdit;

Panel8: TPanel;

Label20: TLabel;

Label21: TLabel;

Label22: TLabel;

Label23: TLabel;

Label24: TLabel;

Label25: TLabel;

Label26: TLabel;

Edit10: TEdit;

Edit11: TEdit;

Edit12: TEdit;

Edit13: TEdit;

Label27: TLabel;

Label28: TLabel;

Label29: TLabel;

Edit14: TEdit;

Edit15: TEdit;

ComboBox2: TComboBox;

Button1: TButton;

Button3: TButton;

ComboBox3: TComboBox;

Label31: TLabel;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

TabSheet7: TTabSheet;

Button4: TButton;

Button5: TButton;

Button6: TButton;

OpenDialog1: TOpenDialog;

Series3: TFastLineSeries;

Image5: TImage;

Image6: TImage;

Button7: TButton;

Button8: TButton;

Panel9: TPanel;

Label30: TLabel;

StringGrid2: TStringGrid;

GroupBox7: TGroupBox;

Label32: TLabel;

Label33: TLabel;

Image10: TImage;

Image8: TImage;

Label34: TLabel;

Label35: TLabel;

Label36: TLabel;

Label37: TLabel;

Label38: TLabel;

Edit18: TEdit;

Edit19: TEdit;

Edit20: TEdit;

Image7: TImage;

Image1: TImage;

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure ComboBox3Change(Sender: TObject);

procedure ComboBox2Change(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

i,n:integer;

count,y1,x1,s,step,x,y,a1,a2,k1,k2,amp,w:real;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

i,n,s:integer;

x,x1,x2,k1,k2,z,y,Amp,A1,A2,w,Step:real;

begin

with stringgrid1 do

begin

cells[0,i+1]:='';

cells[1,i+1]:='';

cells[2,i+1]:='';

cells[3,i+1]:='';

end;

a1:=strtofloat(edit10.Text);

a2:=strtofloat(edit11.Text);

k1:=strtofloat(edit12.Text);

k2:=strtofloat(edit13.Text);

amp:=strtofloat(edit14.Text);

w:=strtofloat(edit15.Text);

n:=strtoint(combobox2.Text);

x:=0;

z:=0;

y:=0;

s:=1;

for i:=1 to n do

begin

y:=Amp*sin(w*x);

step:=3.14/25;

series7.AddXY(x,y,'',clred);

if (y>0)  then

begin

z:=k2*(y);

if z>A2 then

z:=A2;

end;

if (y<0) then

begin

z:=k1*(y);

if z<A1 then

z:=A1;

end;

series3.AddXY(x,z,'',clgreen);

with stringgrid2 do

begin

cells[0,i]:=floattostrf(s,fffixed,8,0);

cells[1,i]:=floattostrf(y,fffixed,8,3);

cells[2,i]:=floattostrf(z,fffixed,8,3);

rowcount:=rowcount+1;

end;

x:=step+x;

s:=s+1;

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

var

m,count,diskr,Tob,n,i:integer;

aa1,aa2,kk1,kk2,intgr,g1,g2,d,Cf1,Kf1,Tf1,K1,K2,Kim,Kro,Kob,Tauob,Kdat,g:real;

U:array of real;

R:array of real;

y0:array of real;

y:array of real;

yf1:array of real;

y1:array of real;

x:array of real;

Un:array of real;

S:array of real;

Uy:array of real;

begin

with stringgrid1 do

begin

cells[1,i+1]:=' ';

cells[2,i+1]:=' ';

cells[3,i+1]:=' ';

cells[4,i+1]:=' ';

rowcount:=2;

With StringGrid1 Do

begin

Cells[0,0]:='Такт';

Cells[1,0]:='Задание';

Cells[2,0]:='Рег-р';

Cells[3,0]:='УпрВозд';

Cells[4,0]:='Система';

rowcount:=2;

end;

series1.Clear;

series2.Clear;

series5.Clear;

series6.Clear;

end;

//Расчет Системы

i:=strtoint(combobox3.Text);

K1:=strtofloat(edit4.Text);

K2:=strtofloat(edit5.Text);

Kim:=strtofloat(edit6.Text);

Kro:=strtofloat(edit7.Text);

Kob:=strtofloat(edit1.Text);

Cf1:=strtofloat(edit20.Text);

Kf1:=strtofloat(edit19.Text);

Tf1:=strtofloat(edit18.Text);

Tob:=strtoint(edit2.Text);

Tauob:=strtofloat(edit3.Text);

Kdat:=strtofloat(edit8.Text);

g:=strtofloat(edit9.Text);

n:=strtoint(combobox3.Text);

diskr:=strtoint(combobox1.text);

kk1:=strtofloat(edit12.Text);

kk2:=strtofloat(edit13.Text);

aa1:=strtofloat(edit10.Text);

aa2:=strtofloat(edit11.Text);

setlength(U,n+1);

setlength(y0,n+1);

setlength(yf1,n+1);

setlength(y,n+1);

setlength(y1,n+1);

setlength(x,n+1);

setlength(R,n+1);

setlength(Un,n+1);

setlength(S,n+1);

setlength(Uy,n+1);

count:=0;

//5% Зона допуска

g1:=0.95*g;

g2:=1.05*g;

d:=exp(-diskr/Tob);

m:=trunc(Tauob/diskr);

if Kdat=0 then

begin

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

exit;

end;

if K1=0 then

begin

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

exit;

end;

if K2=0 then

begin

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

exit;

end;

if Kim=0 then

begin

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

exit;

end;

if Kro=0 then

begin

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

exit;

end;

//Расчет линейной части системы

if radiobutton1.Checked=true then  //Задание

begin  //RB1

for i:=0 to n do

begin  //Cycle RB1

y0[i]:=(-d+1)*y0[i-1]-d*y0[i-2]+Kob*(diskr-Tob+Tob*d)*U[i-m-1]-Kob*diskr*d*U[i-m-2];

yf1[i]:=Cf1*Kf1*(1-exp(-i*diskr/Tf1));

y[i]:=y0[i]+yf1[i];

y1[i]:=Kdat*y[i];

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

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

S[i]:=Kim*R[i];

U[i]:=Kro*S[i];

with stringgrid1 do

begin

cells[0,i+1]:=floattostrf(count,fffixed,8,0);

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

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

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

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

rowcount:=rowcount+1;

end;

//Вывод графиков

series1.addxy(i,g,'',clgreen);

series2.addxy(i,y[i],'',clred);

series5.addxy(i,g1,'',clblue);

series6.addxy(i,g2,'',clblue);

count:=count+1;

end;//Конец Задания

end;

//Расчет нелинейной части системы

if radiobutton2.checked=true then

begin  //RB1

With StringGrid1 Do

begin

Cells[0,0]:='Такт';

Cells[1,0]:='Задание';

Cells[2,0]:='ВходНЭ';

Cells[3,0]:='ВыходНЭ';

Cells[4,0]:='Система';

rowcount:=2;

end;

series7.Clear;

series3.Clear;

end;

for i:=0 to n do

begin  //Cycle RB1

y0[i]:=(-d+1)*y0[i-1]-d*y0[i-2]+Kob*(diskr-Tob+Tob*d)*U[i-m-1]-Kob*diskr*d*U[i-m-2];

yf1[i]:=Cf1*Kf1*(1-exp(-i*diskr/Tf1));

y[i]:=y0[i]+yf1[i];

y1[i]:=Kdat*y[i];

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

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

S[i]:=Kim*R[i];

U[i]:=Kro*S[i];

if (U[i]<=aa1) then Un[i]:=kk2;

if (U[i]>=aa2) then Un[i]:=kk1;

if (Un[i-1]=kk1) and (r[i]>aa1) then Un[i]:=kk1;

if (Un[i-1]=kk2) and (r[i]<aa2) then Un[i]:=kk2;

Uy[i]:=Kro*Un[i];

with stringgrid1 do

begin

cells[0,i+1]:=floattostrf(count,fffixed,8,0);

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

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

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

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

rowcount:=rowcount+1;

end;

//Вывод графиков

series1.addxy(i,g,'',clgreen);

series2.addxy(i,y[i],'',clred);

count:=count+1;

end;//Конец ЗаданияНЕЛ

end;

procedure TForm1.ComboBox3Change(Sender: TObject);

var

i,n:integer;

begin

n:=StrToInt(combobox3.Text);

for i:=1 to n do

with stringgrid1 do

begin

cells[0,i]:='';

cells[1,i]:='';

cells[2,i]:='';

cells[3,i]:='';

cells[4,i]:='';

rowcount:=2;

end;

series1.Clear;

series2.Clear;

series5.Clear;

series6.Clear;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

With StringGrid2 Do

begin

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

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

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

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

rowcount:=2;

end;

With StringGrid1 Do

begin

Cells[0,0]:='Такт';

Cells[1,0]:='Задание';

Cells[2,0]:='Вход НЭ';

Cells[3,0]:='Выход НЭ';

Cells[4,0]:='Система';

rowcount:=2;

end;

end;

procedure TForm1.ComboBox2Change(Sender: TObject);

var

i,n:integer;

begin

n:=StrToInt(combobox3.Text);

for i:=1 to n do

with stringgrid2 do

begin

cells[0,i]:='';

cells[1,i]:='';

cells[2,i]:='';

cells[3,i]:='';

rowcount:=2;

end;

series7.Clear;

series3.Clear;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

messagedlg('Данная программа позволяет моделировать систему управления с нелинейным элементом(РО).Создана в Delphi 6.0,Терениным Юрием Александровичем, студентом 542гр."Санкт-Петербургского Государственного Технологического Университета Растительных Полимеров "',mtinformation,[mbOk],0);

exit;

end;

//Запись в файл расчета системы

procedure TForm1.Button6Click(Sender: TObject);

var

f:textfile;

namefile:string;

i,n:integer;

begin

//Проверка расчета НЭ

if stringgrid2.cells[1,1]='' then

begin

messagedlg('Нет расчета переходного процесса !',mterror,[mbok],0);

exit;

end;

n:=strtoint(combobox1.text);

if opendialog1.execute then

begin

namefile:=opendialog1.filename;

assignfile(f,namefile);

rewrite (f);

writeln(f);

writeln(f,'    Результаты имитационного моделирования ЦАС ');

writeln(f,'    ------------------------------------------');

writeln(f,'    ------------------------------------------');

writeln(f);

writeln(f,'    Передаточная функция объекта по каналу управления

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

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