|
Блок MSAVEVALUE имеет следующий формат:
MSAVEVALUE <A>,<B>,<C>,<D>
Блок MSAVEVALUE используется для записи значений в матрицы, а также для увеличения или уменьшения значений, записанных в матрицах.
В операнде A задается имя матрицы. Крайним правым символом операнда должен быть знак "+", если блок MSAVEVALUE работает в режиме накопителя, и знак "-", если он работает в режиме уменьшения. Операнд может представлять собой имя, положительное целое число, СЧА или СЧА*<параметр> со следующим за ним знаком "+" и "-".
В операнде В задается номер строки матрицы, в операнде С - номер столбца. Таким образом, операнды В и С определяют относительное расположение ячеек матрицы, содержимое которых изменяется.
Операнды В и С могут представлять собой имя, положительное целое число, СЧА или СЧА*<параметр>.
Аргумент операнда D определяет значение, которое должно храниться в соответствующем элементе матрицы, может быть добавлено (режим накопления) или вычтено (режим уменьшения) из его содержимого.
Операнд может представлять собой имя, целое число, СЧА или СЧА*<параметр>.
Например, блок
MSAVEVALUE INV,2,3,4
записывает константу 4 в матрицу INV (строка 2, столбец 3).
Когда сообщение входит в блок MSAVEVALUE, то анализируется операнд А и ищется матрица с указанным именем. Если матрица не найдена, то возникает ошибка.
Соответствующий элемент матрицы определяется содержимым операндов B и C. Если такого элемента не существует, возникает ошибка.
Точность элементов матрицы и ее значения не ограничиваются.
Логические ключи
Логические ключи используются для представления объектов, имеющих всего 2 состояния. Для изменения направления движения сообщений в зависимости от состояния логических ключей, используются блоки GATE LR и GATE LS. Каждый логический ключ может находиться в одном из двух состояний: "Включен" или "Выключен".
Блок LOGIC
Блок LOGIC имеет следующий формат:
LOGIC <Х> <A>
Блок LOGIC устанавливает положение ключа, которое может быть проверено любым сообщением в любой части модели.
Блок LOGIC используется для "включения", "выключения" или инвертирования состояния ключа. Ключ может находиться в двух состояниях: "Включен" (set, или 1) или "Выключен" (reset, или 0).
Операнд А может быть именем, положительным целым, СЧА или СЧА*<параметр>.
Когда сообщение входит в блок LOGIC, состояние логического ключа, номер которого задан в поле A, может быть изменено в зависимости от мнемонического обозначения логического состояния во вспомогательном поле операции <X> (см. приложение 2).
Очереди
В GPSS/PC объекты типа "очередь" вводятся для сбора статистических данных. Статистика об очередях собирается в моменты входа сообщения в блок QUEUE (вход в очередь) или в блок DEPART (выход из очереди).
Важно отметить, что задержку сообщений в очереди вызывает не очередность сообщений, а условия, при которых сообщение входит в очередь (например, состояния объектов типа "устройство").
Только объекты типа "очередь" обеспечивают пользователя данными относительно задержки. Примером служит блок QUEUE, стоящий перед блоком SEIZE, задерживающим сообщения в случае занятости специфицированного устройства.
Поскольку очереди в GPSS/PC по природе своей являются статистическими объектами, списки сообщений, находящихся в очереди, не составляются. Кроме того, использование очередей никоим образом не влияет на внутренние операции GPSS/PC и процедуру просмотра GPSS\PC.
С объектом "очередь" связаны два типа блоков: QUEUE и DEPART.
Блок QUEUE
Формат записи блока QUEUE:
QUEUE <A>,[<B>]
Блок QUEUE увеличивает длину очереди.
В поле А задается номер или имя очереди, к длине которой добавляются единицы. Операнд может представлять собой имя, положительное целое число, СЧА или СЧА*<параметр>.
Поле В определяет число единиц, на которое увеличивается текущая длина очереди. Если поле В пусто, то прибавляется единица.
Операнд может представлять собой имя, положительное целое число, СЧА или СЧА*<параметр>.
Когда сообщение входит в блок QUEUE, то ищется очередь с именем, определенным операндом А. Если необходимо, очередь создается.
Поскольку к очереди добавляются единицы, а не сами сообщения, не составляется список членов очереди. Сообщения в этот же момент условного времени пытаются перейти к следующему блоку.
Поскольку очередь обычно используется для измерения времени ожидания, за блоком QUEUE обычно следуют такие блоки, как SEIZE, PREEMPT или ENTER, которые могут задержать сообщение. К таким блокам относятся также блоки GATE и TEST, работающие в режиме условного входа.
Одно и то же сообщение может одновременно увеличить длину нескольких очередей, т.е. сообщение может войти в несколько блоков QUEUE перед тем, как войти в соответствующие блоки DEPART.
Операции, выполняемые при входе сообщения в блок QUEUE. При входе сообщения в блок QUEUE текущая длина очереди j увеличивается на величину, указанную в поле В. Новое значение длины очереди Qj сравнивается с максимальным значением QМj. Если новое значение больше, то это значение становится новым максимальным значением длины очереди.
Общее число входов в очередь также увеличивается на величину, указанную в поле В. Поэтому число сообщений, входящих в блок QUEUE, будет всегда меньше или равно общему числу входов (QCj) в блок QUEUE.
Для того чтобы обеспечить правильный сбор статистики в случае, когда сообщение одновременно входит в несколько очередей, а также в случае, когда сообщение входит в блок ADVANCE, будучи при этом членом одной или нескольких очередей, фиксируются номера очередей, куда поступает сообщение. При выходе из очереди в блоке DEPАRT сообщение необязательно должно уменьшать длину очереди на ту же величину, на которую оно увеличило ее при входе в блок QUEUE. Но в конечном счете число входов в очередь должно быть равно числу выходов из очереди.
Рассмотрим несколько примеров блока QUEUE.
QUEUE 3
Увеличивает длину очереди 3 на единицы.
QUEUE P10, P1
Увеличивает длину очереди, номер которой задан в параметре Р10, на число единиц, заданное в P1.
Блок DEPART
Блок DEPART имеет следующий формат:
DEPART <A>,[<B>]
Блок DEPART служит для уменьшения длины очереди.
В поле А задается номер или имя очереди, длину которой нужно уменьшить. Операнд может представлять собой имя, положительное целое число, СЧА или СЧА*<параметр>.
В поле В задается число единиц, на которое уменьшается длина очереди. Это число не должно превышать текущей длины очереди. Если поле В пусто, длина очереди уменьшается на единицу. Операнд может представлять собой имя, положительное целое число, СЧА или СЧА*<параметр>.
Операции, выполняемые при входе сообщения в блок DEPART. Всякий раз, когда сообщение входит в блок DEPART, текущая длина Qj очереди, номер j которой указан в поле А, уменьшается на число единиц, заданное в поле В. Общее число входов в очередь при входе сообщения в блок DEPART не изменяется.
Длина очереди не должна быть отрицательной.
Примеры записи блока DEPART:
DEPART 5; уменьшает длину очереди 5 на единиц
DEPART 1,Q1; удаляет из очереди все сообщения
Дата добавления: 2015-11-16; просмотров: 50 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Блок ASSEMBLE | | | Пример структур ВС для имитационного моделирования. Сущность моделей устройств |