Работа с устройствами

 

Блок 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 работают параллельно.

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: