Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание_7.pdf
Скачиваний:
26
Добавлен:
15.03.2015
Размер:
679.27 Кб
Скачать

Переменная kolJ введена для счета количества обработанных транспортов. Переменная TimeSum введена для счета суммарного времени обработки всех транспортов. По значениям этих переменных рассчитывается среднее время обработки TimeObr одного транспорта.

В последующем для определения количественных значений каждой из этих переменных мы напишем соответствующие Javaкоды.

7.2.2. Событийная часть модели

Объекты событийной части модели показаны на рис. 7.3.

Для построения использованы следующие двадцать объектов библиотеки Enterprise Library (в скобках после имени каждого объекта указано их количество в событийной части модели):

source (один); queue (восемь); delay (восемь); split (один); match (один); sink (один).

Создадим событийную часть модели. Для неё мы уже создали область присмотра с именем Модель_Терминал и перетащили элемент Прямоугольник, в котором и разместим все элементы.

1.Перетащите объект source. Установите его свойства согласно табл. 7.2.

2.Создайте нестандартный класс заявки Car с полями:

int id; double vxod;

Дополнительное поле id нестандартного класса заявки Car введено для проверки объектом match условия объединения двух заявок в одну.

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

вать объект TimeMeasureStart вместе с TimeMeasureEnd

для определения того же времени.

Перетащите остальные объекты, соедините так, как показано на рис. 7.3. Последовательно выделяя эти объекты, установите их свойства согласно табл. 7.3.

343

344

Таблица 7.2

Свойства объекта source

Имя

 

Свойства

 

Значения

 

 

 

 

 

 

поток_

 

Отображать имя

 

Установите флажок

транс-

 

Класс заявки

 

Car

порта

 

Заявки прибывают

 

Времени между прибытиями

 

 

согласно

 

 

 

Время между

 

exponential(1/timeA)

 

 

прибытиями

 

 

 

Количество заявок,

 

 

 

 

прибывающих за

 

1

 

 

один раз

 

 

 

Новая заявка

 

new Car()

 

 

Действие при

 

entity.id =

 

 

выходе

 

поток_транспорта.count();

 

 

 

 

 

entity.vxod = time();

 

 

 

 

 

Таблица 7.3

 

 

Свойства объектов событийной части модели

 

 

 

 

Свойства

 

 

Значение

 

 

 

 

Имя

 

 

очередь_на_D_

Отображать имя

 

Установить флажок

Класс заявки

 

 

Car

Максимальная вместимость

 

Установить флажок

Включить сбор статистики

 

Установить флажок

Имя

 

 

парковка_D_

Отображать имя

 

Установить флажок

Класс заявки

 

 

Car

Задержка задается

 

Явно

Время задержки

 

exponential(1/timeD)

Вместимость

 

 

D_

Включить сбор статистики

 

Установить флажок

Имя

 

 

очередь_в_офис_E_

Отображать имя

 

Установить флажок

Класс заявки

 

 

Car

Вместимость

 

 

10

Действие при подходе

 

if (очередь_E <

к выходу

 

 

очередь_в_офис_E_.size())

 

 

 

 

очередь_E =

 

 

 

 

очередь_в_офис_E_.size();

Включить сбор статистики

 

Установить флажок

345

 

Продолжение табл. 7.3

Имя

оформл_докум_в_офисе_Е_

Отображать имя

Установить флажок

Класс заявки

Car

Задержка задается

Явно

Время задержки

exponential(1/timeE)

Вместимость

E_

Включить сбор статистики

Установить флажок

Имя

отправка_заявки_в_Z

Отображать имя

Установить флажок

Класс заявки

Car

Количество копий

1

Новая заявка (копия)

new Car

Действие при выходе копии

entity.id = original.id;

 

entity.vxod = original.vxod;

Имя

очередь_в_зону_Z_

Отображать имя

Установить флажок

Класс заявки

Car

Вместимость

100

Действие при подходе

if (очередь_Z < оче-

к выходу

редь_в_зону_Z_.size())

 

очередь_Z =

 

очередь_в_зону_Z_.size();

Включить сбор статистики

Установить флажок

Имя

выполн_заявки_в_зоне_Z_

Отображать имя

Установить флажок

Класс заявки

Car

Задержка задается

Явно

Время задержки

exponential(1/timeZ)

Вместимость

ZP_

Включить сбор статистики

Установить флажок

Имя

фиксация_выполн_заявки_в_Z_

Отображать имя

Установить флажок

Класс заявки

Car

Условие соответствия

entity1.id == entity2.id

Вместимость 1

100

Вместимость 2

100

Действие при выходе 1

entity.id = 0;

Действие при выходе 2

if (очередь_I < фикса-

 

ция_выполн_заявки_в_Z_.size2())

 

очередь_I = фикса-

 

ция_выполн_заявки_в_Z_.size2();

Имя

очередь_к_воротам_F_

Отображать имя

Установить флажок

346

Класс заявки

Car

Максимальная вместимость

Установить флажок

Включить сбор статистики

Установить флажок

Имя

полосы_у_ворот_F_

