Изучение основ моделирования в среде GPSS World. Создание пользовательских переменных. Блоки и команды для манипуляции с сохранёнными данными

Страницы работы

Содержание работы

Занятие третье по дисциплине: "Моделирование систем"

Тема: "Изучение основ моделирования в среде GPSS World"

Разделы:

1      Создание пользовательских переменных. 2

2      Использование логических ключей. 5

3      Функции плотностей распределения. 6

4      Введение в PLUS. Описание операторов языка. Использование процедур. 9

5      Библиотечные функции PLUS. 15

5.1     Математические и строковые. 15

5.2     Для работы с потоками. 17

1  Создание пользовательских переменных

Сегодняшнюю лекцию начнём с изучения команд языка GPSS, которые позволяют создавать пользовательские переменные.

Но, для начала, давайте вспомним какие команды и блоки для сохранения и задания каких-либо значений мы уже изучили ранее:

Таблица 1. Блоки и команды для манипуляции с сохранёнными данными

Наименование

Описание

EQU

аналог задания константы

ASSIGN

сохранение и модификация значения параметра

SAVEVALUE

сохранение и модификация значения хранимой величины (ячейки)

INITIAL

инициализация ячеек, матриц, логических ключей

MATRIX

создание матрицы ячеек

MSAVEVALUE

сохранение и модификация значений ячеек матриц

А теперь, перейдём к изучению самой команды VARIABLE.

Синтаксис команды таков:

<имя>             VARIABLE     <выражение>

Созданные с помощью этой команды переменные, несколько отличаются по своим характеристикам от переменных, используемых при программировании на таких языках как C++, Delphi. Дело в том, что в данных языках изменение значения переменной происходит явно, т.е. при прямом обращении к ней по имени.

В данном же случае, значение переменной вычисляется автоматически, при изменении параметров, включённых в операнд A нашей команды.

Чтобы лучше понять принцип работы данной команды, приведу несколько примеров.

Пример создания простой переменной, позволяющей узнать, сколько транзактов ожидало в очереди:

QueueEnter        VARIABLE     QC$MyQueue - QZ$MyQueue

Исходя из синтаксиса, можно определить, что именем переменной будет метка "QueueEnter". А выражением – запись "QC$MyQueue - QZ$MyQueue".

Здесь видно, что для вычисления переменной мы используем два СЧА, относящихся к классу очередей. Первый СЧА – это QC, возвращающий общее количество входов в очередь, а второй – QZ, который показывает число нулевых входов в очередь.

Сразу стоит оговориться, что нулевой вход – это когда транзакт прошёл через блоки QUEUE и DEPART, но не задерживался на них. Такое возможно, например, при появлении первого транзакта, который не стоит в очереди, а сразу переходи в следующие блоки.

Таким образом, вычислив разницу между общим и нулевыми количеством входов в очередь, получаем величину, показывающую, сколько транзактов ожидало в очереди. Причём будут учитываться и транзакты, которые находились в очереди ничтожно малый промежуток времени.

В качестве второго примера приведу следующую строку:

TimeDelay         VARIABLE     FN$HowLong#P$Percent

Для чего может случить такая переменная. Допустим, что некоторая функция с именем HowLong позволяет нам вычислить время задержки транзакта. Но на разных участках модели время задержки может варьироваться и определять в процентах от изначальной величины.

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

Все перечисленные плюсы относятся не только к последнему примеру, а к принципу использования переменных в языке GPSS вообще.

Теперь стоит указать на одну особенность, что переменные, созданные с помощью команды VARIABLE, возвращают вещественные числа. Но в режиме совместимости с версией GPSS PC, она будет возвращать целочисленные значения. Иначе говоря, дробная часть, после вычисления, будет отбрасываться.

Для работы с вещественными переменными в режиме совместимости с GPSS PC, предусмотрена другая команда – FVARIABLE. Которая по синтаксису и принципу работы аналогична команде VARIABLE, поэтому на ней мы останавливаться не будем.

Также существует и другая команда, для работы с переменными – BVARIABLE. Созданные с помощью данной команды переменные относятся к типу булевских. И, соответственно, могут хранить только значения "True" или "False". Данный тип переменных можно использовать в качестве флагов, при организации ветвлений.

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

Пример использования команды:

BoolVariable      BVARIABLE    (QX$MyQueue'G'12)

или в другом виде:

BoolVariable      BVARIABLE    (QX$MyQueue>12)

Похожие материалы

Информация о работе