на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Моделирование работы цеха
разделение некоторой общей проблемы на несколько меньших по объему и сложности частей;

- уменьшение объема программы за счет программирования многократно применяемых программных действий в виде отдельной процедуры или функции;

- облегчение чтения текста программы;

- облегчение работы с программой, ввиду ее наглядности;

- универсализация программных модулей, то есть при возможности полученное решение частной проблемы обобщается, чтобы его можно было использовать в других задачах.

Благодаря операторам, процедурам и функциям языка возможно написание ряда сложных и разнообразных по структуре, применению и выполняемым функциям программ.

2.2. Описание логической структуры.

В данной программе был использован метод объектного программирования. Суть его заключается в оформлении последовательностей команд как замкнутых функций и/или процедур и в объединении данных, связанных по смыслу, в сложные структуры данных. Рассмотрим кратко процедуры и функции, которые использовались при написания программы:

procedure TForm1.FormCreate - осуществляет инициализацию моделируемой системы, т.е. происходит инициализация всех переменных;

procedure TForm1.Timer2Timer - генерирует в произвольные (распределённые по экспоненциальному закону) моменты времени поступление новых деталей (заявок);

procedure TForm1.Timer1Timer - основная процедура программы - моделирует обработку деталей на станках и обеспечивает в определённые моменты времени вызов процедур перевода деталей из накопителя в станок и наоборот;

procedure TForm1.N3Click - приостанавливает моделирование;

procedure TForm1.N11Click - обнуление всех переменных и всех значений (количество всех деталей, бракованных и т.д.);

procedure TForm1.N10Click - выводит на экран форму "Параметры", в которой можно изменять различные системные значения (максимально возможное количество брака, время обработки деталей на каждом станке и т.д.);

procedure TForm1.Q1Click - выводит на экран форму с Q-схемой;

procedure TForm1.N5Click -выводит на экран форму с А-схемой;

procedure TForm1.N7Click -показывает на экране задание курсового проекта;

procedure TForm1.N8Click - выводит на экран форму со справкой о программе;

procedure TForm4.FormClose - используется для инициализации всех изменений на форме "Параметры";

procedure TForm1.N9Click - выход из программы.

Процедуры и функции пользователя:

function where_go - определяется куда пойдёт деталь после обработки на станках первичной обработки - в накопитель Н1 или вернётся назад в накопитель Н0 если брак);

procedure prov_nak - процедура проверки наличия деталей в накопителях;

procedure add_new - процедура создания и инициализации новой детали (заявки);

procedure run - переводит детали (заявки) из станков (приборов) в накопители и наоборот.

Рассмотрим более подробно основной цикл программы. В этом цикле осуществляются следующие действия:

а) Если очередной момент времени равен моменту поступления детали в накопитель Н0, то в накопитель Н0 добавляется 1 деталь. Затем вычисляется случайным образом и запоминается время поступления следующей детали.

б) Если очередь не пуста и станок №1 или станок №2 свободен, то уменьшается счетчик очереди и вычисляется время обработки детали. В это время станок находится в состоянии занят.

в) Если общее время моделирования равно времени обработки детали, то станок освобождается и с некоторой (различной для разных станков) вероятностью деталь отправляется во второй накопитель или возвращается на повторную обработку, если брак. После этого для этого станка повторяется пункт б).

г) Если деталь поступила в накопитель Н1, то увеличивается счётчик элементов очереди.

д) Если станок №1 повторной обработки свободен, то деталь поступает на свободный станок, а счетчик элементов очереди уменьшается на 1. Иначе если в очереди больше трёх деталей, то подключается ещё один станок. Если же оба станка заняты, то ожидается освобождение одного из них.

После запуска на экран монитора будет выведено основное рабочее окно программы. Интерфейс программы содержит в верхней части меню пользователя, в котором содержатся пункты, позволяющие вывести сведения о программе и разработчике, просмотреть задание моделирования, произвести запуск, приостановление и продолжение моделирования работы цеха, просмотреть Q-схему и A-схему задачи, а также осуществить выход из программы.

