- •Аннотация
- •Содержание:
- •Введение
- •1 Объекты системы моделирования сим-си
- •1.1 Общая классификация
- •1.2 Системные константы, типы и переменные
- •Системные типы
- •Скалярные типы данных
- •Множественные типы данных
- •Системные переменные
- •2 Принципы и методы построения моделей
- •2.1 Создание транзактов
- •2.2 Уничтожение транзактов
- •2.3 Продвижение транзактов
- •2.4 Задержка транзактов. Функцияdelayt
- •2.5 Блокировка транзактов
- •2.5.1 Функцияwait
- •2.5.2 Функцииacceptиsend
- •2.6 Изменение порядка осуществления событий. Функцияnехt
- •2.7 Использование приборов
- •2.7.1 Функции ввода транзактов в прибор
- •2.7.1.1 Захват прибора. Функцияinfac
- •2.7.1.2 Занятие прибора. Функцияseize
- •2.7.2 Функцияoutfac. Вывод транзакта из прибора
- •2.8 Регистрация очередей. Функцииinqueue,outqueue
- •2.9 Накопители (многоканальные устройства). Функцииenterиleave
- •2.10 Построение гистограмм. Функцииtabulate,newhist,prnhist
- •2.11. Создание, использование и обработка списков
- •2.11.1 Создание списков
- •2.11.2 Включение объектов в списки
- •2.11.3 Удаление объектов из списков
- •2.11.4 Просмотр элементов списка. Сканирование
- •2.11.5 Списки пользователя. Организация различных дисциплин обслуживания с помощью списков пользователя
- •2.12 Модельная среда
- •2.12.1 Создание модельной среды
- •2.12.2 Уничтожение очередей, приборов, накопителей и гистограмм
- •2.13 Ансамбли
- •2.13.1 Создание ансамблей. Функцияsplit
- •2.13.2 Сбор членов ансамбля. Функцияassemble
- •2.13.3 Изменение приоритета всех членов ансамбля. Функцияpriority
- •2.13.4 Изменение значения параметра всех членов ансамбля. Функцияparmans
- •2.14 Генераторы случайных чисел
- •2.15 Процесс моделирования. Функцияplan
- •2.16 Создание системной среды. Функцияinitlist
- •2.17 Структура модели
- •2.18 Сброс статистики и очистка системной и модельной среды. Функцииresetallиclear
- •3 Вывод результатов моделирования
- •4 Отладочные средства
- •4.1 Диагностика ошибок
- •4.2 Трассировка
- •Приложение 1. Коды и сообщения об ошибках
- •Приложение 2. Сообщения в режиме трассировки
- •Приложение 3. Системные константы и типы данных
- •Приложение 4. Системные переменные
- •Приложение 5 Заголовки системных функций
- •Приложение6. Примеры моделей Пример 1.
- •Пример 2.
- •Пример 3.
- •Диагностика ошибок
- •Системные списки Список current
- •Список прибора Fac f
- •Список future
2.11.4 Просмотр элементов списка. Сканирование
Доступ к элементу списка определяется ссылкой на него и записью после точки поля, значение которого необходимо программисту, например: quelist->first->lq- текущая длина первой очереди в списке очередейquelist,current->first->pr[1]- первый вещественный параметр транзакта, стоящего первым в спискеcurrent.
Ссылка first указывает на голову списка. Для ее продвижения вправо необходимо присвоить:l->first=l->first->sled
Для продвижения ссылки first влево присваивается:l->first=f->first->pred
2.11.5 Списки пользователя. Организация различных дисциплин обслуживания с помощью списков пользователя
Список пользователя создается функцией void newuserlt(plistt& list,alfa name).
При создании список пользователя помещается в системный список списков транзактов userlist.
Функции void inlfifo(plistt)иvoid inllifo(plistt) выводят активный транзакт из спискаcurrentи помещают его в список пользователя соответственно последним или первым в списке.
Пользователь может написать свои функции, упорядочивающие список по какому-либо признаку, например, в порядке возрастания первого целочисленного параметра:
voidinlpi1(plistt lt) {
ptransact t;
outtlist(current);
trans->testprty=false; // !!!
if(lt->first==nil)
inlt(lt,trans);
else if(lt->first->pi[1] > trans->pi[1])
inlt(lt,trans);
else{
t=lt->first; scanlt(lt);
while(lt->first->pi[1] >= trans->pi[1])
scanlt(lt);
inlt(lt,trans);
lt->first=t;
}
trans=nil;
}
Функция void outuserlt(plistt)помещает транзакт, стоящий первым в списке пользователя в списокcurrent.
Транзакт имеет поле testprty, которое может принимать значенияtrueилиfalse. При выполнении функцииpriority(см. п.2.13.3) транзакты, значение поляtestprtyу которыхtrue, перемещаются в списках в соответствии с новым значением приоритета. Если список упорядочивается не по приоритетам, а по какому-либо другому признаку, то перед включением транзакта в список его полюtestprtyнеобходимо присвоить значениеfalse.
2.12 Модельная среда
2.12.1 Создание модельной среды
Совокупность приборов, очередей, накопителей и других объектов модели представляет собой модельную среду. Для создания модельной среды написаны специальные функции.
Для создания очереди используется функция newqueue(<ссылка на очередь>,<имя>). Ее параметрами являются переменная типа ссылка на очередь и имя очереди из восьми символов. Ссылочная переменная определяется следующим образом:
pqueue q1;
...
newqueue(q1,'q1 ');
Значение q1 устанавливается на созданную очередь.
Создание приборов и накопителей осуществляется аналогичным образом:
pfacility f1;
pstorage st1;
...
newfac(f1,'f1 ');
newstorage(sт1,'sт1 ');
Созданные объекты включаются в системные списки quelist,faclistиstlist. Если пользователю надо поместить объект в какой-либо другой список очередей, приборов или накопителей, необходимо предварительно удалить его из соответствующего системного списка.
Создание гистограмм было рассмотрено выше.
2.12.2 Уничтожение очередей, приборов, накопителей и гистограмм
Объекты, исключенные из списков могут быть уничтожены с помощью функций
void destrs(pstorage&)
void destrf(pfacility&)
void destrq(pqueue&)
void destrh(phistogram&)
при этом выделенная под объект память освобождается.
Пользоваться этими функциями надо осторожно. При уничтожении прибора или накопителя могут потеряться транзакты, находящиеся в их списках (будет выдано соответствующее сообщение об ошибке). Если в ходе моделирования будет обращение к уничтоженому объекту, то выполнение программы будет прервано.
