Трассировка модели.
Имитационное моделирование
Sumtact: real; (* сумма интервалов активизации *). Pta: ptdist; (* адрес сп. таблиц распределений*). Outsel: char; (* знач. процедуры вых. управления*). Infmodsize: integer; (* размер справочника модели *). Adsyn: pinfseg; (* адрес старшего сегмента-сына *). Adrtablink: ptablink; (* адрес списка таблиц связи *). Ststat: real; (* время начала сбора статистики*). Pvar: pointer; (* адр.таб.перменных… Читать ещё >
Трассировка модели. Имитационное моделирование (реферат, курсовая, диплом, контрольная)
Перед рассмотрением работы процедуры трассировки необходимо указать структуру справочника модели и сегмента, таблиц переходов и позиций, некоторые поля которых используются при получении данных о сработавшем в сегменте переходе.
СПРАВОЧНИК МОДЕЛИ (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);