Имитационное моделирование систем. Учебное пособие
.pdfзаписано FN1, это не означает, что номер модификаторафункции равен 1, он равен целому значению FN1.
BUFFER - размещение сообщения в списке текущих событий последним в своем приоритетном уровне. Блок BUFFER имеет следующий формат записи:
|
|
BUFFER |
|
|
Блок |
BUFFER |
используется |
для |
немедленного |
прекращения обработки сообщения и возврата интерпретатора к началу списка текущих событий. Обрабатываемое сообщение помещается в список текущих событий после сообщений с тем же классом приоритетов. Интерпретатор пытается продвигать активное сообщение так далеко, на сколько это возможно в текущей модели.
COUNT - подсчет числа элементов заданного множества,
удовлетворяющих |
указанному |
условию. Блок COUNT |
имеет |
|
||||||
следующий формат записи: |
<A>,<B>,<C>,[<D>],[<E>] |
|
|
|
||||||
|
|
COUNT <X> |
|
|
|
|||||
<X> |
- |
здесь |
и |
далее |
- обозначение используемого |
|
||||
логического или условного операторов. Блок COUNT определяет |
|
|||||||||
число |
объектов, |
удовлетворяющих |
заданному |
условию. |
||||||
Например, пользователю может понадобиться узнать число |
||||||||||
свободных устройств в определенном диапазоненомеров |
|
|||||||||
устройств или число памятей с коэффициентом использования |
||||||||||
меньше 50 (в частях от 1000) и т.д. |
Логический оператор |
|
||||||||
задает логическое условие. Например, |
подсчет |
свободных |
|
|||||||
устройств, подсчет выключенных логических ключей и т.д. Ниже |
|
|||||||||
приведен список логических операторов для различных типов |
||||||||||
объектов. |
|
|
|
|
|
|
|
|
|
|
В поле А задается номер параметра вошедшего в блок |
|
|||||||||
сообщения, в котором будет организован счетчик числа объектов. |
|
|||||||||
Операнд А может быть именем, положительным целым числом, |
|
|||||||||
СЧА или СЧА*<параметр>. |
|
|
|
|
|
|
||||
В |
поле |
В |
определяется |
нижняя |
граница |
диапазона |
||||
изменения номеров или имен объектов, для которых проверяется |
|
|||||||||
заданное |
условие. |
Операнд |
В |
может |
быть , |
именем |
||||
положительным целым числом, СЧА или СЧА*<параметр>. |
|
|||||||||
51
В |
поле |
С |
определяется |
верхняя |
граница |
диапазона |
||||||
изменения номеров или имен объектов, |
для которых проверяется |
|||||||||||
заданное |
|
условие. |
Операнд |
С |
|
может |
быть , именем |
|||||
положительным |
целым числом, |
СЧА |
или СЧА*<параметр>. |
|||||||||
Значение поля С должно быть больше либо равно значению, |
||||||||||||
заданному в поле В. Номер проверяемых объектов |
не |
должен |
||||||||||
превышать 32768. |
|
|
|
|
|
|
|
|
|
|||
Поле |
|
D |
задает |
сравниваемое |
значение(величина |
|||||||
сравнения) для аргумента поля Е. Операнд D может быть именем, |
||||||||||||
любым целым |
числом, |
СЧА |
или |
СЧА*<параметр>. Это |
||||||||
значение |
используется |
совместно |
с |
заданными |
условными |
|||||||
операторами ('E', 'NE', 'G', |
'GE', |
'L', |
'LE'). |
|
|
|
|
|||||
Значение |
СЧА |
сравнивается |
со значением |
объекта, |
||||||||
заданного аргументом поля . Если условный оператор не |
||||||||||||
используется, поле D можно не задавать. |
|
|
|
|
|
|||||||
Поле Е используется совместно с аргументом поля D и |
||||||||||||
условным оператором. В поле Е |
задается какой-либо из |
|||||||||||
стандартных числовых атрибутов просматриваемых объектов. |
||||||||||||
Необходимо |
только |
записывать |
мнемоническое |
обозначение |
||||||||
атрибута, поскольку диапазон изменения номеров объектов задан |
||||||||||||
полями В и С. |
|
|
|
|
|
|
|
|
|
|
|
|
DEPART - вывод сообщения из очереди. Блок DEPART |
||||||||||||
имеет следующий формат: |
|
|
|
|
|
|
|
|
||||
DEPART <A>,[<B>] |
|
|
|
|
|
|
|
|
|
|||
Блок |
DEPART служит |
для |
уменьшения длины |
очереди. |
||||||||
В поле А задается номер или имя очереди, длину которой |
нужно |
|||||||||||
уменьшить. |
Операнд |
может |
быть |
именем, положительным |
||||||||
целым, СЧА или СЧА*<параметр>. |
|
|
|
|
|
|
||||||
В поле |
В |
задается |
число единиц, на |
которое |
уменьшается |
|||||||
длина очереди. |
Это число не должно превышать текущую длину |
|
||||
очереди. Если поле В пусто, длина очереди уменьшается на |
|
|||||
единицу. Операнд |
может быть именем, положительным целым, |
|
||||
СЧА или СЧА*<параметр>. |
|
|
|
|
||
ENTER |
- |
захват |
сообщением |
всего |
или |
части |
многоканального |
устройства. Блок ENTER |
имеет следующий |
|
|||
формат записи: |
|
ENTER |
<A>,[<B>] |
|
|
|
|
|
|
|
|
||
52
Блок |
ENTER позволяет |
вошедшему |
сообщению |
использовать |
многоканальное устройство. Сообщение |
может |
|
быть задержано на входе в блок, если многоканальное устройство заполнено или имеющейся емкости недостаточно или устройство
вданный момент недоступно.
Вполе А указывается номер или имя многоканального устройства, куда входит сообщение. Операнд может быть именем, положительным целым, СЧА или СЧА*<параметр>.
Вполе В содержится число занимаемыхединиц
многоканального устройства. Если поле В , пусто предполагается, что занимается одна единица. Если это значение равно нулю, то сообщение никогда не задерживается на входе, а блок рассматривается как нерабочий. Операнд может быть именем, положительным целым, СЧА или СЧА*<параметр>.
EXAMINE - влияние на продвижение сообщения в следующий блок в зависимости от принадлежности сообщения к некоторому объединению. Блок EXAMINE имеет следующий формат записи:
EXAMINE <A>,[<B>],<C>
Блок EXAMINE предоставляет пользователю возможность выбора пути, по которому проследует сообщение в зависимости от состояния членов заданной группы.
Поле А задает номер рассматриваемой группы. Операнд может быть именем, положительным целым, СЧА, СЧА* <параметр>.
Поле В задает числовое значение, если группа работает в числовом режиме. Операнд может быть именем, целым, СЧА, СЧА*<параметр>.
В поле С указывается альтернативный блок для сообщения не принадлежащего к заданной группе, если оно переходит к следующему по номеру блоку. Операнд может быть именем, положительным целым, СЧА, СЧА*<параметр>.
EXECUTE - принудительная обработка сообщения некоторым блоком модели. Блок EXECUTE имеет следующий формат записи:
EXECUTE <A>
53
Этот блок позволяет входящему сообщению выполнять операции любого другого блока, не изменяя при этом обычного порядка прохождения блоков сообщением(исключения перечислены ниже).
Поле <А> задает номер блока( льтернативными значениями поля <A> могут быть <имя> - имя блока; <положительное целое число> - номер блока; <СЧА> - СЧА, содержащий номер блока; СЧА*<параметр> - косвенная ссылка на номер блока) и при входе сообщения в блок выполняются такие же операции, как если бы сообщение вошло в блок с номером j. Затем сообщение переходит к следующему после
EXECUTE блоку.
FAVAIL - смена состояния устройства на "готово к использованию". Блок FAVAIL имеет следующий формат:
FAVAIL <A>
Блок FAVAIL делает доступными заданные устройства после периода недоступности. Этот блок игнорируется, если заданное устройство уже доступно.
В поле А задается номер устройства, которое должно стать доступным. Операнд А может быть именем, положительным целым, СЧА или СЧА*<параметр>. Использование этого блока приводит к изменению состояния оборудования. Активизируются все сообщения, которые находятся в списке задержки в ожидании, когда любое из устройств, заданных в поле А, станет доступным. Если эти сообщения находятся в блоке GATE FV, они могут попытаться войти в следующий блок. Если сообщения находятся в блоке SEIZE или PREEMPT, они могут попытаться занять устройство.
FUNAVAIL - смена состояние устройства на "не готово к использованию". Блок FUNAVAIL имеет следующий формат:
FUNAVAIL <A>,[<B>],[<C>],[<D>],[<E>],[<F>],[<G>],[<H>]
Блок FANAVAIL делает недоступным устройство до тех пор, пока не вступит в действие блок FAVAIL. Этот блок игнорируется, если устройство уже недоступно.
В поле А задается номер или имя устройства, которое должно стать недоступным. Операнд может быть именем, положительным целым, СЧА или СЧА*<параметр>.
54
Если в момент, когда устройство стало недоступным, оно было не занято и не прервано, поля B-H игнорируются. Поля B,C и D относятся к сообщению, которое занимало устройство или генерировало на нем прерывание в момент, когда оно стало недоступным.
В поле G задаются режимы работы с сообщениями, использующими устройство в момент, когда оно становится недоступным.
Аргументы полей E и F относятся к тем сообщениям,
которые в момент, когда устройство стало |
недоступным, |
были |
|
прерваны. |
|
|
|
Поле Е определяет, что нужно делать с ранее прерванными |
|||
сообщениями, когда устройство, которого |
они |
дожидаются, |
|
становится недоступным. |
|
|
|
Поле F задает номер альтернативного блока, к которому |
|||
направляется прерванное сообщение. Операнд |
может |
быть |
|
именем, положительным целым, СЧА или СЧА*<параметр>. GATE - проверка состояния объекта модели и изменение
направления движения потока сообщений. Блок GATE имеет следующий формат:
GATE <X> <A>,[<B>]
Блок GATE управляет потоком сообщений на основе значений логических операторов. Блок GATE, как и блок TEST,
не изменяет никаких атрибутов сообщений, он определяет номер следующего блока, к которому должно перейти сообщение из блока GATE. Блок GATE может задержать сообщение на входе, если не задан альтернативный выход.
Во вспомогательном поле операции<X> задается один из следующих логических операторов.
Логические операторы, связанные с устройством:
-NU - устройство j, заданное в поле А, свободно;
-U - устройство j, заданное в поле А, занято (в результате выполнения сообщением блока SEIZE или PREEMPT);
-NI - устройство j, заданное в поле А, не прервано;
- I - устройство j, заданное в поле А, обслуживает прерывание;
- FV - устройство j, заданное в поле А, доступно;
55
- FNV - устройство j, заданное в поле А, не доступно. Логические операторы, связанные с многоканальными
устройствами:
-SE - многоканальное устройство j, заданное в поле А,
пусто (S[j]=0);
-SNE - многоканальное устройство j, заданное в поле А,
не пусто (S[j]<>0);
-SF - многоканальное устройство j, заданное в поле ,А заполнено (R[j]=0);
-SNF - многоканальное устройство j, заданное в поле А, не заполнено (R[j]<>0);
-SV - многоканальное устройство j, заданное в поле А, доступно;
-SNV - многоканальное устройство j, заданное в поле А, не доступно.
Логические операторы, связанные с логическими ключами:
-LS - логический ключ j, заданный в поле А, включен;
-LR - логический ключ j, заданный в поле А, выключен. Логические операторы, связанные с сообщениями:
- М - в блоке j, заданном в поле А блока |
GATE, |
находится |
|||
в состоянии синхронизации сообщение, принадлежащее к тому |
|||||
же семейству, |
что и сообщение, находящееся в блоке GATE или |
||||
пытающееся войти в этот блок; |
|
|
|
|
|
- NM - в блоке j, заданном в поле А блока GATE, |
в |
||||
состоянии |
синхронизации |
нет |
ни |
одного |
, сообщен |
принадлежащего к тому же |
семейству, что и |
сообщение, |
|||
пытающееся войти в блок GATE.
Поле А содержит имя или номер объекта, для которого проводится проверка. Операнд А может быть именем, положительным целым числом, СЧА или СЧА*<параметр>.
Поле В содержит номер следующего блока для входящего сообщения, когда логический оператор имеет значение"ложь". Операнд В может быть именем, положительным целым числом, СЧА или СЧА*<параметр>. Если поле В определено, то оно должно содержать номер блока, допустимый для текущей модели.
GATER - накопление нескольких связанных друг с другом сообщений (ансамбль сообщений).
56
GENERATE - создание сообщения и размещение его в списке будущих событий. Блок GENERATE является источником потока сообщений в модели. В данном блоке производится подготовка сообщений и запуск их в модель через интервалы времени, заданные пользователем. Кроме задания правильной временной последовательности, пользователь может в блоке GENERATE задать некоторую информацию об атрибутах сообщений. Блок GENERATE имеет следующий формат записи:
GENERATE [<A>],[<B>],[<C>],[<D>],[<E>]
Вполе А указывается время, которое определяет интервал между моментами генерации сообщений блокомGENERATE. Операнд А может быть именем, положительным целым числом или непосредственно СЧА. Нельзя использовать в качестве операнда параметры сообщения.
Вполе В задается модификатор, который изменяет
значения интервала генерации сообщений по сравнению с интервалом, указанным в поле А. Операнд В может быть именем, положительным целым числом или непосредственноСЧА.
Нельзя использовать в качестве операнда параметры сообщения.
Вполе С задается начальная задержка. Начальная задержка относится к моменту формирования первого сообщения в блоке GENERATE как при первом просчете модели, так и после выполнения операции CLEAR. Начальная задержка - это момент времени, в который первое сгенерированное сообщение должно выйти из блока GENERATE; поля А и В на задержку сообщения влияния не имеют. Начальная задержка может быть меньше, равна или больше среднего времени, заданного в поле А. Операнд С может быть именем, положительным целым числом или непосредственно СЧА. Нельзя использовать в качестве операнда параметры сообщения.
Вполе D задается предел генерации. Эта величина
представляет |
собой максимальное число сообщений, которое |
|||
будет создано |
в блоке GENERATE. Операнд |
D может быть |
||
именем, положительным |
целым числом |
или |
непосредственно |
|
СЧА. Нельзя использовать |
в качестве |
операнда параметры |
||
сообщения. Если поле D пусто, блок генерирует неограниченное
57
число сообщений. Предел генерации инициализируется повторно операцией CLEAR.
Поле |
Е |
определяет приоритет сообщений. Операнд |
Е |
|||||||||
может |
быть |
именем, положительным |
целым |
числом |
или |
|||||||
непосредственно |
СЧА. |
Нельзя |
использовать |
в |
качестве |
|||||||
операнда |
|
параметры сообщения. Если поле Е не |
задано, |
|||||||||
приоритет по умолчанию равен 0. |
|
|
|
|
|
|
||||||
INDEX - изменение параметров сообщения. Блок INDEX |
||||||||||||
имеет следующий формат записи: |
<A>,<B> |
|
|
|
|
|||||||
|
|
|
|
INDEX |
|
|
|
|
||||
Блок |
INDEX к определенному в поле А значению |
|||||||||||
параметра сообщения прибавляет величину, определенную |
||||||||||||
полем В. Результат записывается |
в параметр 1. |
Поле А задает |
||||||||||
номер параметра, значение которого увеличивается на значение |
||||||||||||
аргумента |
|
поля |
В. Если |
параметра |
с таким |
номером |
не |
|||||
существует, то возникает ошибка выполнения. Однако если для |
||||||||||||
обрабатываемого |
сообщения |
не существует |
параметра |
с |
||||||||
номером 1, |
то он создается. |
Операнд А может быть именем, |
||||||||||
положительным целым числом, СЧА или СЧА*<параметр>. |
|
|||||||||||
Поле В задает числовую величину, которая прибавляется |
к |
|||||||||||
содержимому параметра. Операнд В может быть именем, |
любым |
|||||||||||
целым числом, СЧА или СЧА*<параметр>. |
|
|
|
|
||||||||
JOIN - размещение члена в числовой группе или в группе |
||||||||||||
сообщений. Блок JOIN имеет следующий формат записи: |
|
|
||||||||||
|
|
|
|
JOIN |
|
<A>,[<B>] |
|
|
|
|
||
Блок |
JOIN включает |
в |
группу |
сообщение |
или |
числовое |
||||||
значение. Присоединение к группе производится в порядке поступления - на основе алгоритма FIFO.
Поле А задает номер группы, к которой присоединяется новый член. Операнд А может быть именем, положительным целым, СЧА, СЧА*<параметр>.
В поле В задается присоединяемое числовое значение, если группа работает в режиме сообщения. Операнд В может быть именем, целым, СЧА, СЧА*<параметр>.
LEAVE - освобождение всего или части многоканального устройства. Блок LEAVE имеет следующий формат:
LEAVE <A>,[<B>]
58
Блок LEAVE освобождает определенное число единиц многоканального устройства. Занятый объем многоканального устройства уменьшается на число освобождаемых .единиц Оставшаяся емкость многоканального устройства увеличивается на ту же величину. Счетчик числа входов не изменяется. Недоступность многоканального устройства не влияет на блок
LEAVE.
Поле А блокаLEAVE определяет номер или имя многоканального устройства. Операнд может быть именем, положительным целым, СЧА или СЧА*<параметр>.
Поле В - число освобождаемых единиц многоканального устройства. Операнд может быть именем, положительным целым, СЧА или СЧА*<параметр>. Если это поле пусто, предполагается 1. Число освобождаемых единиц не должно превышать текущее содержимое многоканального устройства.
LINK - пересылка сообщения в список пользователя. Блок LINK имеет следующий формат записи:
LINK <A>,<B>,[<C>]
Блок LINK удаляет сообщение из списка текущих событий и помещает его в список пользователя.
Поле А задает номер списка пользователя, в который будет помещено вошедшее сообщение. Операнд А может быть именем, положительным целым, СЧА, СЧА*<параметр>.
Поле В задает алгоритмупорядочивания списка пользователя. Операнд В может быть LIFO, FIFO, именем, целым, СЧА, СЧА*<параметр>.
Поле , С указывающее альтернативный выход, используется при описании различных ситуаций, возникающих в очередях. Операнд С может бытьименем, положительным целым, СЧА, СЧА*<параметр>.
LOGIC - модификация логического ключа. Блок LOGIC имеет следующий формат:
LOGIC <Х> <A>
Блок LOGIC устанавливает положение ключа, которое может быть проверено любым сообщением в любой части модели. Блок LOGIC используется для "включения", "выключения" или инвертирования состояния ключа. Ключ
59
может находится в двух состояниях - включен (set или 1) и выключен (reset или 0).
Операнд А может быть именем, положительным целым, СЧА или СЧА*<параметр>.
Когда сообщение входит в блок LOGIC, состояние логического ключа, номер которого задан в полеA, может быть изменено в зависимости от мнемонического обозначения во вспомогательном поле операции <X> следующим образом:
-S - логический ключ устанавливается в состояние "включен";
-R - логический ключ устанавливается в состояние "выключен";
-I - логический ключ инвертируется, т.е. состояние его меняется на противоположное.
Стандартным числовым атрибутом, связанным с описываемым оператором LOGIC является: LS<номер ключа> - возвращает 1, если ключ в состоянии "включен", и 0 в противном случае.
LOOP - организация цикла с уменьшением значения параметра сообщения. Блок LOOP имеет следующий формат:
|
LOOP |
<A>,[<B>] |
|
|
Блок LOOP используется для организации циклов, т.е. для |
||||
управления |
числом |
|
повторений |
опре |
последовательности блоков в модели. Сообщение никогда не |
||||
задерживается на входе блока LOOP. |
|
|
||
В поле А задается параметр, |
который используется |
в |
||
качестве счетчика |
цикла. Операнд |
А может быть именем, |
||
положительным целым числом, СЧА или СЧА*<параметр>. |
|
|||
Интерпретатор |
определяет |
значение параметра, заданного |
||
полем А. Если оказывается, что такой параметр не существует, то возникает ошибка выполнения и моделирование прекращается,
иначе |
значение |
параметра |
уменьшается |
на |
единицу |
записывается в том |
же параметре. |
Далее производится выбор |
|||
следующего блока, к которому должно перейти сообщение из блока LOOP. Если новое значение параметра не равно нулю, то сообщение перейдет в блок, номер которого указан в поле В. Если же значение параметра - "0", то сообщение переходит к
60
