- •Аннотация
- •Содержание:
- •Введение
- •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
4 Отладочные средства
4.1 Диагностика ошибок
Во время выполнения модели могут возникать ошибки, которые регистрируются C++ (приводят к аварийному останову), или не регистрируютсяC++, но нарушают логику моделирования. Ошибки первого вида могут быть следствием ошибок второго вида, поэтому часть действий, которые могут повлечь за собой возникновение ошибки, регистрируются функциями моделирования. Если эти ошибки серьезны, они могут завершиться функциейexit(). При этом распечатывается расширенная (аварийная) статистика. Коды всех ошибок с пояснениями выводятся на печать с помощью функцииvoid error(int errcode), гдеerrcode- код ошибки. Полный перечень кодов регистрируемых ошибок и сообщений приводится в приложении.
Появление регистрируемой ошибки, в результате которой продолжение моделирования становится невозможным, приводит к записи аварийной статистики в файл error.html.
4.2 Трассировка
В системе существует возможность "пошаговой трассировки". Для этого необходимо выполнить функцию void starttrace(),печатаемая при этом информация приведена в приложении.
Приложение 1. Коды и сообщения об ошибках
101: отрицательное значение времени задержки;
102: в спискеdelistнет транзактов
201: попытка уничтожить несуществующий транзакт;
202:попытка уничтожить несуществующий прибор;
203:попытка уничтожить несуществующую очередь;
204:попытка уничтожить несуществующий накопитель;
205:уничтожается занятый прибор;
206:прибор уничтожается вместе с ожидающими транзактами;
207:прибор уничтожается вместе с прерванными транзактами;
208:накопитель уничтожается вместе с ожидающими транзактами;
209:уничтожается непустой накопитель;
301:попытка занять заполненую очередь;
302:попытка освободить пустую очередь;
402:попытка освободить пустой прибор;
403:при попытке занять прибор отсутствует транзакт;
404:при попытке освободить прибор отсутствует транзакт;
405:прибор освобождается не тем транзактом, которым был занят;
501:отрицательное время задержки;
502:попытка задержать отсутствующий транзакт;
511:при выполнении функцииacceptотсутствует транзакт;
512:попытка вывести транзакт из несуществующего спискаsignlist;
601:следующее событие выходит за диапазон допустимых;
602:попытка планирования при пустых спискахfuture, current, wаitl[i];
701: попытка удалить объект из пустого списка;
702: попытка поместить в список пользователя отсутствующий транзакт;
711: в функцииsplitотсутствует транзакт;
712: при выполнении функцииassembleотсутствует активный транзакт;
713: недопустимое значение параметраnфункцииsplit;
714: недопустимое значение параметраnфункцииassemble;
801: параметр функцииnexte<1;
802: при обращении к функцииnextотсутствует активный транзакт
901: попытка сканирования пустого списка;
902: попытка сканирования несуществующего списка
7301: в табличном распределении должно бытьp[1]=0.0
7302: в табличном распределении недопустимоp[i]=p[i-1]
Приложение 2. Сообщения в режиме трассировки
initcreate- транзакт <номер> помещен в модель.
eve= <событие инициализации>
create- создан транзакт <номер>
eve= <событие инициализации>
nexttime= <время инициализации>
destroy- уничтожен транзакт <номер>
delayt- транзакт <номер> задержан на <время задержки>
nexttime= <время инициализации>
wаit- транзакт <номер>eve= <событие инициализации> помещен в списокwaitl[<ожидаемое событие>]
next- транзакт <номер> направлен на выполнение события <номер события>
infac- прибор <имя> захвачен транзактом <номер> обработка транзакта <номер> прервана или транзакт <номер> занял прибор <имя> или транзакт <номер> пытался захватить прибор <имя>
outfac- транзакт <номер> освободил прибор <имя> или транзакт <номер> освободил прибор <имя> транзакт <номер> возвращен в прибор <имя> на дообработку
outqueue- транзакт <номер> покинул очередь <имя>
inqueue- транзакт <номер> встал в очередь <имя>
seize- транзакт <номер> пытался занять прибор <имя> или транзакт <номер> занял прибор <имя>
enter- транзакт <номер> занял <число> ячеек в накопителе <имя> или транзакт <номер> пытался войти в накопитель <имя>
leave- транзакт <номер> освободил <число> ячеек накопителя <имя> или транзакт <номер> освободил <число> ячеек накопителя <имя>
транзакт <номер> переведен из списка накопителя в current
- sysevent= <событие> systime= <время>
split- для транзакта <номер> ансамбль <номер> создано <число> потомков, которые направлены по адресу <событие>
assemble- начат сбор членов ансамбля <номер> в событии <событие>
транзакт <номер> ансамбль <номер> выведен из модели в событии <событие> или транзакт <номер> ансамбль <номер> выведен из модели в событии <событие> или закончен сбор членов ансамбля <номер> в событии <событие>
parmans- параметру <тип и номер параметра> всех членов ансамбля <номер> присвоено значение <число или имя> <перечень всех членов ансамбля>
priority- всем членам ансамбля <номер> присвоен приоритет <число> <перечень всех членов ансамбля>
accept- транзакт <номер> помещен в список ожидающих сигнала <номер сигнала>
send- по сигналу <номер сигнала> транзакты переведены в списокcurrent или нет транзактов, ждущих сигнала <номер сигнала>
