Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комплекс по МСиП 2014 / Пособие GPSS World.doc
Скачиваний:
262
Добавлен:
15.04.2015
Размер:
1.37 Mб
Скачать

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

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

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

SPLIT А,[В],[С]

Таблица 4.41

Операнд

Значение

Результат по умолчанию

А

Число создаваемых копий транзакта

Ошибка

В

Метка блока, куда направляются копии

С

Параметр, в котором запоминаются номера копий транзактов

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

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

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

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

В модели одновременно может присутствовать произвольное число семейств, оно все время меняется, поскольку каждый транзакт генерируемый блоком GЕNЕRАТЕ, может создать свое семейство.

Пример 4.50

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

COPY FUNCTION RN1,C2

0,1/1,6

GЕNЕRАТЕ 14,3

SPLIT FN$СОРY

SЕIZE МАСНINE

ADVANCE 3,1

RЕLЕАSЕ МАСНINE

ТЕRМINATE 1

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

Блок МАТСН синхронизирует движение транзактов с другим блоком МАТСН. Формат блока:

МАТСН А

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

Пример 4.51

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

LABEL1 МАТСН LАВЕL.2 ;Сообщение ждет опроса рабочей станции

SЕIZE СНАNNЕL ; Занять канал

LABEL2 МАТСН LАВЕL1 ; Опрос рабочей станции

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

При входе транзакта-сообщения в блок МАТСН с меткой LАВЕL1 он будет ждать (в списке синхронизации) момента, когда другой опросный транзакт, принадлежащий тому же семейству, не войдет в сопряженный блок МАТСН с меткой LАВЕL2. Только по­сле этого сообщение займет канал СНАNNЕL, а опросное сообщение перейдет в блок АDVANCE.

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

АSSЕМВLЕ А

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

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

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

GАТНЕR А

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

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