r4 (1123693), страница 3
Текст из файла (страница 3)
repeat
Start ( <параметры инициализации управляющего списка> );
...
while Simulate do case ActNumb of
<метка-номер события>: <программа обработки события>;
...
<метка-номер события>:<программа обработки события>;
end;
...
until Repeater=<количество циклов моделирования>;
В этой конструкции обеспечивается проведение нескольких циклов моделирования за счет операторов repeat...until и системной переменной Repeater.
Конструкция от while до end выполняет функции инициатора. В каждом цикле моделирования (while...end) системная функция Simulate поддерживает ход моделирования, устанавливая системную переменную ActNumb, в соответствие с номером активизируемого события, или заканчивая цикл, если событие имеет нулевой номер (признак окончания имитации). Затем с помощью case...of осуществляется выполнение только той программы обработки, метка которой совпадает с содержимым Act Numb.
Программа обработки события представляет собой либо оператор, либо список операторов Паскаля и операторов PSS-системы, заключенных между begin...end.
УЧЕБНЫЙ ВОПРОС 7
Управляющий список PSS
Управляющий список системы построен по схеме кольцевого двунаправленного списка с головным звеном. Для обращения к элементам списка служит системная переменная Node, являющаяся указателем на головной элемент, который используется только для связывания списка в кольцо.
Node | ||||||||||||||||||
элементы списка | ||||||||||||||||||
Двунаправленные | ||||||||||||||||||
связи | ||||||||||||||||||
данные |
Каждый элемент списка представляет собой запись со следующими полями: Numb - номер события, Time - время события, Addr - ссылка на данные события, Next - ссылка на следующий элемент списка, Prev - ссылка на предшествующий элемент списка.
Numb | Time | Next^ | Prev^ | Addr | -> | Данные |
В управляющем списке все элементы должны быть упорядочены по возрастанию Time^
При обработке списка оператором Simulate осуществляется следующая последовательность действий:
-
выбирается информация из первого элемента списка ( с минимальным временем ) в системе переменные
( Numb -> ActNumb, Time -> ActTime, Addr -> ActAddr );
-
проверяется номер этого активного события, и если он равен нулю, то весь список очищается и имитация заканчивается. В противном случае - элемент списка исключается из списка, а его информация становится доступной программе обработки активного события через системные переменные.
Системные операторы в программах обработки позволяют включать в список новые элементы с учетом упорядочивания по времени и исключать их из списка.
УЧЕБНЫЙ ВОПРОС 8
Основные системные переменные и их типы
Для данных каждого события в системе используется имя типа этих данных - DataType. Тип данных события описывается специально в программе в разделе Type, и зависит от моделируемой задачи. Например:
DataType=char; или DataType=record A: integer; B: real end;
Следует отметить, что обязательное написание DataType следует из того, что в элементе управляющего списка присутствует ссылка на данные, и Pascal требует описания типа этих данных, даже если данные для событий и не создаются.
Кроме того в системе определены основные нижеследующие типы:
DataPntr=^DataType; - Тип указателя на данные события.
DataPntr=^NoteType; - Тип указателя на запись события.
NoteType=record - Тип записи события в списке.
Numb: integer; Номер деятельности события.
Time: real; Время наступления события.
Addr: DataPntr; Адрес данных события.
Next,Prev: NotePntr Адреса последующей и предыдущей
end; записи в списке ( связи ).
Основные переменные в системе имеют следующие имена и типы:
ActNumb: integer; - Номер деятельности активного события.
ActTime: real; - Время наступления активного события.
ActAddr: DataPntr; - Адрес данных активного события.
Repeater, - Счетчик повторений реализаций.
Inform, - Регулировщик отладочной информации.
RND_INT: integer; - Держатель кода ДСЧ.
Node, - Указатель на головное звено списка.
Route, - Рабочий указатель на запись списка.
SlyNode: NotePntr; - Контрольный дубликат Node.
Addr: DataPntr - Рабочий указатель на данные события.
УЧЕБНЫЙ ВОПРОС 9
Основные системные операторы
В системе используются несколько вспомогательных процедур и функций, которые вызываются основными системными операторами. Это:
procedure ViewNote(P: NotePntr); - Процедура показа записи элемента списка по адресу Р. Может быть использована при отладке. Поля, содержащие адреса отображаются только признаком наличия.
function RND: real; - Функция получения случайной величины равномерной в диапазоне 0..1 . Используется для получения других законов распределения.
procedure DelNote(P: NotePntr); - Процедура удаления записи списка.
function IncNote(P1,P2: NotePntr; N: integer;T: real;A: DataPntr): NotePntr;
Функция включения в список записи между указанными адресами элементами списка, заполнение ее полей ( N=Numb, T=Time, A=Addr ) и возвращение ее адреса.
function GetNextT(T: real): NotePntr; - Функция поиска адреса записи со временем, следущим за указанным Т.
Операции общего применения в PSS-системе обеспечиваются следующими процедурами и функциями:
а) Управляющие операторы системы
procedure Initiate; - Инициализация переменных системы.
procedure Start(N: integer;T: real;A: DataPntr;Time: real);
- Установка признака начала реализации;
формирование первой записи в списке с номером, временем и адресом данных ( N, T, A ) ;
задание времени окончания моделирования ( Time ).
function Simulate: boolean; - Оператор шага моделирования, выбирающий и активизирующий события, и возвращающий false, если список пустой или встретился элемент с признаком окончания моделирования.
procedure Finish; - Формирование события окончания моделирования.
б) Отменяющие события операторы системы
function Cancel (P: NotePntr): DataPntr; Оператор исключения из списка записи события по ее адресу. Применяется для отмены запланированного события после определения его адреса.
function CancMin (N: integer): DataPntr; - Оператор исключения из списка записи события с указанным номером и минимальным временем.
в) Планирующие событие операторы системы
procedure Prepare (N: integer;DT: real;A: DataPntr); - Оператор включения в список записи собыия с номером N, с адресом данных А и временем, равным сумме Т текущее + DT, перед записью с временем большим, чем Т текущее + DT. То есть с упорядочиванием по времени. Т текущее в системе - это время активного события.
procedure PrepPrior (N: integer;DT: real;A: DataPntr); - Оператор включения в список записи события перед записью с временем не меньшим, чем текущее + DT. То есть - упорядочивание с приоритетом.
procedure PrepBefore (P: NotePntr;N: integer;A: DataPntr); - Оператор включения в список записи события перед записью, указанной ее адресом. Время формируется такое же.
procedure PrepAfter (P: NotePntr;N: integer;A: DataPntr); - Оператор включения в список записи события после записи, указанной ее адресом. Время то же.
г) Операторы формирования случайных величин
function Uniform (Min, Max: real): real; - Оператор, возвращающий равномерно распределенную случайную величину в диапазоне от Min до Max.
function Normal (M, S: real): real; - Оператор возвращающий нормально распределенную случайную величину с мат. ожиданием М и средн. кв. отклонением S.
function NegExp (L: real): real; - Оператор, возвращающий случайную величину, распределенную по показательному закону с параметром L > O.
УЧЕБНЫЙ ВОПРОС 10
Некоторые рекомендации по использованию.
Для вывода отладочной информации при запуске модели необходимо задать соответствующий числовой код в системной переменной Inform. Если такого задания не произвести, то код, занесенный в эту переменную оператором Initiate ( смотри Структуру моделирующей программы ) обеспечивает отсутствие вывода отладочной информации.
Отладочной информацией системы называется сообщение о событии, с которым работает текущий системный оператор, например: Start, Simulate, Prepare и другие.
Выводится строка с именем оператора и содержимым полей записи (события).
Код в переменной Inform имеет следущее значение:
0 - отладочная информация не выводится;
1 - выводится построчная информация об активизируемых событиях;
2 - выводится информация обо всех событиях, с которыми работают текущие операторы;
3 - то же, что и 2, но делается останов в начале каждой реализации модели;
4 - то же, что и при 3, но делается останов при активпзации каждого события.
При останове следует нажимать клавишу конца строки - NewLine (Enter) для продолжения модели.
Ввод исходного текста модели производится при работе с редактором. На рабочей станции Беста таким редактором является программа RK, которая позволяет запускать исходный текст на компиляцию и просматривать ее результаты.
При работе на станции Беста отредактированный файл с программой, например PSS1.PAS, может быть откомплектован с помощью команды операционной системы:
pc | pss1.pas | -output | pss1.exe | -list | -include | /usr/pascal/include | ||||||||
Путь к библиотеке | ||||||||||||||
Опция для указания пути к библиотеке PSS-системы | ||||||||||||||
Опция для выдачи листинга ошибок компиляции (в файл pss1.lst) | ||||||||||||||
Имя результирующего (исполняемого) файла | ||||||||||||||
Опция для указания имени файла-результата | ||||||||||||||
Имя исходного файла | ||||||||||||||
Команда запуска Pascal - компилятора |
Опции -output и -include можно задавать сокращенно, как -о и -i. В файле листинга ошибок приводится полный исходный текст с указанием на обнаруженные ошибки.