Имитационное моделирование систем. Учебное пособие
.pdfследующему |
по номеру блоку. В поле В обычно указывается |
|
номер блока, являющегося началом цикла. Операнд В может быть |
||
именем, положительным целым, СЧА или СЧА*<параметр>. |
||
Один |
и |
тот же цикл может одновременно выполняться |
произвольным числом сообщений. Если сообщение входит в блок |
||
LOOP со значением параметра, равным n, то это сообщение |
||
войдет в блок |
LOOP n раз и вернется к началу этого цикла (n-1) |
|
раз. Если в момент первого входа сообщения в блок LOOP |
||
значение параметра, номер которого указан в поле А, нулевое |
||
или отрицательное, происходит ошибка выполнения. |
|
|
||||||
MARK - |
сохранение |
|
значения |
системного времени |
в |
|||
параметре |
сообщения. Блок MARK имеет |
следующий |
формат |
|
||||
записи: |
|
|
|
MARK [<A>] |
|
|
|
|
|
|
|
|
|
|
|
|
|
Блок |
MARK либо заменяет значение отметки |
времени |
||||||
сообщения на текущее значение абсолютного условного времени |
|
|||||||
(операнд А не определен), либо записывает значение условного |
|
|||||||
времени в заданный параметр сообщения(при использовании |
|
|||||||
операнда А). |
|
|
|
|
|
|
|
|
Поле А содержит номер параметра, в который записывается |
|
|||||||
значение |
абсолютного |
условного |
времени. Если |
такого |
|
|||
параметра не существует, то он создается. Операнд А может быть |
|
|||||||
именем, |
положительным |
|
целым |
|
числом, СЧА |
или |
||
СЧА*<параметр>. |
|
|
|
|
|
|
||
MATCH |
- ожидание |
сообщением |
связанных |
с |
ним |
|||
сообщений в других блоках модели (синхронизация сообщений). |
|
|||||||
Блок MATCH имеет следующий формат:
MATCH <A>
Блок MATCH используется для синхронизации движения двух сообщений, принадлежащих к одному семейству, без удаления этих сообщений из модели.
Блоки MATCH не объединяют синхронизируемые сообщения. Синхронизация осуществляется путем подбора пар сообщений из одного семейства и задержки этих сообщений до тех пор, пока оба сообщения из одной пары не поступят в заданные точки модели. Сообщения никогда не задерживаются в блоке MATCH. Сообщения, для которых выполнилось условие
61
синхронизации, переходят |
к следующему по номеру |
блоку. В |
одной паре блоковMATCH могут одновременно находиться в |
||
состоянии синхронизации |
пары сообщений из |
различных |
семейств. Возможна также одновременная синхронизации пар сообщений из одного семейства в нескольких блоках MATCH.
Поле А задает имя или номер другого блока MATCH, называемого "сопряженным блоком MATCH". Если такого блока нет, происходит останов по ошибке. Операнд А может быть именем, положительным целым, СЧА, СЧА*<параметр>.
MSAVEVALUE - присваивание значений элементам матриц. Блок MSAVEVALUE имеет следующий формат:
MSAVEVALUE <A>,<B>,<C>,<D>
Блок MSAVEVALUE используется для записи значений в матрицы, а также для увеличения или уменьшения значений, записанных в матрицах.
Воперанде A задается имя матрицы. Крайним правым символом операнда должен быть знак"+", если блок MSAVEVALUE работает в режиме накопителя и "-" - в режиме уменьшения. Операнд может быть именем, положительным целым, СЧА или СЧА*<параметром>, следующими за знаками
"+" и "-".
Воперанде В задается номер строки матрицы, в операнде
С- номер столбца. Таким образом, операнды В и С определяют
относительное |
расположение |
ячеек |
матрицы, содержимое |
|
|
которых изменяется. |
|
|
|
|
|
Операнды В и С могут быть именем, |
положительным |
|
|||
целым, СЧА или СЧА*<параметр>. |
|
|
|
||
Аргумент |
операнда |
D определяет |
значение, которое |
|
|
должно храниться в соответствующем элементе матрицы, может |
|
||||
быть добавлено (режим |
накопления) или |
вычтено (режим |
|
||
уменьшения) из его содержимого. |
|
|
|
||
PREEMPT |
- прерывание |
обработки |
обрабатываемого |
|
|
устройством |
сообщения |
и |
захват |
устройства |
активным |
сообщением. Блок PREEMPT имеет следующий формат : |
|
||||
|
PREEMPT |
<A>,[<B>],[<C>],[<D>],[<E>] |
|
||
62
Блок PREEMPT позволяет сообщению, в зависимости от условий, заданных в операндах блока, занять устройство. Блок PREEMPT может задержать сообщение на входе.
Поле А определяет номер или имя устройства, на котором
генерируется |
|
прерывание. |
|
Операнд |
может |
быть |
именем, |
|||||
положительным целым, СЧА или СЧА*<параметр>. |
|
|
|
|||||||||
Поле |
В задает приоритетный режим(PR) |
или |
|
режим |
||||||||
прерывания, если операнд опущен. При работе в этом режиме |
||||||||||||
сообщение, занимающее уже устройство или генерирующее на |
||||||||||||
нем прерывание, может быть прервано только сообщением, |
||||||||||||
приоритет |
|
которого |
выше |
приоритета |
данного сообщения. |
|||||||
Прерванные |
|
сообщения |
претендуют на |
дополнительное |
||||||||
использование |
устройства, |
когда |
прервавшее |
их |
сообщение |
|||||||
входит |
в |
|
соответствующий |
блокRETURN. |
Прерванные |
|||||||
сообщения помещаются в список задержки в порядке приоритета. |
||||||||||||
Поле |
С |
задает |
номер |
или |
имя |
блока, |
куда |
должно |
||||
попытаться |
войти прерванное сообщение вэтот |
же |
момент |
|||||||||
условного времени. |
|
|
|
|
|
|
|
|
|
|||
Прерванное сообщение теряет управление устройством, но |
||||||||||||
претендует на право его использования, если только не задан |
||||||||||||
аргумент поля Е. |
|
|
|
|
|
|
|
|
|
|||
При приоритетном режиме работы желательнозадавать |
||||||||||||
поле С, |
если |
прерывающее |
сообщение |
имеет |
более |
высокий |
||||||
приоритет, чем прерванное сообщение. Операнд может быть, |
||||||||||||
именем, положительным целым, СЧА или СЧА*<параметр>. |
||||||||||||
Поле D задает номер параметра, связанного с прерванным |
||||||||||||
сообщением. |
Если прерываемое сообщение в момент прерывания |
|||||||||||
находится в списке будущих событий, тогда остаток времени |
||||||||||||
нахождения |
в |
этом списке |
записывается |
в |
заданный |
параметр. |
||||||
Если такой параметр не существует, то он создается. При приоритетном режиме работы желательно задавать поле D только в том случае, если прерывающее сообщение имеет более высокий приоритет, чем прерванное сообщение. Операнд может быть именем, положительным целым, СЧА или СЧА*<параметр>.
PRIORITY - изменение приоритета сообщения. Блок PRIORITY имеет следующий формат записи:
PRIORITY <A>,[<B>]
63
Блок |
PRIORITY |
присваивает |
сообщению |
нужный |
||||||
приоритет. |
Приоритет |
сообщений |
влияет |
на |
порядок |
|||||
обработки сообщений процедурой просмотра и порядок занятия |
||||||||||
сообщениями объектов оборудования. |
|
|
|
|
|
|||||
Поле |
А задает |
новое значение приоритета. Операнд А |
||||||||
может |
быть |
именем, любым |
целым |
числом, СЧА |
или |
|||||
СЧА*<параметр>. |
|
|
|
|
|
|
|
|
||
Новое значение приоритета может быть меньше, больше |
||||||||||
или равно текущему значению приоритета. |
|
|
|
|
||||||
Поле В определяет режим BUFFER, в |
нем |
указывается |
||||||||
значение "BU". В |
общем случае |
процедура |
просмотра |
списка |
||||||
текущих |
|
сообщений |
пытается |
продвинуть |
обрабатываемое |
|||||
сообщение в следующий блок. Однако если |
в поле В |
блока |
||||||||
PRIORUTY записано слово BU, то после присвоения сообщению |
||||||||||
нового |
значения |
приоритета |
блокPRIORITY |
|
становится |
|||||
эквивалентным блоку BUFFER. Сообщение помещается в список текущих событий в конец своего нового приоритетного класса, процедура просмотра возвращается к началу списка текущих
событий и начинает |
просмотр снова. Поскольку блок BUFFER |
|
||||||||
не задерживает сообщения, вошедшие в этот блок, сообщение |
|
|||||||||
будет обработано |
процедурой |
просмотра |
снова при |
том |
же |
|||||
значении |
условного |
времени. Режим BUFFER |
подробно |
|
||||||
рассматривается при описании блока BUFFER. |
|
|
|
|
|
|||||
QUEUE - включение сообщения в очередь. Формат записи |
|
|||||||||
блока QUEUE: |
|
QUEUE <A>,[<B>] |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|||
Блок QUEUE |
увеличивает длину очереди. В |
поле |
А |
|||||||
задается номер или имя очереди, |
к длине которой |
добавляются |
|
|||||||
единицы. Операнд может быть именем, положительным целым, |
|
|||||||||
СЧА или СЧА*<параметр>. |
|
|
|
|
|
|
|
|
||
Поле |
В |
определяет |
|
число |
единиц, на |
|
которое |
|||
увеличивается текущая длина очереди. Если поле В пусто, то |
|
|||||||||
прибавляется |
единица. |
Операнд |
может |
быть |
именем, |
|||||
положительным целым, СЧА или СЧА*<параметр>. |
|
|
|
|
||||||
Когда сообщение входит в блок QUEUE, то ищется очередь |
|
|||||||||
с именем, определенным операндом А. Если необходимо, очередь |
|
|||||||||
создается. Поскольку к очереди добавляются единицы, |
а не сами |
|
||||||||
64
сообщения, не составляется список членов очереди. Сообщения в этот же момент условного времени пытаются перейти к следующему блоку.
Одно и то же сообщение может одновременно увеличить длину нескольких очередей, т.е. сообщение может войти в несколько блоков QUEUE перед тем, как войти в соответствующие блоки DEPART.
Стандартные числовые атрибуты, связанные с описываемым оператором, следующие:
-Q - текущая длина очереди;
-QА - средняя длина очереди;
-QС - общее число входов в очередь;
-QМ - максимальная длина очереди;
-QТ - среднее время ожидания в очереди;
-QХ - среднее время ожидания в очереди для
сообщений с ненулевым временем задержки;
- QZ - число входов в очередь с нулевым временем задержки.
RELEASE - освобождение сообщением устройства. Блок RELEASE имеет следующий формат:
|
|
RELEASE |
<A> |
|
|
|
|
|
Блок RELEASE предназначен для освобождения устройства |
|
|||||||
тем сообщением, |
которым |
оно было занято. Если |
сообщение |
|
||||
обрабатывается устройством, то с помощью блока RELEASE оно |
|
|||||||
освобождает |
|
устройство |
и |
переходит |
к |
следующе |
||
последовательному блоку. |
Если |
сообщение |
обрабатывалось |
|||||
устройством, |
но |
не было прервано, то |
блоком RELEASE |
|
||||
сообщение |
удаляется из |
списка |
прерывания |
устройства |
и |
|||
пытается вновь занять устройство. |
|
|
|
|
|
|||
REMOVE - |
удаление |
члена |
из |
числовой |
группы |
или |
||
группы сообщений. Блок REMOVE имеет следующий формат: |
|
|||||||
REMOVE [<X>] <A>,[<B>],[<C>],[<D>],[<E>],[<F>]
Блок REMOVE удаляет сообщения или числовые значения из соответствующих групп. Из группы, работающей в режиме сообщения, можно удалить несколько сообщений. Сообщения можно также удалять в зависимости от значений атрибутов сообщений (приоритета или параметра).
65
Указатели отношения во вспомогательном поле операции <X> определяют, какое явное условие следует рассматривать при работе блока REMOVE. Если указатель отношения не задан, предполагается отношение равенства (Е).
Поле А задает номер группы, из которой удаляются сообщения. Операнд А может быть именем, положительным целым, СЧА, СЧА*<параметр>.
Поле В задает число сообщений, которые нужно удалить из группы, работающей в режиме сообщений. Операнд В может быть "ALL", именем, положительным целым, СЧА, СЧА*<параметр>. Поле В должно быть пустым, если задан условный оператор MIN или MAX.
Вполе С задается числовое значение, которое удаляется из группы, работающей в числовом режиме. Операнд может быть именем, целым, СЧА, СЧА*<параметр>.
Вполе D может быть задан атрибут сообщения (приоритет или номер параметров), используемый для сравнения
при поиске сообщений, подлежащих |
удалению из |
группы. |
|
Операнд |
может быть "PR", именем, |
положительным |
целым, |
СЧА, СЧА*<параметр>. |
|
|
|
В |
поле Е записывается значение СЧА, сравниваемое со |
||
значением, записанным в поле D при попытке удалить сообщения из групп, работающих в режиме сообщений. Операнд Е может быть именем, целым, СЧА, СЧА*<параметр>.
Поле Е должно быть пустым, если задан условный оператор MIN или MAX.
Операнд F может быть именем, положительным целым, СЧА, СЧА*<параметр>.
RETURN - освобождение захваченного устройства. Блок RETURN имеет следующий формат:
RETURN <A>
Блок RETURN предназначен для освобождения ранее захваченного устройства. В поле А задается номер устройства, с которого снимается прерывание. Прерывание может быть снято в блоке RETURN только тем сообщением, которым оно было генерировано. Операнд А может быть именем, положительным целым, СЧА или СЧА*<параметр>.
66
SAVAIL - |
изменение |
состояния |
многоканального |
||
устройства |
на "готово к использованию". Блок SAVAIL имеет |
||||
следующий формат: |
SAVAIL <A> |
|
|
||
|
|
|
|
||
Блок |
SAVAIL переводит |
заданное |
многоканальное |
||
устройство |
из |
состояния |
недоступности |
в |
состояние |
доступности. |
Если |
заданное многоканальное устройство |
уже |
||
находится в состоянии доступности, блок SAVAIL выступает как пустой блок.
В поле А определяется номер многоканального устройства, которое следует перевести в состояние доступности. Операнд
может |
быть |
именем, |
положительным |
целым, СЧА |
|
или |
|||||
СЧА*<параметр>. |
|
|
|
|
|
|
|
|
|
||
SAVEVALUE |
- |
присваивание |
значений |
|
ячейки |
||||||
сохраняемых величин; |
|
|
|
|
|
|
|
|
|||
SCAN |
- |
просмотр |
членов |
группы до |
выполнения |
||||||
некоторого |
условия. Блок |
SCAN |
имеет |
следующий |
формат |
||||||
записи: |
|
SCAN [<X>] |
<A>,[<B>],[<C>],<D>,<E>,[<F>] |
|
|
||||||
|
|
|
|
||||||||
Блок |
SCAN обеспечивает |
следующие возможности |
для |
||||||||
групп, |
работающих |
в |
|
режиме |
сообщения, независимо |
от |
|||||
расположения ее членов: |
|
|
|
|
|
|
|
||||
-определяет, является ли сообщение с определенным значением атрибута членом данной группы;
-получает значения атрибутов сообщения - члена группы,
для которого удовлетворяются заданные условия; - изменяет дальнейший путь сообщения, если в группе не
находится сообщения, удовлетворяющего заданным условиям (при помощи операнда F).
Указатели отношения во вспомогательном поле операции <X> определяют, какое явное условие нужно рассматривать. Если указатель отношения не задан, то предполагается отношение равенства (Е). Используются следующие указатели отношения.
Поле А задает номер просматриваемой группы. Операнд может быть именем, положительным целым, СЧА, СЧА*<параметр>.
67
В поле В задается значение сообщения, сравниваемое с другими СЧА. Сравниваемым атрибутом сообщения может быть либо приоритет сообщения(PR), либо значение, записанное в
одном из его параметров. Операнд |
В |
может |
быть "PR", |
именем, положительным целым, СЧА, СЧА*<параметр>. |
|||
Поле С задает значение, сравниваемое со значением поля В. |
|||
По умолчанию это значение равно 0. |
Это |
поле |
должно быть |
пустым, если задан указатель отношения MIN или MAX.
Вполе D задается номер параметра, выбранного из данной группы сообщения, значение которого записывается в параметре (номер которого задан в поле) Епоступившего сообщения. Задание в поле D мнемоники "PR" приводит к записи приоритета выбранного сообщения в параметр поля Е вошедшего сообщения. Операнд D может быть "PR", именем, положительным целым, СЧА, СЧА*<параметр>.
Поле Е задаёт номер параметра вошедшего сообщения, в который записывается значение поляD в случае, если найдено сообщение, отвечающее заданным условиям. Операнд может быть именем, целым, СЧА, СЧА*<параметр>.
Вполе F указывает номер альтернативного блока для выхода сообщения, если ни один член группы не удовлетворяет
заданным |
условиям. |
Операнд |
может |
быть |
,именем |
||
положительным |
целым, |
СЧА, СЧА*<параметр>. Вошедшее |
|
||||
сообщение переходит к следующему по номеру блоку, если |
|
||||||
выполняется заданное отношение или если не описано поле F. |
|
|
|||||
SEIZE |
- |
занятие |
устройства |
или |
ожидание |
его |
|
освобождения |
|
для последующего занятия. Блок SEIZE имеет |
|
||||
следующий формат :
SEIZE <A>
Операнд А может быть именем , положительным целым, СЧА или СЧА*<параметр>. Свободный блок SEIZE позволяет вошедшему в него сообщению занять указанное устройство. Блок SEIZE задерживает сообщение, если устройство занято или находится в состоянии недоступности. В поле А задается номер занимаемого устройства.
68
SELECT - выбор блока для дальнейшего продвижения сообщения с использованием значения параметра сообщения. Блок SELECT имеет следующий формат записи:
SELECT <X> <A>,<B>,<C>,[<D>],[<E>],[<F>]
Блок SELECT выбирает первый объект в заданном |
||||||
диапазоне, который удовлетворяет определенному условию. |
||||||
Номер |
этого |
объекта |
записывается |
в |
заданный |
параметр |
вошедшего в блок сообщения. |
|
|
|
|
||
<X> - обозначение логического или условного операторов. |
||||||
В поле А задается номер параметра вошедшего в блок |
||||||
COUNT |
сообщения, куда |
записывается |
номер |
объекта, |
||
удовлетворяющего заданному условию. Операнд А может быть |
||||||
именем, |
положительным |
целым |
числом, |
СЧА |
или |
|
СЧА*<параметр>.
Поле В определяет нижнюю границу диапазона изменения номеров объектов, для которых проверяется заданное условие. Операнд В может быть именем, положительным целым числом, СЧА или СЧА*<параметр>.
Поле С определяет верхнюю границу диапазона изменения номеров объектов, для которых проверяется заданное условие. Операнд С может быть именем, положительным целым числом, СЧА или СЧА*<параметр>.
В поле D задается величина сравнения. Это значение используется совместно с условными операторами('E', 'NE', 'GE, 'L', 'LE').
Операнд D может быть именем, любым целым числом, СЧА или СЧА*<параметр>.
Значение стандартного числового атрибута сравнивается со значением атрибута объекта, заданного в поле Е. Если не используется условный оператор, поле D можно не задавать.
Поле Е используется совместно с полем D и условным
оператором. |
В |
поле |
Е |
задается |
только |
мнемоническое |
обозначение |
СЧА |
объекта |
без |
указания |
конкретного номера, |
|
поскольку диапазон изменения номеров объектов задан полями В и С. В поле Е может быть задан любой из стандартных числовых атрибутов объекта.
69
Поле F задает номер альтернативного блока для входящего сообщения, если заданным условиям не удовлетворяет ни один объект в диапазоне. Операнд F может быть именем, положительным целым числом, СЧА или СЧА*<параметр>. Если операнд F не используется, то сообщение будет продвинуто к следующему по номеру блоку.
SPLIT - создание копии сообщения с адресацией еев некоторый блок. Блок SPLIT имеет следующий формат:
|
|
|
|
|
SPLIT |
<A>,[<B>],[<C>] |
|
|
|
|
||
Блок SPLIT выполняет функцию копирования входящего в |
|
|||||||||||
него |
сообщения, |
которое |
|
называется |
|
исходным |
или |
|||||
порождающим. |
|
|
|
|
|
|
|
|
|
|
||
В поле А |
задается число создаваемых копий. Операнд А |
|
||||||||||
может |
быть |
именем, |
положительным |
целым, |
СЧА, |
|
||||||
СЧА*<параметр>. Если вычисленное значение аргумента поля А |
|
|||||||||||
равно нулю, то блок SPLIT не выполняет |
никаких |
операций. |
|
|||||||||
После |
создания |
|
копий |
|
сообщение |
|
пытается |
перейти |
||||
следующему по номеру блоку. Все копии |
формируются в |
|
||||||||||
момент входа порождающего сообщения в блок SPLIT. |
|
|
||||||||||
Поле |
В |
задает |
номер следующего блока, к которому |
|
||||||||
переходят |
|
копии |
|
исходного |
сообщения, причем |
значение |
|
|||||
вычисляется |
для каждой копии |
отдельно. Операнд В может |
|
|||||||||
быть именем, положительным целым, СЧА, СЧА*<параметр>. |
|
|||||||||||
В поле С может быть задан номер параметра, |
|
|||||||||||
используемого |
для |
|
присвоения |
копиям |
последовательных |
|
||||||
номеров. Операнд С может быть именем, положительным целым, |
|
|||||||||||
СЧА, СЧА*<параметр>. |
|
|
|
|
|
|
|
|||||
SUNAVAIL |
- |
изменение |
состояния |
многоканального |
|
|||||||
устройства на "не готово к использованию". Блок SUNAVAIL имеет следующий формат:
SUNAVAIL <A>
Блок SUNAVAIL переводит многоканальное устройство в состояние недоступности. В поле А определяется номер многоканального устройства. Операнд может быть именем, положительным целым, СЧА или СЧА*<параметр>.
TABULATE - обновление данных таблицы. Для сбора элементов данных сообщение должно войти в блок TABULATE
70
