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

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

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

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

Федеральное агентство по образованию Российской Федерации

 Государственное образовательное учреждение высшего профессионального образования 

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

Кафедра АТЭП

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

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

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

Выполнил:                                                                             студент группы 542

                                                            

Проверил:                                                                               

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

2005г.

Содержание.

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

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

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

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

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

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

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

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


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

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

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

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

f1(t) – возмущающее воздействие

G(t) - задающее воздействие

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

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

R – сигнал с выхода  дискретного регулятора

U – управляющее воздействие.

Таблица переменных системы

G(t)

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

X(t)

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

R

Сигнал с выхода  дискретного регулятора

U

Управляющее воздействие

Y(t)

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

f1(t)

Входной сигнал возмущение

Yf

Выходной сигнал возмущения

Y1(t)

Сигнал с датчика

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

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

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

В моделируемой системе нелинейная характеристика присутствует в датчике. Вид нелинейности – «зона нечувствительности».

Рис.2. Вид нелинейности - «зона нечувствительности»

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

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

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

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

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

Входом нелинейного элемента является выход системы - Y.

Выходом – переменная нелинейного элемента - y1(t).

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

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

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

Делим на высшую степень z

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

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

Рис. 3. Титульный лист программы

Рис.4. Схема системы

Рис.5. Ввод исходных данных

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

Рис.7. Выход линейной системы при задающем воздействии

Рис.8. Выход линейной системы при возмущающем воздействии

Рис.9. Выход нелинейной системы при задающем воздействии

Рис.10. Выход нелинейной системы при возмущающем воздействии

Рис.11. Сохранение результатов

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

Простые переменные (real):   y – выход системы,

y1 -  выход датчика,

yf1 – выход объекта по каналу возмущения,

Со – задающее воздействие,

Сf1 – возмущающее воздействие

Массив (array of real – динамический массив реальной переменной):

R – выход регулятора,

U – управляющее воздействие,

Y0 – выход объекта по каналу управления,

X – сигнал ошибки

Целочисленные (integer): N1 – число точек расчета

m – целочисленная переменная, применяемая в расчетах.

Программный модуль:

unit Unit1;

interface

uses

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

Dialogs, jpeg, QuickRpt, QRCtrls, ComCtrls, StdCtrls, ExtCtrls, Grids,

TeEngine, Series, TeeProcs, Chart, Psock, NMDayTim;

type

TForm1 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

Button1: TButton;

Image1: TImage;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

TabSheet3: TTabSheet;

GroupBox1: TGroupBox;

Image2: TImage;

Label6: TLabel;

Edit1: TEdit;

Label7: TLabel;

Edit2: TEdit;

Label8: TLabel;

Edit3: TEdit;

GroupBox2: TGroupBox;

Label9: TLabel;

Edit4: TEdit;

Edit5: TEdit;

Label10: TLabel;

Image3: TImage;

Image4: TImage;

GroupBox3: TGroupBox;

Label11: TLabel;

Edit6: TEdit;

GroupBox4: TGroupBox;

Label12: TLabel;

Edit7: TEdit;

GroupBox5: TGroupBox;

Label13: TLabel;

Edit8: TEdit;

GroupBox6: TGroupBox;

Label14: TLabel;

Edit9: TEdit;

Image5: TImage;

Label15: TLabel;

GroupBox7: TGroupBox;

Label16: TLabel;

Edit10: TEdit;

Image6: TImage;

Label17: TLabel;

Label18: TLabel;

Edit11: TEdit;

Image7: TImage;

Edit12: TEdit;

Label19: TLabel;

Label20: TLabel;

Edit13: TEdit;

TabSheet4: TTabSheet;

Panel1: TPanel;

Label21: TLabel;

Image9: TImage;

Label23: TLabel;

Edit14: TEdit;

Label24: TLabel;

Edit15: TEdit;

TabSheet6: TTabSheet;

Chart2: TChart;

StringGrid1: TStringGrid;

