МИНИСТЕРСТВО ОБРАЗОВАНИЯ РФ
Санкт-Петербургский Государственный Технологический
Университет Растительных Полимеров
Кафедра АТЭП
Самостоятельная работа
На тему: «Имитационное моделирование Весовой
Функции консервативного звена»
Выполнил: студент гр.542 М
Проверил:
2005
Исходные данные: Консервативное звено.
Передаточная функция представлена ниже:
Математическое описание задачи:
3.) Анализ графика моделируемой функции
Анализ графика:
- характер изменения кривой синусоидальной
- присутствуют точки минимума и максимума
- отсутствуют точки разрыва
Примерно известна длительность процесса 3÷5Т, поэтому можно шаг дискретизации кривой сделать постоянным.
Step = T/N, где N – число желаемых точек переходного процесса
Структура программы:
- ввод исходных данных
- проверка значения (Т должно быть больше нуля)
- проверка значения (К должно быть больше нуля)
- пошаговый расчет значения функции с дискретностью времени (шаг Т/5)
- отображение результатов расчета в таблице и на графике
На форме программы расположены 3 панели, каждая из них содержит метку, которая указывает на ее назначение.
На панели 1 размещены элементы ввода данных. К ним относятся текстовые окна для ввода данных с клавиатуры и элемент ComboBox, для ввода данных из прилагаемого списка. Напротив каждого элемента ввода расположены метки в свойстве Caption, которых указаны физические переменные, для которых предназначены элементы ввода.
На панели 2, кроме метки с «функциональной принадлежностью» размещена таблица результирующих данных, в свойствах которой задано число столбцов равное 2 начальное число строк равное 6, при этом первая строка является фиксированной.
Панель 3 полностью заполняет график переходной характеристики в зависимости от времени. Причем в его свойствах заложены цвета шрифтов поясняющих надписей, фона и непосредственно линии графика. Свойствами определен точечный двухмерный график и наилучшие для восприятия параметры шкалы.
Под панелью 3 на форме расположены 3 функциональные кнопки для: выполнения расчета переходной характеристики, записи результат расчета в текстовый файл, выхода из программы.
Для записи в текстовый файл используется элемент OpenDialog.
Эскиз формы действующей программы, распечатка модуля и текстового файла приведены в приложении.
Приложение
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Grids, TeeProcs, TeEngine, Chart, Series;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Edit2: TEdit;
ComboBox1: TComboBox;
StringGrid1: TStringGrid;
Chart1: TChart;
Series1: TLineSeries;
OpenDialog1: TOpenDialog;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
Var
K,T,Vr,step1,step2,W:real;
N,I:Integer;
begin
//îïðåäåëåíèå èñõîäíûõ äàííûõ
K:=StrToFloat(Edit1.Text);
//Ïðîâåðêà çíàêà ïàðàìåòðà Ê
If K<=0 Then
begin
MessageDlg('çíà÷åíèå K äîëæíî áûòü áîëüøå 0',mtError,[mbOk],0);
ActiveControl:=Edit1;
Exit;
end;
T:=StrToFloat(Edit2.Text);
//Ïðîâåðêà çíàêà ïàðàìåòðà Ò
If T<=0 Then
begin
MessageDlg('çíà÷åíèå Ò äîëæíî áûòü áîëüøå 0!',mtError,[mbOk],0);
ActiveControl:=Edit2;
Exit;
end;
N:=StrToInt(ComboBox1.Text);
//ðàñ÷åò âñïîìîãàòåëüíûõ ïåðåìåííûõ
Step2:=Vr+step1;
Step1:=T/5;
//çàäàíèå íà÷àëüíûõ óñëîâèé
Series1.Clear;
Vr:=-step2;
//ðàñ÷¸ò âåñîâîé ôóíêöèè
For I:=1 To N Do
begin
Vr:=Vr+step2;
W:=0;
//îòîáðàæåíèå ðàñ÷åòà
With StringGrid1 do
begin
Cells[0,I]:=FloatToStrF(Vr,ffFixed,8,4);
Cells[1,I]:=FloatToStrF(W,ffFixed,8,4);
RowCount:=RowCount+1;
Series1.AddXY(Vr,W,'',clRed);
end;
end;
//çàäàíèå íà÷àëüíûõ óñëîâèé äëÿ âòîðîãî øàãà
Vr:=-step1;
For I:=1 To N Do
begin
Vr:=Vr+step1;
W:=K*(1/T)*sin(Vr/T);
//îòîáðàæåíèå ðàñ÷åòà
With StringGrid1 do
begin
Cells[0,I]:=FloatToStrF(Vr,ffFixed,8,4);
Cells[1,I]:=FloatToStrF(W,ffFixed,8,4);
RowCount:=RowCount+1;
Series1.AddXY(Vr,W,'',clRed);
end;
end;
//Ïîñòðîåíèå ãðàôèêà
For I:=1 To N Do
begin
Vr:=StrToFloat(StringGrid1.Cells[0,I]);
W:=StrToFloat(StringGrid1.Cells[1,I]);
Series1.AddXY(Vr,W,'',clRed);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
With StringGrid1 Do
begin
Cells[0,0]:='Âðåìÿ';
Cells[1,0]:='Âåñîâàÿ ôóíêöèÿ';
RowCount:=2;
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
Var
I,N:integer;
begin
N:=StrToInt(ComboBox1.Text);
For I:=1 To N Do
With StringGrid1 Do
begin
Cells[0,I]:=' ';
Cells[1,I]:=' ';
end;
Series1.Clear;
end;
procedure TForm1.Button3Click(Sender: TObject);
//çàïèñü â òåêñòîâûé ôàéë
//Îïðåäåëåíèå ïåðåìåííûõ
var
F:TextFile;
NameFile:String;
I,N:integer;
begin//1
//Ïðîâåðêà ñóùåñòâîâàíèÿ ðàñ÷åòà
IF StringGrid1.Cells[0,1]='' then
begin//2
MessageDlg('Íåò ðàñ÷åòà Âåñîâîé ôóíêöèè!',mtError,[mbOK],0);
exit;
end;//2
N:=StrToInt(ComboBox1.text);
if OpenDialog1.Execute then
begin//3
NameFile:=OpenDialog1.FileName;
AssignFile(F,NameFile);//Íàçíà÷èòü ôàéëó èìÿ ôàéëîâîé ïåðåìåííîé F
Rewrite (F);//Îòêðûòèå ôàéëà ñ èìåíåì F äëÿ çàïèñè
Writeln(F,' Âåñîâàÿ ôóíêöèÿ êîíñåðâàòèâíîãî çâåíà ');
Writeln(F);
Writeln(F,' Ïàðàìåòðû çâåíà:');
Writeln(F,' Êîýôôèöèåíò ïåðåäà÷è = ',edit1.Text);
Writeln(F,' Ïîñòîÿííàÿ âðåìåíè = ',edit2.Text);
Writeln(F);
Writeln(F,' Âðåìÿ ','Âåñîâàÿ ôóíêöèÿ');
With StringGrid1 do
For I:=1 To N do
Writeln(F,' ',cells[0,I],' ',cells[1,I]);
CloseFile(F);
//Ñîîáùåíèå î çàâåðùåíèè çàïèñè
MessageDlg(' Âåñîâàÿ ôóíêöèÿ çàïèñàíà â ôàéë',mtInformation,[mbOK],0);
end;//3
exit;
end;//1
end.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.