Имитационное моделирование Весовой Функции консервативного звена. Математическое описание задачи

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

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

Содержание работы

                        МИНИСТЕРСТВО ОБРАЗОВАНИЯ РФ

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

Университет Растительных Полимеров

Кафедра АТЭП

Самостоятельная работа

По дисциплине: «Моделирование систем»

На тему: «Имитационное моделирование Весовой

Функции консервативного звена»

Выполнил:                                                студент гр.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.

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

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