Санкт-Петербургский Государственный Технологический Университет Растительных Полимеров
Кафедра АТЭП
КУРСОВАЯ РАБОТА
по дисциплине: «МОДЕЛИРОВАНИЕ СИСТЕМ»
на тему: «Имитационное моделирование цифровой автоматической системы.
ВЫПОЛНИЛ: ПРОВЕРИЛ:
Ст. гр.542
Санкт – Петербург
2006г.
Содержание.
1.Структурная схема моделируемой …………………………………………………
2.Математическое описание исходных данных ……………………………………..
3.Определение дискретной модели непрерывной части системы и соответствующего разностного уравнения.………………………………………………………………….
4.Определение непрерывной и дискретной модели нелинейной характеристики заданного элемента системы………………………………………………………………………….
5. Составление системы разностных уравнений по дискретным передаточным функциям и заданным дискретным функциям………………………………………………………...
6.Эскиз формы ввода,редактирования данных,вывода результатов
моделирования в табличном,графическом виде и запись их в текстовый файл…..
7.Распечатка текста основного программного модуля……………………………....
8.Распечатка текстового файла результатов моделирования………………………..
2.Математическое описание исходных данных.
-непрерывная часть
-дискретная часть
-нелинейная характеристика датчика
-модели сигналов
3.Определение дискретной модели непрерывной части системы и соответствующего разностного уравнения.
Получение разностного уравнения:
-задающее воздействие:
-по возмущению f1 на входе канала управления объектом:
-по сигналу f2 на входе канала возмущения объекта:
Задана нелинейность датчика, которая имеет вид:
Кусочно-линейная зависимость, содержащая три участка.
С1 и С2 заданы; ;
-сигнал ошибки (рассогласования):
-сигнал регулятора:
-уравнение сигнала 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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.