Введение
Целью создания моделирующих систем является исследование моделей реальных объектов и процессов. Специалист, использующий такую систему, не ограничен ни временем эксперимента, ни проблемой расхода различных ресурсов, требующихся для проведения реального эксперимента. Кроме того, если в системе моделирования предусмотрена возможность добавления новых объектов или стадий в исследуемый процесс, то проведение эксперимента посредством моделирования выигрывает по сравнению с реальным экспериментом вдвойне.
Таким образом, системы моделирования предоставляют исследователю большую свободу действий при отсутствии каких-либо материальных затрат. Практика показывает, что использование моделирующих систем позволяет не только получить достаточно достоверные сведения о возможном поведении объектов моделирования в тех или иных ситуациях, но и к открытию новых свойств этих объектов.
Но, несмотря на все преимущества моделирующих систем, результаты моделирования не всегда в точности совпадают с результатами реальных экспериментов. Вероятность соответствия полученного при моделировании результата действительности зависит от нескольких факторов:
· степени соответствия представления об исследуемых объектах реальным объектам;
· уровня детализации свойств объектов при составлении их моделей;
· уровня понимания значимости тех или иных свойств объекта в конкретной системе;
· степени понимания взаимосвязей исходных объектов в системе.
Таким образом, чем сложнее сами объекты и их поведение в системе, тем больше их свойств требуется задать при составлении модели и тем меньше уверенность в достоверности результатов. И наоборот – чем проще реальные объекты и взаимосвязи между ними, тем проще их описать в системе моделирования и тем достовернее будут результаты, а, следовательно, тем более обоснованно применение моделирующих систем.
Микрокомпьютерная система имитационного моделирования МИКРОСИМ предназначена для моделирования систем обработки данных, а также исследования алгоритмов и систем параллельной и распределенной обработки данных.
Система МИКРОСИМ может применяться для имитационного моделирования с целью верификации и комплексной оценки эффективности систем параллельной и распределенной обработки данных, включая мультипрограммные и мультипроцессорные системы, локальные вычислительные сети, коммуникационные протоколы и т.п. Наиболее полно возможности МИКРОСИМ раскрываются при моделировании сложных алгоритмов и систем обработки данных с развитым параллелизмом протекающих в них процессов.
В качестве формального средства для описания исследуемых алгоритмов и систем в МИКРОСИМ применен аппарат модифицированных Е-сетей, являющихся развитием обыкновенных Е-сетей. Применение модифицированных Е-сетей (по сравнению с обыкновенными Е-сетями) упрощает разработку Е-сетевых схем и позволяет создавать более компактные модели.
Ввод описаний Е-сетевых моделей в МИКРОСИМ осуществляется на языке ЯОМ (Язык Описания Моделей). Этот язык представляет собой расширение языка Паскаль и, следовательно, обладает всеми его развитыми выразительными средствами.
В ЯОМ предусмотрены объекты, которые по своему статусу не являются легальными в языке Паскаль. К ним относятся так называемые сетевые переменные, а также ссылки на компоненты Е-сетей – переходы, позиции и атрибуты фишек в позициях. Кроме того, не подчиняются синтаксису языка Паскаль описания элементарных сетей и заголовки процедур управления, временной задержки и преобразования и некоторые другие конструкции в ЯОМ.
Кроме ЯОМ, в МИКРОСИМ предусмотрен отдельный язык задания параметров (ЯЗП). Этот язык используется на стадии исследования готовой (скомпонованной) модели для изменения маркировки позиций, установки желаемых значений сетевых переменных, спецификации таблиц распределения (гистограмм), указания позиций и переходов, по которым необходимо накапливать статистику при выполнении модели, задания условий прекращения (приостановки) моделирования и трассировки выполнения модели. Для изменения параметров модели не требуется повторная компиляция и компоновка частей (сегментов) модели.
Минимальным функционально законченным компонентом Е-сетевой модели является сегмент. Сегмент подлежит самостоятельной обработке (компиляции). Модель может состоять из набора связанных друг с другом сегментов, объединяемых на стадии сборки модели.
При описании модели исследуемой системы для проведения с ней дальнейших экспериментов с использованием МИКРОСИМ исследователь непременно проходит через два этапа:
1. визуальное описание модели с помощью Е-сетей;
2. описание разработанной Е-сетевой модели на ЯОМ.
Создание визуального описания исследуемой модели с использованием Е-сетей – обязательный и независимый от МИКРОСИМ этап.
Для приведения модели в форму «понятную» МИКРОСИМ, т.е. для ее описания на ЯОМ, исследователь естественно должен быть знаком с синтаксисом ЯОМ. Однако, описать модель на ЯОМ без ошибок тем сложнее, чем объемнее исследуемая модель. Задача описания модели на ЯОМ усложняется еще и тем, что в МИКРОСИМ отсутствует развитая диагностика ошибок.
Для того чтобы упростить процесс описания модели на ЯОМ существует система визуального программирования имитационных моделей СВПИМ, удобный инструмент, который предоставляет исследователю возможность обойти второй этап создания модели. Ему уже не придется кропотливо искать ошибки в текстовом описании модели, он может даже вообще не знать ЯОМ.
СВПИМ представляет собой инструмент для описания новых и модификации существующих сетевых моделей удобными диалоговыми средствами. С использованием средств визуального программирования, предоставляемых СВПИМ, формируется графическое описание модели. Сетевая модель может состоять из одного или нескольких сегментов, связанных между собой. Сегмент состоит из элементарных Е-сетей определенных типов, описанных далее. Одновременно с графическим описанием автоматически формируется описание этой модели на Языке Описания Модели (ЯОМ). Т.е., описав графически сетевую модель, как результат мы получаем текстовое описание модели на ЯОМ в виде файла с расширением.JOM. Этот файл может при желании редактироваться в любом текстовом редакторе. Описание модели в файле с расширением.JOM «понятно» среде МИКРОСИМ и может в ней далее решаться.
Необходимость контроля и наблюдения за поведением модели в процессе ее интерпретации была очевидна еще на стадии разработки МИКРОСИМ. Для реализации такой необходимости в МИКРОСИМ предусмотрена возможность трассировки модели – вывода на экран последовательности срабатываний переходов и информации о них. К сожалению, данная функция не позволяет полностью контролировать корректность работы интерпретатора.
С появлением такого мощного средства как СВПИМ, упрощающего самый трудоемкий этап моделирования – этап описания модели на ЯОМ, возникла идея использования создаваемого в ней графического изображения не только для получения описания модели на языке ЯОМ, решаемого в системе МИКРОСИМ, но и для отображения процесса интерпретации модели, что позволило бы отслеживать динамику модели в целом.
Подсистема визуального отображения интерпретации сетевых моделей представляет собой инструмент для отображения процесса моделирования в среде МИКРОСИМ, с использованием графического изображения модели, сформированного при помощи СВПИМ. Данная подсистема отображает на экране последовательность срабатываний переходов и перемещения фишек в исследуемой модели.
Для наглядности отображения в подсистеме предусмотрены задержки, кратные модельным временам задержек ассоциированных со срабатывающими переходами. Тем не менее, для того, чтобы отследить текущее модельное время на момент срабатывания перехода, оно учитывается и отображается в статусном окне приложения.
Как уже отмечалось, в качестве формального аппарата для представления моделируемых систем в МИКРОСИМ используются модифицированные Е-сети. Структурно Е-сеть представляет собой граф, состоящий из двух типов вершин – позиций и переходов, соединенных друг с другом ориентированными дугами, причем каждая дуга может связывать лишь переход с позицией или позицию с переходом. Следовательно, структура Е-сети эквивалентна ориентированному двудольному графу, у которого одно множество вершин содержит только позиции, а другое множество вершин – только переходы. В модифицированных Е-сетях существуют два типа позиций – простые позиции и позиции-очереди.
Переход в модифицированной Е-сети изображается отрезком прямой. Этот отрезок, в зависимости от типа элементарной сети, отвечающей данному переходу, может дополняться коротким ответвлением, исходящим от конца отрезка под прямым углом в одну или другую сторону, или короткой «перекладиной». Дуга изображается с помощью отрезков прямых и знаков «>» и «<», в зависимости от направления дуги. Понятие элементарной сети определяется в следующем параграфе, а описания типов элементарных сетей – в п. 2.1.2.
1.1.2 Понятие элементарной сетиЭлементарная сеть – это минимальная по структуре Е-сеть, состоящая из единственного перехода и связанных с ним входных и выходных позиций. Формально элементарную сеть можно представить следующей семеркой:
E = <P1, P2, C, R1, R2, TAU, FI>,
где P1, P2 – конечные множества входных и выходных позиций; C – необходимое (но, в общем случае, недостаточное) условие срабатывания перехода; R1, R2 – функции входного и выходного выбора, или функции управления на входе и выходе перехода; TAU – функция временной задержки; FI – функция преобразования.
Далее условие срабатывания C будет записываться в виде логического выражения, операндами которого являются предикаты вида B(X), где X – позиция. При этом B(X) = 1 (или TRUE), если позиция X содержит хотя бы одну фишку; B(X) = 0 (или FALSE), если позиция X пуста.
Предпосылкой срабатывания перехода, ассоциированного с данной элементарной сетью, является истинность условия C (этому соответствует в наших обозначениях ситуация C = 1).
Функция R1 вычисляет подмножество тех входных позиций перехода, из которых в конце фазы активности сработавшего перехода должно быть извлечено (удалено) по одной фишке.
Функция R2 вычисляет подмножество тех выходных позиций перехода, в которые должно быть добавлено по одной фишке после срабатывания перехода.
Функция TAU вычисляет длительность активной фазы сработавшего перехода. В конце этой фазы происходит извлечение фишек из входных позиций перехода, определяемых функцией R1, и добавление фишек в те выходные позиции перехода, которые вычисляются функцией R2.
Наконец, процедура FI задает преобразования, которые должны быть выполнены в конце фазы активности сработавшего перехода.
Для построения Е-сетей любой сложности достаточен ограниченный набор типов (классов) элементарных сетей. Этот набор называется базовым набором, он приведен на Рис. 2.1. На этом рисунке для каждого типа перехода представлены его условное обозначение (T, Y, X, G, I) и геометрическая реализация. Для определенности входные и выходные позиции у всех типов элементарных сетей, обозначенные соответственно буквами X и Y с индексом считаются простыми. При необходимости любая простая позиция может быть заменена позицией-очередью.
Соединяя друг с другом элементарные сети из базисного набора, можно создавать, как уже отмечалось, модифицированные Е-сети произвольной сложности. Точками соединения или связывания двух элементарных сетей служат позиции. При связывании двух элементарных сетей по некоторой паре позиций выходная позиция одной элементарной сети объединяется с входной позицией другой (в частном случае, той же самой) элементарной сети, в результате чего получается единственная позиция. При этом объединяемые позиции обеих сетей должны быть одного типа, такого же типа будет и результирующая позиция.
1.1.3 Правила функционирования элементарных сетейНиже приводятся описания базовых типов элементарных сетей, представленных на Рис. 2.1. В этих описаниях для каждого типа элементарной сети указываются условия срабатывания перехода C, общие и стандартные функции входного и выходного выбора R1 и R2, а также стандартная процедура преобразования FI. Под стандартной функцией (процедурой) понимается функция (процедура), используемая по принципу умолчания. Такая функция (процедура) не нуждается в явном задании (спецификации) и реализуется всякий раз, когда не задана соответствующая нестандартная функция (процедура).
В приводимых ниже описаниях базовых типов элементарных сетей не отражаются правила перемещения фишек при срабатывании переходов, так как эти правила неявно задаются функциями входного и выходного выбора R1 и R2. При этом предполагается следующий общий принцип перемещения фишек: из каждой входной позиции сработавшего перехода, определяемой функцией R1, извлекается по одной фишке и затем добавляется по одной фишке в каждую выходную позицию этого же перехода, определяемую функцией R2.
Рис. 2.1 Базисный набор типов элементарных сетей
Следует также отметить, что требование незанятости одной или нескольких выходных позиций, отраженное в условиях срабатывания переходов во всех типах элементарных сетей, должно соблюдаться лишь для простых позиций. Если простая позиция, к которой в условии срабатывания C предъявляется требование незанятости, заменяется позицией очередью, то это требование для соответствующей позиции должно быть исключено из условия C.
В логических выражениях, представляющих условия срабатывания C, используются символы &,! и ^ для обозначения логических операторов конъюнкции, дизъюнкции и отрицания соответственно.
Функции входного и выходного выбора R1 и R2 будут записываться в форме условных выражений МакКарти. При этом для записи оператора импликации используется символ стрелки –>. Слева от этого символа записывается некоторый предикат, а справа, в угловых скобках – множество входных (для функции R1) или выходных (для функции R2) позиций. Предикат T представляет собой тождественно истинное высказывание.
Необходимое и достаточное условие срабатывания перехода представляется следующим выражением:
C(T)=(B(X1)&B(X2)&…&B(Xm))&(^B(Y1)&^B(Y2)&…&^B(Yn))
Таким образом, для срабатывания перехода в элементарной сети данного типа необходимо и достаточно наличие хотя бы одной фишки в каждой из входных позиций и не занятость всех выходных позиций. Напомним, что если некоторая выходная позиция Y является позицией-очередью, то соответствующий ей член ^B(Y) должен быть исключен из выражения для C(T).
Если множество входных или выходных позиций пусто, то в выражении для C(T) будут лишь члены, соответствующие позициям непустого из двух множеств.
Одновременно оба множества входных и выходных позиций пустыми быть не могут.
Функции входного и выходного выбора для элементарной сети типа T являются константами со следующими значениями:
R1 (T) = [T–>{X1, X2,…, Xm}] = {X1, X2,…, Xm},
R2 (T) = [T–>{Y1, Y2,…, Yn}] = {Y1, Y2,…, Yn},
где символ T в квадратных скобках представляет собой тождественно истинный предикат.
Стандартная процедура преобразования FI(T) обеспечивает копирование значений атрибутов фишки из слотов памяти входной позиции X1 и присваивание этих значений соответствующим атрибутам каждой добавленной фишки во всех выходных позициях перехода.
Если пусто множество входных позиций, то в слоты памяти каждой из добавленных фишек стандартно засылаются нулевые значения атрибутов.
Если же пусто множество выходных позиций, то процедура преобразования не определена.
Необходимое условие срабатывания перехода задается следующим логическим выражением:
C(Y)=(B(X1)! B(X2)!…! B(Xm))&(^B(Y1)&^B(Y2)&…&^B(Yn))
Стандартная функция входного выбора R1 представляется выражением
R1 (Y) = [B(X1)–>X1; B(X2)–>X2;…; B(Xm)–>Xm],
т.е. эта функция «вычисляет» первую из входных позиций (при просмотре их в порядке X1, X2,…, Xm), содержащую хотя бы одну фишку.
Общая (нестандартная) функция входного выбора задается выражением
R1 (Y) = [B(X1)&P1–>X1;…; B(Xm)&Pm–>Xm],
где P1,…, Pm – некоторые предикаты.
Функция выходного выбора в сети данного типа является всегда константой:
R2 (Y)=[T–><Y1, Y2,…, Yn>] = {Y1, Y2,…, Yn}.
Пусть X – некоторая входная позиция, вычисленная функцией R1 (Y). Тогда стандартная процедура преобразования FI(Y) совпадает со стандартной процедурой преобразования FI(T), если в последней заменить позицию X1 позицией X.
При пустом множестве входных позиций элементарная сеть типа Y не отличается от сети типа T, у которой пусто множество входных позиций.
Необходимое условие срабатывания перехода имеет вид:
C(X)=(B(X1)&B(X2)&…&B(Xm))&(^B(Y1)!^B(Y2)!…!^B(Yn))
Функция входного выбора в сети данного типа всегда является константой:
R1 (X) = [T–>{X1, X2,…, Xm}] = {X1, X2,…, Xm}.
Стандартная функция выходного выбора представляется следующим выражением:
R2 (X)=[^B(Y1)–>Y1;^B(Y2)–>Y2;…;^B(Yn)–>Yn],
а общая (нестандартная) функция выходного выбора – выражением:
R2 (X) = [^B(Y1)&P1–>Y1;…;^B(Yn)&Pn–>Yn],
где P1,…, Pn – некоторые предикаты.
Пусть Y – некоторая выходная позиция, вычисленная функцией R2 (Y). Тогда стандартная процедура преобразования FI(Y) реализует перепись атрибутов фишки, извлекаемой из входной позиции X1, и присваивание значений этих атрибутов фишке, добавленной выходную позицию Y.
Если множество выходных позиций пусто, то элементарная сеть данного типа не отличается от сети типа T при пустом множестве ее выходных позиций.
Сеть данного типа сочетает в себе свойства элементарных сетей типов Y и X. Необходимое условие срабатывания перехода задается выражением:
C(G)=(B(X1)! B(X2)!…! B(Xm))&(^B(Y1)!^B(Y2)!…!^B(Yn)).
Стандартные функции входного и выходного выбора R1 (G) и R2 (G) совпадают соответственно со стандартными функциями выбора R1 (Y) и R2 (X) в элементарных сетях типов Y и X. Аналогично, общие (нестандартные) функции входного и выходного выбора R1 (G) и R2 (G) совпадают с общими функциями выбора R1 (Y) и R2 (X) соответственно, при различающихся в общем случае последовательностями предикатов:
R1 (G) = [B(X1)&P11–>X1;…; B(Xm)&P1m–>Xm],
R2 (G) = [^B(Y1)&P21–>Y1;…;^B(Yn)&P2n–>Yn].
Пусть X и Y – некоторые входная и выходная позиции, вычисленные функциями R1 (G) и R2 (G) соответственно. Тогда стандартная процедура преобразования FI(G) реализует перепись атрибутов фишки, извлекаемой из позиции X, и присваивание значений этих атрибутов фишке, добавляемой в позицию Y.
Если множество входных (или выходных) позиций пусто, то элементарная сеть типа G не отличается от элементарной сети типа X (или Y) при пустом множестве входных (или выходных) позиций.
Необходимое и достаточное условие срабатывания перехода имеет вид:
C(I)=(B(X1)&^B(Y1)&^B(X2))! (B(X2)&^B(X1)&^B(Y2)).
Функции входного и выходного выбора сети данного типа могут быть записаны следующими выражениями:
R1 (I)=(B(X1)&^B(Y1)&^B(X2))! (B(X1)&^B(Y1)&B(X2)&B(Y2))–>X1;
(B(X2)&^B(X1)&^B(Y2))! (B(X1)&B(X2)&B(Y1)&^B(Y2))–>X2;
(B(X1)&B(X2)&^B(Y1)&^B(Y2))–>{X1, X2}],
R2 (I)=[(B(X1)&^B(Y1)&^B(X2))! (B(X1)&^B(Y1)&^B(X2)&^B(Y2))–>Y1;
(B(X2)&^B(X1)&^B(Y2))! (B(X1)&B(X2)&B(Y1)&^B(Y2))–>Y2;
(B(X1)&B(X2)&^B(Y1)&^B(Y2))–>{Y1, Y2}].
Ситуация прерывания в сети данного типа возникает при том же условии, как и в сети типа I для обыкновенных Е-сетей. Эту ситуацию можно выразить условием:
B(X1)&B(X2)&^B(Y1)&^B(Y2),
которое в качестве одного из предикатов входит в обе функции R1 (I) и R2 (I).
Стандартная процедура преобразования FI(I) обеспечивает копирование атрибутов фишки из позиции X1 в позицию Y1, либо из позиции X2 в позицию Y2, либо, наконец, из позиции X1 в позицию Y1 и одновременно из позиции X2 в позицию Y2. Конкретное выполнение стандартной процедуры преобразования зависит от истинности конкретной пары предикатов в выражениях для R1 (I) и R2 (I).
1.2 Структура системы МИКРОСИММИКРОСИМ состоит из креативной и исполнительной подсистем, которые представлены на внешних носителях информации (дисках) совокупностью файлов. Обе подсистемы интегрированы в единую систему.
Структура каталогов МИКРОСИМ приведена на рисунке 2.2.
1.2.1 Креативная подсистемаКреативная подсистема (от лат. creatio – созидание, порождение) представляет собой интегрированную среду со стандартным пользовательским интерфейсом, подобным пользовательскому интерфейсу системы программирования Турбо Паскаль. Креативная подсистема позволяет решать пользователю следующие основные задачи:
1.Ввод и редактирование описаний сегментов Е-сетевых моделей на языке ЯОМ, с запоминанием файлов с расширением.JOM в каталоге JOM.
2.Ввод и редактирование предложений задания параметров моделей на языке ЯЗП, с запоминанием файлов с расширением.JZP в каталоге EXE.
3.Общая синтаксическая и, отчасти, семантическая проверка сегментов создаваемой модели в терминах языка ЯОМ, с выдачей диагностических сообщений пользователю.
4.Компиляция описаний сегментов с языка ЯОМ, с получением пары файлов с расширениями.PAS и.NET для каждого компилированного сегмента и их запоминанием в каталоге PAS.
5.Автоматическое формирование короткой главной Паскаль-процедуры для исполнительной подсистемы. Эта процедура содержит имя головного (или единственного) сегмента создаваемой Е-сетевой модели (файл с расширением.HDR).
6.Создание загрузочного модуля исполнительной подсистемы для конкретной Е-сетевой модели путем Паскаль – компиляции.PAS‑файлов сегментов данной модели из каталога PAS (с запоминанием.TPU‑файлов в каталоге TPU) и компоновки полученных.TPU‑файлов сегментов вместе с системными.TPU‑файлами из каталога UNITS. Для решения этой задачи используется обычный Турбо Паскаль-компилятор, работающий (для экономии памяти) в режиме командной строки. Результирующий загрузочный модуль исполнительной подсистемы (т.е. Е-сетевая модель) запоминается в каталоге EXE.
7.Применение всех других опций, характерных для пользовательского интерфейса среды Турбо Паскаль (опции File, Edit, Search и др.).
Таким образом, важнейшими специфическими задачами креативной подсистемы в МИКРОСИМ являются компиляция сегментов с языка ЯОМ (специально разработанным компилятором, загрузочный модуль COMMAIN.EXE в каталоге BIN) и общая синтаксическая проверка сегментов (специально разработанной программой, загрузочный модуль JOMCHECK.EXE в каталоге BIN).
Работа креативной и исполнительной подсистем организуется управляющей программой (загрузочный модуль MICROSIM.EXE в каталоге BIN), работающей в циклическом режиме. Упрощенный алгоритм этой программы приведен на рис. 2.3. Как видно из этого алгоритма, работа креативной подсистемы всегда начинается с запуска интегрированной среды. В этой среде пользователь выбирает необходимую операцию или серию операций (выбор выражается соответствующим кодом завершения среды), а выбранная операция реализуется после выхода из интегрированной среды путем активизации одного или нескольких загрузочных модулей управляющей программой. Если выбранная операция не является операцией окончания работы МИКРОСИМ, то после выполнения операции снова активизируется интегрированная среда, и т.д.
Следует подчеркнуть, что на всех этапах работы системы МИКРОСИМ в оперативной памяти компьютера постоянно находится лишь небольшая по объему управляющая программа (загрузочный модуль MICROSIM.EXE в каталоге BIN). Все остальные компоненты системы (интегрированная среда, программа синтаксической проверки, компиляторы ЯОМ и Турбо Паскаль, исполнительная подсистема) загружаются в память по мере необходимости, сменяя друг друга. Это значит, что МИКРОСИМ работает в режиме логического оверлея ее основных программных компонентов.
Е-сетевая модель может состоять из одного сегмента или из нескольких сегментов, один из которых является головным. После сборки модели исполнительная подсистема обеспечивает возможность установки параметров и исследования характеристик модели, реализуемую компилятором языка задания параметров (ЯЗП), интерпретатором и подпрограммами сбора и обработки статистики. Все эти компоненты реализуются системными модулями МИКРОСИМ из каталога UNITS.
Компилятор ЯЗП выполняет обработку предложений ЯЗП и устанавливает значения параметров готовой Е-сетевой модели, указанные в этих предложениях. Параметрами модели являются начальная разметка соответствующей Е-сети, признаки сбора статистики для позиций и переходов, признаки трассировки срабатывающих переходов в сегментах и др.
Интерпретатор реализует алгоритм функционирования Е-сетевой машины, и, таким образом, обеспечивает моделирование параллельных процессов, протекающих в Е-сети, состоящей из сегментов, входящих в модель. Интерпретатор использует подпрограммы сбора статистики для накопления статистической информации об исследуемых характеристиках модели (например, о длинах очередей, числе срабатываний переходов и т.д.). Диагностические сообщения интерпретатора о ходе моделирования помещены в отдельный файл.
По окончании моделирования подпрограммы обработки статистики обеспечивают выдачу результатов моделирования в виде гистограмм и таблиц, содержащих значения исследуемых характеристик модели (например, средние длины очередей, коэффициенты занятости позиций и т.д.).
Для проведения экспериментов с моделью, требующих больших затрат машинного времени, предусматриваются возможности сохранения модели в файле и последующей загрузки модели из файла в оперативную память для продолжения моделирования.
Для контроля за правильностью сборки модели и корректностью работы интерпретатора исполнительная подсистема позволяет просматривать модель путем получения справочной информации о содержимом структур данных, составляющих сетевые компоненты сегментов.
Диалог пользователя с исполнительной подсистемой реализуется с помощью иерархической системы меню. О запуске подсистемы свидетельствует появление главного меню на экране дисплея. Это меню содержит следующие разделы (режимы): Assemble, Parameters, Modeling, Results, Quit, Inspect, Save, Load и Shell.
В настоящей версии реализованы лишь первые пять из перечисленных режимов.
Каталог UNITS:
CONNECT.TPU – Модуль связи процедур пользовательского интерфейса.
HELP.TPU – Процедуры поддержки справочных сообщений и сообщений об ошибках.
INSTAL.TPU – Инициализирующие операции при запуске исполнительной подсистемы.
ISPCOMP.TPU – Главная процедура компилятора предложений ЯЗП.
ISPGLOB.TPU – Глобальные описания для исполнительной подсистемы.
ISPINT.TPU – Интерпретатор моделей (Е-сетевая машина).
ISPPAUTO.TPU – Интерфейс с синтаксическим автоматом.
ISPSCAN.TPU – Модуль сканера.
ISPSEMA1.TPU – Процедуры компиляции предложений ЯЗП.
ISPSEMA2.TPU – Процедуры компиляции предложений ЯЗП.
ISPSEMA3.TPU – Процедуры компиляции предложений ЯЗП.
ISPSERV1.TPU – Процедуры компиляции предложений ЯОМ.
ISPSTAT.TPU – Модуль сбора статистики.
ISPUPR.TPU – Процедуры интерфейса с пользователем.
LIBR_1.TPU – Библиотека высокого уровня для пользовательского интерфейса исполнительной подсистемы.
LIBR_2.TPU – Библиотека высокого уровня для пользовательского интерфейса исполнительной подсистемы.
NETLOAD.TPU – Сервисные процедуры отображения модели.
SERVICE.TPU – Общие сервисные процедуры.
TEXTWIND.TPU – Библиотека низкого уровня для пользовательского интерфейса исполнительной подсистемы.
TURBO3.TPU – Модули Турбо Паскаля.
UPRGLOB.TPU – Глобальные описания для пользовательского интерфейса исполнительной подсистемы.
1.3 Взаимодействие МИКРОСИМ и СВПИМ 1.3.1 Определение способа взаимодействияНачальным этапом моделирования всегда является создание самой модели, задание ее параметров и т.д. Для этого наиболее удобно использовать подсистему СВПИМ, разработанную специально для более наглядного изображения модели и ввода ее параметров. Исходя из этого, было принято решение сделать подсистему СВПИМ ядром для объединения подсистемы визуального отображения и непосредственно моделирования. Решение об использовании СВПИМ для отображения процесса моделирования было принято ввиду нецелесообразности написания нового модуля для отображения модели, при условии наличия уже имеющегося и отлаженного механизма.
Заметим, что Е-сетевая модель (результирующий загрузочный модуль исполнительной подсистемы), как было отмечено выше, создается креативной подсистемой путем Паскаль–компиляции PAS‑файлов сегментов модели, хранящихся в каталоге PAS, с помощью Турбо Паскаль – компилятора, и запуск исполнительной подсистемы для каждой конкретной модели осуществляется из креативной, путем выбора соответствующей операции.
Наилучшим вариантом схемы взаимодействия между СВПИМ и МИКРОСИМ было бы использование стандартного механизма Windows, через обмен сообщениями между двумя процессами. Таким образом, можно было бы получить визуализацию процесса моделирования в реальном времени, непосредственно в ходе работы исполнительной подсистемы.
К сожалению, отсутствие исходных текстов самой важной части МИКРОСИМ, креативной подсистемы, сделало невозможным использование этих механизмов, поскольку для этого нужно было бы перевести и креативную и исполнительную подсистемы на язык Delphi, что невозможно без исходных текстов программ.
В силу этих ограничений, вынужденным решением было отказаться от визуализации процесса моделирование в реальном времени. Это никак не отражается на точности и наглядности визуализации, однако, для обеспечения работы такого решения необходим внешний файл, который, при некорректном задании параметров модели, может быть очень большим по размеру и на его подготовку может уйти значительное время.
В процессе работы интерпретатора создается файл <имя модели>.log, в который, при каждом срабатывании перехода в процессе интерпретации модели, записывается информация о состоянии сработавшей элементарной Е-сети.
Информация представляется в следующей последовательности:
· имя сегмента, в котором сработал переход;
· имя перехода;
· время;
· единица времени;
· задержка;
· единица времени;
· входная позиция;
· количество фишек в ней;
· выходная позиция;
· количество фишек в ней;
Состояние позиций отображается на момент до начала срабатывания перехода.
1.3.2 Запись состояния модели в файлРазработчику при исследовании модели далеко мне всегда может потребоваться графическое отображение процесса моделирования. Принимая во внимание этот факт и то, что файлы, содержащие информацию о работе модели, могут быть достаточно большими, что требует наличия дополнительного свободного дискового пространства, было принято решение о том, что при запуске модели на исполнение должна существовать возможность указания необходимости в последующей визуализации исследуемого процесса.
В МИКРОСИМ существует возможность трассировки, как раз и предназначенная для наблюдения процесса работы модели, которая позволяла получать информацию о сработавших переходах в процессе моделирования. Поскольку разрабатываемая подсистема позволит, в случае необходимости, более полно отразить процесс, было принято решение, о том, что признак трассировки модели и будет означать необходимость последующей визуализации процесса ее интерпретации. Признак трассировки задается предложением TRACE при задании параметров модели на языке ЯЗП.
Для реализации трассировки модели в исполнительной подсистеме МИКРОСИМ существует специальная процедура I00TRD из модуля ISPINT. Данный модуль и является интерпретатором модели, иными словами Е-сетевой машиной. Алгоритм ее функционирования представлен ниже.
1.3.3 Алгоритм функционирования интерпретатора сетевых моделейЕ-сетевая модель может быть приведена в движение с помощью особого интерпретатора, который реализует алгоритм функционирования Е-сетевой машины. Формально Е-сетевая машина, воспринимая на своем входе определенную маркированную Е-сеть, приводит в движение имеющиеся в этой сети фишки в соответствии с правилами выполнения элементарных сетей. Основные функции Е-сетевой машины при этом сводятся к следующим действиям:
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.
15.[Модификация счетчика]
Нарастить счетчик числа сработавших переходов.
16.[Контроль числа срабатываний]
Если число сработавших переходов достигло установленного максимального значения, то сбросить счетчик числа сработавших переходов, установить код возврата и завершить процедуру (выход). В противном случае перейти на шаг 2.
Как видно из данного алгоритма процедура I00TRD вызывается процедурой I00MS, при установлении задания признака трассировки. Упрощенный алгоритм работы процедуры управления срабатыванием перехода представлен на рис. 2.5.
1.4 Трассировка моделиПеред рассмотрением работы процедуры трассировки необходимо указать структуру справочника модели и сегмента, таблиц переходов и позиций, некоторые поля которых используются при получении данных о сработавшем в сегменте переходе.
СПРАВОЧНИК МОДЕЛИ (58 БАЙТА)
INFMOD=RECORD
MODNAM: (* ИМЯ МОДЕЛИ *)
KOLSEG: WORD; (* ЧИСЛО СЕГМЕНТОВ *)
TMT: REAL; (* ТЕКУЩЕЕ МОДЕЛЬНОЕ ВРЕМЯ *)
FT: PINFSEG; (* АДР.1‑ГО СЕГМ. В СПИСКЕ СОБЫТ.*)
PFSEG: PINFSEG; (* АДРЕС ГОЛОВНОГО СЕГМЕНТА *)
TIMFIN: REAL; (* ИНТЕРВАЛ МОДЕЛИРОВАНИЯ *)
TUN: CHAR; (* ЕДИНИЦА МОДЕЛЬНОГО ВРЕМЕНИ *)
READY: CHAR; (* ГОТОВНОСТЬ К МОДЕЛИРОВАНИЮ:
1‑ЕСТЬ, 0‑НЕТ*)
CONDMD: ARRAY [1..9] OF CHAR; (* КОД И УСЛОВИЯ *)
(* ПРЕКРАШЕНИЯ МОДЕЛИРОВАНИЯ *)
ECOUNT: LONGINT; (* СЧЕТЧИК СОБЫТИЙ *)
NKB: LONGINT; (* ЦЕЛОЕ ЧИСЛО КИЛОБАЙТОВ МОД. *)
NB: LONGINT; (* КОЛ.БАЙТОВ В ПОСЛ.КИЛОБАЙТЕ *)
STEP: REAL; (* ШАГ ОСТАНОВКИ *)
STEPC: REAL; (* ШАГ КАТАЛОГИЗАЦИИ *)
NXTSTOP: REAL; (* ВРЕМЯ СЛЕДУ`ШЕЙ ОСТАНОВКИ *)
NXTCAT: REAL; (* ВРЕМЯ СЛЕДУ`ШЕЙ КАТАЛОГИЗ. *)
INFMODSIZE: INTEGER; (* РАЗМЕР СПРАВОЧНИКА МОДЕЛИ *)
STSTAT: REAL; (* ВРЕМЯ НАЧАЛА СБОРА СТАТИСТИКИ*)
END;
СПРАВОЧНИК СЕГМЕНТА (102 БАЙТА)
INFSEG=RECORD
SPS: WORD; (* РАЗМЕР СТАТИЧ. ЧАСТИ СЕГМЕНТА*)
SEGCNAME: ALFDIG; (* ИМЯ СЕГМЕНТА-КОПИИ *)
SEGONAME: ALFDIG; (* ИМЯ СЕГМЕНТА-ОРИГИНАЛА *)
ADROD: PINFSEG; (* АДРЕС СЕГМЕНТА-РОДИТЕЛЯ *)
ADBRAT: PINFSEG; (* АДРЕС СЛЕД.СЕГМЕНТА-БРАТА *)
ADSYN: PINFSEG; (* АДРЕС СТАРШЕГО СЕГМЕНТА-СЫНА *)
FTIME: PINFSEG; (* АДРЕС СЛЕДУЮШЕГОСЕГМЕНТА
В СПИСКЕ СОБЫТИЙ (ПРИ
СБОРКЕ-АДР.МЛАДШ.СЫНА)*)
LOWTIME: REAL; (* ВРЕМЯ БЛИЖ.СОБЫТИЯ В СЕГМЕНТЕ*)
ADRTABNAME: PTABNAME; (* АДРЕС ТАБЛИЦЫ
(*ДОБАВЛЯЕМЫХ СЕГМЕНТОВ *)
ADRTABLINKS: PTABLINKS; (* АДРЕС ТАБЛИЦЫ СВЯЗИ
(*В СИМВОЛЬНОЙ ФОРМЕ *)
ADRTABLINK: PTABLINK; (* АДРЕС СПИСКА ТАБЛИЦ СВЯЗИ *)
ADRP: POINTER; (* АДРЕС УКАЗАТЕЛЕЙ, ИСПОЛЬЗУЕМЫХ*)
(* В ПРОЦЕДУРЕ СЕГМЕНТА *)
PFPLACE: PPLACE; (* АДРЕС СПИСКА ПОЗИЦИЙ *)
PFTRAN: PTRANSITION; (* АДР.СПИСКА ПЕРЕХОДОВ *)
PTA: PTDIST; (* АДРЕС СП.ТАБЛИЦ РАСПРЕДЕЛЕНИЙ*)
PIL: PTRANSITION; (* АДР.СПИСКА ПРЕРЫВАНИЙ *)
PVAR: POINTER; (* АДР.ТАБ.ПЕРМЕННЫХ И МАССИВОВ *)
ADSEG: PINFSEG; (* АДРЕС ЗАГРУЗКИ СЕГМЕНТА *)
PLS: PTRANSITION; (* АДР.СПИСКА «S» *)
PLR: PTRANSITION; (* АДР.СПИСКА «R» *)
RESERV: INTEGER; (* РАБ.ЯЧЕЙКА – ИСП.ПРИ СБОРКЕ *)
SEGX: INTEGER; (* РАЗМЕР СЕГМЕНТА ПО ОСИ «X» *)
SEGY: INTEGER; (* РАЗМЕР СЕГМЕНТА ПО ОСИ «Y» *)
TIMEUN: CHAR; (* ЕДИНИЦА ВРЕМЕНИ *)
NSATR: CHAR; (* ЧИСЛО АТРИБУТОВ *)
PTATR: PTATRIB; (*АДР.ТАБЛИЦЫ ОПИСАНИЯ АТРИБУТОВ*)
INFSEGSIZE: INTEGER; (* РАЗМЕР СПРАВОЧНИКА СЕГМЕНТА *)
PSTOP: PTABSTOP; (* АДР.ТАБЛИЦЫ УСЛОВИЙ ОСТАНОВА *)
ЕND;
ТАБЛИЦА ПЕРЕХОДА (66 БАЙТ)
TRANSITION=RECORD
NUMTRAN: WORD; (* НОМЕР ПЕРЕХОДА *)
PRIZN: WORD;
(* СЛОВО ПРИЗНАКОВ:
БИТЫ: 2..0 – ТИП ЭЛЕМЕНТАРНОЙ СЕТИ:
1 – T, 2 – Y, 3 – X, 4 – G, 5 – I
8..3 – РЕЗЕРВ
9 – НАЛИЧИЕ ПРОЦЕДУРЫ УПРАВЛЕНИЯ
10 – НАЛИЧИЕ ПРОЦЕДУРЫ ВРЕМЕНИ
11 – НАЛИЧИЕ ПРОЦЕДУРЫ ТРАНСФОРМАЦИИ
12 – ПРИЗНАК ТРАССИРОВКИ
13 – ПРИНАДЛЕЖНОСТЬ К СПИСКУ «S»
14 – ПРИНАДЛЕЖНОСТЬ К СПИСКУ «R»
15 – ПРИЗНАК СБОРА СТАТИСТИКИ *)
PIPL: PPLACE; (* АДР.СПИСКА ВХОДНЫХ ПОЗИЦИЙ *)
POPL: PPLACE; (* АДР.СПИСКА ВЫХОДНЫХ ПОЗИЦИЙ *)
NIPT: CHAR; (* ЧИСЛО ВХОДНЫХ ПОЗИЦИЙ *)
NOPT: CHAR; (* ЧИСЛО ВЫХОДНЫХ ПОЗИЦИЙ *)
PNTRANL: PTRANSITION; (* АДР.ТАБЛ.СЛЕДУ`ШЕГО ПЕРЕХОДА *)
PNSRT: PTRANSITION; (*АДР.СЛЕД.ПЕРЕХ.В СП. «S" ИЛИ «R»*)
TSTAT: PTDIST; (* АДР.ТАБЛИЦЫ РАСПРЕДЕЛЕНИЯ *)
ADRP: POINTER; (*АДР.ПРОЦЕДУРЫ «ТРАНСФОРМАЦИЯ» *)
ADRC: POINTER; (* АДР.ПРОЦЕДУРЫ «УПРАВЛЕНИЕ» *)
ADRT: POINTER; * АДР.ПРОЦЕДУРЫ «ВРЕМЯ» *)
TX: INTEGER; (* КООРДИНАТА «X» *)
TY: INTEGER; (* КООРДИНАТА «Y» *)
FINT: REAL; (* ВРЕМЯ ОКОНЧ.АНИЯ КТИВНОЙ ФАЗЫ *)
DELAY: REAL; (* ВРЕМЕННАЯ ЗАДЕРЖКА *)
INSEL: CHAR; (* ЗНАЧ.ПРОЦЕДУРЫ ВХ.УПРАВЛЕНИЯ *)
OUTSEL: CHAR; (* ЗНАЧ.ПРОЦЕДУРЫ ВЫХ.УПРАВЛЕНИЯ*)
NENTR: LONGINT; (* ЧИСЛО АКТИВИЗАЦИЙ ПЕРЕХОДА *)
SUMTACT: REAL; (* СУММА ИНТЕРВАЛОВ АКТИВИЗАЦИИ *)
END;
ТАБЛИЦА ПОЗИЦИИ (50 БАЙТ)
PLACE=RECORD
NUMPOS: WORD; (* НОМЕР ПОЗИЦИИ *)
PRIZN: WORD;
(* СЛОВО ПРИЗНАКОВ:
БИТЫ: 0 – ТИП ПОЗИЦИИ: 0 – ПРОСТАЯ, 1 – ОЧЕРЕДЬ
3..1 – ТИП ОЧЕРЕДИ: 0 – FIFO 3 – LOW(I)
1 – LIFO 4 – HIGH(I)
2 – RAND
5..4 – РЕЗЕРВ
6 – ТИП АТРИБУТА ДЛЯ ОЧЕРЕДЕЙ HIGH, LOW
7 – ПРИЗНАК ОСОБОЙ ОЧЕРЕДИ, Т.Е. ОЧЕРЕДИ,
ЯВЛЯЮЩЕЙСЯ ВХОДНОЙ И ВЫХОДНОЙ ДЛЯ ПЕРЕХОДА
8 – ВХОДНАЯ ПОЗИЦИЯ СВЯЗИ
9 – ВЫХОДНАЯ ПОЗИЦИЯ СВЯЗИ
14..10 – РЕЗЕРВ
15 – ПРИЗНАК СБОРА СТАТИСТИКИ *)
PBT: PTRANSITION; (* АДР.ТАБЛ.НАЧАЛЬНОГО ПЕРЕХОДА
(*ИЛИ ТАБЛИЦЫ СВЯЗИ *)
PET: PTRANSITION; (* АДР.ТАБЛ.КОНЕЧНОГО ПЕРЕХОДА
(*ИЛИ ТАБЛИЦЫ СВЯЗИ *)
NALOHI: INTEGER; (* СМЕШЕНИЕ АТРИБУТА ДЛЯ *)
(* ОЧЕРЕДЕЙ ТИПОВ HIGH И LOW *)
PNTP: PPLACE; (* АДРЕС ТАБЛ.СЛЕДУЮЩЕЙ ПОЗИЦИИ *)
PNIP: PPLACE; (*АДР.ТАБЛ.СЛЕД.ВХ.ПОЗ. ПЕРЕХОДА*)
PNOP: PPLACE; (*АДР.ТАБЛ.СЛЕД.ВЫХ.ПОЗ.ПЕРЕХОДА*)
PST: PTDIST; (* АДР.ТАБЛИЦЫ РАСПРЕДЕЛЕНИЯ *)
PX: INTEGER; (* КООРДИНАТА «X» *)
PY: INTEGER; (* КООРДИНАТА «Y» *)
PLREC: POINTER; (* АДР.СПИСКА ЗАПИС.ОБ АТРИБУТАХ*)
NOB: CHAR; (* ЧИСЛО ФИШЕК *)
QMAX: CHAR; (* МАКС.ДЛИНА ОЧЕРЕДИ *)
NENTR: LONGINT; (* ЧИСЛО ВХОДОВ ФИШЕК В ПОЗИЦИ` *)
SUMTZ: REAL; (* СУММА ИНТЕРВАЛОВ ЗАНЯТОСТИ *)
END;
Входными параметрами процедуры трассировки I00TRD являются указатели на справочники модели, сегмента и перехода. Все необходимые для записи в файл данные процедура получает из справочников. Имя сегмента в котором сработал переход получаем с помощью процедуры GETNAME, модельное время и время задержки с помощью процедуры I00TUN, обе процедуры из модуля ISPINT.
Таким образом мы получаем структуру данных, предоставляющую подсистеме визуального отображения процесса моделирования полную информацию о сработавшем переходе. Более того, информация о имени сегмента позволяет определить в каком именно сегменте модели произошло срабатывание перехода, что важно в случае многосегментной модели.
Следует отметить, что работа с создаваемым в процессе интерпретации файлом, осуществляется по всем правилам языка Турбо – Паскаль.
Открытие файла происходит при первом обращении к процедуре трассировки. Счетчик обращений SCH обнуляется при активизации пункта меню «Пуск Модели». Описан в разделе глобальных переменных в модуле ISPGLOB, там же осуществлено описание переменной типа файл:
FTRACE: TEXT;
SCH: INTEGER;
Закрытие файла происходит по окончании процесса моделирования, командой: CLOSE (FTRACE);
1.5 Структура СВПИМРазработка СВПИМ велась в операционной системе Windows’95.В качестве программного комплекса для реализации СВПИМ использовалась интегрированная среда разработки Delphi 2.0, которая является средой визуального программирования. Поскольку ядром для подсистемы визуального отображения была выбрана СВПИМ, очевидно, что для ее разработка тоже проводилась в среде Delphi 2.0.
Создание программ в Delphi базируется на объектно-ориентированной технологии. Структурной единицей визуального программирования является компонент. Компонент представляет собой объект, обладающий набором свойств, которые определяют его представление и поведение. Е-сетевая модель состоит из связанных друг с другом сегментов, которые можно определить как объекты, имеющие графическое представление и определяемые некоторым набором свойств. В свою очередь, сегменты состоят из элементарных Е-сетей определенных типов. Однако, учитывая идеологию СВПИМ будем считать, что сегменты состоят из переходов, позиций и линий связи между ними (дуг). Каждый из этих структурных элементов Е-сети также можно определить как объект, имеющий свое графическое представление и определяемый соответствующим набором свойств. При таком подходе сегмент представляется набором объектов с определенными свойствами. Таким образом, все структурные компоненты имитационной модели представлены в СВПИМ как Delphi‑компоненты.
1.5.1 Общая структура программыОсновой любого приложения Windows является набор оконных компонентов, представляющих некоторую информацию и интерфейс с пользователем.
В СВПИМ определено пять основных окон:
· основное окно сегмента, представляющее графическое изображение сегмента;
· окно, представляющее текстовое описание сегмента;
· окно свойств элементов, в том числе сегмента;
· окно конструктора процедур;
· окно задания связей сегмента с другими сегментами.
Общая структура программы представлена на рисунке 2.4
В рамках данного дипломного проекта все работы, относящиеся к разработке подсистемы визуального отображения проводились с основным окном сегмента, представляющем его графическое изображение. В СВПИМ этих окон создается столько, столько создано или открыто сегментов. Сегмент в программе представлен классом TGraphSegm. Он представляет собой набор переходов и позиций, связанных между собой. Сегмент имеет набор свойств, описанных в таблице 2.1
Таблица 2.6
Название | Тип | Описание |
Name | String | Название сегмента |
TimeDelay | TtimeDelay | Модельное время ('псек', 'нсек', 'мксек', 'мсек', 'сек', 'мин', 'час', 'день') |
ListNet | Tlist | Список переходов. |
ListPos | Tlist | Список позиций. |
ListLine | Tlist | Список дуг. |
AttributeNames | TstringList | Имена атрибутов фишек |
AttributeTypes | TstringList | Типы атрибутов фишек |
NetVarNames | TstringList | Имена сетевых переменных |
NetVarVals | TstringList | Значения сетевых переменных |
NetVarTypes | TstringList | Типы сетевых переменных |
При визуальном отображении разработанной подсистемой используются свойства ListPos и ListNet.
1.5.3 Компоненты Е-сетиВсе компоненты Е-сети в СВПИМ порождены от базового класса 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 описывает количество фишек в позиции.
1.6 Структура подсистемы визуального отображенияСтруктура подсистемы имеет следующий вид:
Файл с данными о сработавших переходах создается в результате работы МИКРОСИМ. Структура файла описана в п. 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. Для решения этой проблемы предусмотрен некий коэффициент, называемый коэффициентом визуальной задержки, который устанавливается пользователем. Выбор значения коэффициента также предоставляется исследователю. При отображении процесса моделирования на экране, модельная задержка сработавшего перехода перемножается на заданный коэффициент, благодаря чему мы получаем визуальные задержки переходов пропорциональные модельным. Для тех переходов в модели у которых задержка не реализованная используется аддитивная задержка.
Возможность введения пользователем коэффициента визуальной задержки позволяет исключить зависимость времени изображения от быстродействия компьютера, поскольку на медленных машинах существует возможность установить коэффициент задержки меньшим, нежели на машинах с более мощным процессором. Так же эту возможность можно использовать в тех случаях, когда не требуется визуально отслеживать срабатывание каждого перехода, а нужно лишь оценить работоспособность модели в целом. В этом случае следует установить меньший коэффициент задержки, чем в случаях, когда необходимо отследить траекторию движения каждой фишки.
Разработанная в рамках данного дипломного проекта подсистема позволяет наблюдать за процессом интерпретации модели. Визуально, процесс интерпретации заключается в перемещении фишек в системе.
Подсистема состоит из двух частей одна из которых интегрирована в исполнительную подсистему МИКРОСИМ, а вторая в редактор сетевых моделей СВПИМ. Упрощенно полученную структуру подсистемы можно представить следующим образом:
| ||||||
| ||||||
Взаимодействие между интерпретатором модели и СВПИМ осуществляется через текстовый файл, структура данных которого предоставляет второй части подсистемы полную информацию о последовательности срабатываний переходов и состоянии входных – выходных позиций. Процесс визуального отображения осуществляется после интерпретации модели, что никоим образом не сказывается на правильности отображения. Данный процесс состоит из трех этапов, реализованных в программе тремя циклами.
Первый этап – этап работы с файлом, в результате которого создается список имеющий структуру в точности повторяющую структуры данных файла.
Второй этап – этап начальной маркировки модели.
Третий этап – этап визуального отображения.
До настоящего времени наиболее широко распространенной операционной системой являлась система MS-DOS. Развитие и совершенствование компьютерных технологий привело к появлению новых, более совершенных операционных систем, основное отличие и преимущество которых заключается в их многозадачности. Одной из таких ОС стала операционная среда Microsoft Windows 3.x, и впоследствии, Windows’95, Windows’98 и Windows’NT. Данные операционные системы получили широкое распространение в нашей стране и за рубежом, благодаря удобному графическому интерфейсу и мультизадачности.
Если мы вспомним историю развития средств разработки программ, то увидим следующее. Сначала была интеграция – в единой программной среде программисты получали редактор, компилятор и компоновщик. Примерами таких сред были компиляторы фирмы Borland – Turbo Pascal, Turbo C, Turbo C++ и многие продукты других фирм. Выпуск Windows вызвал появление широкого интереса к разработке программ для этой среды и, как следствие, – необходимость в средствах разработки Windows – программ. Так появились первые компиляторы для Windows, принципиально не отличавшиеся по идеологии от своих DOS‑собратьев. Практически сразу же за компиляторами появились различные генераторы приложений (кодогенераторы), которые выполняли две роли. Они выступали как средство для построения прототипов программ – позволяли без программирования построить интерфейс будущей программы, и как средство для автоматической генерации кода. Благодаря этому программист постепенно освобождался от непосредственного написания кода и получал некоторое средство для визуального, наглядного создания приложений.
Среда программирования Delphi является попыткой объединения всего лучшего, из того, что было создано на тему визуального программирования. Delphi – это не просто новая версия компилятора языка Turbo Pascal, а принципиально новый программный продукт, позволяющий создавать широкий спектр приложений для среды Windows.
Одним из таких приложений стала разработанная в МГИЭТ система визуального программирования имитационных моделей – СВПИМ, предназначенная для создания моделей, решаемых системой имитационного моделирования МИКРОСИМ, реализованной на языке Турбо Паскаль 7.0 и являющейся DOS‑приложением. Виду возникновения необходимости совместного использования СВПИМ и МИКРОСИМ возникла потребность их интеграции в рамках единой программной оболочки, для дальнейшего использования в среде Windows. Этой проблеме просвещенна данная глава дипломного проекта.
2.1 Интеграция Dos – и Windows-приложений 2.1.1 Объединение МИКРОСИМ и СВПИМОперационная система Window’s позволяет запускать на выполнение любое Dos – приложение. В Delphi также предусмотрена возможность запуска любого *.EXE – файла. Поэтому простейшим объединением двух Windows- и Dos‑приложений является запуск на выполнение одной из программ на определенном этапе работы другой. В рамках данного дипломного проекта был реализован именно такой способ интеграции, являющимся не самым красивым и, может быть не самым правильным, но в данном случае единственно возможным, по независящим от автора причинам. Тем не менее были проведены исследования, связанные с возможностью перевода Dos – приложений, написанных на языке Pascal, на язык Delphi.
2.1.2 Создание программ на DelphiДля начала вкратце рассмотрим, что представляет из себя программа на Delphi. Основное назначение Delphi – служить средством для быстрого создания широкого класса Windows – приложений. [5] Среда Delphi включает в себя полный набор визуальных средств для быстрой разработки приложений, поддерживающих создание пользовательских интерфейсов. В Delphi используется язык Object Pascal, полностью поддерживающий предыдущие версии языка Pascal. Таким образом, работа в Delphi заключается в работе с объектами.
Объект или, в терминологии Delphi – компонет, обладает набором свойств, определяющим его представление и поведение. Свойства влияют на то, как объект выглядит и на его невидимые черты (поведение), они непосредственно связанны с объектом – являются его атрибутами, описывающими его детальное строение.
Вокруг любого приложения происходят различные события, например, события-сигналы от мыши, клавиатуры, системные события. Обработчики событий являются инструментом, который позволяет связать код программы с подобными событиями, приводя в действие соответствующие фрагменты логики – процедуры.
Процесс создания приложений в среде Delphi сводится к следующим этапам:
· Построение интерфейсной части приложения.
· Написание кода для обработчиков событий.
· Написание дополнительного кода.
Создание интерфейсной части приложения начинается с установки свойств главной формы. Например, изменение ее размера, расположения на экране и множество других свойств. Путем выбора соответствующих компонентов в созданной форме размещаются необходимые для разрабатываемого приложения интерфейсные элементы, с установлением свойства каждого из них.
После этого можно приступать к написанию кода для обработчиков событий. Задача программиста – создать код, который будет выполнятся при возникновении того или иного события (например, активизация пункта меню). После того, как обработчики событий для интерфейсных элементов созданы, необходимо приступить к написанию дополнительного кода.
Под дополнительным кодом понимается процедуры или функции, которые непосредственно определяют уникальную функциональность того или иного приложения. Обычно такие процедуры и функции вызываются из методов обработчиков событий. Часто эти процедуры или функции не связанны напрямую с интерфейсными элементами и могут быть вынесены в отдельный модуль.
Таким образом, можно говорить о том, что Delphi – программа состоит из описания класса, соответствующего главной форме приложения и всем используемым в нем формам, а также из кода, выполняющегося при обработке того или иного события, и дополнительного кода, определяющего функциональность конкретной программы.
Создаваемое приложение состоит из набора файлов – проекта. Ими могут быть файлы, создаваемые в среде Delphi, – файлы с исходным текстом модулей (расширение.PAS), формы являющиеся графическим представлением приложения (расширение.DFM), и сами файлы проектов (расширение.DPR).
Следует отметить, что каждому файлу формы обязательно соответствует файл с исходным текстом модуля, но файл с исходным текстом модуля не обязательно должен иметь соответствующую форму.
2.1.3 Перевод приложения на язык DelphiDelphi предоставляет программисту сильную и сложную объектную модель. Благодаря этому возможно создание классов, в том числе классов компонентов, упрощающих процесс разработки. Помимо объектной модели, визуальная среда Delphi предоставляет так же и модель управления событиями. Событийная модель позволяет объединять программу и различные процессы с компонентами и формами в соответствии с порядком возбуждения конкретных событий.
Процесс разработки с использованием этих двух моделей очень скор и дает возможность писать обозримые программы. Это практически устраняет необходимость процедурного проектирования. Тем не менее Delphi, являясь расширением языка Pascal, поддерживает все возможности, им предоставляемые, следовательно и процедурную модель тоже. В МИКРОСИМ реализована как раз такая процедурная модель.
Наиболее правильным вариантом был бы перевод МИКРОСИМ на объектно–ориентированный язык, но на подобные преобразования, в виду очень большого объема программы, ушло бы значительное время. Поэтому остановимся на рассмотрении несколько иного способа интеграции.
Этапы перевода любого приложения, написанного на языке Pascal на Delphi аналогичны этапам разработки предложений на этом языке:
0 комментариев