"-" - вычесть;
"/" - разделить;
"@" - разделить по модулю;
"()" -скобки;
"1" - логическое "И";
" " - логическое "ИЛИ";
"=" - равенство;
"о" - не равно;
"<" - меньше;
">=" - больше чем или равно;
"<=" - меньше чем или равно;
">" - больше.
2 ФОРМАТЫ ОПЕРАТОРОВ GPSS/PC
Операторы GPSS/PC имеют следующий формат:
Метка______ Операция__ Операнды__ ;Комментарии
Знак "_" указывает пробел, знак ";" объявляет начало поля комментариев.
Метка, если она имеется, должна начинаться с первой колонки и содержать не более пяти алфавитно-цифровых символов, начинающихся с буквы.
Звездочка (*) в первой колонке означает строку комментариев.
Поле операции содержит название блока или служебного оператора (карты). Это поле может начинаться со второй колонки и должно быть отделено от метки пробелом. Длина поля операции не менее четырех символов (начальные символы блоков или карт).
Поле операндов отделяют от поля операции пробелом. Между операндами должны стоять запятые.
Пример:
^FACILITY DESCRIPTION
FAC SEIZE 1 ;CPU
ADVAN 10,5 ;MSEC
RELEASE 1
MAC TRANSFER 3,FAC
Карты описания таблиц, функций, переменных и памятей должны иметь в поле метки число от 1 до 32767 (2Л15 - 1) или предварительно определенный символ.
Примеры:
^ ENTITIES DESCRIPTION
1 STORAGE 1280 ;MAIN
4 TABL М1Д10ДО
В полях операндов могут быть использованы следующие обозначения.
Константа - целое число от 1 до 32767 или предварительно определенная последовательность символов.
СЧА $ const -стандартный числовой атрибут, номер которого определяется
константой const.
* const -значение параметра, номер которого определяется константой const
СЧА1*СЧА2 $ const - косвенная адресация с использованием стандартного -числового атрибута 1 (СЧА1), номер которого задан значением стандартного числового атрибута 2 (СЧА2), определяемого константой const.
СЧА%СЧА $ const - косвенная адресация через стандартные числовые атрибуты.
Примеры:
XF*V$2
Содержимое полнословной ячейки, номер которой определяется значением переменной 2.
FN*P$1 Значение функции,номер которой определяется содержимым параметра 1.
ХЩ2 Содержимое полусловной ячейки номер два.
*TERM
Значение параметра, номер которого определен константой TERM. В описательной части программы значение константы TERM должно быть определено оператором EQU, например: TERM EQU 10 при этом *TERM означает содержимое десятого параметра.
Ниже дано полное описание форматов блоков, а также служебных и управляющих операторов GPSS/PC.
2.1 БЛОКИ
2.1.1 ADVANCE (ЗАДЕРЖАТЬ)
ADVANCE - задерживает транзакт.
Формат: ADVA[NCE] A,B
А - среднее время задержки (константа, если В не задано);
В - разброс относительно среднего значения, должен быть меньше или равен А.
Блок ADVANCE моделирует временную задержку транзакта в течение определенного интервала. Значение задержки по умолчанию равно нулю. Если поле В не является FN$, то время задержки является случайным числом, распределенным равномерно на интервале от (А+В) до (А-В). Если поле В является функцией FN$, то время задержки определяется произведением поля А на значение функции в поле В. Функция может быть использована для задания времени задержки с определенным средним значением и отклонением, зависящими от А.
Примеры:
ADVANCE 75
Транзакт будет оставаться в блоке ADVANCE в течение 75 единиц модельного времени.
ADVANCE 12,5
Транзакт будет оставаться в блоке от 7 до 17 единиц времени.
ADVANCE 5,FN$1
Время задержки равно произведению значения функции FN$1 на число пять.
См.также:
GENERATE
2.1.2 ASSEMBLE (СОЕДИНИТЬ)
ASSEMBLE - объединение транзактов, принадлежащих одному семейству (или ансамблю).
Формат: ASSE[MBLE] A
А - число объединяемых транзактов.
Первый транзакт семейства, достигнув блока ASSEMBLE, задерживается в нем до тех пор, пока остальные члены семейства не поступят в этот блок. Когда транзакты, число которых указано в поле А, поступят в этот блок, они будут удалены из модели, а первый прибывший транзакт продолжит движение.
Пример:
ASSEMBLE 3
После того, как 3 транзакта одного семейства войдут в блок, один (первый) выйдет из блока и продолжит движение, остальные будут уничтожены.
См.также:
GATHER
MATCH
SPLIT
2.1.3 ASSIGN (ПРИСВОИТЬ)
ASSIGN - изменяет значение параметра транзакта.
Формат: ASSI[GN] A,B
А - номер изменяемого параметра (+, -);
В - новое значение параметра.
Если за полем А следует знак "+" или "-", то значение поля В соответственно добавляется или вычитается из А. Если знаки "-" или "+" не указаны, то значение поля В становится текущим значением параметра.
Примеры:
ASSIGN 2,8
Присваивает параметру 2 значение 8.
ASSIGN 3+,V$5
Добавляет значение переменной 5 к параметру 3.
См.также:
DECREMENT INCREMENT
2.1.4 BUFFER (ВОЗОБНОВИТЬ ПРОСМОТР СПИСКА)
BUFFER - возобновляет просмотр списка текущих событий.
Формат: BUFF[ER]
Не имеет операндов.
Останавливает процесс движения транзакта и заново начинает просмотр списка текущих событий. Не связан с временем задержки.
Пример:
BUFFER Возобновляет просмотр списка текущих событий.
См.также:
PRIORITY
2.1.5 DECREMENT (УМЕНЬШИТЬ ЗНАЧЕНИЕ)
DECREMENT - уменьшает значение параметра транзакта.
Формат: DECREMENT] A,B
А - номер изменяемого параметра;
В - значение для вычитания.
Величина, указанная в поле В, вычитается из значения параметра, номер
которого указан в поле А.
Примеры:
DECREMENT 3,7
Вычитается число 7 из значения третьего параметра текущего транзакта.
DECREMENT XH$6,V$4
Значение переменной 4 вычитается из параметра, номер которого задан ячейкой 6 формата полуслово.
См.также:
ASSIGN INCREMENT
2.1.6 DEPART (ПОКИНУТЬ ОЧЕРЕДЬ) DEPART - удаляет транзакт из очереди.
Формат: DEPA[RT] A,B
А - номер (имя) очереди;
В - число удаляемых из очереди элементов.
Удаляет текущий транзакт из очереди, указанной в поле А, и уменьшает содержимое очереди на значение поля В. Транзакт может находиться одновременно в двух различных очередях.
Примеры:
DEPART 5
Текущий транзакт удаляется из очереди 5, а длина очереди уменьшается на единицу.
DEPART P$3,7
Транзакт удаляется из очереди, номер которой определен параметром 3, длина очереди уменьшается на 7 элементов.
См.также:
QUEUE
2.1.7 ENTER (ВОЙТИ В ПАМЯТЬ) ENTER - помещает транзакт в память.
Формат: ENTE[R] A,B
А - имя памяти символическое или числовое;
В - число занимаемых единиц памяти (по умолчанию единица).
Проверяется наличие свободного объема памяти, номер которой определен в поле А. Если имеется свободная память, то транзакт входит в блок ENTER. При этом занятый объем памяти увеличивается на значение поля В. Если транзакт не может войти в блок ENTER, он задерживается в предыдущем блоке.
Примеры:
ЕNTER 1
Войти в память 1, занимая единицу ее объема.
ENTER Р$1ДО
Войти в память, номер которой определяется параметром 1, занимая 10 единиц памяти.
См.также:
LEAVE STORAGE
2.1.8 GATE (ВПУСТИТЬ)
GATE - вспомогательный блок, проверяющий состояния устройств, памятей, логических ключей.
Формат: GATE_R A,B
Внутренний операнд R определяет проверяемое условие в виде стандартного
логического атрибута и может принимать следующие значения:
U - устройство занято;
NU - устройство не занято;
I - устройство прервано;
N1 - устройство не прервано;
SF - память заполнена;
SNF - память не заполнена;
SE - память пустая;
SNE - память не пустая;
LR - ключ выключен;
LS - ключ включен;
М - транзакт находится в состоянии синхронизации;
MN - транзакт не находится в состоянии синхронизации.
Если проверяемое условие для объекта, номер которого определяется полем А, выполняется (СЛА "ИСТИНА"), то транзакт входит в блок GATE. Если условие "ЛОЖЬ", то возможны два случая:
- если поле В задано, то транзакт идет в блок, номер которого указан в поле В;
- если в поле В пробел, то транзакт ждет в предыдущем блоке, пока не
выполнится условие.
Примеры:
GATE_SF 1
Если память номер 1 полна, то транзакт входит в блок GATE, в противном случае ждет ее заполнения.
GATE_NU P$2,MET
Если устройство, номер которого определен параметром Р$2, не занято,то транзакт входит в блок GATE, в противном случае он идет в блок с именем МЕТ.
2.1.9 GATHER (СОБИРАТЬ)
GATHER - накапливает транзакты, являющиеся
членами семейства.
Формат: GATHER_A
А - счетчик транзактов, которые должны быть накоплены.
Транзакты одного семейства задерживаются в блоке GATHER до тех пор, пока их число не станет равным значению поля А. Когда последний транзакт войдет в блок GATHER, все они одновременно выходят из него в том порядке, в котором поступили. Состояние блока GATHER может быть проверено блоком GATE.
Пример:
GATHER 6
Транзакты накапливаются в этом блоке до тех пор, пока в нем не соберутся шесть транзактов из одного семейства, после чего все они смогут продолжать движение.
См.также:
ASSEMBLE
MATCH
SPLIT
2.1.10 GENERATE (ГЕНЕРИРОВАТЬ)
GENERATE - вводит транзакты в модель.
Формат: GENE[RATE] A,B,C,D,E,F,G
А - среднее значение интервала времени;
В - разброс или модификатор среднего значения (по умолчанию ноль);
С - время появления первого транзакта;
D - общее число генерируемых транзактов;
Е - уровень приоритета каждого транзакта; (от 0 до 127, знач. по умолчанию 0);
F - число параметров (по умолчанию 12);
G - тип параметра (F -полнословный,
Н -полусловный -по умолчанию).
Вводит транзакты в модель, посылая их в следующий по порядку блок. Если в поле В не указана функция, то интервал между поступлением транзактов определяется случайным числом, равномерно распределенным в диапазоне от (А-В) до (А+В). Если поле В является функцией (FN$), то этот интервал определяется произведением поля А на значение функции, заданной в поле В.
Примеры:
GENERATE 15,3,25
Генерируются транзакты с интервалом прихода от 12 до 18 единиц времени, первый из которых поступает в момент времени 25 единиц.