2.3. Используемые технические средства, вызов и загрузка.

Для успешной работы с представленной программой "Моделирование работы цеха" необходим персональный компьютер на базе микропроцессора Intel 80586 и выше, VGA совместимая видеокарта, накопитель на жестком или гибком магнитном диске. Требования к операционной системе ограничены требованиями компилятора языка Delphi версии 6.0, то есть Windows 98 и выше.

Исходный текст программы находится в файлах под именами Progr1.pas, Progr2.pas, Progr3.pas, Progr4.pas, которые занимают соответственно 10 938, 622, 788, 2 383 байт, а исполняемый модуль под именем Kurs_project.exe - 1 067 088 байт.

Для запуска программы необходимо загрузить Windows и запустить указанный исполняемый файл Kurs_project.exe.

2.4. Входные и выходные данные.

К входным данным относятся данные, которые могут изменяться пользователем - время обработки заявок на каждом станке, максимально возможный процент брака и общая скорость моделирования.

К выходным данным следует отнести информацию, выводимую в процессе функционирования процесса моделирования:

- общее количество заявок;

- количество заявок, возвращённых на повторную обработку(первичный брак);

- количество деталей, которые попали в разряд бракованных дважды.

Следует отметить, что выполнение данной программы возможно лишь в случае наличия на компьютере всех необходимых технических средств.

2.5. Контрольный пример.

Для времени моделирования, равному поступлению 500 заявок, состояние системы (все параметры - по умолчанию):

- общее количество заявок - 500;

- количество деталей, возвращённых на повторную обработку - 31;

- количество бракованных деталей - 3.

2.6. Инструкция пользователю.

Работа с программой не представляет особой сложности даже для пользователя, не имеющего большого опыта работы с персональным компьютером. После запуска программы на экране появляется главное окно программы.

Данная программа представляет собой модель процесса обработки 500 деталей в цехе с использованием четырех станков, два из которых ведут первичную обработку деталей, остальные два - вторичную.

Программа запускается с помощью вызова исполняемого файла Kurs_project.exe в операционной системе Windows 98 или выше. На экране появится окно с изображением модели цеха.

Для того, чтобы запустить программу, необходимо выполнить команду Запуск меню Выполнение. Для остановки работы программы следует выполнить команду Стоп меню Выполнение. В этом же меню находится команда Параметры, которая позволяет установить вывод в окне статистики выполнения программы и текущего времени, а также команды Сброс и Выход, позволяющие, соответственно, "сбросить" данные и выйти из программы. При выходе из программы с помощью команды Выход меню Выполнение появляется окно с вопросом о подтверждении выхода из программы. Из программы можно выйти также с помощью нажатия соответствующей кнопки в правом верхнем углу окна программы.

Для того, чтобы просмотреть информацию о программе, необходимо выполнить команду О программе меню Справка. В этом же меню можно просмотреть задание, выбрав соответствующую команду.

В меню Схемы находятся команды, позволяющие выводить на экран соответственно Q-схему и A-схему программы.

3. ТЕКСТ ПРОГРАММЫ.

3.1. Модуль 1.

unit Progr1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ExtCtrls, StdCtrls, Spin, Menus;

type

TForm1 = class(TForm)

P1_4: TPanel;

P2_4: TPanel;

P2_3: TPanel;

P1_3: TPanel;

P1_1: TPanel;

pb1: TProgressBar;

pb2: TProgressBar;

Panel8: TPanel;

Panel9: TPanel;

Panel10: TPanel;

Panel11: TPanel;

pb3: TProgressBar;

Panel14: TPanel;

pb4: TProgressBar;

Panel15: TPanel;

Panel16: TPanel;

Panel17: TPanel;

Panel18: TPanel;

Memo2: TMemo;

Memo3: TMemo;

Memo4: TMemo;

Memo5: TMemo;

Timer1: TTimer;

pb_start: TProgressBar;