Отображать имя

Установить флажок

Класс заявки

Car

Вместимость

F_

Действие при подходе

if (очередь_F < поло-

к выходу

сы_у_ворот_F_.size())

 

очередь_F =

 

полосы_у_ворот_F_.size();

Включить сбор статистики

Установить флажок

Имя

досмотр_у_ворот_F_

Отображать имя

Установить флажок

Класс заявки

Car

Задержка задается

Явно

Время задержки

exponential(1/timeF)

Вместимость

F_

Имя

queue1

Отображать имя

Сбросить флажок

Класс заявки

Car

Вместимость

100

Включить сбор статистики

Установить флажок

Имя

движение_от_F_к_Н_

Отображать имя

Установить флажок

Класс заявки

Car

Задержка задается

Явно

Время задержки

exponential(1/timeFH)

Вместимость

10

Включить сбор статистики

Установить флажок

Имя

обслуж_в_зоне_I_

Отображать имя

Установить флажок

Класс заявки

Car

Задержка задается

Явно

Время задержки

exponential(1/timeI)

Вместимость

I_

Включить сбор статистики

Установить флажок

Имя

queue

Отображать имя

Сбросить флажок

Класс заявки

Car

Вместимость

100

Включить сбор статистики

Установить флажок

Имя

движение_от_I_к_J_

347

Отображать имя

Установить флажок

Класс заявки

Car

Задержка задается

Явно

Время задержки

exponential(1/timeIJ)

Вместимость

10

Включить сбор статистики

Установить флажок

Имя

очередь_на_ворот_J_

Отображать имя

Установить флажок

Класс заявки

Car

Вместимость

10

Действие при подходе

if (очередь_J < оче-

к выходу

редь_на_ворот_J_.size())

 

очередь_J = оче-

 

редь_на_ворот_J_.size();

Включить сбор статистики

Установить флажок

Имя

осмотр_на_ворот_J_

Отображать имя

Установить флажок

Класс заявки

Car

Задержка задается

Явно

Время задержки

exponential(1/timeJ)

Вместимость

J_

Поясним необходимость и целесообразность применения некоторых объектов. В модели заявка имитирует транспорт. Объект split предназначен для расщепления одной заявки в нашей модели на две заявки. Одна поступает, как документ, в зону Z, а вторая, как транспорт, продолжает движение. Когда в зоне Z необходимые для обработки транспорта действия выполнены (подготовлены документы), объект match фиксирует этот момент, то есть синхронизирует дальнейшее движение транспорта. Вторая заявка направляется в объект sink и уничтожается. Как известно, объединить две заявки в одну (а значит не использовать объект sink) можно с п о- мощью объекта combine. Однако в нашем случае combine использовать нельзя, так как он не проверяет выполнение у заявок условий, необходимых для их уничтожения. Поэтому могут быть объединены различные заявки. Объект match проверяет условия объединения, установленные в нашем случае разработчиком модели в дополнительном поле id нестандартного класса заявки Car (entity1.id == entity2.id), именно двух заявок в одну. То есть синхронизации движения заявки как документа и заявки как автомобиля при применения объекта combine не обеспечивается.

В табл. 7.4 указаны свойства объекта sink.

348

Таблица 7.4

Свойства

 

Значение

 

 

 

Имя

выход_J

 

Отображать

Установить флажок

имя

Car

 

Класс заявки

 

Действие при

if (entity.id != 0){

входе

kolJ ++ ;

= kolJ/10000;

 

KolObrCar

 

KoefIsp =

kolJ/поток_транспорта.count();

 

TimeSum += (time() - entity.vxod);

 

TimeObr =

TimeSum / kolJ;

 

KoefIsp_E

=

 

оформл_докум_в_офисе_E_.statsUtilization.

 

mean();

=

 

KoefIsp_F

 

досмотр_у_ворот_F_.statsUtilization.mean();

 

KoefIsp_Z

=

 

выполн_заявки_в_зоне_Z_.statsUtilization.

 

mean();

=

 

KoefIsp_I

 

обслуж_в_зоне_I_.statsUtilization.mean();

 

KoefIsp_J

=

 

осмотр_на_ворот_J_.statsUtilization.mean();}

Остановимся на коде свойства Действие при входе. Заявки с выхода 1 объекта match можно было бы не направлять на этот объект sink, а добавить еще объект sink и уничтожать их там. Но у нас ознакомительная версия, которая не позволяет иметь в модели на диаграмме одного класса больше двадцати объектов (в образовательной версии это возможно). Нам не хватило ровно одного объекта, поэтому пришлось поступить так (размещать объекты на разных диаграммах ради этого мы посчитали нецелесообразным). Для реализации такого приема на выходе 1 объекта match entity.id

= 0, то есть поле id обнуляется и все заявки с таким полем игнорируются. Но в количестве заявок, вошедших в объект sink, они учитываются. Поэтому пришлось для счета количества обработанных транспортов ввести переменную kolJ, хотя имеется стандартная функция count(), которая возвращает количество заявок, вошедших в данный объект. Любых заявок, без какого-либо их разделения.

349