Все компоненты Е-сети в СВПИМ порождены от базового класса TNObject и перегружают все его виртуальные функции. Кроме того, каждый из компонентов имеет собственные данные и методы, специфичные для него.
Переходы представлены в редакторе классом TNetObj. Кроме свойств, определенных в базовом классе, объект имеет набор собственных свойств, описывающих тип перехода, ширину графического изображения, высоту графического изображения, выражение в операторе TIME, выражение в операторе CONTROL, выражение в операторе TRANSFER и т.д.
Позиции представлены классом TposObj Кроме свойств определенных в базовом классе, объект имеет следующий набор собственных свойств: тип – позиция или очередь, ширина графического изображения, высота графического изображения, ориентация, координаты точек привязки линий, состояние точек привязки и т.д.
Дуги представлены классом TlineObj Кроме свойств, определенных в базовом классе, объект имеет следующий набор собственных свойств: тип дуги, направление дуги, указатель на переход, к которому присоединена дуга, указатель на позицию, к которой присоединена дуга и т.д.
Для осуществления возможности визуального отображения процесса моделирования к свойствам позиций и переходов были добавлены дополнительные свойства. описывающие наличие или отсутствие фишек в позиции и свойства помечающие переход как сработавший.
Класс TNetObj:
TNetObj = class (TNObject)
public
TypeNet:TAllTypeNet;
ResizeRgn:HRGN;
Width:integer;
Height:integer;
HeightVertLine:integer;
IsPassed:boolean; (*добавленное свойство*)
Свойство IsPassed описывает состояние перехода (срабатывающий или нет)
Класс TPosObj:
TPosObj = class (TNObject)
public
TypePos:TAllTypePos;
Width:integer;
Height:integer;
Orientation: Boolean;
Length: Longint;
Pos1, Pos2:TPoint;
InOutPoint: array [1..2] of TPoint;
SatatusInOutPoint:array [1..2] of TWayLine;
OrientationRgn:HRGN;
NumPoints:integer; (*добавленное свойство*)
Свойство NumPoints описывает количество фишек в позиции.
Структура подсистемы имеет следующий вид:
Файл с данными о сработавших переходах создается в результате работы МИКРОСИМ. Структура файла описана в п. 2.3.3. Имя файла задается в виде <имя модели>.log, располагается он в директории МИКРОСИМ. При некорректном задании параметров моделирования размер файла может достигать нескольких мегабайт. Очевидно, что активная работе с таким файлом будет затруднена из-за ограниченной пропускной способности дисковой системы.
Ввиду того, что операции с диском намного медленнее, нежели с памятью, перед началом работы информация из файла с данными загружается в память и в дальнейшем операции с диском отсутствуют. Это позволило существенно ускорить процесс отображения на машинах с медленными дисковыми системами.
Для обеспечения хранения файла со сработавшими переходами был введен тип записи, содержащей следующие параметры сработавшего перехода:
OneLine= Record
Segment: string (*имясегмента*);
Perehod: string (*имя перехода*);
Ttime: real (*текущее модельное время*);
Ddelay: real (*задержка*);
FromPos: String (*имя входной позиции*);
FromCount: integer (*кол-во фишек*);
ToPos: string (*имя выходной позиции*);
ToCount:integer (*кол-во фишек*);
end;
В процессе обработки файла организуется список из таких записей, в порядке следования сработавших переходов.
Моделирование в МИКРОСИМ подразумевает необходимость задания начальной маркировки модели. Маркировка (размещение фишек) осуществляется исполнительной подсистемой на этапе задания параметров, на языке ЯЗП (предложение MARK). Для правильного отображения процесса моделирования, перед началом визуализации необходима расстановка фишек в исходные позиции. Поэтому первым этапом работы подсистемы визуального отображения является начальная маркировка.
Одним из вариантов начальной маркировки был лексический анализ файла с параметрами системы. Но он был отвергнут ввиду наличия такого механизма в МИКРОСИМ и нежелательности дублирования функционала в разных местах системы. Вместо него использован более простой и логичный вариант начальной маркировки непосредственно по данным о сработавших переходах.
Исходя из правила функционирования элементарных Е-сетей, первым в системе сработает тот переход у которого выполнены условия срабатывания – наличие фишки во входной позиции и ее отсутствие в выходной., а также истекло время задержки перехода. Следовательно для таких переходов время задержки будет равно текущему времени моделирования. Зная же переход, сработавший в начальный момент времени, можно определить, какая траектория перехода была активна в этот момент и, соответственно, определить, из какой позиции появилась фишка.
Исходя из этого, для осуществления начальной маркировки модели необходимо выделить из списка те переходы у которых значение поля Ddelay равно значению поля Ttime. И установить во входную позицию (поле FromPos) обнаруженных переходов фишку (или количество фишек, если позиция – очередь), таким образом, осуществив начальную маркировку модели.
Таким образом перебираются все сработавшие переходы и поведение модели можно пронаблюдать на экране.
Следует заметить, что ситуация, при которой для выяснения динамики модели требуется просмотреть всю работу модели от начала и до конца, маловероятна. Как правило, достаточно просмотреть некоторое количество срабатываний, чтобы уяснить, каким именно образом работает модель. Для этого предусмотрена возможность останова отображения в любой момент времени.
Подсистемой предусмотрена возможность пошагового выполнения процесса визуального отображения. Запрос необходимости пошагового выполнения осуществляется перед началом визуализации. После отображения каждого срабатывания перехода, система ожидает нажатия клавиши Enter.
Очевидно, что при визуализации процесса интерпретации использование значений модельного времени задержки нецелесообразно. Т.к. в этом случае процесс происходил бы слишком быстро, особенно в случае тех переходов для которых задержка не задана, и соответственно равна 0. Для решения этой проблемы предусмотрен некий коэффициент, называемый коэффициентом визуальной задержки, который устанавливается пользователем. Выбор значения коэффициента также предоставляется исследователю. При отображении процесса моделирования на экране, модельная задержка сработавшего перехода перемножается на заданный коэффициент, благодаря чему мы получаем визуальные задержки переходов пропорциональные модельным. Для тех переходов в модели у которых задержка не реализованная используется аддитивная задержка.
Возможность введения пользователем коэффициента визуальной задержки позволяет исключить зависимость времени изображения от быстродействия компьютера, поскольку на медленных машинах существует возможность установить коэффициент задержки меньшим, нежели на машинах с более мощным процессором. Так же эту возможность можно использовать в тех случаях, когда не требуется визуально отслеживать срабатывание каждого перехода, а нужно лишь оценить работоспособность модели в целом. В этом случае следует установить меньший коэффициент задержки, чем в случаях, когда необходимо отследить траекторию движения каждой фишки.
Разработанная в рамках данного дипломного проекта подсистема позволяет наблюдать за процессом интерпретации модели. Визуально, процесс интерпретации заключается в перемещении фишек в системе.
Подсистема состоит из двух частей одна из которых интегрирована в исполнительную подсистему МИКРОСИМ, а вторая в редактор сетевых моделей СВПИМ. Упрощенно полученную структуру подсистемы можно представить следующим образом:
Взаимодействие между интерпретатором модели и СВПИМ осуществляется через текстовый файл, структура данных которого предоставляет второй части подсистемы полную информацию о последовательности срабатываний переходов и состоянии входных – выходных позиций. Процесс визуального отображения осуществляется после интерпретации модели, что никоим образом не сказывается на правильности отображения. Данный процесс состоит из трех этапов, реализованных в программе тремя циклами.
Первый этап – этап работы с файлом, в результате которого создается список имеющий структуру в точности повторяющую структуры данных файла.
Второй этап – этап начальной маркировки модели.
Третий этап – этап визуального отображения.