Button3: TButton;

TabSheet7: TTabSheet;

Panel3: TPanel;

Series3: TLineSeries;

Series4: TLineSeries;

Series5: TLineSeries;

Label29: TLabel;

ComboBox2: TComboBox;

Series7: TLineSeries;

GroupBox10: TGroupBox;

Label30: TLabel;

Label31: TLabel;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

RadioButton3: TRadioButton;

RadioButton4: TRadioButton;

Series8: TLineSeries;

OpenDialog1: TOpenDialog;

Button4: TButton;

Button5: TButton;

Label32: TLabel;

Label33: TLabel;

Label34: TLabel;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure ComboBox2Change(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

//выход из программы

procedure TForm1.Button1Click(Sender: TObject);

begin

//messagedlg('  Вы хотите '#13+' '#13+' В  Ы  Й  Т  И?',mtConfirmation, mbOKCancel, 3);

//if mrcancel =2 then exit;

//if mrok =1 then close;

close;

end;

//Загрузка формы

procedure TForm1.FormCreate(Sender: TObject);

begin

With StringGrid1 Do

begin

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

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

Cells[2,0]:=' Регулятор';     //R[i]

Cells[3,0]:=' Упр.возд';      //U[i]

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

Cells[5,0]:='Выход датч';  //y1

rowcount:=2;

end;

end;

//Очистка графиков  и таблицы расчета  при вводе данных

procedure TForm1.ComboBox2Change(Sender: TObject);

var

i,N1:integer;

begin //очистка

N1:=strtoint(combobox2.Text);

for i:=1 to N1 do

with stringgrid1 do

begin//1

cells[0,i]:='';

cells[1,i]:='';

cells[2,i]:='';

cells[3,i]:='';

cells[4,i]:='';

cells[5,i]:='';

rowcount:=2;

end;//1

series3.Clear;

series4.Clear;

series5.Clear;

series7.Clear;

series8.Clear;

end;  // очистки

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

procedure TForm1.Button3Click(Sender: TObject);

Label L1;//описание меток

Label L2;

var

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

tau,K1,K2,Kim,Kro,Kdat,Kob,Tob,Co,Kf1,Tf1,Cf1,b1,b2,diskr,d: real;

//описание сигналов

y,yf1,y1:real;

U:array of real;

R:array of real;

y0:array of real;

x:array of real;

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

m,i,N1:integer;

begin//расчёт переходного процессов

//считывание данных с визуальных элементов

N1:=strtoint(combobox2.Text);

K1:=strtofloat(edit4.text);

K2:=strtofloat(edit5.text);

Kim:=strtofloat(edit7.text);

Kro:=strtofloat(edit6.text);

Tob:=strtofloat(edit2.text);

Kob:=strtofloat(edit1.text);

Kdat:=strtofloat(edit8.text);

Co:=strtofloat(edit9.text);

Cf1:=strtofloat(edit10.text);

Kf1:=strtofloat(edit12.text);

Tf1:=strtofloat(edit13.text);

diskr:=strtofloat(edit1.text);

b1:=strtofloat(edit14.text);

b2:=strtofloat(edit15.text);

tau:=strtofloat(edit3.text);

//обнуление при нажатии кнопки расчет

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]:='';

cells[5,i]:='';

end;//обнул

series3.Clear;

series4.Clear;

series5.Clear;

series7.Clear;

series8.Clear;

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

For i:=1 To n1 do

begin//мас

setlength(U,n1+1);

setlength(R,n1+1);

setlength(y0,n1+1);

setlength(x,n1+1);

end;//мас

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

begin

if RadioButton1.Checked=true then

begin//линейная по заданию

b1:=0;

b2:=0;

Cf1:=0;

With StringGrid1 Do

begin //1

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

end; //1

goto L1; //переход к метке

end//линейная по заданию

else

if RadioButton2.Checked=true then

begin//линейная по возм

b1:=0;

b2:=0;

Co:=0;

