Графики изменения переменных системы, соответствующие распечатке текстового файла. Оценка качественных показателей работы системы управления.
Дата выдачи задания Дата представления работы
“ ______”___________ 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. Описание входных сигналов
По каналу передачи управляющего воздействия:
По каналу передачи возмущающего воздействия:
В итоге получили разностное уравнение в следующем виде:
+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.
В системе имеет место нелинейность на выходе регулирующего органа. Входом нелинейного элемента является выход регулятора Q. Выходом – переменная нелинейного элемента U.
Для программирования данной системы необходимо перейти от дискретных функций элементов системы к разностным уравнениям.
Получим разностное уравнение для ПИ – регулятора:
Объединив выведенные ранее разностные уравнения, можно получить систему разностных уравнений для описания работы одного такта расчета:
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,' Передаточная функция объекта по каналу управления
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.