- •Оглавление
- •Предисловие
- •Введение
- •1. Общие сведения
- •1.1. Краткие сведения
- •1.2. Программное обеспечение
- •2. Общие сведения о языке gpss
- •2.1. Синтаксис языка
- •3. Блоки языка gpss
- •3.1. Создание и уничтожение транзакта
- •3.2. Задержка транзактов в блоках
- •3.3. Работа с устройствами
- •3.4. Сбор статистических данных с помощью очередей
- •3.5. Изменение маршрутов транзактов
- •3.6. Работа с памятью
- •3.7. Приоритеты
- •3.8. Изменение параметров транзакта
- •3.9. Синхронизация транзитное
- •3.10. Управляющие блоки
- •Моделирование задач сервиса с одним прибором и одной очередью
- •Содержание отчета по практической работе
- •Моделирование задач сервиса с многоканальными системами
- •Содержание отчета по практической работе
- •Моделирование задач сервиса с многоканальными устройствами
- •Содержание отчета по практической работе
- •Моделирование задач с синхронизацией транзактов
- •Содержание отчета по практической работе
- •Основные операторы языка gpss
- •Элементы стандартного отчёта
- •1. Общая информация о результатах работы модели.
- •2. Информация об именах.
- •Информация о блоках.
- •Информация об объектах типа «устройство».
- •Информация об объектах типа «очередь».
- •6. Информация об объектах типа «многоканальное устройство».
- •Словарь терминов и определений
- •Алфавитно-предметный указатель
- •Сапр в сервисе. Моделирование систем сервиса на языке gpss
- •644099, Омск, ул. Красногвардейская, 9
3.5. Изменение маршрутов транзактов
Блок TRANSFER позволяет осуществлять безусловные и статистические переходы. Тип перехода определяется в операнде А, направление перехода – в операндах В и С.
В режиме безусловного перехода операнд А в блоке пуст. Все транзакты переходят к блоку, указанному в ноле В. Например:
TRANSFER ,NEXT
Если блок, к которому направляется транзакт, в текущий момент системного времени не может его принять (например, блок SEIZE), то транзакт остается в блоке TRANSFER и повторяет попытку перехода при каждом пересчете системного времени симулятором.
Если в поле А блока TRANSFER записана десятичная дробь, начинающаяся точкой, то блок работает в режиме статистического перехода. Здесь десятичная дробь определяет вероятность перехода транзакта к блоку, имя которого указывается в поле С. При этом поле В пустое. С вероятностью (1 – < А >) транзакт переходит к блоку, следующему за блоком TRANSFER.
Если оба блока, заняты, то транзакт остается в блоке TRANSFER и повторяет попытку перехода к выбранному ранее блоку при каждом изменении системного времени.
С помощью этого блока можно промоделировать, например, выбор покупателями в магазине одного из двух отделов, если известно, что половина покупателей направляется в 1 -й отдел, а вторая половина – во 2-й отдел:
TRANSFER .5,,OTD2
OTD1 SEIZE PRODI
.
.
OTD2 SEIZE PROD2
Для организации условного перехода используется оператор IF, операнд А которого указывает условие перехода транзактов, а в поле В указывается имя блока, куда направляются транзакты, если условие перехода выполняется.
При описании условия используются операции отношения: >, <, =, а также различные СЧА объектов, числовые константы, мнемокоды. Например, при входе транзакта в оператор
IF KASS=NU,KAS1 проверяется условие: свободно ли устройство с именем KASS.
Если устройство свободно, то транзакт направляется к блоку с именем KASS, в противном случае транзакт направляется к блоку, стоящему непосредственно за оператором IF.
Условная задержка транзакта. В случае, если необходимо задержать транзакт перед каким-либо блоком до выполнения определенного условия, используется оператор WA1TIF. В поле А этого оператора задается условие задержки, и транзакт остается в данном блоке до тех пор, пока это условие истинно; как только условие становится ложным, транзакт продолжает свой путь.
Здесь для описания условия используется только операция сравнения, где слева указывается имя памяти либо устройства, чье состояние проверяется, а справа – мнемокод состояния. Например, в блоке
WAITIF STR=F
транзакт будет задержан до тех пор, пока память с именем STR будет полной.
Пример 3. В магазине находится два отдела: продовольственный и промтоварный. Около 30-ти процентов приходящих в магазин покупателей направляются в промтоварный отдел, остальные – в продовольственный. Причем, если очередь в промтоварном отделе больше двух человек, а в продовольственном – больше пяти, то покупатели уходят из магазина, не дожидаясь обслуживания. Время прихода и обслуживания покупателей распределено экспоненциально. Среднее значение времени прихода равно соответственно 20 сек., времени обслуживания в продовольственном отделе – 30 сек.; в промтоварном – 35 сек. Модель, имитирующая работу магазина за 8 ч:
SIMULATE |
|
|
GENERATE |
20,FN$XPDIS |
приход покупателей |
TRANSFER |
.3,,PROM |
выбор покупателем отдела |
* работа продовольственного отдела |
||
PROD IF |
Q$LIN1>5,BYBY |
если очередь больше 5-ти человек – уход покупателя |
QUEUE |
LIN1 |
поставить в очередь в продовольственный отдел |
SEIZE |
PRODI |
занять продавца |
DEPART |
LIN1 |
покинуть очередь в продовольственный отдел |
ADVANCE |
30,FN$XPDIS |
обслуживание покупателя |
RELEASE |
PRODI |
освободить продавца |
TERMINATE |
|
уход покупателя |
* работа промтоварного отдела |
||
PROM IF |
Q$LIN1>2,BYBY |
|
QUEUE |
LIN2 |
|
SEIZE |
PROD2 |
|
DEPART |
LIN2 |
|
ADVANCE |
35,FN$XPDIS |
|
RELEASE |
PROD2 BYBY |
|
TERMINATE |
|
|
* таймер |
||
GENERATE |
2880 |
|
TERMINATE |
1 |
|
START |
1 |
|