Блок SEIZE - занять устройство. При входе транзакта в блок SEIZE выполняется операция занятия устройства, имя которого задается операндом А блока SEIZE. Занятие устройства транзактом выполняется следующим образом. Когда транзакт направляется из какого-нибудь блока в блок SEIZE, симулятор проверяет, свободно ли следующее устройство. Если оно не свободно, транзакт не может войти в этот блок. Он остается в предыдущем блоке до тех пор, пока устройство не освободится. Если же устройство свободно, то транзакт передвигается в блок SEIZE, занимает устройство и в тот же момент времени направляется к следующему за SEIZE блоку.
Блок RELEASE - освободить устройство. При входе транзакта в блок RELEASE происходит освобождение устройства, имя которого задается операндом А.
При составлении моделей пользователь должен соблюдать правило: освободить устройство может только тот транзакт, который его занимает. Если транзакт попытается освободить устройство, занятое другим транзактом, симулятор прервет выполнение модели и выдаст сообщение об ошибке.
|
|
В момент освобождения устройства должен быть решен вопрос о том, какой
из задержанных транзактов (перед блоком SEIZE) имеет право первым занять устройство. Этот вопрос решается следующим образом: когда транзакты.
В поле метки данного блока стоит имя функции. В операнде А блока FUNCTION указывается аргумент функции, а в операнде В - тип функций и количество пар аргументов и значений. Существует два типа функций: С и D. Функции типа С - непрерывны, типа D - дискретны. Например, С12 означает, что функция непрерывна и для ее описания будет использоваться 12 пар аргументов-функций.
При описании любой из функций с помощью языка GPSS происходит интерполяция. Для дискретных функций - это кусочно-постоянная интерполяция, для непрерывных - линейная интерполяция. Координаты функции, задаваемые парами, являются узлами интерполяции.
За блоком описания функции FUNCTION всегда следует блок задания функции, в котором задаются координаты и значения функции. Каждая пара чисел координата-значение отделяется друг от друга слэджем, пробелы недопустимы. В паре аргумент отделяется от значения функции запятой.
Например, функция, график которой показан на рис. 2,1, а, описывается на языке GPSS следующим образом:
FUNC1 FUNCTION RN1.D3
.4,26.0/. 8,40.8/1,6.08
Рис. 2.1. Графики дискретной (а) и непрерывной (б) функций
Непрерывная функция, показанная на рис. 2.1, 6:
FUNC2 FUNCTION RN2, СЗ
0,10/. 6,26/1,45
Блоки описания и задания функции располагаются в начале программы, между блоками SIMULATE и первым блоком GENERATE. Координаты точек функции записываются как числа с фиксированной точкой. Поскольку язык оперирует с целочисленными величинами, любое значение функции округляется до целого числа. Исключением является использование функции в качестве модификатора в поле В блоков GENERATE и ADVANCE. Здесь округление до целого происходит после умножения значения соответствующей функции на содержание поля А этих блоков.
|
|
В языке существует 8 датчиков равномерно распределенных случайных чисел обозначаются RN1 - RN8. Эти датчики выдают равновероятные целочисленные значения из диапазона 0 - 999. Если датчик используется в качестве аргумента функции, то он выдает вещественные числа в диапазоне 0 -1.
Для генерации случайных величин, распределенных по экспоненциальному закону, можно использовать встроенную функцию с именем XPDIS. Для нормально распределенных величин используется встроенная функция с именем SNORM. Для этих функций блоки описания необязательны.
Пример 3
В аэропорту производится регистрация пассажиров перед посадкой в самолет. На регистрацию подходят отдельные пассажиры через каждые 20±10 с. либо туристические группы через каждые 60±20 с, при этом туристические группы обслуживаются вне очереди. Время обслуживания подчинено экспоненциальному закону и равно в среднем для отдельных пассажиров - 15 с, для туристических групп - 25 с. Промоделировать работу отдела регистрации, изучив статистику по очереди за 2 ч.
SIMULATE
ЕХР FUNCTION RN1.C6
0,0/1,.1/.2,.2/.5,.69/.8,1.6/1,8
GENERATE 20,10 приход отдельных пассажиров
QUEUE LIN включение в очередь
SEIZE REG
DEPART LIN выход из очереди
ADVANCE 15,FNSEXP регистрация пассажира
RELEASE REG
TERMINATE уход пассажира
GENERATE 60,20,,,1 приход туристической группы
QUEUE LIN
SEIZE REG
DEPART LIN
ADVANCE 25.FNSEXP регистрация группы
RELEASE REG
TERMINATE уход группы
GENERATE 720 таймер
TERMINATE 1
START 1
END
Здесь отдельные пассажиры и туристические группы встают в одну и ту же очередь и обслуживаются одним регистратором. Внеочередность обслуживания групп в модели обеспечивается заданием приоритета для транзактов, имитирующих туристические группы.
В программе три самостоятельных сегмента, каждый из которых начинается блоком GENERATE и заканчивается блоком TERMINATE. Они могут быть поставлены в программе в любом порядке. При этом процесс моделирования останется неизменным; все блоки GENERATE работают параллельно.