- •Аннотация
- •Содержание:
- •Введение
- •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.2 Уничтожение транзактов
Транзакты, завершившие свое продвижение по модели, покидают ее, проходя через функцию void destroy(). Фактически эта функция помещает транзакт, на которой указывает ссылкаtrans, в списокdelist.
Пример 2.1. Уничтожение транзакта в событии номер 12.
#include "simc.h"
voidmain() {
...;
while(systime<1000) {
plan();
switch(sysevent) {
...: ...;
case 12: destroy(); break; Уничтожение транзактов
...: ...
}
}
}
printall();
}
2.3 Продвижение транзактов
Транзакты могут продвигаться в модели только в моменты осуществления событий. Любой транзакт в модели движется от функции createк функцииdestroy. Обращений и к тем, и к другим функциям в системе может быть несколько. Любые параллельные процессы в модели осуществляются последовательно (их можно синхронизировать), поэтому в любой момент выполнения программы может продвигаться только один транзакт.
Если в некоторый момент модельного времени началось продвижение транзакта, то он перемещается по модели (без увеличения модельного времени) от события к событию до тех пор, пока не встретит одну из функций: destroy,delayt,wait,seize,infac,enterили функции, помещающие транзакт в список пользователя.
Первые две безусловно прекращают продвижение транзакта, остальные - в зависимости от наступления указанного в функции события (wаit) или в зависимости от состояния занятости указанных в функциях устройств (seize, infac, enter).
Последовательность действий при выполнении события произвольная, однако следует помнить, что указанные функции могут устанавливать trans=nil(delayt,destroy- всегда устанавливают) и временно выводить транзакт из числа активных (способных продвигаться в модели в данный момент модельного времени при данном состоянии системы). Единственная функция -delayt- точно устанавливает значение модельного времени новой активации транзакта. Момент активации транзактов, прошедших через функцииdestroy,wait,seize,infac,enterзависит от последующего поведения модели.
2.4 Задержка транзактов. Функцияdelayt
Если значение модельного времени (systime==c), а время задержки в функцииvoid delayt(double) равноr, то транзакт помещается в списокfuture, а время выхода транзакта из списка равняетсяr+c. Размещение транзактов в спискеfutureосуществляется в порядке возрастания времен выхода. Если в списке несколько транзактов имеют одинаковое время выхода, то эти транзакты размещаются в порядке убывания их приоритетов. Транзакты с одинаковыми приоритетами и временами выхода размещаются в порядке их поступления в список.
Пример 4.1. Модель с простейшим случаем задержки.
#include "simc.h"
void main() {
...;
initcreate(1,0);
...;
while(systime<1000) {
plan();
switch(sysevent) {
case1:create(40);break;
...: ...;
case10:delayt(50);break; // задержать транзакт на 50 единиц модельного времени
...: ...;
case 12: destroy(); break;
}
}
printall();
}
Пример 4.2. Задержка транзакта на время, экспоненциально распределенное с µ=4.0
#include "simc.h"
voidmain() {
...;
while(systime<2500) {
plan();
switch(sysevent) {
...: ...;
case 42: delayt(randexp(4.0,v1)); break;
...: ...
}
}
printall();
}
