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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

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

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

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

Кафедра АТЭП

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

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

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

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

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

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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.