СИМУЛА - универсальный процессо-ориентированный язык моделирования, страница 15

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

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

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

Программное моделирование работы карьера

В карьере работает один экскаватор, который нагружает машины различной грузоподъемности. Машины подъезжают в карьер через случайные промежутки времени, равномерно распределенные в интервале от 7 до 12 минут. Время, затрачиваемое машиной на подъезд к экскаватору и отъезд от экскаватора, и грузоподъемность машин также случайные величины, распределенные равномерно в интервалах  [20,30] и [3,5], соответственно. Экскаватор тратит на погрузку одной тонны породы 2 минуты. Время прибытия машин в карьер носит случайный характер и распределено равномерно в пределах  [10,20].

Необходимо промоделировать данную систему с целью получения  загрузки самосвала, объема груза за смену и среднее время пребывание самосвалов в карьере в течение 8 ч.

Описание классов

Объект «машина»

Правила поведения объекта «машина»:

1.  Машина подъезжает к экскаватору и встает в очередь на погрузку.

2.  Экскаватор загружает машину по очереди.

3.  Загруженная машина уезжает от экскаватора и покидает систему.

Описаниекласса «машина»

Process  CLASS Car (TimeCarIn,GrCar,TimeCarout);

comment Car - имя класса;

comment Описание формальных параметров;

comment TimeCarIn,GrCar,TimeCarout - формальные параметры;

comment TimeCarIn - время подъезда к экскаватору;

comment GrCar - грузоподъемность;

comment TimeCarOut - время отъезда от экскаватора;

Real TimeCarIn,TimeCarOut;

Integer GrCar;

Begin

comment   Описание переменных класса "машина";

comment  TimeCarSys - время входа машины в систему;

real TimeCarSys;

comment Запоминание времени входа в систему;

TimeCarSys:=TIME;

comment  Задержка на время подъезда к экскаватору;

HOLD(TimeCarIn);

comment  Машина встает в очередь и активизирует экскаватор;

INTO(HeadCar);

ACTIVATE Eks;

comment Машина ожидает загрузки в очереди;

PASSIVATE;

comment Загруженная машина уезжает из системы;

HOLD(TimeCarOut);

GrAll:=GrAll+GrCar;

TimeCarAll:=TimeCarAll+(TIME-TimeCarSys);

end;

Объект «экскаватор»

Правила поведения объекта «экскаватор»:

1.  Если в очереди есть машины, экскаватор выбирает первую машину из очереди.

2.  Экскаватор загружает машину.

3.  Загруженная машина уезжает от экскаватора и покидает систему.

4.  Если в очереди нет машин, экскаватор переходит в режим простоя до тех пор, пока не приедет машина.

Описание класса «экскаватор»

Process  CLASS Ekskavator(PrEks);

comment  Ekskavator - имя класса;

comment Описание формальных параметров;

comment PrEks - производительность экскаватора;

integer PrEks;

Begin

comment   Описание переменных класса "экскаватор";

comment  TimeEksStart - время начала простоя;

comment  TimeEksProstoy - простой экскаватора;

real TimeEksStart,TimeEksProstoy;

comment описание ссылочной переменной на машину;

ref(Car) M;

comment Сначала простой равен времени начала работы экскаватора;

TimeEksProstoy:=TIME;

comment  Работа экскаватора;

comment Выбираем из очереди первую машину;

Work: FOR M:-HeadCar.First WHILE M=/=NONE DO

Begin

comment  Удаляем машину из очереди;  

M.out;