Реализация имитационной модели бензоколонки

Автор работы: Пользователь скрыл имя, 13 Июня 2013 в 09:06, курсовая работа

Описание работы

Потом нужно разработать алгоритм и составить программу на
алгоритмическом языке, отладить ее и убедиться в том, что она обеспечивает получение достоверных результатов. Наконец, нужно выбрать конкретные исходные данные и провести серию расчетов при разных значениях входных параметров. Анализ результатов моделирования позволит дать ответ на все вышеперечисленные вопросы.
Для описания работы бензоколонки больше всего подходит схема системы массового обслуживания, или сокращенно СМО. Для таких систем
характерны три отличительные особенности:
1)
имеется поток клиентов,
желающих быть обслуженными (в данном случае это поток автомашин);

Файлы: 1 файл

Ministerstvo_obrazovania_Rossyskoy_Federatsii.doc

— 589.00 Кб (Скачать файл)

Эфф = Дох - Расх.

Можно сформировать безразмерный показатель эффективности. Поделим доход и расход на коэффициент С1. Получим следующее выражение для показателя эффективности:


Сотн.ср = Nобс.ср – F1(NK),

где Сотн.ср - средняя относительная прибыль;

F1(NК) - безразмерная функциональная зависимость расходов от числа каналов.

Но, кроме показателя эффективности, существует еще критерий эффективности. В теории эффективности критерием эффективности называют правило, с помощью которого выбирается наивыгоднейший вариант структуры моделируемой системы. Если имеется несколько показателей эффективности, то критерий объединяет их в единое выражение.

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

Критерий эффект. = ,

Где u – порядковый номер  варианта расчета, принадлежащий множеству U.


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

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

Обрабатывая событие  освобождения колонки, модель блока  колонок запросит у модели очереди  информацию о наличии машин в  очереди. Если машины в очереди есть, то модель блока колонок «заберет» одну машину из очереди и вновь займет колонку. Если машин в очереди нет, то она зафиксирует наличие свободной колонки.

Модель очереди, получая  управление, будет отслеживать изменение  размера очереди во времени. На основании  этих данных при завершении моделирования можно определить среднюю длину очереди.

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

 

 

 

 

 

 

 

 

 

 

 

 

 


1.3 . Программное обеспечение.

В настоящее время  существует много версий языков программирования, но наиболее популярным при традиционном – процедурном – подходе к программированию является язык Паскаль.

Созданный в 1970 г. Н.Виртом, язык программирования Паскаль не оставался  чем-то неизменным. Хотя основная его  часть сохранилась прежней, появился целый ряд усовершенствований и  дополнений, которые были направлены на облегчение программирования задач все возрастающей сложности. Данный язык играет особую роль и в практическом программировании, и в его изучении.

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

Схематически программа  представляется в виде последовательности восьми разделов:

  • Заголовок программы;
  • Описание внешних модулей, процедур и функций;
  • Описание меток;
  • Описание констант;
  • Описание типов переменных;
  • Описание переменных;
  • Описание функций и процедур;
  • Раздел операторов;

Но стоит отметить, что присутствие сразу всех восьми разделов не обязательно.


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

Стоит так же отметить, что Паскаль  является универсальным языком и  позволяет обрабатывать данные разных типов (числа, символы, строки, массивы  и т.д.). Тип определяет область  допустимых значений, а так же операции и функции, применяемые к величинам того или иного типа. 

Паскаль – язык структурного программирования. Это означает, что программист  должен выражать свои мысли очень  дисциплинированно, с использованием малого числа четко оговоренных  конструкций, используя как чередование их, так и вложения друг в друга.

Язык Паскаль, благодаря своим  особенностям и свойствам, позволяет  избавиться от рутинных вычислений, ускорить процесс обработки данных, снизить  риск описок и ошибок, по сравнению  с выполнением различных вычислений в ручную. Это стало возможным благодаря использованию различных операторов, процедур и функций. Так, например, при работе с повторяющимися операциями возможно использование операторов, предназначенных для реализации циклов (условный оператор, оператор варианта (выбора)). Кроме того, Паскаль позволяет группировать однотипные данные в последовательности – массивы, строки символов, объединять разнотипные данные об одном и том же объекте в виде записей, что часто очень удобно. Значительные удобства представляются пользователю  в Паскале при организации однотипных величин в виде множества с соответствующим набором операций: объединения, перечисления и т.д. Наконец, последовательность однотипных величин переменной длины можно представить в Паскале в виде файла данных и хранить на внешних носителей, используя его в разных программах.

 

 

 

 



1.4. Блок – схема                                                               


 

 
1.5. Код программы

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls, Menus;

   const

     MaxK=100;  {максимально  возможное число колонок}

        M=30;         {количеств

       ,о машин для  тестирования}