Timer2: TTimer;

P1_2: TPanel;

P2_1: TPanel;

P2_2: TPanel;

Panel5: TPanel;

Panel21: TPanel;

Panel24: TPanel;

Panel25: TPanel;

Panel26: TPanel;

Panel27: TPanel;

Panel28: TPanel;

Panel31: TPanel;

Label1: TLabel;

Label3: TLabel;

Label2: TLabel;

Label4: TLabel;

p1: TPanel;

p2: TPanel;

Panel34: TPanel;

Panel35: TPanel;

Panel36: TPanel;

Panel38: TPanel;

Panel40: TPanel;

Panel41: TPanel;

Panel42: TPanel;

Panel44: TPanel;

Panel45: TPanel;

Panel12: TPanel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

indicator1: TProgressBar;

indicator2: TProgressBar;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

Q1: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

Label11: TLabel;

Label12: TLabel;

Label13: TLabel;

Label14: TLabel;

Label15: TLabel;

Label16: TLabel;

Label17: TLabel;

Bevel1: TBevel;

Panel1: TPanel;

procedure Timer2Timer(Sender: TObject);

procedure add_new(ad:byte);

procedure FormCreate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure Q1Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N10Click(Sender: TObject);

procedure N8Click(Sender: TObject);

private { Private declarations }

public { Public declarations }

end;

var

Form1: TForm1;

t1,t2:byte;

ustanov,zapusk,ripit,

zanyat1,zanyat2,zanyat3,zanyat4:boolean;

have1,have2,have_povtor:boolean;

TotalTime,TotalMessages,

LostMessages,RepeatMessages:longint;

brak1,brak2,time1,time2,time3,time4,zadergka:byte;

implementation

uses Progr2, progr3, Progr4;

{$R *.DFM}

function where_go(w:byte):boolean;

var x:integer;

begin if (w=1)then begin

x:=trunc(random(100));

if (x>brak1)and(RepeatMessages<(5*(brak1+brak2))) then where_go:=true;end;

if (w=2)then begin

x:=trunc(random(100));if (x>brak2)and(RepeatMessages<(5*(brak1+brak2))) then where_go:=true;end;

end;

procedure prov_nak; {процедура проверки пустоты накопителей}

begin

have1:=false;have2:=false;have_povtor:=FALSE;

if strtoint(form1.label6.caption)>=1 then have1:=true;

if strtoint(form1.label8.caption)>=1 then have2:=true;

if strtoint(form1.label10.caption)>=1 then have_povtor:=true;

end;

procedure Tform1.add_new(ad:byte);

begin

if ad=1 then begin

label6.caption:=inttostr(strtoint(label6.caption)+1);

indicator1.Position:=strtoint(label6.caption)*10;

end

else begin

label8.Caption:=inttostr(strtoint(label8.Caption)+1);

indicator2.Position:=strtoint(label8.Caption)+2;

end;

end;

procedure run;

{переводит заявки из приборов в накопители и наоборот}

begin

if have1 then

if not(zanyat1) then

begin

form1.pb1.Max:=time1+round(random(80));{время обработки задания}

form1.pb1.Position:=2;

form1.label6.Caption:=inttostr(strtoint(form1.label6.Caption)-1);

form1.indicator1.Position:=strtoint(form1.label6.Caption)*10;

zanyat1:=true;prov_nak;end;

if have_povtor then if not(zanyat2) then

begin form1.pb2.Max:=time2+round(random(80));

form1.pb2.Position:=2; form1.label10.Caption:=inttostr(strtoint(form1.label10.Caption)-1);

zanyat2:=true;ripit:=true;prov_nak;end;

if have1 then

if not(zanyat2) then

begin

form1.pb2.Max:=time2+round(random(80)); form1.pb2.Position:=2;

form1.label6.Caption:=inttostr(strtoint(form1.label6.Caption)-1);

form1.indicator1.Position:=strtoint(form1.label6.Caption)*10;

zanyat2:=true;

