Для создание транзактов предназначен блок GENERATE:
GENERATE _ A,B,C,D,E
Поле А задает среднее значение интервала времени между моментами поступления двух транзактов в модель. Поле B определяет модификатор среднего значения, который может быть задан в виде либо модификатора интервала, либо в виде модификатора-функции. Поле С определяет момент поступления первого транзакта в модель. Поле D задает общее число транзактов, создаваемых данным блоком. В случае пустого поля D генерируется неограниченное число транзактов. Поле Е задает приоритет транзактов.
Все транзакты, созданные блоком GENERATE, поступают в следующий блок. По мер продвижения транзактов в модели изменяются значения стандартных числовых атрибутов транзакта. Одни СЧА транзакта формируются автоматически, другие задаются пользователем. Подобные стандартные числовые атрибуты, задаваемые пользователем, называются параметрами транзакта. Для обращения к ним используется запись вида Pi, где i – целая константа. Общее число параметров транзакта определяется в поле F блока GENERATE целым числом. По умолчанию транзакт имеет 12 параметров.
Поле G определяет число байт в памяти, отводимое под один параметр. Так, если в поле G задана буква F (FULL), то тогда параметры записываются в памяти ЭВМ как полнословные и занимают 4 байта. Если же в поле G указана буква H (HALF), то параметры являются полусловными и занимают 2 байта в памяти. Аналогично будут представлены параметры в памяти ЭВМ и в случае пустого поля G.
Удаление транзактов из модели осуществляется блоком TERMINATE:
TERMINATE _ A
Поле А определяет насколько уменьшается содержимое счетчика завершений при входе транзакта в блок. Если содержимое данного поля не задано, то оно полагается равным нулю. В тот момент времени, когда значение счетчика будет равно или меньше 0, моделирование прекращается.
Начальное значение такого счетчика задается в поле A блока START.
В том случае, когда моделирование должно продолжаться в течение заданного промежутка модельного времени, используются два сегмента: основной и вспомогательный. В основном сегменте используется блок TERMINATE с пустым полем A. Вспомогательный сегмент определяет время моделирования и состоит из трех блоков:
GENERATE _ 1000000
TERMINATE _ 1
START _ 1
В данной структуре блок GENERATE выдает первый и единственный транзакт через 1000000 единиц модельного времени. Этот транзакт, пройдя блок TERMINATE, обратит счетчик в ноль и прекратит моделирование.
В том случае, когда нет необходимости в выводе результатов моделирования на экран, можно в поле B указать NP (NOT PRINT).
Для моделирования задержки транзактов в модели служит блок:
ADVANCE _ A,B
Операнды полей A и B имеют то же значение, что параметры блока GENERATE.
Для моделирования одноканальных устройств используются блоки:
SEIZE _ A
RELEASE _ A
В поле A задается номер либо имя устройства. При вхождении транзакта в блок SEIZE устройство, которое указано в поле A, оказывается занятым до тех пор, пока тот же самый транзакт не пройдет через блок RELEASE.
В начальный момент времени все одноканальные приборы обслуживания считаются свободными и обозначаются NU (NOT USE). Занятие происходит при прохождении транзактом блока SEIZE. Особенностью данного блока является то, что при занятии устройства одним транзактом продвижение других транзактов приостанавливается и образуется очередь перед блоком SEIZE. Одноканальный прибор в этом случае обозначается U (USE).
Система моделирования автоматически накапливает информацию о коэффициентах загрузки приборов и среднем времени занятия приборов транзактами. Однако многие другие параметры системы, такие как средняя длина очереди и время нахождения транзакта в очереди, не фиксируются. Для сбора информации об очередях используется статистический объект QUEUE.
Накопление статистики осуществляется двумя блоками: QUEUE и DEPART.
QUEUE _ SMO1
………………
DEPART _ SMO1
Эти блоки в поле A содержат ссылку на одну и ту же очередь. Когда транзакт проходит блок QUEUE, запоминается значение модельного времени. Далее транзакт проходит через блок DEPART, где из текущего значения модельного времени C1 будет вычитаться запомненное значение, в результате чего получается время прохода транзактом блоков, расположенных между блоками QUEUE и DEPART.
Для обеспечения произвольного движения транзактов от блока к блоку – модификации потоков транзактов используется блок TRANSFER. Данный блок имеет несколько вариантов записи:
а) статистический способ передачи транзактов в различные блоки модели. В этом случае используются три поля: А, B и C.
TRANSFER _ A,B,С
Поле A содержит вещественную константу в диапазоне от 0 до 1. Запись числа всегда производится с десятичной точки. Поля B и C содержат номера блоков. Поле A определяет, что с вероятностью A транзакт попадет в блок C и с вероятностью 1-A – в блок B.
б) если поле B – пустое, то тогда транзакт направляется в блок, стоящий после блока TRANSFER.
TRANSFER _ A,,C
в) пустыми являются поля A и C. В этом случае осуществляется безусловный переход транзактов в блок B.
TRANSFER _ ,B
г) в режиме логической передачи в поле A указывается BOTH:
TRANSFER _ BOTH, B, С
В этом случае транзакт сначала пытается войти в блок B, а затем в случае неудачной попытки – в блок C. Если и второй блок оказался занят, то транзакт задерживается перед блоком TRANSFER до изменения ситуации.
Блок TEST необходим для изменения маршрута движения транзактов в зависимости от соотношения двух величин и имеет следующий формат:
TEST _ X _ A,B,C
Операнд X содержит условие проверки соотношения между двумя СЧА и принимает следующие значения: L – меньше, E – равно, G – больше, LE – меньше либо равно, GE – больше либо равно, NE – не равно. Если условие A X B выполняется, то транзакт направляется в следующий блок, иначе – в блок C.
Для получения выборочного распределения произвольной СЧА используется блок TABLE. Формат записи:
TABLE _ A,B,C,D
Поле A использует СЧА, распределение которого следует получить. Поле B задает верхнюю границу первого частотного интервала, поле C – ширину частотных интервалов, поле D – количество частотных интервалов.
Диапазон значений времени ожидания в очереди, указанный в поле A, разбивается на множество частотных интервалов, определяемое полем D. Так, первый интервал имеет диапазон от минус бесконечности до величины в поле B, второй интервал содержит значения, большие чем B, но меньшие чем В+С. Наконец, последний интервал содержит все значения, большие чем последняя граница.
Занесение информации в таблицу производится с помощью блока TABULATE, формат которого выглядит следующим образом:
TABULATE _ A
Поле A определяет номер или имя таблицы, которая была ранее определена с помощью блока TABLE. При входе транзакта в блок TABULATE значение аргумента таблицы заносится в один из частотных интервалов.
Для изменения значения параметров используется блок ASSIGN, имеющий следующий формат:
ASSIGN _ A,B,C
В поле A указывается номер или имя параметра, в который записывается значение операнда B. В том случае, если в поле A после имени или номера параметра стоит знак +, то значение операнда B прибавляется к содержимому параметра A, если же стоит знак минус -, то значение операнда B вычитается из операнда A.
Для сохранения текущего значения модельного времени в заданный параметр транзакта используется блок MARK:
MARK _ A
Поле A содержит номер или имя транзакта, в который заносится текущее модельное время при входе транзакта в блок. Данный блок также может быть использован для определения времени пребывания транзакта в какой-то части модели с помощью последовательности блоков вида:
MARK _ PARAM
…………………
TABULATE _ MP$PARAM
СЧА MP$PARAM будет содержать разность между текущим значением модельного времени и временем, занесенным в параметр с помощью блока MARK. В ситуации, когда поле A блока MARK пусто, текущее время запоминается в качестве отметки времени входа транзакта в модель, используемой в качестве M1.
Среди вычислительных объектов GPSS большое значение имеют переменные и функции. Арифметические переменные могут быть целыми и действительными. Целые переменные определяются в самом начале перед моделированием с помощью оператора VARIABLE следующего формата:
[Имя переменной] _ VARIABLE _ [выражение]
Имя переменной используется в дальнейшем для ссылок на нее, а выражение определяет значение переменной.
Действительные переменные определяются перед моделированием с помощью оператора FVARIABLE с тем же форматом записи. Отличие между действительными и целыми переменными состоит в том, что для действительных переменных все промежуточные операции выполняются с сохранением дробной части. После всех вычислений результат округляется до целого числа.
Арифметические переменные имеют один СЧА V, значением которого является результат вычисления арифметического выражения переменной.
Функции используются для вычисления величин, определяемых табличными зависимостями. Формат определения функции:
[Имя функции] _ FUNCTION _ A,B
Поле A – стандартный числовой атрибут, являющийся аргументом функции, B – тип функции и число точек таблицы, определяющей функцию.