logo search
Чтоесть / Мое / Конспект лекций Для студентов специальности 080801

4.21. Обработка транзактов, принадлежащих одному семейству

Кроме блока GENERATE, для создания транзактов может ис­пользоваться блок SPLIT (РАЗДЕЛИТЬ), который выполняет функ­цию копирования транзакта, входящего в него. Этот транзакт назы­вается начальным или порождающим. Все копии формируются в момент входа начального транзакта в блок SPLIT. Каждая новая ко­пия становится членом семейства (ансамбля) транзактов, порож­денных одним начальным транзактом, который был создан блоком GENERATE.

Блок имеет такой формат:

SPLIT A,[B],|C]

Таблица 4.47

Операнд А может быть положительным целым, СЧА, СЧА*СЧА. Если вычисленное значение операнда А равно нулю, то блок SPLIT не выполняет никаких операций. После создания копий начальный транзакт пытается перейти к очередному блоку.

Операнд В задает блок, в который переходят копии начального транзакта. Операнд может быть именем (меткой), положительным целым, СЧА, СЧА*СЧА (в трех последних случаях операнд В задает номер блока). Значение операнда В вычисляется для каждой копии отдельно.

Операнд С задает параметр транзакта, который используется для присвоения копиям последовательных номеров. Операнд С может быть именем, положительным целым, СЧА, СЧА* СЧА.

Транзакты, принадлежащие одному семейству, объединяются интерпретатором в список. По связям внутри семейства транзактов невозможно установить, какой из транзактов семейства является на­зальным. Если копия транзакта входит в блок SPLIT, то повторная копия становится членом того же семейства, что и первичная копия. Таким образом, каждый транзакт является членом одного и только одного семейства. Семейство может состоять из произвольного числа транзактов. Когда транзакт уничтожается, интерпретатор автоматически исключает его из членов соответствующего семейства. Таким образом, семейство существует до тех пор, пока из модели не удалит­ся последний из ее членов.

В модели одновременно может присутствовать произвольное вдело семейств, оно все время меняется, поскольку каждый транзакт, генерируемый блоком GENERATE, может создать свое семейство.

Пример 4.50

В цех каждые 14±3 мин поступают партии деталей. Каждая пар­тия состоит из 3±2 деталей. Все детали поступают на обработку стан­ком. Время обработки составляет 3+1 мин.

COPY FUNCTION RN1,C2 0,1/1,6

GENERATE 14,3

SPLIT FN$COPY

SEIZE MACHINE

ADVANCE 3,1

RELEASE MACHINE

TERMINATE 1

Для синхронизации движения транзактов, принадлежащих од­ному семейству, используются блоки MATCH (СОГЛАСОВАТЬ), ASSEMBLE (СОБРАТЬ), GATHER (СОЕДИНИТЬ).

Блок MATCH синхронизирует движение транзактов с другим блоком MATCH. Формат блока:

MATCH A

Операнд А указывает имя сопряженного блока. Сопряженным блоком является также блок MATCH.

Пример 4.51

В локальной сети рабочая станция опрашивается каждые 30 мс. Если на рабочей станции есть сообщение для передачи, то оно зани­мает канал.

LABEL1 MATCH LABEL2 ; Сообщение ждет опроса рабочей станции SEIZE CHANNEL ; Занять канал

LABEL2 MATCH LABEL1 ; Опрос рабочей станции

ADVANCE 30 ; Время до следующего опроса

При входе транзакта - сообщения в блок MATCH с меткой LABEL1 он будет ждать (в списке синхронизации) момента, когда другой опросный транзакт, принадлежащий тому же семейству, не пойдет в сопряженный блок MATCH с меткой LABEL2. Только по­сле этого сообщение займет канал CHANNEL, а опросное сообщение перейдет в блок ADVANCE.

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

ASSEMBLE A

Операнд А задает счетчик сборки, указывающий сколько членов одного семейства должны быть объединены. Операнд А может быть именем, положительным целым, СЧА, СЧА*СЧА. Первоначальное значение операнда А не должно быть меньше или равно единице.

Блок GATHER скапливает заданное количество транзактов, принадлежащих одному семейству. Он задерживает их до тех пор, пока не соберется необходимое число, указанное операндом А. Затем накопленные транзакты одновременно попытаются войти в следую­щий по номеру блок.

Формат блока:

GATHER A

Операнд А задает число транзактов, принадлежащих к одному семейству, которое нужно накопить. Операнд А может быть именем, положительным целым, СЧА, СЧА*СЧА.

Для управления транзактами, принадлежащими к одному семей­ству, используется блок GATE.

Пример 4.52 [20]

Некоторая фирма производит центробежные насосы, сборка ко­торых осуществляется по заказу покупателей. Заказы прибывают в случайные моменты времени. Интервалы времени между поступле­ниями двух последовательных заказов распределены по нормальному закону с математическим ожиданием 19 мин и стандартным отклоне­нием 3 мин.

Когда прибывает заказ, делается две его копии. Оригинал заказа используется для получения двигателя со склада и подготовки его для сборки. Время выполнения этой операции является экспоненциально распределенной случайной величиной со средним значением 8 мин. Первый экземпляр копии используется для заказа и адаптации насоса (время 10±2 мин), а второй экземпляр используется для начала изго­товления плиты основания (время 15 мин).

Когда насос и плита основания готовы, производится пробная подгонка (время 5+1 мин). Все три компонента собираются вместе (время распределено по нормальному закону с математическим ожи­данием 6 мин и стандартным отклонением 1 мин), когда они имеются налицо. Затем установка разбирается, насос и двигатель подвергают­ся окраске. Время покраски двигателя 2±0,5 мин, а время покраски насоса распределено по экспоненциальному закону со средним значением 1,5 мин. Плита основания гальванизируется 4 мин. После этого производится окончательная сборка. Время сборки - нормально распределенная случайная величина с математическим ожиданием 8 мин и стандартным отклонением 1 мин.

Промоделировать сборку 100 центробежных насосов и оценить среднее время их сборки, используя для этого таблицу.

Учитывая подробное описание самой модели и комментарии, приведенные в листинге прототипа программы, опишем кратко логи­ку работы модели.

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

Транзакты, имитирующие насос и плиту, ожидают друг друга в блоках MATCH с метками PUMP (насос) и PLATE (плита). Если и на­сос, и плита прибыли, то имитируется задержка на их начальную сбор­ку. После того, как прибудут все три заказа в блок GATHER, блок ADVANCE имитирует пробную подгонку трех компонентов изделия фуг к другу. Затем три заказа снова разделяются для окончательной отделки. Блок ASSEMBLE (сборка) с меткой BUILD вызывает отсроч­ку окончательной сборки, пока не поступят все компоненты.

В таблице TRANSIT собирается распределение времени выпол­нения заказов. Единица модельного времени 1 с.