With StringGrid1 Do

begin //1

Cells[1,0]:='Возмущ.';

end; //1

end;//линейная по возм

L1:

//расчет постоянных переменных

m:=trunc(Tau/diskr);

d:=exp(-diskr/Tob);

//обнуление массивов

For i:=1 To n1 do

begin//обнуление

R[i]:=0;

X[i]:=0;

U[i]:=0;

Y0[i]:=0;

end;//обнуление

//основной цикл расчета ЛИН. СИСТ

for I:=0 to N1 do

begin  // цикл расчета

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

Yf1:=Cf1*Kf1*(1-exp(-I*diskr/Tf1));

Y:=Y0[i]+Yf1;

if (y>b2) and (y<b1) then

begin //1

y1:=0;

end;  //1

if y>b1 then  y1:=Kdat*(y-b1);

if y<b2 then  y1:=Kdat*(y-b2);

x[i]:=Co*kdat-y1;

R[i]:=k1*x[i]-k2*x[i-1]+R[i-1];

U[i]:=Kim*Kro*R[i];

//отражение расчета в таблице

With StringGrid1 do

begin//запись в табл

cells[0,i+1]:=FloatToStrF(i,ffFixed,3,0);

if RadioButton1.Checked=true then

begin//1

With StringGrid1 Do

begin //2

cells[1,i+1]:=FloatToStrF(Co,ffFixed,8,4);

end; //2

end //1

else

if RadioButton2.Checked=true then

begin //3

With StringGrid1 Do

begin //4

cells[1,i+1]:=FloatToStrF(Cf1,ffFixed,8,4);

end; //4

end; //3

cells[2,i+1]:=FloatToStrF(R[i],ffFixed,8,4);

cells[3,i+1]:=FloatToStrF(U[i],ffFixed,8,4);

cells[4,i+1]:=FloatToStrF(Y,ffFixed,8,4);

cells[5,i+1]:=FloatToStrF(Y1,ffFixed,8,4);

end;//запись в табл

//построение графиков

if RadioButton1.Checked=true then

Begin //1

Series3.AddXY(i,Y);    //вых.сист - лин

Series4.AddXY(i,Co);    //задание

End; //1

if RadioButton2.Checked=true then

begin//2

Series5.AddXY(i,Cf1);  //возмущение

Series3.AddXY(i,Y);    //вых.сист - лин

end;//2

end;//перех.пр.по заданию

end; // цикл расчета

//основной цикл расчета НЕЛИН. СИСТЕМЫ

begin

if RadioButton3.Checked=true then

begin//2

Cf1:=0;

With StringGrid1 Do

begin //1

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

end;//1

goto L2;

end//2

else

if RadioButton4.Checked=true then

begin //3

Co:=0;

With StringGrid1 Do

begin //4

Cells[1,0]:='Возмущ.';

end; //4

end; //3

L2:

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

m:=trunc(Tau/diskr);

d:=exp(-diskr/Tob);

//обнуление массивов

For i:=1 To n1 do

begin//обнуление

R[i]:=0;

X[i]:=0;

U[i]:=0;

Y0[i]:=0;

end;//обнуление

for I:=0 to N1 do

begin//цикл расчета

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

Yf1:=Cf1*Kf1*(1-exp(-I*diskr/Tf1));

Y:=Y0[i]+Yf1;

if (y<b1) and (y>b2) then

begin//1

y1:=0;

end; //1

if y>b1 then  y1:=Kdat*(y-b1);

if y<b2 then  y1:=Kdat*(y-b2);

x[i]:=Co*kdat-y1;

R[i]:=k1*x[i]-k2*x[i-1]+R[i-1];

U[i]:=Kim*Kro*R[i];

//отражение расчета в таблице

With StringGrid1 do

begin //табл

cells[0,i+1]:=FloatToStrF(i,ffFixed,3,0);

if RadioButton3.Checked=true then

begin //1

With StringGrid1 Do

begin //2

