Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Блок MSAVEVALUE

Переменные и выражения | Арифметические переменные | Блок GENERATE | Блок TERMINATE | Блок PRIORITY | Блоки описания устройств | Блок FUNAVAIL | Блоки описания многоканальных устройств | Блок TRANSFER | Блоки для обработки сообщений, принадлежащих одному семейству |


Блок 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| Пример структур ВС для имитационного моделирования. Сущность моделей устройств

mybiblioteka.su - 2015-2024 год. (0.013 сек.)