Номера строк | Описание строк | Соответствующие этапы перемещений грузовиков |
Требование симуляции модели | — | |
Сегмент объявлений SAVEVALUE-сущностей | ||
1** | Объявление и инициализация SAVEVALUE -сущностей | — |
Сегмент создания изделий в цехе A | ||
2** | Создание партий изделий в цехе A, наращивание значения AQUEUE, уничтожение партий изделий | — |
Сегмент создания изделий в цехе B | ||
3** | Создание партий изделий в цехе B, наращивание значения BQUEUE, уничтожение партий изделий | — |
Сегмент создания и перемещения грузовиков | ||
4** | Создание грузовиков, назначение им параметра BUSY, распределение их по филиалам | — |
500-530 | Задержка в цехе A: погрузка | ALOAD |
540-570 | Переезд из A в B | ABTEST, ABMOVE |
600-620 | Задержка в цехе B: разгрузка | BUNLOAD |
630-660 | Задержка в цехе B: погрузка | BLOAD |
670-695 | Переезд из B в C | BCTEST, BCMOVE |
700-720 | Задержка в цехе C: разгрузка | CUNLOAD |
Переезд из C в A | CAMOVE | |
Возвращение в цех A (к этапу ALOAD) | — | |
Сегмент-таймер | ||
9** | Осуществляет остановку процесса имитации по прошествии 60000 мин | — |
1.4.3. Замечания по поводу равномерного распределения грузовиков между филиалами
|
|
Приведем различия в программах для случаев, когда все грузовики изначально находятся перед этапом погрузки в филиале A и когда они равномерно распределены между филиалами A и B (точнее, между этапами погрузки в этих филиалах). Для этого следует изменить начало кода, принадлежащего сегменту 4 (создание и перемещение грузовиков), а именно, те строки, которые нумеруются с 4:
; Создание грузовиков
400 GENERATE,,,12
410 ASSIGN BUSY,0
Равномерное распределение грузовиков можно смоделировать следующим образом:
Отдельная генерация грузовиков для филиалов А и В (по 6 грузовиков на каждый филиал):
; Создание грузовиков
; Для филиала А
400 GENERATE,,,6
410 ASSIGN BUSY,0
420 TRANSFER,ALOAD
; Для филиала В
430 GENERATE,,,6
440 ASSIGN BUSY,0
450 TRANSFER,BLOAD
1.4.4. Текст моделирующей программы на языке GPSS
100 SIMULATE
;*****************************************************
; Объявление SAVEVALUE-сущностей
110 INITIAL X$AQUEUE,0
120 INITIAL X$BQUEUE,0
130 INITIAL X$EMPTY,0
140 INITIAL X$MOVES,0
;*****************************************************
; Создание изделий в цехе A
200 GENERATE 20,3
210 SAVEVALUE AQUEUE+,1
220 TERMINATE
;*****************************************************
; Создание изделий в цехе B
300 GENERATE 20,5
310 SAVEVALUE BQUEUE+,1
320 TERMINATE
;*****************************************************
; Создание грузовиков
400 GENERATE,,,12
410 ASSIGN BUSY,0
; Задержка в цехе А
; Погрузка в цехе А
500 ALOAD TEST G X$AQUEUE,0,ABTEST
510 SAVEVALUE AQUEUE-,1
511 QUEUE QATERMINAL
512 SEIZE ATERMINAL
513 DEPART QATERMINAL
520 ADVANCE 20
525 RELEASE ATERMINAL
530 ASSIGN BUSY,1
; Переезд из А в B
540 ABTEST TEST E P$BUSY,0,ABMOVE
550 SAVEVALUE EMPTY+,1
560 ABMOVE SAVEVALUE MOVES+,1
570 ADVANCE 30
; Задержка в цехе B
; Разгрузка в цехе B
600 BUNLOAD TEST E P$BUSY,1,BLOAD
601 QUEUE QBTERMINAL1
602 SEIZE BTERMINAL1
603 DEPART QBTERMINAL1
610 ADVANCE 20
615 RELEASE BTERMINAL1
620 ASSIGN BUSY,0
|
|
; Погрузка в цехе B
630 BLOAD TEST G X$BQUEUE,0,BCTEST
640 SAVEVALUE BQUEUE-,1
641 QUEUE QBTERMINAL2
642 SEIZE BTERMINAL2
643 DEPART QBTERMINAL2
650 ADVANCE 20
655 RELEASE BTERMINAL2
660 ASSIGN BUSY,1
; Переезд из B в C
670 BCTEST TEST E P$BUSY,0,BCMOVE
680 SAVEVALUE EMPTY+,1
690 BCMOVE SAVEVALUE MOVES+,1
695 ADVANCE 30
; Задержка в цехе C
; Разгрузка в цехе C
700 CUNLOAD TEST E P$BUSY,1,CAMOVE
701 QUEUE QCTERMINAL
702 SEIZE CTERMINAL
703 DEPART QCTERMINAL
710 ADVANCE 20
715 RELEASE CTERMINAL
720 ASSIGN BUSY,0
; Переезд из C в A
730 CAMOVE ADVANCE 20
; Возвращение в цех А
800 TRANSFER,ALOAD
; Таймер
900 GENERATE 60000
910 TERMINATE 1
1.4.5. Используемые операторы
SIMULATE - начальная карта программы, если разработчик намерен выполнить прогон модели. Если эта карта отсутствует, то интерпретатор проверяет правильность записи модели на языке GPSS, но прогона модели не выполняет.
INITIAL X$PER,0 – задаем начальное значение величины PER равное 1
GENERATE 30,5,,8 - генерация 8 транзактов, интервалы времени между появлениями транзактов распределены равномерно в диапазоне [30-5, 30+5].
SAVEVALUE PER+,1 - увеличение текущего значения сохраняемой величины PER на 1.
TERMINATE 3 - удаление транзакта из системы, при этом содержимое итогового счетчика уменьшается на 3 единицы, моделирование заканчивается, если содержимое счетчика станет равным или меньше нуля.
ASSIGN ATT,0 – замена текущего значения параметра транзакта ATT на значение 0.
TEST E P$ATT,1,MET - если значение параметра транзакта ATT равно 1, то данный транзакт перейдет на следующий блок, иначе - в блок MET
TEST G P$ATT,0,MET - если значение параметра транзакта ATT больше чем 0, то данный транзакт перейдет на следующий блок, иначе - в блок MET.
QUEUE AA1 - оператор организации очереди, длина очереди AA1 увеличивается на единицу.
DEPART AA1 - то же, но длина очереди уменьшается на единицу.
SEIZE A1 - занятие устройства A1 приходящим на его вход транзактом; если устройство занято, то транзакт задерживается в очереди к этому устройству.
ADVANCE A,B - задержка транзакта на время, определенное содержимым полей A и B, смысл величин, записываемых в этих подполях, такой же, как и в операторе GENERATE.
RELEASE A1 - освобождение устройства A1 обслуженным транзактом.
TRANSFER,MET - безусловная передача транзакта в блок MET.
1.4.6. Запуск программы
FileàNewàModel
Запуск на имитацию: CommandàCreate Simuation
CommandàStartàStart 1