prov_nak; end;

if (have2) and(not(zanyat3)) then

begin

form1.pb3.Max:=time3+round(random(80)); form1.pb3.Position:=2;

form1.label8.Caption:=inttostr(strtoint(form1.label8.Caption)-1);

form1.indicator2.Position:=form1.indicator2.Position-2;

zanyat3:=true;prov_nak;end;

if (strtoint(form1.label8.caption)>3) and( not(zanyat4)) then

begin

form1.pb4.Max:=time4+round(random(80)); form1.pb4.Position:=2;

form1.label8.Caption:=inttostr(strtoint(form1.label8.Caption)-1);

form1.indicator2.Position:=form1.indicator2.Position-2;

zanyat4:=true;

prov_nak;

end;

end;

procedure TForm1.Timer2Timer(Sender: TObject);

var t:real;

i:integer;

begin

if (zapusk)and(TotalMessages<500) then

begin

if not(ustanov)then

begin

t1:=5+trunc(random(10));

ustanov:=true;

zapusk:=ustanov;

t2:=0;

end

else

if t2=t1 then

begin

t:=0;

for i:=1 to 1000 do

begin

pb_start.Position:=(pb_start.Position+trunc(t));

t:=t+0.01;

end;

add_new(1);

inc(TotalMessages);{количество всех сообщений пришедших в систему}

pb_start.Position:=0;

t2:=0;

ustanov:=false;

end

else inc(t2);

prov_nak;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

randomize;

label1.Caption:='Ждёт';label2.Caption:='Ждёт';

label3.Caption:='Ждёт';label4.Caption:='Ждёт';

zanyat1:=false;zanyat2:=false;zanyat3:=false;

zanyat4:=false;

brak1:=4;brak2:=8;time1:=40;time2:=60;

time3:=100;time4:=100;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

if zapusk then begin

if pb1.Position=pb1.max then begin

pb1.Position:=0;zanyat1:=false;

label1.Caption:='Ждёт';

if where_go(1)then add_new(2)

else

if RepeatMessages<((brak1+brak2)*5) then

begin

label10.Caption:=inttostr(strtoint(label10.Caption)+1);

inc(RepeatMessages);

end

else add_new(2);

end;

if pb2.Position=pb2.max then

begin

pb2.Position:=0;zanyat2:=false;label2.Caption:='Ждёт';

if where_go(2)then add_new(2)

else

if (ripit)and(LostMessages<trunc(RepeatMessages*brak2)/100) then

begin

p1.Color:=clred;p2.Color:=clred;

p1.Color:=$00400040;p2.Color:=$00400040;

ripit:=false;

inc(LostMessages);

end

else

if RepeatMessages<((brak1+brak2)*5) then

begin

label10.Caption:=inttostr(strtoint(label10.Caption)+1);

inc(RepeatMessages);

end

else add_new(2);

end;

if pb3.Position=pb3.max then

begin pb3.Position:=0;zanyat3:=false;label3.Caption:='Ждёт';end;

if pb4.Position=pb4.max then

begin pb4.Position:=0;zanyat4:=false;label4.Caption:='Ждёт';end;

if pb1.Position>0 then

begin pb1.Position:=pb1.Position+7;label1.Caption:='Выполняет';end;

if pb2.Position>0 then

begin pb2.Position:=pb2.Position+7;label2.Caption:='Выполняет';end;

if pb3.Position>0 then

begin pb3.Position:=pb3.Position+7;label3.Caption:='Выполняет';end;

if pb4.Position>0 then

begin pb4.Position:=pb4.Position+7;label4.Caption:='Выполняет';end;

run;

label12.Caption:=inttostr(TotalMessages);

label14.Caption:=inttostr(RepeatMessages);

label16.Caption:=inttostr(LostMessages);

end;

label17.Caption:=timetostr(time);

end;

procedure TForm1.N2Click(Sender: TObject);

begin

zapusk:=true;

n2.enabled:=false;

n3.enabled:=true;

end;

procedure TForm1.N3Click(Sender: TObject);

begin

zapusk:=false;

n2.enabled:=true;

n3.enabled:=false;

end;

procedure TForm1.N11Click(Sender: TObject);

begin

n2.Enabled:=true;

TotalMessages:=0;

LostMessages:=0;

RepeatMessages:=0;

label6.Caption:='0';

label8.Caption:='0';

label10.Caption:='0';

indicator1.Position:=0;

indicator2.Position:=0;

pb1.Position:=0;pb2.Position:=0;

pb3.Position:=0;pb4.Position:=0;

have1:=false;have2:=false;ripit:=false;

zanyat1:=false;zanyat2:=false;

zanyat3:=false;zanyat4:=false;

TotalTime:=0;TotalMessages:=0;

randomize;

end;

procedure TForm1.N9Click(Sender: TObject);

var c:integer;

begin

c:=application.MessageBox(pchar('Вы уверены в том что хотите завершить работу ???'),pchar('Предупреждение'),4);

if c=6 then halt;

end;

procedure TForm1.Q1Click(Sender: TObject);

begin

form2.PageControl1.ActivePage:=form2.PageControl1.Pages[0] ;

form2.ShowModal;

end;

procedure TForm1.N5Click(Sender: TObject);

begin

form2.PageControl1.ActivePage:=form2.PageControl1.Pages[1] ;

form2.ShowModal;

end;

procedure TForm1.N7Click(Sender: TObject);

begin

form3.PageControl1.ActivePage:=form3.PageControl1.Pages[0];

form3.showmodal;

end;

procedure TForm1.N10Click(Sender: TObject);

begin

form4.showmodal;

end;

procedure TForm1.N8Click(Sender: TObject);

begin

form3.PageControl1.ActivePage:=form3.PageControl1.Pages[1];

form3.showmodal;

end;

end.

3.2. Модуль 2.

unit Progr2;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ExtCtrls, ComCtrls;

type

TForm2 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

Image1: TImage;

Image2: TImage;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

public

end;

var

Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.Button1Click(Sender: TObject);

begin

form2.Close;

end;

end.

3.3. Модуль 3.

unit Progr3;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls;

type

TForm3 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

Memo1: TMemo;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

public

end;

var Form3: TForm3;

implementation

{$R *.DFM}

procedure TForm3.Button1Click(Sender: TObject);

begin form3.Close;

end;

end.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ.

1. Курс лекций по дисциплине "Основы теории систем и системного анализа" /Преподаватель - В.О.Костин/: ХГТУ: сентябрь - декабрь 2004 г.

2. Костін В.О. Методичні вказівки до виконання курсового проекту з дисципліни "Основи системного аналізу об'єктів і процесів комп'ютеризації". - Херсон: ХДТУ, 2004. - 26 с.

3. Костин В.О., Ходаков В.Е. Учебный терминологический русско-украинско-английский словарь. - Херсон: ХГТУ, 2002.

4. Советов В.Я., Яковлев С.А. Моделирование систем. - М.:Высшая школа, 1988.

5. Советов В.Я., Яковлев С.А. Моделирование систем: Курсовое проектирование. - М.:Высшая школа, 1988.

6. Советов В.Я., Яковлев С.А. Моделирование систем: Лабораторный практикум. - М.:Высшая школа, 1988.

7. Ивахненко А. Г., Лапа В.Г. Предсказание случайных процессов. К.: "Наукова думка", 1971.

8. Мамиконов А.Г. Основы построения АСУ: Учебник для вузов. - М.: Высш. школа, 1981.

9. Рубенкинг Нейл Дж. Программирование в Delphi для "чайников". 2-е издание -- К.: "Диалектика", 1996. -- 368с.

Приложение А.

Экранная форма программы.

Приложение Б.

Блок-схема программы.

Рисунок Б.1.

Приложение В.

Q-схема программы.

Рисунок В.1.

Приложение Г.

А-схема программы.

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.