В силу этих ограничений, вынужденным решением было отказаться от визуализации процесса моделирование в реальном времени. Это никак не отражается на точности и наглядности визуализации, однако, для обеспечения работы такого решения необходим внешний файл, который, при некорректном задании параметров модели, может быть очень большим по размеру и на его подготовку может уйти значительное время.
В процессе работы интерпретатора создается файл <имя модели>.log, в который, при каждом срабатывании перехода в процессе интерпретации модели, записывается информация о состоянии сработавшей элементарной Е-сети.
Информация представляется в следующей последовательности:
· имя сегмента, в котором сработал переход;
· имя перехода;
· время;
· единица времени;
· задержка;
· единица времени;
· входная позиция;
· количество фишек в ней;
· выходная позиция;
· количество фишек в ней;
Состояние позиций отображается на момент до начала срабатывания перехода.
Разработчику при исследовании модели далеко мне всегда может потребоваться графическое отображение процесса моделирования. Принимая во внимание этот факт и то, что файлы, содержащие информацию о работе модели, могут быть достаточно большими, что требует наличия дополнительного свободного дискового пространства, было принято решение о том, что при запуске модели на исполнение должна существовать возможность указания необходимости в последующей визуализации исследуемого процесса.
В МИКРОСИМ существует возможность трассировки, как раз и предназначенная для наблюдения процесса работы модели, которая позволяла получать информацию о сработавших переходах в процессе моделирования. Поскольку разрабатываемая подсистема позволит, в случае необходимости, более полно отразить процесс, было принято решение, о том, что признак трассировки модели и будет означать необходимость последующей визуализации процесса ее интерпретации. Признак трассировки задается предложением TRACE при задании параметров модели на языке ЯЗП.
Для реализации трассировки модели в исполнительной подсистеме МИКРОСИМ существует специальная процедура I00TRD из модуля ISPINT. Данный модуль и является интерпретатором модели, иными словами Е-сетевой машиной. Алгоритм ее функционирования представлен ниже.
Е-сетевая модель может быть приведена в движение с помощью особого интерпретатора, который реализует алгоритм функционирования Е-сетевой машины. Формально Е-сетевая машина, воспринимая на своем входе определенную маркированную Е-сеть, приводит в движение имеющиеся в этой сети фишки в соответствии с правилами выполнения элементарных сетей. Основные функции Е-сетевой машины при этом сводятся к следующим действиям:
1. Выявление условий срабатывания переходов в элементарных сетях, входящих в обрабатываемую Е-сетевую модель.
2. Назначение на выполнение тех элементарных сетей, в которых возникают условия срабатывания перехода.
3. Реализация временных задержек, ассоциированных с переходами при их срабатывании (реализация активных фаз сработавших переходов).
4. Перемещение фишек из входных в выходные позиции каждого сработавшего перехода в момент завершения активной фазы в зависимости от типа элементарной сети, отвечающей данному переходу.
5. Контроль правильности доступа к атрибутам фишек в позициях Е-сети при выполнении управляющих процедур (процедур входного и выходного выбора), процедур преобразования и вычисления функций временной задержки.
6. Сбор статистических данных о поведении обрабатываемой Е-сети.
7. Контроль особых условий, возникающих во время обработки Е-сетевой модели (исчезновение фишек, отсутствие активных переходов, истечение заданного интервала наблюдения (моделирования) за Е-сетью, возникновение условия из предложения STOP и т.п.).
Интерпретация модели может выполнятся лишь после сборки модели из предварительно скомпилированных сегментов, входящих в ее состав, и после установки параметров собранной модели (скомпонованной) модели на языке задания параметров (ЯЗП). Готовая к интерпретации Е-сетевая модель представляется в памяти компьютера справочником и набором сетевых и процедурных компонентов сегментов, входящих в модель.
Алгоритм работы Е-сетевой машины (алгоритм интерпретации) реализуется набором целого ряда процедур. В процессе интерпретации динамически формируются и используются следующие списки, указатели которых хранятся в справочнике модели или в справочниках сегментов:
T – список сегментов модели: в списке находятся справочники всех сегментов, составляющих модель. Справочники сегментов упорядочены в списке T по возрастанию времени наступления ближайших событий в сегментах, т.е. по возрастанию значений, хранящихся в поле LOWTIME справочника сегмента. Справочники сегментов с одинаковым значением поля LOWTIME располагаются в списке T согласно дисциплине обслуживания FIFO; поле LOWTIME в справочнике пассивного сегмента (т.е. сегмента, в котором нет активных переходов) содержит значение MAXREAL (максимально возможный момент времени, или «бесконечность»).
S – список активных переходов сегмента: в список включаются таблицы тех переходов сегмента, процесс срабатывания которых находится в активной фазе. Переходы упорядочены в списке S по возрастанию времени окончания активных фаз. Значение этого времени для активного перехода хранится в поле FINT таблицы перехода и выражено в единицах времени модели. Таблицы переходов с одинаковым значением поля FINT располагаются в списке S согласно дисциплине обслуживания FIFO.
I – список прерываний: в список включаются переходы сегмента, принадлежащие элементарным сетям типа I, во входных позициях которых одновременно находятся основная и прерывающая фишки.
R – список потенциально активных переходов: в список включаются таблицы тех переходов, у которых состояние входных и выходных позиций соответствует условию срабатывания, но функция (процедура) входного и / или выходного выбора (управления) задает пустое множество позиций (неопределенное (нулевое) значение траектории перемещения фишки). Таблицы переходов в списке R располагаются согласно дисциплине обслуживания LIFO.
Дополнительно используется дескриптор интерпретатора, содержащий информацию, передаваемую процедурным компонентам модели, и времена начала и окончания интерпретации, необходимые для вычисления затрат машинного времени на моделирование. Дескриптор интерпретатора размещается в отдельной процедуре (процедуре I00GDS), которая предназначена для определения адреса дескриптора интерпретатора.
Справочник модели содержит ее имя, адрес списка сегментов и ряд других сведений, являющихся общими для всей модели (размер модели, единица модельного времени, интервал моделирования, текущее модельное время и т.п.). В свою очередь, каждый сегмент, входящий в модель представлен (кроме сетевого и процедурного компонентов) своим справочником, в котором отражены сведения, относящиеся к данному сегменту. Некоторые поля в справочниках модели используются при осуществлении записи о состоянии сработавшего перехода в файл.
Алгоритм функционирования Е-сетевой машины реализуется следующими процедурами модуля ISPINT:
Процедура I000 – Управление интерпретацией модели.
Процедура I001 – Подготовка интерпретации модели.
Процедура I002 – Основной цикл интерпретации модели.
Процедура I00MC – Управление интерпретацией сегмента.
Процедура I00MS – Управление срабатыванием переходов в сегменте.
Процедура I00PT – Выполнение операций, ассоциированных со срабатыванием перехода.
Упрощенно, структура интерпретатора модели представлена на рис. 2.4.
Алгоритм функционирования процедуры I00MS, управляющей срабатыванием переходов, рассмотрим более подробно:
1. [Инициализация]
Инициализировать список I.
2. [Контроль возможности приостановки]
Если условие приостановки интерпретации истинно, то установить код возврата и завершить процедуру (выход).
3. [Контроль списка I]
Если список I пуст, то перейти на шаг 4; в противном случае исключить (выбрать) переход из списка I и перейти на шаг 8.
4. [Контроль списка S]
Если список S пуст, то завершить процедуру (выход).
5. [Подготовка к работе с переходом]
Настроиться на работу с первым переходом в списке S.
6. [Контроль момента активизации]
Если момент активизации FINT выбранного (из списка S) перехода больше текущего модельного времени, то установить LOWTIME<–FINT и завершить процедуру (выход).
7. [Исключение выбранного перехода из списка S]
Выполнить процедуру I00DSL.
8. [Контроль признака трассировки перехода]
Если задан признак трассировки срабатывания выбранного перехода, то выполнить процедуру I00TRD (вывод информации о срабатывании перехода).
9. [Выполнение операций, ассоциированных со срабатыванием перехода]
Выполнить процедуру I00PT.
10.[Контроль успешности операций]
Если выявлена ошибка при срабатывании перехода, то завершить процедуру (конец).
11.[Контроль активизации переходов по входным позициям]
Проверить условие активизации переходов, связанных со входными позициями сработавшего перехода, из которых удалены фишки в результате срабатывания.
12.[Контроль активизации переходов по выходным позициям]
Проверить условие активизации переходов, связанных с выходными позициями сработавшего перехода, в которые поступили фишки в результате срабатывания.
13.[Повторный контроль сработавшего перехода]
Проверить условие повторной активизации сработавшего перехода (и если условие истинно, то должным образом отразить это в списках S, I, R).
14.[Контроль активизации переходов из списка R]
Проверить условие активизации переходов, находящихся в списке R.