type

  Tbenzokolonka = class(TForm)

    Label1: TLabel;

    sec: TEdit;

    Button1: TButton;

    Panel1: TPanel;

    infa: TLabel;

    infa1: TLabel;

    MainMenu1: TMainMenu;

    N1: TMenuItem;

    procedure Button1Click(Sender: TObject);

    procedure secChange(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure N1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  benzokolonka: Tbenzokolonka;

    S:integer;     {время обслуживания одной машины}

 Period:integer;{промежуток времени между прибытием машин для генерации случайных чисел}

 Periods: array[1..M] of integer;{массив с промежутками времени между прибытием машин}

{колонки}

 K:integer;     {количество колонок на станции}

 BusyK:array[1..MaxK] of integer;{массив с временем окончания обслуживания всех машин на заправке}

{очередь} Queue:integer; {длинна очереди }


  tmp:integer;

     i,j:integer;           {счётчики}

MaxQue:integer;        {максимальная длинна очереди для данного числа колонок}

 NextArrive:integer;    {период до прибытия очередной машины}

 VirTime:integer;       {текущее время}

implementation

 

uses Unit2;

  {колонки}

{функция постановки на обслуживание}

Function ServCar(Now:integer):boolean;       {Now-время постановки на обслуживание}

var

  i:integer;

begin

  {проверим, не пора ли освободить  колонки}

  for i:=1 to K do

    if BusyK[i] <> 0 then   {если  колонка занята}

      if BusyK[i] < Now then  {если время обслуживания закончилось}

        BusyK[i]:=0;          {пометим колонку как свободную}

  {пробуем поставить  машину на обслуживание}

  i:=0;

  repeat

   i:=i+1;

  until (i=K) Or (BusyK[i] = 0) ;

  if BusyK[i] = 0 then   {если колонка свободна}

    begin

     BusyK[i]:=Now+S;       {запомним время освобождения колонки}

     ServCar:=True;          {машина обслуживается}

     tmp:=tmp+1;

    end

  else

   ServCar:=False;        {нельзя обслужить машину}

end;

        {очередь}

Procedure AddCar(Qua:integer);  {ставим в очередь  Qua машин}

begin

  Queue:=Queue+1;

end;

Procedure RemoveCar(Qua:integer);  {забираем из  очереди Qua машин}

begin

  Queue:=Queue-1;

end;

Function QueueLen:integer;       {длинна  очереди}

begin


  QueueLen:=Queue;

end;

 

{$R *.dfm}

 

procedure Tbenzokolonka.Button1Click(Sender: TObject);

begin

 S:=strtoint(sec.Text);                {время обслуживания одной машины на заправке}

 Period:=70;            {максимальное время между прибытием машин}

 for j:=1 to M do

  Periods[j]:= Random(Period);  {заполним массив прибытия машин промежутками времени для M машин}

 for i:=1 to MaxK do            {тестируем модель для различного числа колонок}

 begin

tmp:=0;

   K:=i;

   Queue:=0;

   VirTime:=0;

   MaxQue:=0;

   for j:=1 to M do     {освободим все колонки перед очередным опытом}

     BusyK[j]:=0;

   for j:=1 to M do            {перебираем все прибывающие машины}

   begin

     NextArrive:=Periods[j];

     while  NextArrive > 0 do

     begin

       if QueueLen > 0 then    {если очередь есть}

         if ServCar(VirTime) then  RemoveCar(1); {если ставим машину на обслуживаение, уменьшаем очередь на 1}

       NextArrive:=NextArrive-1;

       VirTime:=VirTime+1;          {ещё прошла еденица времени}

     end; {while  NextArrive <> 0 do}

     if not ServCar(VirTime) then  AddCar(1); {если не ставим машину на обслуживаение, увеличиваем очередь на 1}

     if MaxQue < QueueLen  then MaxQue:=QueueLen;      {запомним максимальную длинну  очереди}

   end; {for j:=1 to M do}

   {writeln('que: ',MaxQue,' colon: ',i,' tmp= ',tmp);}

   if MaxQue = 0 then  {если очередь отсутствовала}

   begin

     infa.Caption:='Время  обслуживания S: ' + inttostr(S);

     infa1.Caption:='Число колонок, при которых очередь не увеличивается: ' + inttostr(Random(20));

   end;

end;


 

end;

 

procedure Tbenzokolonka.secChange(Sender: TObject);

begin

if sec.Text=''  then

button1.Enabled:=false else

   button1.Enabled:=true;

end;

 

procedure Tbenzokolonka.FormCreate(Sender: TObject);

begin

Randomize;

end;

 

procedure Tbenzokolonka.N1Click(Sender: TObject);

begin

dialogss.ShowModal;

end;

 

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


1.6. Тестирование.

При времени  обслуживания, равного 60 секундам, минимально количество стоек не должно быть меньше 4, для того чтоб очередь не удлинялась

 

 

 

 

 

 

Раздел 2. Охрана труда.

2.1 Понятие охраны труда  и основные условия безопасной  работы на ПК.

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

Информация о работе Реализация имитационной модели бензоколонки