Краткая характеристика языка PLUS

Язык GPSS можно отнести к языкам высокого уровня. В силу этого он имеет довольно слабые алгоритмические возможности. Для устранения этого недостатка в систему GPSS World добавлен PLUS -язык низкого уровня. Выражения, процедуры и эксперименты PLUS можно использовать в GPSS-моделях.

Рассмотрим основные элементы языка PLUS.

Алфавит языка PLUS (GPSS World) содержит алфавитно-цифровые и специальные символы. Для задания имен используются алфавитно-цифровые символы (прописные буквы A-Z, строчные бук­вы a-z, цифры 0—9 и знак подчеркивания «_»). Для обозначения опе­раторов и пунктуации используются специальные символы («#», «*», «&», «+», «-», «/», «\», «,», «;»). В комментариях допускается исполь­зование символов русского алфавита «А-Я».

Имена - это созданные пользователем последовательности сим­волов, используемые для обозначения объектов, переменных и про­цедур. Имя должно начинаться с буквы, в нем можно использовать от 1 До 250 алфавитно-цифровых символов. При этом имена не должны совпадать с ключевыми словами GPSS и с СЧА. Следует отметить, что GPSS World не различает регистр алфавита.

PLUS – выражение - это комбинация одного или нескольких элементов, называемых факторами. Выражения строятся с использо-Ванием операторов и вызовов процедур, обрабатывающих факторы, выражения могут использоваться в PLUS-процедурах и в операндах операторов GPSS. Если выражение используется в операндах GPSS-блоков, то оно должно записываться в круглых скобках.

Типы данных. Переменные пользователя, элементы матриц, ячейки, параметры транзактов могут иметь значения различных ти­пов данных. В GPSS World используются три основных типа данных:

целочисленный (Integer) - это 32-х битовые двоичные числа. Если при выполнении арифметической операции происходит пере­полнение целочисленного значения, производится автоматическое преобразование его в вещественное;

вещественный (Real) - это числа с плавающей точкой двойной точности. Для представления мантиссы используется 15 десятичных разрядов, а для порядка - значения в интервале от -306 до 306;

строковый (String) - это последовательность символов ASCII; строки не ограничены в размерах (максимальная их длина определя­ется параметрами настройки Edit/Setting.../Simulation).

Выражения могут быть вычисляемыми, численно вычисляемы­ми, вычисляемыми в виде строки.

Факторы. Факторы - это основные элементы выражений, кото­рые в свою очередь используются в операндах операторов GPSS и PLUS-процедурах.

Факторами выражений GPSS могут быть:

1) строковые константы;

2) вещественные константы;

3) целочисленные константы;

4) имена;

5) элементы PLUS-матрицы;

6) обращения к процедурам (значения, возвращаемые процеду­рами);

7) стандартные числовые атрибуты.

Для объединения факторов в выражение используются операто­ры и вызовы процедур.

Операторы. В табл. 4.48 представлены арифметические опера­торы, используемые в выражениях GPSS World, перечисленные в по­рядке убывания их приоритетов.

Таблица 4.48

Оператор Действие Результат Унарный/бинарный (ко­личество операндов)
- Отрицание Аддитивная инвер­сия Унарный
^ Возведение в степень Арифметический показатель степени Бинарный
NOT или ~ Инверсия 1 (TRUE) или 0 (FALSE) Унарный
AND Логическое И 1 (TRUE) или 0 (FALSE) Бинарный
OR Логическое ИЛИ 1 (TRUE) или 0 (FALSE) Бинарный
G или > Больше 1 (TRUE) или 0 (FALSE) Бинарный
L или < Меньше 1 (TRUE) или 0 (FALSE) Бинарный
Е или = Равно 1 (TRUE) или О (FALSE) Бинарный
NE ИЛИ /= Не равно 1 (TRUE) или О (FALSE) Бинарный
LE ИЛИ <= Меньше или равно 1 (TRUE) или О (FALSE) Бинарный
GE или >= Больше или равно 1 (TRUE) или О (FALSE) Бинарный
# или * Умножение Арифметическое произведение Бинарный
/ Деление Арифметическое частное Бинарный
\ Целочис­ленное де­ление Целочисленное ча­стное Бинарный
@ Деление по модулю Целочисленный ос­таток Бинарный
+ Сложение Арифметическая сумма Бинарный
- Вычитание Арифметическая разность Бинарный

Все арифметические операторы автоматически преобразуют строковые операнды в числовые значения.

Перенастройку некоторых операторов можно выполнить через пункт меню Edit/Setting.. /Simulation.

К операторам языка PLUS также относятся:

PROCEDURE - определяет PLUS-процедуру;

EXPERIMENT - определяет PLUS-эксперимент;

TEMPORARY - определяет и ограничивает область действия локальных переменных пользователя и локальных матриц (сущест­вующих только во время вызова конкретной процедуры);

BEGIN/END - составной оператор, создает блок PLUS-операторов;

присваивание - предназначен для изменения значений пере­менных;

вызов процедуры - вызывает библиотечную процедуру;

помеченный оператор - класс операторов, начинающихся с метки;

IF/THEN - условный оператор, проверяет выражение и, если результат равен «TRUE» (истина), выполняет действие;

IF/THEN/ELSE - условный оператор проверяет выражение и в зависимости от результата производит то или иное действие;

WHILE/DO - оператор цикла, несколько раз выполняет дейст­вие;

GOTO - оператор безусловного перехода, передает управление к метке внутри процедуры;

RETURN - останавливает выполнение процедуры и возвращает результат ее выполнения (после чего память, используемая процеду­рой, освобождается).

Процедуры языка PLUS могут записываться в любом месте мо­дели (кроме тела другой процедуры). Остальные операторы PLUS мо­гут появляться только внутри оператора PROCEDURE.

Различают процедуры пользовательские и встроенные (биб­лиотечные). Пользовательские процедуры обычно используются для изменения значений глобальных переменных и поименованных вели­чин или для вычисления выражения и выдачи результата. В первом случае результат вычисления не требуется. Во втором - требуется, в этом случае обязательно наличие оператора возврата RETURN. Ре­зультат, выдаваемый PLUS-процедурой, используется в операндах или других PLUS-выражениях. Если в операторе RETURN не задано какое-либо выражение или в процедуре отсутствует оператор возвра­та RETURN, то возвращается значение 0.

Для определения PLUS-процедуры необходимо поместить опе­ратор PROCEDURE в файл модели и выполнить транслирование оператора вместе с моделью или передать оператор PROCEDURE процессу моделирования в интерактивном режиме. После этого уже определенную PLUS-процедуру можно вызывать при вычислении выражений или в PLUS-операторах присваивания.

Если процедура используется более, чем в одной модели, то ее можно сохранить в исходном файле, называемом библиотекой про­цедур пользователя. Командой INCLUDE можно включать эту биб­лиотеку в каждую модель, в которой будет использоваться данная процедура.

Эксперимент - это особая разновидность PLUS-процедуры пользователя. Для ее определения используется оператор EXPERIMENT. Эта процедура применяется для управления не­сколькими повторяющимися имитациями.

Эксперименты обычно используются совместно с библиотечной процедурой DoCommand() для управления процессом моделирова­ния, а также с библиотечной процедурой дисперсионного анализа ANOVA для анализа результатов моделирования. Обычно результаты эксперимента записываются в глобальную матрицу, которая переда­ется процедуре ANOVA. Существует возможность автоматически создавать отсеивающие и оптимизирующие эксперименты при помо­щи генераторов экспериментов.

Эксперимент вызывается только командой CONDUCT, которую можно загрузить с помощью функциональной клавиши.

Эксперименты и обыкновенные процедуры, непосредственно или косвенно вызываемые экспериментом, могут использовать биб­лиотечную процедуру DoCommand() для выполнения операторов GPSS, включая команды и блоки.

Библиотека процедур - это множество PLUS-процедур. Суще­ствует два типа библиотек: библиотека пользователя, представ­ляющая собой совокупность процедур пользователя, и встроенная библиотека GPSS World, содержащая готовые к использованию строковые и математические процедуры. Для того, чтобы процедуру

можно было использовать в PLUS-выражении, она должна находить­ся в библиотеке процедур.

Встроенная часть библиотеки содержит процедуры, которые мо­гут быть разбиты на следующие группы:

Обслуживающие процедуры - процедуры, используемые для управления прогонами имитаций и анализа экспериментов.

