Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ИМ.doc
Скачиваний:
15
Добавлен:
26.09.2019
Размер:
1.08 Mб
Скачать

Сигнальные управляющие функции

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

Функция interrupt для прерывания модели. Модель, которая, с точки зрения пользователя, выглядит отлаженной, может таковой не быть. Она не обязательно сохранит свое быстродействие и логику работы, если экспериментатор существенно изменит входные данные и подправит под них текст модели.

Прерывания осуществляются двумя способами:

  • в процессе диалога с моделью во время ее выполнения (клавиша Esc);

  • программно - с помощью функции interrupt, которую можно по какому-либо условию выполнить в любой ветви графа модели. Записывается: interrupt().

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

Функция cheg для перенастройки генератора транзактов ag. Часто бывает необходимо перенастроить генератор транзактов ag(p1,p2,p3,P4,P5,P6,P7,P8)- Номер генератора - это параметр р2. Функция cheg(p2,p3,p4,P5,P6,P7,P8) предназначена для изменения параметров генератора ag, кроме первых двух. Номер перенастраиваемого генератора содержится в параметре р2. Такая перенастройка произойдет за нулевое модельное время. Смысл аргументов р3 – p8 - тот же самый, какой имеют параметры генератора с номером р2

Функции rels и hold для управления клапаном key. Узел типа «клапан» управляется из других узлов. Функции rels(i) и hold(i) предназначены для управления клапаном с номером i из любых других узлов.

После выполнения rels клапан принимает состояние «открыт», если до этого он был закрыт. Соответственно после hold клапан пе­рейдет в состояние «закрыт», если до этого он был в открытом со­стоянии. Обычно клапаны помещают на выходах каких-либо очере­дей.

Функции activ и passiv для управление активностью процесса рrос. Функция activ(i) переводит процесс (узел типа ргос) с номером i в активное состояние, если он был пассивен. При этом возобновляются обслуживание транзакта (т.е. отсчет активного времени) и выполнение модели процесса (программы float ер). Функция passiv(i) переводит процесс (узел типа ргос) в пассивное состояние, если он был активен. При этом транзакт и соответствующее событие исключаются из списка планируемых событий и переводятся в стек прерванных транзактов. Прекращается и выполнение модели процесса (программы float ер). Если процесс уже был пассивен либо узел i был пустым, то никаких действий не осуществляется.

Функция supply для обеспечения начальной мощности ресурса. При работе со складом ресурсов attach в какой-то момент необходимо принудительно либо установить начальное значение, либо его изменить на заданную величину. Это делается с помощью функции supply: supply(p1,p2,p3)

Функция assign для ассигнования на счет денежной суммы. При работе со счетами send в какой-то момент необходимо принудительно либо установить начальное значение остатка денежных средств, либо его изменить на заданную величину. Это делается с помощью функции assign(p1,p2,p3)

Функции geoway и dekart для определения расстояния между точками пространства.

Функция geoway(latA,lonA,latB,lonB) служит для определения расстояния между точками А и В по их географическим координа­там, измеряемым в радианах, причем latA, lonA - широта и долгота точки А;

latB, lonB - координаты точки В.

Функция geoway используется имитатором автоматически внутри узла dynam, однако ее можно вызывать из любой программы пользователя. Функция dekart(xA,yA,xB,yB) аналогична функции geoway. Она служит для определения расстояний на декартовой плоскости в прямоугольных координатах по теореме Пифагора.

Функция change для замены узла обслуживания очереди. Данная сигнальная функция чаще всего используется при моделировании клиринговых процессов. Она имеет вид change (р1р2).

Функция clcode для включения блока операторов языка C++. В блоке описания узлов иногда разработчик модели может помещать свою программу: программные блоки на языке C++, обращения к функциям, написанным на языке C++ или Паскаль, обращения к системным вызовам. Однако это нужно делать при соблюдении определен­ных правил.

Программирование условий прохождения транзакта по графу модели

При построении моделей часто может встретиться ситуация, когда какой-либо объект имеет несколько подчиненных объектов, объединенных общим именем класса, в который они попадают, и требуется решить, в какой из подчиненных узлов направлять транзакт. В этом случае можно поступить, следующим образом: транзакт тем чаще направляется в узел, чем больший вес он имеет. Под весом в данном случае понимается любая количественная характеристика объекта, по которой может производиться сравнение.

Условие выбора узла с номером к выглядит следующим образом:

где р - случайная величина, равномерно распределенная на отрезке [0,1].

Условие нормирования записывается так:

Сумма_весов = .

Следует учесть, что

Если в модели имеется несколько принадлежащих к одному классу объектов, каждый из которых представлен несколькими узлами, то целесообразно нумеровать узлы, относящиеся к каждому объекту, таким образом, чтобы номера соответствующих узлов разных объектов были функцией от номера объекта данного класса. k1=10m+1; k2=10m+2; k3=10m+3.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]