В строке «ПСЧ» указывается начальное значение для генератора псевдослучайных чисел, необходимых для имитации случайных процессов. Автоматически для этого используется показание компьютерного таймера.
В строке «Пространство» предлагается выбрать тип пространства, если модель будет работать с координатной плоскостью. В данной задаче это не требуется.
Строки «Задержка» и «Поток» предназначены для задания номеров контролируемых узлов: очереди (узел «Queue») и терминатора (узел «Term») соответственно. Для указанных узлов в процессе моделирования будут строиться графики времени задержки (очередь) и динамики выходного потока (терминатор). График времени задержки показывает среднее значение времени ожидания транзакта в очереди в каждый единичный отрезок модельного времени. График динамики потока показывает число транзактов, попавших в терминатор в единицу модельного времени (то есть интенсивность выходного потока заявок в моделируемой системе).
В строке «Точность» можно выбрать необходимое число знаков после десятичной точки в таблице результатов моделирования.
В окне «Начальный С++ текст» при необходимости переопределяются имена параметров транзактов и задаются числовые константы.
Окно инициализации ресурсов предназначено для задания начального состояния узлов, которые в данной модели не используются.
В очередях сигналы накапливаются до 10 сигналов и затем отправляются на обработку в мини-ЭВМ (в соответствии с рисунком 3)
Рисунок 3 – Свойства узла Queue
Первый сервер – сигналы буферируются и предварительно обрабатываются в соответствии с рисунком 4.
Остальные сервера предназначены для обработки накопленных сигналов. Как только число сигналов становится равным 10 начинается обработка.
Рисунок 4 – Свойства узла Serv (первичная регулировка)
В очередях заданий необходимо установить флаг учета приоритета транзактов (значение "prty"), в параметрах серверов так же нужно задать флаг учитывания приоритетов транзактов (значение "abs"), а также установиться закон распределения и время обработки в соответствии с рисунком 5.
Рисунок 5 – Детализация узла Serv
2.4.3 Генератор (датчик, мини-ЭВМ)
Описание генератора похоже на описание серверов в соответствии с рисунками 6,7. Здесь необходимо задать интервал времени поступления каналов на вход и время обработки.
Рисунок 6 – Свойства узла AG (датчик)
По условию от датчиков поступают на вход канала сигналы через интервалы 10+ 5мкс.
Рисунок 7 – Детализация узла AG (датчик)
Значение параметра 3 остаются нулевыми.
В данной модели ключ используется для регулирования поступления сигналов, в соответствии с рисунком 8.
Рисунок 8 – Свойства узла KEY
Для описания терминаторов необходимо задать только логическое имя узла. Никаких дополнительных действий в данной модели с ними не связано, в соответствии с рисунком 9.
Рисунок 9 – Свойства узла Terminator
После того, как граф модели построен, и все узлы полностью описаны, модель необходимо сохранить в графическом формате. Для этого в меню «Файл» нужно выбрать пункт «Сохранить», затем выбрать адрес сохранения на диске и ввести имя файла. Расширение .pgf (pilgrim graphic file) будет подставлено автоматически.
Если сохранение модели в графическом формате был успешно выполнено, нужно в меню «Выполнить» выбрать пункт «Генерировать С++ файл». В указанной пользователем папке будет создан файл PILGRIM-программы с расширением .cpp (имя также вводится пользователем). Тест программы приведен в Приложении А.
В данной курсовой работе были рассмотрены основные принципы моделирования в системе Pilgrim.
Изучены основные инструментальные средства, такие как транзакты, узлы, события, модельный таймер.
Рассмотрены основные типы узлов (Ag, Key, Serv, Creatи т.д.)
В рамках проекта была смоделирована система обработки информации.
Приложение А. Листинг программы
#include <Pilgrim.h>
forward
{
int fw;
modbeg("Системаобработкиинформации", 119, 16500, (long)time(NULL), none, none, none,none, 2);
ag("Датчик", 101, none, norm, 10, 5, zero, 102);
network(dummy, dummy)
{
top(102):
queue("Очередь", prty, 103);
place;
top(103):
if( addr[5]->tn<=addr[4]->tn && addr[5]->tn<=addr[6]-> )
{
fw=117;
}
else
if( addr[6]->tn<=addr[5]->tn && addr[6]->tn<=addr[4]-> )
{
fw=118;
}
else
{
fw=116;
}
serv("Сервер", 3, abs, norm, 10, 3, zero, fw);
place;
top(104):
if addr[4]->tn==10 hold(116)
queue("Очередь", prty, 113);
place;
top(105):
if addr[5]->tn==10 hold(117)
queue("Очередь", prty, 114);
place;
top(106):
if addr[6]->tn==10 hold(118)
queue("Очередь", prty, 115);
place;
top(110):
term("мини-ЭВМ 1");
place;
top(111):
term("мини-ЭВМ 2");
place;
top(112):
term("мини-ЭВМ 3");
place;
top(113):
if addr[4]->tn<10 rels(116)
serv("Сервер", 1, abs, none, 33, zero, zero, 110);
place;
top(114):
if addr[5]->tn<10 rels(117)
serv("Сервер", 1, abs, none, 33, zero, zero, 111);
place;
top(115):
if addr[6]->tn<10 rels(118)
serv("Сервер", 1, abs, none, 33, zero, zero, 112);
place;
top(116):
key("Ключ 1", 104);
place;
top(117):
key("Ключ 2", 105);
place;
top(118):
key("Ключ 3", 106);
place;
fault(123);
}
modend("pilgrim.rep", 1, 8, page);
return 0;
}