Рассмотрим оба условия.
В данном случае основанием для окончания ИМ является число, задаваемое операндом А ОУ START, сразу после успешной компиляции и начала моделирования это число вносится в счётчик завершений. Проход первого транзакта через ОБ TERMINATE (уничтожение транзакта) приводит к вычитанию значения операнда А ОБ TERMINATE из показаний СЗ, каждый следующий проход транзакта через свой ОБ TERMINATE уменьшает показания СЗ на число, определяемое операндом А (напомним, что ОБ может быть много, но СЗ в МФ один !). Значение операнда А по умолчанию равно 0, т.е. проход Хакт через такой ОБ TERMINATE не изменяет показаний СЗ.
В других случаях значение операнда А может быть любым целым положительным числом. На основании сказанного можно предложить выражение , позволяющее понять логику работы СЗ:
A(START) -
На рис. 3.4 представлена эта временная ось.
Используем рисунок для решения примера А. Поскольку задано детерминированное значение операнда А ОБ GENERATE, то транзакты будут поступать каждые 50 временных дискрет, а именно 50,100,150 и т. д. Первый транзакт придёт в момент 50, сразу пройдёт через ОБ TERMINATE, операнд А которого равен единице. В СЗ записано
СЗ=3 СЗ=2 СЗ=1 СЗ=0
0.0 50 100 150
Рис.3.4 Решение примера А)
число 3 из которого вычитается 1, 3-1 =2 . Приход следующего транзакта через 50 единиц, но в 100 единиц абсолютного времени, уменьшит показания ещё на единицу и т. д. Окончательное решение, что ИМ окончится в 150 временных дискрет очевидно из рисунка 3.4. В примере Б) ИМ окончатся в 100 временных дискрет, так как вычитается число 2; в примере В) ИМ окончится в 50 временных дискрет, так как следуя выражению 3.1) из числа 3 (число стартов) вычитается число 5 (значение операнда А ОБ TERMINATE ) и сразу получается отрицательный результат. В примере Г) появление второго ОБ GENERATE ни на что не влияет, так как во втором ОБ TERMINATE операнд А равен 0 (это значение можно было бы и не писать, так как оно задано по умолчанию, но наличие его более наглядно, ошибки при этом не возникает) и время окончания ИМ равно 150 временным дискретам.
Значительно более интересен пример Д) и его поясним с помощью рис.3.5. Поскольку в МФ появилось два самостоятельных ОБ GENERATE необходимо рисовать временные оси для движения транзактов из каждого источника, а временные засечки отдельных ОБ GENERATE сносить на ось абсолютного времени АС1.
СЗ=2 СЗ=0
ОБ1
50 100
ОБ2 СЗ=1
50 75 100
AC1
100
Рис.3.5 Решение задачи Д)
В момент времени 50 появляется транзакт с ОБ1 и отмечается также на оси абсолютного времени АС1, показания СЗ уменьшаются на единицу, приход первого транзакта с ОБ2 во временную дискрету 75, уменьшает СЗ до 1, приход второго транзакта с ОБ1 в 100 единиц времени и его терминирование останавливает процесс ИМ в момент времени 100.
3.5.2 Правило окончания по времени испытаний
Довольно часто в процессе ИМ требуется определить не средние значения атрибутов объектов, а значения зависящие от времени: производительность, динамику процесса, суммарные затраты за какой то период времени и т.д. В этом случае в качестве контрольной точки берётся не число стартов, а период времени (рабочая смена, сутки, месяц и т.д.).
Основным условием при этом является приведение всех рассматриваемых при моделировании интервалов времени к одному масштабу, например, если предельное время задано в сутках, а темп прихода транзактов в минутах, то правильнее все интервалы времени исчислять в минутах. Для реализации правила окончания ИМ по времени программа должна проделать следующие действия :
Нельзя забывать, что транзакты двигаются один за другим по одному в единицу времени. Для решения этой проблемы в GPSS/H предусмотрены чёткие правила:
- Транзакты одинакового приоритета записываются в списке текущих событий - СТС в порядке возрастания их ИН. Следовательно проблема решается просто: вначале исполняется транзакт с меньшим ИН, а затем с большим ИН, но имеющим одно и тоже время.
При этом засечка на оси АС1 будет одинаковой.
- При разных приоритетах, если транзакты связаны по времени первым движется транзакт, имеющий больший приоритет.
Как уже было отмечено выше, одним из преимуществ GPSS/H является наличие отладчика программ моделирования (дебагера), который позволяет пользователю эффективно работать с программой в диалоговом режиме, осуществляя не только тестовую проверку, но и позволяя вводить необходимые изменения. Работа в пакетном режиме, позволяет оценивать результаты моделирования лишь по окончанию процесса ИМ. Поэтому констатация наличия ошибок в итоговом отчёте мало, что даёт исследователю, удлиняя и удорожая процесс исследования. В связи с этим интерактивный режим оказывается весьма полезным, так как он позволяет не только получать промежуточную информацию о той части МФ, которая вызывает наибольшие сомнения, но и вносить конструктивные изменения.
В пакетном режиме очень трудно до начала ИМ выделить ту часть итогового отчёта, которая бы представила наибольший интерес, а также оценить заранее характер и возможность возникновения ошибок. Тестовый режим в большинстве случаев снимает ограничения, присущие пакетному режиму.
Техника и технология использования возможностей отладчика будет рассмотрена ниже.
Запуск отладчика (тестовый режим, дебагер) осуществляется записью (после появления приглашения в командной строке используемой оболочки или DOS) следующего вида:
gpssh filename tv ,
где filename - имя МФ с расширением .gps, а -tv (test vision), является командой запуска тестового режима. Вызов отладчика возможен только в случае успешной компиляции вашего МФ, не пугайтесь, если отладчик не вызывается, вернитесь к вашему МФ и по F4, основываясь на данных об ошибках, содержащихся в листинге отчёта ( имя вашего файла с расширением .lis ), внесите все необходимые коррективы в основной файл с расширением .gps и лишь затем повторите попытку вызова отладчика.
После исполнения команды вызова отладчика на экране дисплея появляется трёхоконный отладчик , который представлен на рис.3.7 А и В . Вариант А наблюдается на экране дисплея сразу после вызова отладчика. В качестве иллюстрации рассмотрен простейший пример поступления деталей со склада, их перемещения по ленте транспортёра, обработки на станке и ухода из системы.
Процесс ИМ длится до получения данных о 100 обработанных деталях (см. 3.7, пример 3.1).
А. После вызова отладчика
ВLOCK CURRENT TOTAL SOURCE FOR MODEL xx.GPS ==================================================
¦S/C: OFF ABS CLOCK: 0. REL CLOCK: 0. TTG: 0
===================================================
¦XACT: CURBLK: NEXTBLK: CHAINS: PC: ¦
¦ ¦
¦MARK-TIME: MOVE-TIME: PRIORITY: ¦
L===================================================
Ready!
:
В.После инициализации отладчика
BLOCK CURRENT TOTAL SOURCE FOR MODEL xx.GPS
1 1 GENERATE 4,1 поступление заготовок
2 0 ADVANCE 2 транспортирование
3 0 SEIZE SERVER занятие сервера
4 0 ADVANCE 3.75,1 обслуживание на сервере
===================================================¬
¦S/C: OFF ABS CLOCK: 3.5406 REL CLOCK:3.5406 TTG:100 ========================================================
ХACT: 1 CURBLK: 1 NEXTBLK: 2 CHAINS: CEC PC: ¦ MARK-TIME: 3.5406 MOVE-TIME: 3.5406 PRIORITY: 0 ========================================================
Ready!
: s
XACT 1 POISED AT BLOCK 2. RELATIVE CLOCK: 3.5406
:
Рис.3.7 Вид трёхоконного отладчика, А - в начальный момент вызова ; В - после инициализации отладчика ( первый шаг).
На рис.3.7 представлены оба варианта окон отладчикH, вариант А - сразу после вызова окна пусты, первое окно исходного МФ (SOURCE FOR MODEL), следующее статусное окно и последнее диалоговое окно. На рис .3.4В представлены те же окна после инициализации МФ примера .
Инициализация вызванного трёхоконного отладчика производится двумя эквивалентными путями:
s[tep]_ n ,
где команда может быть написана в любом виде, начиная от четырёх букв до одной первой буквы и через обязательный пробел число тактов, на которые продвинется процесс ИМ (по умолчанию 1), т.е. s 1 =F10. При отсутствии пробела появится предупреждение об ошибке, после которого необходимо написать команду в правильном формате.
Рассмотрим теперь более подробно содержание окон, руководствуясь рис. 3.7В, поскольку все названия у окон обеих вариантов одинаковы, но в варианте В присутствует конкретное содержание.
Примечание: Окно диалога варианта А содержит запись - Simulation begins, которая исчезает после инициализации, кроме того, на рисунке не показаны всегда существующие надписи об авторе программы (см. реальное окно отладчика).
Окно исходного модельного файла (окно источника).
Занимает одну треть экрана дисплея и является верхней частью экрана отладчика
Исходный файл интерактивного дебагера GPSS/H
Далее в окне следуют названия колонок:
Окно текущего положения (статусное окно)
Занимает среднюю часть экрана и содержит информацию о состоянии модели, меняющуюся по мере продвижения Хакт по модели.
Окно диалога
Находится в нижней трети экрана и показывает команды, задаваемые пользователем, реакцию отладчика на эти команды, приглашения разного вида (см. далее по тексту). Информация окна автоматически прокручивается вверх, для освобождения пространства для новой информации.
Прерывание тестового режима и переход в командную оболочку можно осуществить двумя путями.
Обе эти команды не имеют никаких операндов.
После запуска отладчика функциональные клавиши F1 F10 клавиши прокрутки выполняют специфические функции, которые указаны в таблице 3.4. Имеет смысл потренироваться с использованием всех клавиш, чтобы запомнить их назначение.
Таблица 3.4 Роль функциональных клавиш
Клавиша | Выполняемая функция |
Стрелка вверх | Прокрутка окна диалога на 5 строк вверх |
Стрелка вниз | Прокрутка окна диалога на 5 строк вниз |
Стрелка влево | Прокрутка окна диалога влево на 20 символов |
Стрелка вправо | Прокрутка окна диалога вправо на 10 символов |
F1 | Перемещение к началу окна диалога |
F2 | Удаление окон кроме окна диалога |
F3 | Перемещение к концу окна диалога |
F4 | Возвращение к з-м окнам |
F5 | Прокрутка окна диалога влево на 20 символов |
F6 | Прокрутка окна диалога вправо на 10 символов |
F7 | Прокрутка вверх на 1 линию окна МФ |
F8 | Не используется |
F9 | Прокрутка вниз на 1 линию окна МФ |
F10 | Продвижение процесса ИМ на один такт = step |
Ниже в таблице 3.5 приведен список наиболее применяемых команд, используемых в сеансе отладчика. В таблице, при использовании команд подчёркнуты буквы сокращённой записи команды, которая воспринимается программой аналогично полной записи. В графе таблицы
пояснение приводится основное назначение команды, некоторые команды используются для разных целей, соответственно для них указаны разные операнды.
Таблица 3.5 Команды отладчика( в алфавитном порядке )
Команда | Операнды | Пояснение |
AT | Имя или номер одного или нескольких ОБ | Предлагает список команд отладки, исполняемых каждый раз при достижении Хакт назначенного ОБ, прерывается командой END или для ранее установленных точек командой UNBREAK. |
BREAK | Имя или номер одного или нескольких ОБ | Вводит прерывание процесса для каждого установленного ОБ, глобальное прерывание снимается командой UNBREAK. локальное прерывание снимается командой CONTINUE |
CONTINUE | Ноль или несколько имёнSCAN,NEXT, SYSTEM | Служит для возобновления ИМ или для снятия локальных точек прерывания |
DISPLAY |
Статус или код объекта См. примечания 1,2 |
Выводит на экран дисплея статистики многих объектов и другую информацию, прерывается нажатием клавиш BREAK ,CTRL-C,CTRL-BREAK |
Не имеет | Немедленно прекращает процесс ИМ | |
QUIT | Не имеет | Прекращает процесс ИМ при выполнении условий |
RUN | Ноль или больше имён | Исполняет процесс ИМ, снимает все условия остановки процесса ИМ |
SCAN,SYSTEM, NEXT,CLOCK, ХACT | Устанавливает глобальные условия запрета. | |
SET | TIME =n,nS,nM | Устанавливает предел времени исполнения процесса в секундах или минутах |
TLOG[=]ON,OFF | Переключает логику действия терминала, при включении отображает на экране | |
TV[ = ] ON,OFF | Управляет показом процесса отладки | |
STEP | Число тактов | Задаёт темп продвижения по модели |
STOP | Не имеет | Прерывает на время процесс ИМ |
TRAP |
SYSTEM | Определяет, что в каждый момент времени Хакт останавливается, контроль передаётся пользователю |
NEXT | Хакт снимается из СТС, появляется сообщение, контроль передаётся пользователю | |
SCAN | Производит сканирование СТС, контроль передаётся пользователю | |
CLOCK | Ставит ограничение на абсолютное время, когда оно достигает назначенной величины, контроль передаётся пользователю | |
XACT | Ставит ограничение на Хакт с определённым ИН | |
UNBREAK | Одно или несколько имён ОБ | Снимает глобальные условия прерывания |
UNTRAP | SYSTEM, NEXT, CLOCK ,XACT | Снимает условия запрета со всех точек модели |
Наличие отладчика примечательно тем, что после успешно проведённой симуляции и исполнения команды ОУ START, можно передать управление программой пользователю. Пользователь может применить одну или несколько команд отладчика, дальнейшая работа может вестись в диалоговом режиме, с последовательной передачей функций управления от программы к пользователю и обратно. Такой режим способствует отладке программы, уточнению сомнительных мест, выводу на дисплей любой интересующей пользователя информации. Процесс продолжается до подачи команды STOP или любой команды выхода из тестового режима, например, QQ.
Отметим, что в тестовом режиме (сеансе отладчика) невозможно внести какие либо изменения в МФ! Для внесения изменений необходимо прервать сеанс отладчика, вернуться к редактору, с помощью которого вы создавали МФ, внести необходимые изменения и лишь после этого вернуться в тестовый режим.
Далее рассмотрим команды, приведенные в таблице 3.5. Команды рассматриваются не в алфавитном порядке, а по частоте использования и по важности. Первой рассмотрим команду DISPLAY, позволяющую выводить на экран дисплея разнообразную информации о состоянии модели и о данных различных объектов
DISPLAY
Команда используется для выдачи информации о членах классов объектов или о состоянии модели. Классы объектов и коды состояний приведены в комментариях 1,2 таблицы 3.5.
А. Информация о членах классов объектов имеет следующий формат:
D[isplay] класс объекта (имя, номер)
Приведём несколько примеров (обратите внимание на возможные варианты записи команды):
DISPLAY FAC - вывести данные об устройствах
DIS QUEUE(SAM,FRED) - данные об очередях SAM,FRED
D ВLO(110,20)-данные об ОБ с первого по десятый и о 20-м
d AMP -показать все амперпеременные
Если нет членов класса, удовлетворяющих записанной команде, то информация не отображается. Например, если запрашивается информация об устройствах, а ни одно устройство пока не захвачено, то информация на дисплее не появляется.
Б. Информация о статусе модели имеет следующий формат ( впредь будем пользоваться только сокращённой формой записи команды ) :
d код , а для транзактов
d xact=n например ,
d CPU COM- показать время исполнения ЦПУ и загрузку памяти,
d STA - показать состояние модели ( Хакт, время, состояние СЗ ),
d CEC FEC - показать СТС и СБС (списки текущих и будущих ХАСТ),
d ATL 12 - показать список AT команд для ОБ 12,
d XACT=100 - показать транзакт с ИН 100,
d XACT=3 XACT=10 - показать Хакт с ИН 3 и 10.
Информация, показываемая для каждого класса или состояния (за исключением информации об амперпеременных) идентична данным выходного отчёта для объектов. Информация о состоянии модели при введённых условиях запрета и прерывания специфична для отладчика.
Информация о транзактах идентична информации об активных транзактах в окне состояния отладчика, если нет текущих транзактов, то , в ответ на запрос, появляется сообщение об их отсутствии.
TRAP и UNTRAP
Команда TRAP может применяться для установки запрета в самых разных вариантах, которые выбираются пользователем. В GPSS/H существует пять видов наложения условий запрета, рассмотрим их подробнее.