cells[1,i+1]:=FloatToStrF(Co,ffFixed,8,4);

end; //2

end //1

else

if RadioButton4.Checked=true then

begin //4

With StringGrid1 Do

begin //3

cells[1,i+1]:=FloatToStrF(Cf1,ffFixed,8,4);

end; //3

end; //4

cells[2,i+1]:=FloatToStrF(R[i],ffFixed,8,4);

cells[3,i+1]:=FloatToStrF(U[i],ffFixed,8,4);

cells[4,i+1]:=FloatToStrF(Y,ffFixed,8,4);

cells[5,i+1]:=FloatToStrF(Y1,ffFixed,8,4);

RowCount:=RowCount+1;

end;//табл

//построение графиков

if RadioButton3.Checked=true then

Begin   // 1

Series7.AddXY(i,Y);  //вых. нелин.сист

Series4.AddXY(i,Co);  //задание

Series8.AddXY(i,Y1);  //выход датч

End;    // 1

if RadioButton4.Checked=true then

begin//2

Series5.AddXY(i,Cf1); //возмущение

Series7.AddXY(i,Y);   //вых. нелин.сист

Series8.AddXY(i,Y1);  //выход датч

end;//2

end;//цикл расчета

end;//перех.пр.по возмущению

end;//расчёт переходного процессов

//***********************************************************

//запись в файл переходных процессов по заданию

procedure TForm1.Button4Click(Sender: TObject);

label LinSyst,NelinSyst;//описание меток

Var

f:TextFile;

NameFile:string;

I,N1:Integer;

begin//1

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

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

begin//2

messagedlg('Нет расчета переходного процесса  по заданию!',mtError,[mbOK],0);

exit;

end;//2

if (RadioButton1.Checked=false) and (RadioButton3.Checked=false) then

begin//3

messagedlg('Нет расчета переходного процесса  по заданию!',mtError,[mbOK],0);

exit;

end;//3

N1:=StrToInt(ComboBox2.text);

if OpenDialog1.execute then

begin//3

NameFile:=OpenDialog1.FileName;

AssignFile(f,NameFile);

Rewrite(f);

Writeln(f,' РЕЗУЛЬТАТЫ МОДЕЛИРОВАНИЯ ПЕРЕХОДНОГО ПРОЦЕССА');

if RadioButton1.Checked=true then//линейная система

begin//lin

writeln(f,'               ПО ЗАДАЮЩЕМУ ВОЗДЕЙСТВИЮ');

writeln(f,'                  *ЛИНЕЙНАЯ СИСТЕМА*');

end;//lin

if RadioButton3.Checked=true then//нелинейная система

begin//nelin

writeln(f,'               ПО ЗАДАЮЩЕМУ ВОЗДЕЙСТВИЮ');

writeln(f,'                  *НЕЛИНЕЙНАЯ СИСТЕМА*');

end;//nelin

Writeln(f);

Writeln(f,'            Передаточная функция объекта:');

Writeln(f);

Writeln(f,'                          K*exp(-pTau)      ');

Writeln(f,'              Wo(p)=------------------------');

Writeln(f,'                            p(1+Tp)');

Writeln(f);

Writeln(f,'              где:');

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

Writeln(f,'               постоянная времени   Т=',Edit2.text);

Writeln(f,'               запаздывание         Тau=',Edit3.text);

Writeln(f);

Writeln(f,'*********************************************************');

Writeln(f);

Writeln(f,'   Передаточная функция звена по каналу возмущения:' );

Writeln(f);

Writeln(f,'                          Kf   ');

Writeln(f,'                 Wf1(p)=------');

Writeln(f,'                        (1+Tfp)');

Writeln(f);

Writeln(f,'              где:');

Writeln(f,'               коэффициент передачи Кf=',Edit12.text);

Writeln(f,'               постоянная времени   Тf=',Edit13.text);

Writeln(f);

Writeln(f,'*********************************************************');

Writeln(f);

