- •Аннотация
- •Содержание:
- •Введение
- •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
Системные переменные
В системе моделирования определено небольшое количество общесистемных переменных, при помощи которых осуществляется управление моделированием и отслеживается состояние модели.
Большинство системных переменных изменяется автоматически, произвольное присваивание им значений может непредсказуемым образом повлиять на ход моделирования.
Исключение составляют следующие переменные, управляющие выходной печатью по ходу моделирования:
bool trace, ключ включения трассировки
errtest; ключ расширенной (аварийной) выдачи
Далее будем давать определение переменной и приводить ее описание.
Для отсчета относительного времени на очередном шаге модельного эксперимента используется переменная, устанавливаемая в момент сброса статистики:
doubleresettime; время последнего сброса статистики
Переменная "СИСТЕМНОЕ ВРЕМЯ"- численная величина, относительно которой синхронизируются все события в модели. При осуществлении событий системное время может либо оставаться неизменным, либо увеличиваться.
double systime; системное время
Служебная переменная, используемая в итоговой выдаче:
event ievemax; последнее выполняемое событие
"ТЕКУЩЕЕ СОБЫТИЕ" - событие, связанное с перемещением активного транзакта.
event sysevent; текущее событие
Служебная переменная, устанавливающая число транзактов доступных в модели:
int itransmax; количество транзактов вdelist
"АКТИВНЫЙ ТРАНЗАКТ" - транзакт, продвигающийся по модели в данный момент выполнения программы. Он определяется переменной:
ptransact trans; ссылка на продвигаемый транзакт
Следующие переменные задают основные системные списки транзактов:
plistt delist, ссылка на пассивный буфер
current, ссылка на цепь текущих событий
future; ссылка на цепь будущих событий
Объекты системы моделирования помещаются в списки, задаваемые переменными:
plistq quelist; ссылка на сист. список очередей
plistf faclist; ссылка на сист. список приборов
plists stlist; ссылка на сист. список накопителей
plisth histlist; ссылка на сист. список гистограмм
Транзакты, ожидающие появления некоторого сигнала, события, собираемые в ансамблях, помещаются в списки, определенные переменными:
array<min_signal,max_signal,plistt> signlist: ссылки на списки транзактов, ожидающ. сигналов
array<1,evemax,plistt> ass;ссылки на списки собираемых ансамблей
array<1,evemax,plistt> waitl; ссылки на списки транзактов, ожидающ. событий
Списки, задаваемые пользователем, помещаются в общий список или список списков:
listl userlist; список списков пользователя
Следующие переменные являются служебными:
array<1,evemax,bool> waitevent; признаки совершения событий
array<1,evemax,int> maxevent; счетчики выполнения событий
longV0, источники генераторов случайных чисел
V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15;
double eventall; общее число совершившихся событий
ofstream outfile; основной выходной файл
ofstream f; вспомогательный выходной файл
2 Принципы и методы построения моделей
2.1 Создание транзактов
Осуществление событий в модели логически связано с перемещением отдельных транзактов. В момент осуществления события готовыми к перемещению могут оказаться один или несколько транзактов. Они перемещаются поочередно. Порядок передвижения готовых транзактов определяется их приоритетом. Модельное время изменяется в том случае, когда список готовых к перемещению в текущий момент времени транзактов исчерпан. Перемещаемый транзакт назовем активным.
Прежде чем транзакты станут доступными к перемещению в модели, они должны быть созданы.
В модели с единственным продвигаемым (активным) транзактом связывается ссылка trans. Если ее значение равноnil, то в модели или нет транзактов вообще, или они находятся в одном из списков (по ссылкам:current,future,waitl(массив списков), списки прибора, накопителя).
Создаваемые транзакты поступают в модель из списка delist, а после завершения своего пути в модели возвращаются в него обратно.
Ввод транзакта в модель осуществляется функцией void create(double r), её единственный параметр задает интервал времени, через который в систему войдет следующий транзакт. Величина "r" может быть константой или переменной, задаваться функцией. В зависимости от способа определения "r", функцияcreateможет выполнять роль генератора транзактов с различными (произвольными) законами распределения интервалов между моментами их поступления в модель. Все события, содержащие функциюcreate, должны быть инициализированы при создании модельной среды. Для этого используется функцияvoid initcreate(event e,double r), гдеe- номер события,содержащего функциюcreate(r),r- время поступления первого транзакта, создаваемого функциейcreate(r). Если же необходимо обеспечить одновременный выход транзактов в событиеe, то функцияinitcreate(e,r)выполняется соответствующее количество раз.
Пример 1.1. Ввод транзактов в модель осуществляется каждые 5 единиц модельного времени
#include "simc.h"
voidmain() {
...;
initcreate(4,0); Инициализация события 4
...;
while(systime<1000) {
plan();
switch(sysevent) { Выбор системного события
case 1: ...; break;
...: ...;
case 4: create(5); break; Создание транзактов
...: ...
}
}
printall();
}
Пример 1.2. Транзакты поступают в модель по закону нормального распределения со средним 4.0 и дисперсией 1.5 .
#include "simc.h"
voidmain() {
...;
initcreate(3,0); Инициализация события 3
...;
while(systime<1000) {
plan();
switch(sysevent){
...: ...;
case 3: create(randnorm(4.0,1.5,v1)); break;
...: ... v1 - источник генератора случайных чисел
}
}
printall();
}
