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

TimeEksProstoy:=TIME;

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

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

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

Begin

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

M.out;

comment  Загружаем машину;

HOLD(M.GrCar*PrEks);

comment  Отправляем загруженную машину;

ACTIVATE  M;

End;

comment  Запоминаем время начала простоя экскаватора;

TimeEksStart:=Time;

comment  Экскаватор простаивает;

PASSIVATE;

comment Приехала машина. Конец простоя экскаватора;

TimeEksProstoy:=TimeEksProstoy+(Time-TimeEksStart);

GOTO  Work;

End;

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

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

1.  До времени окончания моделирования создавать объекты «машина» с соответствующими параметрами через случайные промежутки времени.

Описание класса «генератор машин»

Process  CLASS Generator;

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

Begin

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

comment  TCarIn - время подъезда машины к экскаватору;

comment  TCarOut - время отъезда машины от экскаватора;

Real TCarIn, TCarOut;

comment GCar -грузоподъемность машины;

comment ColCar -количество созданных  машин;

Integer GCar, ColCar;

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

ref(Car) Mnew;

comment Сначала количество машин равно нулю;

ColCar:=0;

WHILE (TIME<=Tmod)

DO

Begin

comment Получение случайных величин, распределенных по          равномерному закону, для времени подъезда и для                             времени отъезда машины;                           

TCarIn:=UNIFORM(A_TCarIn,B_TCarIn,U_TCarIn);

TCarOut:=UNIFORM(A_TCarOut,B_TCarOut,U_TCarOut);

comment Получение случайной величины, распределенной по          равномерному закону для целых чисел, для грузоподъемности машины;                           

GCar:=RANDINT(A_GCar,B_GCar,U_GCar);

comment Создание новой машины;

Mnew:- NEW Car(TCarIn,GCar,TCarOut);

comment Машина поехала;

ColCar:=ColCar+1;

ACTIVATE Mnew;

comment  Через случайное время появится новая машина;

HOLD(UNIFORM(A_Mnew,B_Mnew,U_Mnew));

End;

End;

Текст программы

Begin

comment Описание глобальных переменных;

comment Границы случайного равномерного распределения времени подъезда машин к экскаватору;

real  A_TCarIn, B_TCarIn;

comment Границы случайного равномерного распределения времени отъезда машин от экскаватора;

real A_TCarOut, B_TCarOut;

comment Границы случайного равномерного целого распределения                

грузоподъемности;

integer A_GCar, B_GCar;

comment Границы случайного равномерного распределения времени  появления машин в системе;

real A_Mnew,B_Mnew;

comment Базовые числа для получения распределения;

integer  U_TCarIn, U_TCarOut, U_GCar, U_Mnew;

comment Время моделирования;

real Tmod;

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

integer Proiz_Eks;

comment Задание начальных значений;

A_TCarIn:=20.0;

B_TCarIn:=30.0;

A_TCarOut:=20.0;

B_TCarOut:=30.0;

A_GCar:=3;

B_GCar:=5;

A_Mnew :=10.0;

B_Mnew :=20.0;

U_TCarIn:=3;

U_TCarOut:=7;

U_GCar:=13;

U_Mnew :=17;

Proiz_Eks:=2;

Tmod :=480.0;

comment Блок моделирования;

SIMULATION

Begin

comment    Описание переменных блока моделирования;

comment Эскаватор;

Ref (Ekskavator) Eks;

comment Генератор;

Ref (Generator) Gen;

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

Ref (Head) HeadCar;     

comment  Общее количество груза;

Integer GrAll;

comment Общее время пребывания машин в системе;

Real TimeCarAll;

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

comment Класс "машина";

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 Запоминание времени входа в систему;