Профессиональная версия GPSS / Н насчитывает более 60 операторов блоков. Чтобы уяснить отличие от предыдущих версий все блоки можно условно разделить на три группы:
1. блоки, одинаковые для всех версий, которые в свою очередь делятся на обязательные для любой модели и поэтому широко распространённые и блоки для специфических моделей и поэтому употребляемые реже.
2. блоки, дублирующие некоторые новые и ряд старых операторов управления и описания и отличающиеся от них тем, что они вводятся непосредственно в ядро программы. Это сделано для удобства написания и эксплуатации модели. В настоящее время известно 12 таких блоков-дублеров:
BCALL, BCLEAR, BCLOSE, BFILEDEF, BGETLIST, BGETSTRING, BLET, BPUTPIC, BPUTSTRING, BRESET, BRMULT, BSTORAGE
3. Блоки, описывающие новые действия, возникшие после появления в языке дебаггера, например ATNWITE, позволяющий транзактам ожидать следующей интерактивной сессии.
Естественно, что в пособии описать их все невозможно, поэтому в тексте главы и в приложениях будут рассмотрены только наиболее распространённые операторы, которые будут использованы студентами при проведении лабораторных работ и в процессе курсового проектирования.
Прежде чем дать описание некоторым основным операторам блоков дадим несколько разъяснений.
- Код блока может быть сокращен до четырех символов, но для лучшей читаемости модели этого делать не рекомендуется. Кроме того, все блоки- дублеры не допускают сокращений
- Вспомогательный код может быть записан сразу за кодом блока или отделяться пробелами. При использовании вспомогательного кода сокращение кодов блока не допускается.
- Квадратные скобки используются для необязательных элементов.
- Формат записи операторов включен в < >.
- Если операнд кодируется числом, то оно должно содержать только целую часть, за исключением тех случаев, где предусмотрено использование плавающей точки. Рассматриваемая версия предусматривает возможность представления времени транзакта числом с плавающей точкой, в то время как предыдущие версии работали только с целочисленными дискретами.
- Блокам надо стремиться присваивать символические имена, а не номера.
- Первым блоком в ядре программы всегда является GENERATE
Создание, задержка и уничтожение транзактов.
К данной группе относятся операторы GENERATE, ADVANCE и TERMINATE. Оператор GENERATE служит для создания (генерации) транзактов в ИМ с заданными законами распределения интервалов поступления и имеет вид:
< GENERATE A,B,C,D,E,F,G,H,I>
Операнды А, В,..., I указывают следующие характеристики входного потока (если какие-либо операнды отсутствуют, то им по умолчанию присваиваются стандартные значения):
А — среднее время поступления транзактов (по умолчанию — 0) или встроенная функция;
В— модификатор среднего времени (0);
С — время задержки первого транзакта (0);
D — количество создаваемых блоком транзактов (∞);
Е — приоритет транзактов (0);
F...,I— количество и формат параметров транзактов
Если в поле F записан "0", то у транзактов нет параметров.
Примеры:
а) GENERATE, 10,2,1000,,4
б) GENERATE, 100,FN$ЕХРОN,,100,,5РВ
а) время поступления транзактов распределено равномерно на интервале [8, 12] (или 10 ± 2); первый транзакт будет создан в момент времени, равный 1000 единиц; всем транзактам присваивается приоритет 4;
б) время поступления транзактов распределено экспоненциально со средним значением 100; генерируется только 100 транзактов с нулевым приоритетом; каждый транзакт имеет по 5 параметров форматом "байт".
Для задержки транзактов на заданное время используется оператор ADVANCE
< ADVANCE A,B >
Операнды А и В аналогичны соответствующим операндам в операторе GENERATE.
Примеры:
ADVANCE 100,FN$ЕХРON
ADVANCE 10,2
Оператор TERMINATE уничтожает транзакты (удаляет из ИМ) и имеет вид:
< TERMINATE A >
Операнд A (по умолчанию — 0) принимает значения от 1 до бесконечности и указывает число, на которое уменьшается содержимое счетчика числа завершений, значение которого задается в управляющей карте START в поле операндов А (см. далее).
Примеры:
а) TERMINATE - ноль по умолчании
б) TERMINATE 2
а) транзакт уничтожается, счетчик числа завершений не изменяется;
б) в отличие от а) счетчик числа завершений уменьшается на 2.
Примечание:
В модели может быть любое число блоков GENERATE, которые могут последовательно представлять разные виды транзактов.
Число TERMINATE также не ограничено, но только один из них имеет значащее значение операнда А.
Примечание: Следует отметить, что операторы GENERATE и TERMINATE относятся к числу особых. GENERATE допускает только выход из него, попытка войти в оператор приводит к машинной ошибке. TERMINATE наоборот допускает только вход!
Для прекращения испытаний во многих моделях может быть использован отдельный сегмент ядра модели, называемый таймер, состоящий, как правило, из двух операторов.
Пример таймера:
GENERATE A, где А – время проведения испытаний.
TERMINATE A, где А - число уничтожаемых транзактов. Для таймера оно обычно равно 1.
Значение операнд А в операторе управления START при этом также равно 1.