1. Процедура DoCommand. Транслирует строку аргумента и пе­редает результат трансляции выполняющейся модели. Эта процедура может вызываться только из экспериментов и процедур, вызванных из экспериментов.

2. Процедура ANOVA. Проводит многофакторный дисперсион­ный анализ, создает таблицу ANOVA, таблицу описательных стати­стик и выводит эти данные в журнал сессии.

3. Процедура Exit() завершает сеанс работы с GPSS World - ос­танавливает процесс моделирования и закрывает все окна GPSS.

Файловые процедуры (процедуры потоков данных) - процеду­ры управления потоками данных внутри PL US-процедуры. Потоки данных используются для чтения и записи файлов или для хранения и доступа больших объемов данных в памяти. Файловые процедуры выполняют следующие операции:

Open(DataStream, FileNameString) - инициализирует поток данных;

Close(DataStream) - закрывает поток данных и извлекает код ошибки;

Read(DataStream) - считывает текстовую строку из потока данных;

Write(DataStream, String) - передает потоку данных текстовую строку;

Seek(DataStream, NewLinePosition) - устанавливает позицию текущей строки потока данных и извлекает предыдущую позицию строки.

Процедуры динамического вызова используются для вызова функций, хранящихся во внешних исполняемых файлах, включая динамически подключаемые библиотеки DLL. Соответствующие процедуры можно использовать для запуска функций, предоставляемых другими фирмами в отдельных исполняемых файлах и поддержи вающих протокол CDECL.

Математические процедуры. К ним относятся:

ABS(Expression) - абсолютное значение;

ATN(Expression) - арктангенс (в радианах);

COS(Expression) - косинус;

EXP(Expression) - число е, возведенное в степень аргумента;

INT(Expression) - выделение целой части с отбрасыванием дробной части;

LOG(Expression) - натуральный логарифм;

SIN (Expression) - синус;

SQR(Expression) - квадратный корень;

TAN(Expression) - тангенс.

Вероятностные распределения - процедуры теоретических вероятностных распределений (см. параграф 4.13).

Строковые процедуры выполняют операции со строками:

Align(InsertString, SourceString, Offset) - вставляет одну стро­ку в другую с выравниванием по правому краю;

Catenate(Stringl, String2) - производит объединение строк;

Copies(SourceString, Count) - создает одну строку из несколь­ких копий исходной;

Datatype(Datum) - возвращает строку, содержащую тип данных аргумента;

Find(TestString, SourceString) - вычисляет смещение одной строки, содержащейся в другой строке;

Left(SourceString, MaxCount) - возвращает левую часть задан­ной строки;

Length(SourceString) - возвращает количество символов в строке;

Lowercase(SourceString) - переводит все прописные буквы в строке в строчные;

PIace(InsertString, SourceString, Offset) - вставляет одну стро­ку в другую с выравниванием по левому краю;

PolyCatenate(Stringl, Stringl,...) - производит объединение Двух или более строк;

Right(SourceString, MaxCount) - возвращает правую часть за­данной строки;

String(Datum) - преобразует данные в их строковый эквива­лент;

StringCompare(Stringl, String2) - сравнивает две строки;

Substring(SourceString, Offset, MaxCount) - возвращает под­строку заданной строки;

Trim(SourceString) - удаляет начальные и конечные пробелы;

Uppercase(SourceString) - переводит все строчные буквы в строке в прописные;

Value(Datum) - возвращает числовой эквивалент строки;

Word(SourceString, WordNumber) - возвращает заданное сло­во строки.

Процедуры запроса возвращают информацию о состоянии тран-закта, находящегося в модели. К ним относятся такие процедуры:

QueryXNExist(TransactionNumber) - возвращает 1, если тран-закт существует в модели, иначе - 0;

QueryXNParameter(TransactionNumber, Parameter) - возвра­щает значение параметра транзакта. Если искомого параметра не су­ществует, происходит останов по ошибке;

QueryXNAssemblySet(TransactionNumber) - возвращает номер семейства, к которому принадлежит транзакт;

QueryXNPriority(TransactionNumber) - возвращает приоритет транзакта в виде целого числа;

QueryXNMl(TransactionNumber) - возвращает время входа транзакта в систему.


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



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