Writeln(f,'            Настройки ПИ-регулятора:');

Writeln(f,'                     К1=',Edit4.text);

Writeln(f,'                     К2=',Edit5.text);

Writeln(f);

Writeln(f,'*********************************************************');

Writeln(f);

Writeln(f,'   Задающее воздействие - ступенчатеое = ',edit9.text);

Writeln(f);

Writeln(f,'*********************************************************');

Writeln(f);

Writeln(f,'       Коэффициенты передачи элементов системы:');

Writeln(f,'         регулирующий орган Кро=',Edit6.text);

Writeln(f,'         исполнительный механизм Ким=',Edit7.text);

Writeln(f,'         датчик Кдат=',Edit8.text);

Writeln(f);

Writeln(f,'*********************************************************');

Writeln(f);

Writeln(f,'        Дискретность работы системы Тo=',Edit11.text);

Writeln(f);

Writeln(f,'*********************************************************');

if RadioButton1.Checked=true then//линейная система

begin

writeln(f,' Переходный процесс по задающему воздействию (линейная система)');

goto LinSyst;

end;

if RadioButton3.Checked=true then//нелинейная система

begin

writeln(f,' Переходный процесс по задающему воздействию (нелинейная система)');

goto NelinSyst;

end;

//запись линейной системы

LinSyst:

Writeln(f);

Writeln(f,'    Такт  Задание     Выход рег-ра   Упр.возд   Система   Вых. датчик');

With StringGrid1 do

For I:=1 to N1 do

Writeln(f,'      ',cells[0,I],'   ',cells[1,I],'         ',cells[2,I],'       ',cells[3,I],'     ',cells[4,I],'      ',cells[5,I]);

CloseFile(f);

MessageDlg('Расчет переходного процесса лин. системы'#13+

'     по задающему воздействию записан !',mtInformation,[mbOK],0);

exit;

//запись нелинейной системы

NelinSyst:

Writeln(f);

Writeln(f,'    Такт  Задание     Выход рег-ра   Упр.возд   Система   ');

With StringGrid1 do

For I:=1 to N1 do

Writeln(f,'      ',cells[0,I],'   ',cells[1,I],'         ',cells[2,I],'       ',cells[3,I],'     ',cells[4,I]);

Writeln(f);

Writeln(f,'     Коэффициенты нелинейности датчика:');

Writeln(f);

Writeln(f,'                   B1=',Edit14.text);

Writeln(f,'                   B2=',Edit15.text);

Writeln(f);

Writeln(f,'    Такт     Вх.дат(Вых.сист.)  Выход датчика');

With StringGrid1 do

For I:=1 to N1 do

Writeln(f,'      ',cells[0,I],'         ',cells[4,I],'            ',cells[5,I]);

CloseFile(f);

MessageDlg('Расчет переходного процесса нелин. системы'#13+

'   по задающему воздействию записан !',mtInformation,[mbOK],0);

exit;

end;//3

end;//1

//запись в файл переходных процессов по возмущению

procedure TForm1.Button5Click(Sender: TObject);

label LinSyst,NelinSyst;//описание меток

Var

f:TextFile;

NameFile:string;

I,N1:Integer;

begin//1

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

if (stringgrid1.Cells[0,1]='') then

begin//2

messagedlg('Нет расчета переходного процесса по возмущению !',mtError,[mbOK],0);

exit;

end;//2

if (RadioButton2.Checked=false) and (RadioButton4.Checked=false) then

begin//3

messagedlg('Нет расчета переходного процесса  по возмущению!',mtError,[mbOK],0);

exit;

end;//3

N1:=StrToInt(ComboBox2.text);

if OpenDialog1.execute then

begin//3

NameFile:=OpenDialog1.FileName;

AssignFile(f,NameFile);

Rewrite(f);

Writeln(f,' РЕЗУЛЬТАТЫ МОДЕЛИРОВАНИЯ ПЕРЕХОДНОГО

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

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