15.[Модификация счетчика]
Нарастить счетчик числа сработавших переходов.
16.[Контроль числа срабатываний]
Если число сработавших переходов достигло установленного максимального значения, то сбросить счетчик числа сработавших переходов, установить код возврата и завершить процедуру (выход). В противном случае перейти на шаг 2.
Как видно из данного алгоритма процедура I00TRD вызывается процедурой I00MS, при установлении задания признака трассировки. Упрощенный алгоритм работы процедуры управления срабатыванием перехода представлен на рис. 2.5.
Перед рассмотрением работы процедуры трассировки необходимо указать структуру справочника модели и сегмента, таблиц переходов и позиций, некоторые поля которых используются при получении данных о сработавшем в сегменте переходе.
СПРАВОЧНИК МОДЕЛИ (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);
Разработка СВПИМ велась в операционной системе Windows’95.В качестве программного комплекса для реализации СВПИМ использовалась интегрированная среда разработки Delphi 2.0, которая является средой визуального программирования. Поскольку ядром для подсистемы визуального отображения была выбрана СВПИМ, очевидно, что для ее разработка тоже проводилась в среде Delphi 2.0.
Создание программ в Delphi базируется на объектно-ориентированной технологии. Структурной единицей визуального программирования является компонент. Компонент представляет собой объект, обладающий набором свойств, которые определяют его представление и поведение. Е-сетевая модель состоит из связанных друг с другом сегментов, которые можно определить как объекты, имеющие графическое представление и определяемые некоторым набором свойств. В свою очередь, сегменты состоят из элементарных Е-сетей определенных типов. Однако, учитывая идеологию СВПИМ будем считать, что сегменты состоят из переходов, позиций и линий связи между ними (дуг). Каждый из этих структурных элементов Е-сети также можно определить как объект, имеющий свое графическое представление и определяемый соответствующим набором свойств. При таком подходе сегмент представляется набором объектов с определенными свойствами. Таким образом, все структурные компоненты имитационной модели представлены в СВПИМ как Delphi‑компоненты.
Основой любого приложения 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.