Арифметические переменные

Для большей универсальности языка 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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: