Смекни!
smekni.com

Моделирование в системе PILGRIM (стр. 3 из 4)

Перенастройка постоянного генератора 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х).

1.2.4 Параметры транзактов

Транзакты имеют параметры, некоторые из которых доступны пользователю. Обращение к параметру транзакта возможно только в момент его входа в узел модели и производится через системную переменную 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 открыт |

*-----------------------------------------------------------------------------*

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

2 Практическая часть

2.1 Задание

Система обработки информации содержит мультиплексный канал и три мини-ЭВМ. Сигналы от датчиков поступают на вход канала через интервалы 10 + 5 мкс. В канале они буферируются и предварительно обрабатываются в течение 10 + 3 мкс. Затем они поступают на обработку в мини-ЭВМ, где имеется наименьшая по длине входная очередь. Емкости входных накопителей во всех мини-ЭВМ рассчитаны на хранение величин 10 сигналов. Время обработки сигнала в любой мини-ЭВМ равно 33 мкс. Смоделировать процесс обработки 500 сигналов, поступающих с датчиков.

2.2 Построение графа модели

Для начала работы необходимо найти на диске папку Gem и запустить файл Gem.exe. В меню «Файл» выбрать пункт «Создать» и развернуть рабочую плоскость на весь экран. С помощью палитры объектов построить граф модели на рабочей плоскости в соответствии с рисунком 1.

Рисунок 1 - Граф модели на рабочей плоскости

Нумеруются узлы автоматически, причем первая цифра номера – это номер плоскости, так как в систеие PILGRIM есть возможность иерархического построения графов моделей.

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

Построив граф, необходимо убедиться в отсутствии «зацикливаний», то есть стрелок, протянутых в тот же узел, из которого они выходят.

2.3 Инициализация модели

Для инициализации модели необходимо нажать кнопку ModBeg (Model Begin) под палитрой объектов.

В строке «Название» нужно ввести имя модели, которое будет указано в таблице результатов моделирования – Система обработки информации.

В строке «Узлы» автоматически показывается номер последнего узла модели -118

В строке «Время» необходимо указать длительность периода моделирования (16500).

В качестве единичного отрезка разумно принять минимальный отрезок времени, который будет использоваться при задании параметров модели - в микросекундах (в соответствии с рисунком 2).

Рисунок 2 – Инициализация модели