- •Аннотация
- •Содержание:
- •Введение
- •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.13 Ансамбли
2.13.1 Создание ансамблей. Функцияsplit
Транзакты могут вводиться в модель как функциями createиinitcreate, так функциейvoid split(int n,event e), гдеn- число создаваемых транзактов,e- номер события, в которое направляются вновь созданные транзакты. Активный транзакт, на который указывает ссылкаtrans, называется транзактом-родителем, а созданные тразакты - потомками.
Все потомки имеют такие же значения параметров и приоритет как у родителя. Транзакты, введенные в модель функцией split вместе с транзактом-родителем являются членами одного ансамбля. Если какой-либо из потомков будет обработан функциейsplitи сам станет родителем, то все его потомки будут принадлежать к тому же ансамблю.
2.13.2 Сбор членов ансамбля. Функцияassemble
Функцией void assemble(int n) осуществляется сборnчленов ансамбля. При входе первого члена ансамбля в событие, содержащее функциюassemble, он помещается в системный списокass[sysevent].
Следующие члены этого ансамбля выводятся функцией assembleв списокdelist.
При входе n-го члена ансамбля в событие, содержащее функциюassembleпервый член собираемого ансамбля удаляется из спискаass[sysevent] и помещается в списокdelist, аn-ый член ансамбля продолжает продвигаться по модели дальше.
2.13.3 Изменение приоритета всех членов ансамбля. Функцияpriority
Для изменения приоритета активного транзакта и всех транзактов - членов того же ансамбля служит функция void priority(prtyrange p), гдеp- новое значение приоритета. При этом остальные члены ансамбля перемещаются в списках в соответствии с новым значением приоритета.
Назначение приоритета отдельному транзакту производится простым присваиванием:
trans->prty=<новый приоритет>;
2.13.4 Изменение значения параметра всех членов ансамбля. Функцияparmans
Для изменения значения параметра всех членов ансамбля служит функция void parmans(parmtype,int). Предварительно необходимо присвоить новое значение данному параметру активного транзакта. После выполнения функцииparmansназначенный параметр всех членов ансамбля принимает то же значение, что и соответствующий параметр активного транзакта.
2.14 Генераторы случайных чисел
В процессе моделирования почти всегда необходима генерация случайных величин. Для этого в системе существуют функции:
double rand01(long& v)- генератор случайных чисел, равномерно распределенных в интервале [0;1).v- число-"источник".
double randab(double a, double b, long& v)- генератор случайных чисел, равномерно распределенных в интервале [a;b).v- число-"источник".
double randexp(double lambda, long& v)- генератор экспоненциально распределенных случайных чисел с интенсивностьюlambda.v- число-"источник".
double randnorm(double xmean, double disp, long& v)- генератор случайных чисел, распределенных по нормальному закону со среднимxmean и дисперсиейdisp.v- число-"источник".
Пример 14.1. Присвоение переменнойrзначения случайной величины, равномерно распределенной в интервале [4;7)
r=randab(4.0,7.0,v)
Закон распределения случайных чисел может быть задан таблицей. Для этого в системе определен тип "таблица" следующим образом:
struct table {
array<1,hint,double> x,p;
hint2ihint;
};
Для работы с генераторами случайных чисел, распределенных в соответствии с таблицей, необходимо задать таблицу.
Для дискретного распределения ihintсоответствует количеству значений, которые может принимать случайная величина.h- массив значений,p- массив вероятностей, причемp[1]- вероятность присвоения случайной величине значенияx[1],p[2]- вероятность присвоения значенияx[2]при условии, что ей не присвоено значениеx[1], и т.д., так чтоp[ihint]=1.0(вероятность присвоения случайной величине значенияx[ihint]при условии, что она она не приняла ни одно из предыдущих значений.
Реализует дискретное табличное распределение функция double randdtable(table t, long& v), гдеt - таблица,v- число-"источник".
Для непрерывного табличного распределения генератор - функция double randtable(table t, long& v)(t- таблица,v- "источник") - дает случайные числа, с вероятностямиp[i]попадающие в интервалы отх[i-1]дох[i]. При этом в таблице должно бытьр[1]=0.0.
