- •Аннотация
- •Содержание:
- •Введение
- •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
Множественные типы данных
Для задания имен в системе определен тип данных typedef array<1,8,char> alfa.
Отметим, что в некоторых функциях в качестве параметров возможна подстановка констант типа alfa.Текстовая строка-параметр типа alfa должна содержать число символов в точности равное восьми!
Перечисляемые ниже множественные типы данных будем определять по следующей схеме:
- назначение типа;
- спецификация типа в системе моделирования;
- указатель на рассматриваемый тип (если таковой имеется).
При описании полей объектов в разделе "спецификация" назначение поля дается комментарием. В комментариях символом "U"отмечены те из них, которые могут изменяться пользователем по его усмотрению; символом"S"отмечены поля, используемые для системных целей. Их содержимое можно только читать. Изменение значений этих полей может привести к непредсказуемым последствиям.
ТРАНЗАКТ- абстрактный динамический объект, характеризующийся рядом свойств, задаваемых значениями параметров. В ходе моделирования транзакты могут создаваться, перемещаться по модели и уничтожаться.
structtransact{ // транзакт Параметры:
// Устанавливается пользователем при создании собственных функций для работы со списками пользователя. См. пр.
array<1,mptb,bool>pb; // булевскиеUarray<1,mpti,int>pi; // целыеUarray<1,mptr,double>pr; // вещественныеUarray<1,mptf,pfacility>pf; // ссылки на приборыUarray<1,mptq,pqueue>pq; // ссылки на очереди Uarray<1,mpts,pstorage>ps; // ссылки на накопители Uprtyrangeprty; // приоритет Ubooltestprty; // ключ приоритета U
// Все остальные поля используются только системой !
intans, // номер ансамбля
nans, // кол-во членов ансамбля
nom; // номер транзакта
ptransactpredans, // ссылки на пред., след.
sledans, // транзакт в ансамбле
pred, // ссылки на пред., след.
sled; // транзакт в списке
eventeve; // событие инициализации
doublenexttime; // время активизации
plistttranslist; // ссылка на занимаем. список };
typedef struct transact* ptransact; // ссылка на транзакт
ПРИБОР- динамический объект, предназначенный для моделирования обслуживающего аппарата. Транзакт может ожидать входа в прибор, занимать или захватывать прибор, освобождать прибор. По прибору собирается соответствующая статистика.
structfacility{ // прибор
booltest; // признак включенияU
alfaname // символьное имя U
// Все остальные поля используются только системой!
enum{free,seized,preempted}
status; // состояние прибора
pfacilitysled, // ссылки на след. и пред.
pred; // приборы в списке
ptransacttranspoint;// ссылка на обр. транзакт
intp, // число захватов
ci; // число входов
doubletimef, // времена: занятости,
pretime, // предыдущего обращения
mtime, // служебное поле
pro; // загрузка прибора
plisttfl, // ссылки на списки ожидающих
inter; // и прерванных транзактов
};
typedef structfacility*pfacility; // ссылка на прибор
ОЧЕРЕДЬ- динамический объект, предназначенный для регистрации продвижения транзактов на определенных участках модели, сбора и обработки соответствующей статистики.
structqueue{ // очередь
booltest; // признак включения U
alfaname; // символьное имя U
// Все остальные поля используются только системой!
enum{empty,full}status; // статус(пустая/непустая)
intlq, // длина очереди: текущая,
mq, // максимальная,
size; // предельная
pqueuesled, // ссылки на след.,предыдущую
pred; // очереди в списке очередей
intci, // число входов: общее,
co; // в очередь нулевой длины
doubletimeq, // общее время занятости
pretime, // вр.пред. обращения
lm, // средняя длина
mtime; // служебное поле
};
typedef structqueue*pqueue; // ссылка на очередь
НАКОПИТЕЛЬ(многоканальное устройство) - динамический объект, предназначенный для моделирования одного или нескольких обслуживающих устройств. Транзакт может ожидать входа в накопитель, занимать в накопителе одну или несколько ячеек, покидать накопитель.
structstorage{ // накопитель
booltest; // признак включения U
alfaname; // символьное имя U
// Все остальные поля используются только системой!
ints, // емкость накопителя
ss, // текущее содержимое
sf, // остающаяся емкость
sm, // макс. содержимое
ci; // число входов
doubleut, // загрузка накопителя
smean, // среднее содержимое
mtime, // служебное поле
times, // время: занятости,
pretime; // пред. обращения
pstoragepred, // ссылки на предыдущий,
sled; // след. накопители
plisttslt; // ссылка на список ожидающих транзактов
};
typedef struct storage* pstorage; // ссылка на накопитель
Гистограммы в системе имитационного моделирования используются для сбора и накопления статистической информации о любых скалярных вещественных или целых переменных. Все необходимые гистограммы задаются пользователем в части определений, создаются в разделе создания модельной среды. Измеряемые значения табулируются в гистограммы в событийной части модели.
structhistogram{ // гистограмма
// Значения полей задаются пользователем при создании гистограммы
boolgraf; // ключ печати графика
alfaname; // символьное имя
hint2ihint; // число точек табулирования
doublemaxx,
minx;
// Все остальные поля используются только системой!
unsignedtotal, // общее количество входов
sum,
sumsqr,
phistogramsled,
pred;
harr x;
};
typedef struct histogram* phistogram; // ссылка на гистограмму
Таблицы в системе моделирования являются удобным средством для определения табличных распределений вероятностей.
struct table { // таблица
array<1,hint,double> x; // массив значений
array<1,hint,double>p; // массив вероятностей
hint2ihint; // число интервалов
};
Списковые структуры или списки используются для связывания объектов системы моделирования и создания динамической (изменяемой во времени) модельной среды. Ниже определяются списки различных объектов. Общими для них являются следующие параметры:
structparml{ //ПАРАМЕТРЫ СПИСКА
doubletimel, // времена занятости,
pretime; // предыдущего обращения
intci, // число входов: общее,
co, // в пустой список
ll, // длина текущая,
lm; // максимальная
alfaname; // имя списка
};
Важнейшим списком является список транзактов - объектов, перемещающихся в модели. В системе моделирования имеются несколько списков транзактов. Определение списка следующее:
structlistt{ // СПИСОК ТРАНЗАКТОВ
ptransactfirst; // ссылка на первый транзакт
parmlp; // поле параметров списка
plisttsled, // ссылки на следующий,
pred; // предыдущий список
};
typedef struct listt* plistt; // ссылка на список транзактов
Некоторые списки транзактов объединяются в общие. Для этого используются следующие типы данных:
structlistl{ // СПИСОК СПИСКОВ ТРАНЗАКТОВ
plisttfirst; // ссылка на первый список тр.
intll; // кол-во списков в списке
};
Определяемые пользователем объекты: приборы, очереди, накопители и гистограммы связываются в списки, типы которых определены ниже.
structlistf{ // СПИСОК ПРИБОРОВ
pfacilityfirst; // ссылка на первый прибор
parmlp; // поле параметров списка
plistfsled, // ссылки на следующий,
pred; // предыдущий список
};
typedef struct listf* plistf; // ссылка на список приборов
structlistq{ // СПИСОК ОЧЕРЕДЕЙ
pqueuefirst; // ссылка на первую очередь
parmlp; // поле параметров списка
plistqsled, // ссылки на следующий,
pred; // предыдущий список
};
typedef struct listq* plistq; ссылка на список очередей
structlists{ // СПИСОК НАКОПИТЕЛЕЙ
pstoragefirst; // ссылка на первый накопитель
parmlp; // поле параметров списка
plistssled, // ссылки на следующий,
pred; // предыдущий список
};
typedef struct lists* plists; // ссылка на список накопителей
structlisth{ // СПИСОК ГИСТОГРАММ
phistogramfirst;//ссылка на первую гистограмму
parmlp; // поле параметров списка
plistssled, // ссылки на следующий,
pred; // предыдущий список
};
typedef struct listh* plisth; // ссылка на список гистограмм
Списки приборов, очередей, накопителей и гистограмм необходимы для организации автоматической выдачи результатов моделирования. Указатели (ссылки) на поименованные списки используются системой моделирования.
