Перенастройка постоянного генератора ag – команда cheg
Команда cheg(n,p,r,m,s,n) предназначена для настройки генератора с номером n на новые значения параметров. Такая перенастройка произойдет "мгновенно" – в смысле модельного времени. Все параметры этой команды имеют то же назначение, что и параметры настройки генератора ag (символическое имя генератора в команде не указывается).
Управление клапаном key – команды hold и rels
Команды hold(n) и rels(n) предназначены для управления клапаном с номером n из любых других узлов. После выполнения hold клапан принимает состояние "закрыт", если до этого он был открыт. Соответственно, после rels клапан перейдет в состояние "открыт", если до этого он был в запертом состоянии.
Привязка транзакта или узла к точке пространства – команды sewt и sewk
Команда sewt(x) помещает текущий транзакт в точку пространства, имеющую номер х (т.е. приписывает ему координаты этой точки путем занесения значения х в параметр транзакта t->tх). Команда sewk(x,i) помещает узел с номером i в точку пространства, имеющую номер х (т.е. приписывает узлу координаты этой точки, записывая значение х в параметр узла k->kх).
Транзакты имеют параметры, некоторые из которых доступны пользователю. Обращение к параметру транзакта возможно только в момент его входа в узел модели и производится через системную переменную t, являющуюся именем входящего в узел транзакта.
Основными параметрами транзакта являются следующие:
t->iu0, t->iu1, t->iu2, t->iu3 – произвольные целочисленные параметры пользователя (используются для хранения информации о состоянии транзакта);
t->ru0, t->ru1, t->ru2, t->ru3 – произвольные параметры пользователя, имеющие вид переменной с плавающей точкой;
t->ga – признак обслуживания транзакта вновь, который устанавливается операцией присваивания eму глобальной константы again, как это было показано при рассмотрении функции serv;
t->pr – приоритет транзакта;
t->ft – номер семейства, к которому принадлежит транзакт;
t->tx – этот параметр запоминает номер (индекс) точки пространства. Номер точки позволяет определить ее координаты в массивах lat и lon.
Изменять, не опасаясь непредсказуемого поведения модели, можно только t->iu0,
t->iu1, t->iu2, t->iu3, t->ru0, t->ru1, t->ru2, t->ru3, t->ga и, иногда, t->pr и t->ft. Изменение других параметров следует доверить только ПИЛИГРИМу.
1.2.5 Параметры состояния узлов
Некоторые параметры узлов доступны пользователю для анализа (но не для их изменения). Параметры содержатся в системном массиве addr. Доступ к параметру осуществляется с помощью выражения вида:
addr [<n>] - > <параметр>, где <n> – номер узла в модели.
Имена и назначения параметров узлов приведены в таблице 1.
Таблица 1 – имена и значения параметров
Имя | Назначение параметра |
nc | Число каналов в узле |
na | Число транзактов, прошедших через узел на данный момент модельного времени |
tn | Число транзактов, находящихся в узле на данный момент модельного времени |
ts | Среднее время обслуживания, подсчитанное на данный момент. |
op | Признак состояния узла типа key. Это целочисленная переменная, принимающая значение глобальной константы true, если клапан открыт, или false, если он закрыт |
se | Признак состояния узла типа delet. Это целочисленная переменная, принимающая значение глобальной константы nil, если в узле нет уничтожающего транзакта |
kx | Номер (индекс) точки, в которой находится узел типа creat, delet или proc. По номеру точки определяются ее координаты в массивах lat и lon. |
saldo, defic | Остаток и дефицит средств на бухгалтерском счете, связанном с узлом типа send. |
rsal, rdef | Остаток и дефицит ресурса на складе, связанном с узлом типа attach. |
Для анализа параметров любого узла можно использовать его номер <n>. Например, если транзакту необходимо проанализировать состояние узла типа delet, имеющего номер 5, и, в случае отсутствия уничтожающего транзакта, выполнить какой-то оператор, он должен пройти через следующее выражение:
if (addr[5]->se == nil)
<оператор>;
причем сам транзакт в это время находится в произвольном узле. Следует отметить, что возможны пробные обращения координатора network к ветви top(<n>): в смысле передачи управления, но не ввода транзакта в узел. Факт входа транзакта фиксируется в глобальной переменной go и автоматически анализируется всеми функциями ПИЛИГРИМа. Поэтому еще раз необходимо обратить внимание на то, что поток управлений в программе и поток транзактов в модели - это разные явления.
1.2.6 Датчики случайных (псевдослучайных) величин
Часто в процессе моделирования возникает необходимость получить случайную величину в формате float, распределенную по какому-либо закону. В системе PILGRIM есть стандартные 32-разрядные датчики псевдослучайных величин. В каждом узле есть свой датчик, независимый от датчиков других узлов. Связь с этими датчиками осуществляется с помощью следующих функций:
normal(m,s); – нормальный закон распределения;
expont(m); – экспоненциальный закон;
unifrm(m,s); – равномерный закон на отрезке [m-s,m+s];
rundum(); – равномерный закон на отрезке [0,1];
erlang(m,s); – обобщенный закон Эрланга;
triplex(m,s,o); – закон b-распределения,
где m – мaтематическое ожидание ( normal, expont, unifrm);
– математическое ожидание величины одного элемента (erlang);
– минимальное значение (triplex);
s – cpeднeквадратичное oтклонение (normal);
– мaкcимальное oтклoнeниe (unifrm);
– zero (expont);
– наиболее вероятное значение (triplex);
– количество отрезков(erlang), s > 0;
o – максимальное значение (triplex).
При обращении к одной из этих функций используется датчик того узла, в котором находится транзакт.
Табличные результаты моделирования
Таблица результатов моделирования имеет следующий вид:
*-----------------------------------------------------------------------------*
| ВРЕМЯ МОДЕЛИРОВАНИЯ: 501.58 Лист: 1 |
|-----------------------------------------------------------------------------|
| | | |Загруз-| | 2 | | | | |
| No | Тип |Точ-| ка, % | M [t] | C [t] |Счeтчик|Кол.|Оcт.|Состояние узла|
|узла| узла | ка |Путь,км| среднее | вариация| входов|кан.| тр.| в этот момент|
|-----------------------------------------------------------------------------|
| | | | | | | | | | |
| 1 queue нет нет 1.79 4.50 142 1 1 открыт |
| 2 serv нет %= 55.6 5.17 1.09 141 2 0 открыт |
| 3 term нет нет 7.96 0.79 96 0 0 открыт |
| 4 term нет нет 5.02 0.66 45 0 0 открыт |
| 5 ag нет нет 5.18 0.17 97 1 1 открыт |
| 6 ag нет нет 10.71 0.83 46 1 1 открыт |
*-----------------------------------------------------------------------------*
Отчет о результатах моделирования выводится в виде таблицы, состоящей из одной или нескольких страниц. Таблица содержится в отдельном файле, имя которого указывается автором модели в моделирующей программе.
Для начала работы необходимо найти на диске папку Gem и запустить файл Gem.exe. В меню «Файл» выбрать пункт «Создать» и развернуть рабочую плоскость на весь экран. С помощью палитры объектов построить граф модели на рабочей плоскости в соответствии с рисунком 1.
Рисунок 1 - Граф модели на рабочей плоскости
Нумеруются узлы автоматически, причем первая цифра номера – это номер плоскости, так как в систеие PILGRIM есть возможность иерархического построения графов моделей.
Имена узлов прописываются в диалоговых окнах описания узлов, вход в которые осуществляется с помощью двойного щелчка мыши на изображении узла графа. Для удаления узла нужно поместить на узел кнопку с красным косым крестом и подтвердить необходимость удаления.
Построив граф, необходимо убедиться в отсутствии «зацикливаний», то есть стрелок, протянутых в тот же узел, из которого они выходят.
Для инициализации модели необходимо нажать кнопку ModBeg (Model Begin) под палитрой объектов.
В строке «Название» нужно ввести имя модели, которое будет указано в таблице результатов моделирования – Система обработки информации.
В строке «Узлы» автоматически показывается номер последнего узла модели -118
В строке «Время» необходимо указать длительность периода моделирования (16500).
В качестве единичного отрезка разумно принять минимальный отрезок времени, который будет использоваться при задании параметров модели - в микросекундах (в соответствии с рисунком 2).
Рисунок 2 – Инициализация модели