Для большей универсальности языка GPSS\PC у некоторых СЧА стандартизировано лишь обозначение, а смысл этих СЧА и алгоритмы их вычисления определяются пользователем при описании модели. К таким СЧА относятся арифметические переменные. Обозначение арифметической переменной имеет вид:
V$name
Использовать любой конкретный СЧА вида V$name в качестве операнда можно лишь при условии, что этот СЧА описан пользователем в данной модели.
Описание атрибута V$name осуществляется в строке описания арифметической переменной. В одной строке описывается одна переменная. В поле метки обязательно записывается имя описываемой переменной, в поле операции записывается слово VARIABLE или FVARIABLE, а в поле операндов - арифметическое выражение, составляемое из СЧА, знаков арифметических операций и круглых скобок.
В арифметическом выражении можно использовать следующие знаки арифметических операций:
+ | сложить |
- | вычесть |
# | умножить |
/ | разделить |
@ | взять остаток от деления |
^ | возведение в степень |
Пусть, например, переменная V$SUM описана строкой
SUM VARIABLE S1+S2.
Тогда значение V$SUM будет определяться как суммарное содержимое первой и второй памяти. Если переменную V$CAP описать в виде
CAP VARIABLE R*8+5*8,
то её значением будет сумма числа свободных и числа занятых единиц той памяти, номер которой записан в восьмом параметре транзакта.
При описании арифметических переменных необходимо иметь в виду следующее:
1) Равноприоритетные операции в арифметическом выражении при отсутствии скобок выполняются слева направо. Операции #, /, @ имеют приоритет по отношению к операциям +, -.
2) Если в строке описания арифметической переменной в поле операции записано VARIABLE, переменная считается целой, в случае записи FVARIABLE - вещественной. При вычислении целой переменной от результатов всех промежуточных операций берется целая часть. При вычислении вещественной переменной этого не делается. Однако окончательный результат округляется в меньшую сторону, как в целой, так и в вещественной переменной.
Например, если в модель включены строки
ABC1 FVARIABLE 10#(11/3)
ABC2 VARIABLE 10#(11/3)
ABC3 FVARIABLE 1/5,
то описанные в этих строках переменные будут иметь следующие значения:
V$ABC1 = 36,
V$ABC2 = 30,
V$ABC3 = 0.
3) Синтаксис арифметических выражений соответствует синтаксису, принятому в языках программирования высокого уровня. Например, аргументы стандартных функций типа SIN, EXP,SQR, и т.п. должны заключаться в скобки.
4) Синтаксис арифметических выражений в переменных такой же, как в команде SHOW.
Булевские переменные
Обозначение булевской переменной имеет вид:
BV$name
Этот СЧА, как и арифметическая переменная, описывается в тексте модели пользователем. Булевская переменная описывается в строке описания булевской переменной. В одной строке описывается одна переменная. В поле метки обязательно записывается имя переменной, в поле операций - слово BVARIABLE, а в поле операндов - булевское выражение.
Булевское выражение составляется из элементов пяти типов:
1. СЧА
2. отношений
3. стандартных логических атрибутов (СЛА)
4. знаков логических операций
5. скобок
1) Значением булевской переменной является число 1, когда булевское выражение истинно и число 0 - в противном случае. Подчеркнем, что значением булевской переменной являются именно числа.
2) Отношение представляет собой запись двух СЧА, соединенных одним из знаков:
‘G' - больше чем,
‘L' - меньше чем,
‘E' - равно,
‘NE' - не равно,
‘LE' - меньше или равно,
‘GE' - больше или равно.
Отношение имеет значение "истинно" в том и только в том случае, если значения входящих в него СЧА отвечают смыслу соединяющего знака. Например, переменные BV$LOG1 и BV$LOG2, описанные строками:
LOG1 BVARIABLEV$ABC1'G'5
LOG2 BVARIABLE V$ABC1'NE'V$ABC2
всегда равны единице, если V$ABC1 и V$ABC2 описаны так, как в предыдущем параграфе.
3) Если СЧА в логическом выражении не входит в отношение, то ему приписывается логическое значение (в этом случае СЧА должен быть заключен в скобки). Логическое значение "ложно" приписывается в случае, если численно СЧА равно нулю, во всех остальных случаях приписывается значение "истинно".
Стандартные логические атрибуты (СЛА) в GPSS\PC отражают состояние оборудования в модели. Это следующие атрибуты.
СЛА устройств:
· FIj - устройство j захвачено,
· FNIj - устройство j не захвачено,
· FUj - устройство j занято,
· FNUj - устройство j свободно,
· Fj - устройство j не свободно,
· FVj - устройство j доступно,
· FNVj - устройство j недоступно.
СЛА памятей:
· SFj - память j заполнена,
· SNFj - память j не заполнена,
· SEj - память j пуста,
· SNEj - память j не пуста,
· SVj - память j доступна,
· SNVj - память j недоступна.
СЛА ключей:
· LSj - логический ключ j включен,
· LRj - логический ключ j выключен.
СЛА блоков MATCH:
· M - в j-ом блоке синхронизации есть транзакт того же семейства,
· NM - в j-ом блоке синхронизации нет транзакта того же семейства.
Последние два СЛА могут быть использованы только в блоке GATE.
СЛА имеет значение "истинно" тогда и только тогда, когда выполняются соответствующие ему условие - в приведенном перечне оно записано напротив вида индикатора. Указатель j в обозначении индикатора задается так же, как и в обозначении СЧА, т.е. может быть номером, косвенным номером или именем объекта.
4) Знаки логических операций в описании булевской переменной - это знак логического сложения (+) и знак логического умножения (#). Операция умножения имеет приоритет по отношению к операции сложения. Например, булевская переменная BV$RESURS, описанная строкой:
RESURS BVARIABLE FNU1#FNU2+SNF1#SNF2,
равна единице тогда и только тогда, когда оба устройства 1 и 2 свободны, или памяти 1 и 2 обе не заполнены.
Следует иметь в виду, что, хотя все промежуточные операции в булевской переменной имеют логические значения «истинно» или «ложно», сама булевская переменная имеет числовое значение 0 или 1.
Системные СЧА
СЧА | Расшифровка |
RN | Числовые последовательности считываются из датчиков псевдослучайных чисел (ДПЧ) с помощью СЧА RNj. Все датчики генерируют последовательность равномерно распределенных случайных дробных чисел от 0 до 0,999999999999999 (пятнадцать девяток после нуля). Количество датчиков не ограничено. |
CRN | Используется для получения 29-ти видов неравномерных распределений. Точность вычислений зависит от используемых пользователем настроек. |
C1 | Текущее значение условного времени. Автоматически изменяется программой и устанавливается в 0 управляющими операторами CLEAR или RESET. |
AC1 | Текущее значение абсолютного времени. Автоматически изменяется программой. Эта величина не меняется под действием управляющего оператора RESET и устанавливается в 0 лишь под действием оператора CLEAR. |
TG1 | Число, равное текущему значению счетчика завершений. Транзакты, вошедшие в блоки TERMINATE с ненулевым операндом А, уменьшают значение этого счетчика на число, равное значению операнда А. |
М1 | Время пребывания в модели транзакта, обрабатываемого программой в данный момент. Эта величина может изменяться блоком MARK. Время пребывания вычисляется следующим образом: М1 равно разнице текущего значения абсолютного времени и отметки времени обрабатываемого транзакта. |
PR | Приоритет обрабатываемого в данный момент транзакта. Эта величина может изменяться блоком PRIORITY. По умолчанию приоритет равен 0. |
СЧА транзактов
Транзакты имеют ряд стандартных числовых атрибутов. Например, СЧА с названием PR позволяет ссылаться на приоритет транзакта. СЧА с названием M1 содержит так называемое резидентное время транзакта, т.е. время, прошедшее с момента входатранзакта в модель через блок GENERATE. СЧА с названием XN1 содержит внутренний номер транзакта, который является уникальным и позволяет всегда отличить один транзакт от другого. В отличие от СЧА других объектов, СЧА транзактовне содержат ссылки на имя или номер транзакта. Ссылка на СЧА транзакта всегда относится к активномутранзакту, т.е. транзакту, обрабатываемому в данный момент симулятором.
Важными стандартными числовыми атрибутами транзактов являются значения их параметров. Любой транзакт может иметь неограниченное число параметров, содержащих те или иные числовые значения.
СЧА | Расшифровка |
XN1 | Номер активноготранзакта. |
Pj или *j, или *<имя>, или *$<имя> | значение параметра j текущего транзакта или значение параметра с именем <имя> текущего транзакта. |
MPj | Значение времени, равное разности абсолютного модельного времени и содержимого j-го параметра текущего транзакта. |
MBj | Флаг синхронизации: 1, если транзакт в блоке j принадлежит тому же семейству, что и текущий транзакт; 0 - в противном случае. |
Пример: P1, MP7, PR, P*4, MP*2
СЧА блоков
СЧА | Расшифровка |
Nj | Общее число транзактов, которые должны войти в j-й блок. Подсчет ведется программой автоматически. Например, N$RADIO - счетчик числа входов в блок RADIO. |
Wj | Текущее число транзактов, которые находятся в блоке j. Значение этого счетчика подсчитывается автоматически. Например, W$SNOW - счетчик текущего числа транзактов в блоке SNOW. |
Пример: N31, W73
СЧА устройств
СЧА | Расшифровка |
Fj,Uj | Флаг занятости устройства. Эта величина равна 0, если устройство свободно, и 1 - во всех остальных случаях. Этот атрибут изменяется блоками SEIZE, RELEASE, PREEMPT (захват), PREEMPT (прерывание) и RETURN. |
NUj | Флаг незанятости устройства: равно 1, если устройство свободно, и 0 - если занято. Статус занятости изменяется блоками SEIZE, RELEASE, PREEMPT (захват), PREEMPT (прерывание) и RETURN. |
FIj,Ij | Флаг прерывания устройства: 1, если устройство находится в состоянии захват в режиме прерывания (блок PREEMPT (захват)), 0 - в противном случае. |
NIj | Флаг непрерывания устройства: 1, если устройство не прервано в блоке PREEMPT (захват), 0 - иначе. |
FRj | Коэффициент использования устройства FRj считается в обычном виде (например 0.709), а не в тысячных долях (например 709). |
FCj | Общее число входов в устройство j. |
FTj | Среднее время использования устройства одним транзактом. |
FVj | Флаг доступности устройства: 1 - если доступно, 0 - недоступно. После начала моделирования устройство доступно. Устройство переводится в доступное блоком FAVAIL. |
FNVj | Флаг недоступности устройства: 1 - если недоступно, 0 - доступно. Устройство переводится в недоступное с помощью блока FUNAVAIL. |
Пример: FR$WERK3, FC$CPU