150
зывается в поле А. Транзакты, принадлежащие к одному ансамблю, будут задерживаться в блоке АSSEMBLE до тех пор, пока не поступит заданное число транзактов этого ансамбля. В результате на выходе блока появляется один (первый) транзакт ансамбля, а остальные транзакты уничтожаются. В одном блоке АSSEMBLE могут накапливаться транзакты разных ансамблей, транзакты одного ансамбля могут накапливаться в разных блоках АSSEMBLE. Если число собираемых членов ансамбля задается с помощью косвенной адресации, то для его установления используется параметр первого пришедшего транзакта. Рассмотрим примеры использования блока АSSEMBLE:
АSSEMBLE 5
(т. е собирается пять транзактов, четыре уничтожаются, один переходит в следующий блок);
АSSEMBLE * 1
(т. е. собирается число транзактов, равное значению параметра «1» первого транзакта ансамбля).
Пример 3. Построить программу модели процесса прохождения 100 деталей, поступление которых подчиняется равномерному закону в интервале (8 ± 2) единицы времени и обработка производится параллельно двум рабочим, каждый из которых выполняет свою операцию независимо друг от друга со временем (5 ± 3) единицы, распределенным равномерно. В результате моделирования требуется определить коэффициент занятости рабочих.
Программа имеет вид: |
|
|
SIMULATE |
|
Начало моделирования |
GENERATE |
8,2 |
Приход деталей |
SPLIT |
1,THIS |
Начало обработки детали |
SEIZE |
1 |
Первый рабочий |
ADVANCE |
5,3 |
|
RELEASE |
1 |
|
TRANSFER |
8,THAT |
|
|
|
|
151 |
THIS |
SEIZE |
2 |
Второй рабочий |
|
ADVANCE |
5,3 |
|
|
RELEASE |
2 |
|
THAT |
ASSEMBLE |
2 |
Окончание обработки детали |
|
TERMINATE |
1 |
|
|
START |
100 |
|
|
END |
|
|
Действие блока GATHER аналогично действию блока АSSEMBLE. Отличие состоит в том, что после накопления в блоке числа транзактов, указанного в поле А, они все передаются в следующий блок. Блок GATHER позволяет синхронизировать движение транзактов одного ансамбля при их движении по одному пути. Приведем пример использования блока GATHER:
GATHER 3
(т. е. после прихода трех транзактов они поступают в следующий блок).
Пример 4. Построить программу модели процесса прохождения 80 деталей. На производственный участок сборки подшипников поступают обоймы и шарики с интервалом времени (25 ± 4) единицы. На контроль обоймы затрачивается (4 ± 1) единица времени; контроль шариков производится последовательно со временем (2 ± 1) единица времени на шарик. Операция сборки требует одновременного поступления обоймы и всех шариков и производится со временем (4 ± 2) единицы. Все процессы подчиняются равномерному закону. В результате моделирования требуется определить коэффициенты занятости рабочих участка.
Программа имеет вид: |
|
|
SIMULATE |
|
Начало моделирования |
GENERATE |
25,4 |
|
SPLIT |
8,THAT Разделение обоймы и шариков |
|
SEIZE |
1 |
|
ADVANCE |
4,1 |
Контроль обоймы |
RELEASE |
1 |
|
|
152 |
|
TRANSFER |
,FINAL |
|
THAT SEIZE |
2 |
|
ADVANCE |
2,1 |
Контроль шариков |
RELEASE |
2 |
|
GATHER |
8 |
|
FINAL ASSEMBLE |
9 |
Комплектация |
SEIZE |
3 |
|
ADVANCE |
4,2 |
Сборка |
RELEASE |
3 |
|
TERMINATE |
1 |
|
START |
80 |
|
END |
3 |
|
Блок МАТCН предназначен для синхронизации продвижения двух транзактов одного ансамбля, движущихся по разным путям. Для синхронизации необходимы два блока МАТСН, находящиеся в соответствующих местах блок-диаграммы и называемые сопряженными. В поле А каждого блока МАТСН указывается метка сопряженного ему блока. При подходе транзакта к блоку МАТСН проверяется наличие в сопряженном ему блоке транзакта из того же ансамбля. Если в обоих блоках имеются транзакты одного ансамбля, то они одновременно пропускаются через блоки МАТСН. Если в сопряженном блоке нет ни одного транзакта данного ансамбля, то поступивший транзакт будет ожидать поступления транзакта того же ансамбля в сопряженный блок МАТСН, после чего они оба будут пропущены в следующие за блоками МАТСН блоки.
Одна и та же пара блоков МАТСН может одновременно синхронизировать любое число пар транэактов из разных ансамблей. Транзакты одного ансамбля также могут синхронизировать в любом числе пар блоков МАТСН. Следует отметить, что блок МАТСН может быть сопряжен сам себе. При этом его действие будет аналогично действию блока GATHER с параметром 2 в поле А. Рассмотрим соответствующие примеры использования блока МАТСН
ААА МАТСН ВВВ
………………
ВВВ МАТСН ААA
153
(в этом случае транзакт ААА будет ожидать прихода члена того же ансамбля в блок МАТСН с меткой ВВВ);
CCC МАТСН CCC
(здесь транзакт будет ждать прихода члена того же ансамбля в этот же блок МАТСН).
Пример 5. Построить программу модели прохождения 500 деталей. Детали поступают с интервалом времени (300 ± 50) единиц. Обработку производят двое рабочих, которые выполняют по две операции. После первой операции, выполняемой первым рабочим со временем (70 ± 20) единиц и вторым со временем (60 ± 30) единиц, производится операция сверки, время выполнения которой принимается равным нулю. После сверки выполняется вторая операция первым рабочим со временем (20 ± 10) единиц и вторым — (30 ± 20) единиц. Затем третий рабочий производит сборку изделия из этих деталей со временем (50 ± 20) единиц. Все процессы подчиняются равномерному закону. В результате моделирования необходимо определить коэффициенты занятости рабочих.
7.7. Блоки, описывающие работу оборудования
Язык GPSS оперирует с тремя типами объектов, принадлежащих аппаратной категории: устройствами, памятями и ключами.
Устройство терминологии GPSS является аналогом обслуживающего прибора системы массового обслуживания (Q-схемы) [I]. В любой момент времени устройство может быть занято только одним транзактом. Состояние устройства меняют шесть блоков: SEIZE, RELEASE,
PREEMPT, RETURN, FUNAVAIL, FAVAIL, которые используются попарно.
В результате входа транзакта блок SEIZE устройство, указанное в этом блоке, будет занято. Оно останется занятым, пока тот же транзакт не пройдет соответствующий блок RELEASE. Если какой-либо транзакт занимает устройство, описанное в поле А блока SEIZE, то никакой другой транзакт не сможет войти в этот блок (и вообще не сможет захватить это устройство в любом другом блоке SEIZE). Транзакт может занять любое число устройств.
Блок RELEASE служит для освобождения устройства, которое ранее было захвачено проходившим в блоке SEIZE транзактом. При выполнении этого блока программы задержка возникнуть не может. Устройство освобождается в момент входа транзакта в блоке RELEASE. Освобождение выполня-
154
ется только тем транзактом, которым оно было занято. Если перед SEIZE задерживаются несколько транзактов, они обслуживаются в соответствии с правилом: «первым пришел — первым обслужен».
Рассмотрим пример использования блоков SEIZE и RELEASE:
SEIZE |
1 |
ADVANCE |
10,5 |
RELEASE |
1 |
(т. е. происходит занятие устройства 1, задержка от 5 до 15 единиц времени и освобождение устройства 1).
Блок PREEMPT фиксирует использование устройства на более высоком уровне, чем блок SEIZE, а также приостанавливает обслуживание транзакта, захватившего устройства ранее, и дает возможность прерванному транзакту захватить устройство после того, как закончится обслуживание прервавшего транзакта.
Если при выполнении блока PREEMPT оказывается, что одно прерывание уже произошло (устройство обслуживает прерывание), то блок не выполняется и соответствующий транзакт задерживается до тех пор, пока не освободится устройство. Затем обслуживается новый прерывающий транзакт, а не прерванный. Исключением из описанных выше правил является случай, когда блок PREEMPT работает в режиме приоритетов, т. е. в поле B стоит PR. При этом в действиях блока PREEMPT предусмотрен случай разрешения прерывания на основании результата анализа приоритетов транзактов.
Для последующей обработки прерванных транзактов существуют следующие возможности:
в поле c может быть описан какой-либо блок, на который будет передан прерванный транзакт. При этом прерванный транзакт продолжает претендовать на данное устройство;
если прерванный транзакт находится в блоке ADVANCE, то вычисляется остаток времени (от момента прерывания до момента выхода из блока ADVANCE) и полученное значение помещается в параметре, описанном в поле D блока PREEMPT. В этом случае прерванный транзакт будет послан в блок, указанный в поле C блока PREEMPT. Прерванный транзакт продолжает претендовать на данное устройство;