Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
92
Добавлен:
21.03.2016
Размер:
359 Кб
Скачать
☆

2.3.1. Процедура планирования событий

Процедура планирования событий SCHDL является системной, так как не зависит от объекта моделирования и имеет три формальных параметра:

Kevnt – код планируемого события (1,2,3,4,5);

Dtime – время свершения события;

A1 – атрибут события (в данной модели один).

Процедура начинается с формирования записей календаря с помощью массива А2, куда записываются kevnt, tnow+dtime, a1. Далее переписываем календарь из физической памяти в электронную (массив А3).

С оператора For j:=1 to nnq do начинается поиск первой свободной записи в календаре (запись с кодом события равным 0). На место найденной записи записываются данные из массива А2 (новое запланированное событие). После этого файл календаря переписывается с новой записью.

В конце процедуры SCHDL записи календаря сортируются в порядке возрастания времени свершения событий процедурой GRUP.

НАЧАЛО

КОНЕЦ

Рис.3 Блок-схема процедуры планирования

2.3.2. Процедура grup

Процедура GRUP является системной, без параметров. GRUP сортирует записи в файле календаря по возрастанию времени свершения события.

После копирования в A3 календаря осуществляется проверка состояния первой записи. Если она пустая, значит из календаря ранее выбрано событие с минимальным временем свершения и, следовательно, достаточно сдвинуть календарь на одну запись влево. Это делают два цикла For j:=1 to nnq-1 dо и For i:=1 to 3 do, обнуляющие последнюю запись a3[i,j+1]:=0. Далее календарь из массива A3 переписывается в файл f_Cal, так как произошли изменения.

Если первая запись календаря не пуста, значит, процедура вызвана после планирования какого-то события и необходимо расставить записи по возрастанию их времени свершения (запланированное событие могло иметь любое время свершения). Для этого с оператора For j:=1 to nnq-1 do начинается сравнение времени свершения J-й записи с аналогичным параметром остальных записей и перемещение этой записи на нужное место календаря (массива A3). Перед каждой такой последовательностью действий, оператором If a3[2,j]=0 j-я запись проверяется по коду события. Если код равен нулю - календарь кончился, и он перезаписывается в файл f.

Перед сортировкой календаря оператор K=J запоминает номер j–й записи, а оператор z:=a3[3,j] – ее время свершения. Следующий за ними оператор For l:=j+1 to nnq do: проверяет код очередной, сопоставляемой с j, записи l; сравнивает время двух записей; запоминает (обновляет k, z) номер и время свершения записи l. Если проверяемый код записи l равен нулю, календарь кончился и происходит обмен данными между записями j и l (k), так как ищутся записи со временем меньшим, чем у записи j. Если время свершения записи l оказывается больше или равным тому же для записи j, переходим к следующей записи календаря.