размерности. Во время процесса моделирования размерности должны быть фиксированы.
Для добавления атрибута к сущности используется блок Set Attribute (рис. 20). Для считывания атрибута из сущности и формирования соответствующего сигнала используется блок Get Attribute. Для графического отображения значения атрибута используется блок Attribute Scope, в параметре Y attribute name которого нужно указать имя атрибута.
Рис. 20. Блок Set Attribute раздела Attributes
Значения атрибутов можно использовать для переключения выходов блоков Output Switch, задания времен обслуживания серверов.
Блок принимает сущность, присваивает ей данные и выпускает сущность через выходной порт (рис. 21). Присвоенные данные хранятся в атрибутах сущности. Каждый атрибут имеет имя (name) и значение (value). В каждой сущности можно определить до 32 атрибутов.
Имена атрибутов можно задавать непосредственно в колонке Attribute Name диалогового окна параметров блока или выбирать из списка доступных атрибутов (Available Attributes), который формируется автоматически по входящим
вблок путям сущности модели SimEvents.
Встолбце Value From определяется задаются ли значения атрибута в режиме диалога (Dialog) в столбце Value, либо в процессе моделирования через сигнальный порт (Signal Port). В последнем случае к блоку добавляется дополнительный входной порт с именем атрибута.
44
Рис. 21. Блок Set Attribute
Завершение процесса моделирования
При расчете статистических характеристик моделируемой системы очень важно обеспечить завершение процесса в правильное время. Типичные критерии для завершения дискретно-событийного моделирования:
•Достижение заданного времени моделирования.
•Достижение заданного количества обслуженных пользователей, обработанных деталей и т.д.
•Достижение в процессе моделирования заданного состояния, например, переполнения очереди или поломки машины.
Время окончания процесса моделирования задается параметром Stop Time в диалоговом окне, вызываемом командой меню Simulation->Model Configuration Parameters.
45
Для завершения процесса моделирования можно использовать блок StopSimulation из раздела библиотеки Sinks.
Блок завершает процесс моделирования при подаче на его вход любого ненулевого сигнала.
Для завершения процесса моделирования по достижении заданного числа сущностей можно использовать следующие действия.
1.Многие блоки в качестве выходного сигнала используют количество покинувших блок сущностей. Расчет сигнала определяется параметром Number of Entity Departed. Задайте этот выходной сигнал блока, отметив параметр
Number of Entity Departed в настройках блока
2.Соедините выходной сигнальный порт со входом атомарной подсистемы (Atomic Subsystem). Удалите из атомарной подсистемы выходной порт (Out).
3.Входной порт подсистемы соедините с блоком Compare To Constant(Сравнение с константой).
4.В настойках блока Compare To Constant: задайте оператор >=; задайте параметр Constant value желаемому значению сущностей; задайте в параметре Output data type mode значение Boolean;
5.Соедините выход блока Compare To Constant со входом блока StopSimulation.
Результат имеет следующий вид (рис. 22, 23):
Рис. 22. Модель верхнего уровня
46
Рис. 23. Содержание подсистемы
Аналогично с помощью блока Stop Simulation можно завершать моделирование по достижении некоторого состояния, достижения сущностью конца некоторого пути и т.д.
Моделирование отказов машин и оборудования
В некоторых задачах необходимо моделировать ситуации нарушения работы сервера. Например, прибор может быть сломан и позднее починен, соединение в вычислительной сети может быть нарушено и позднее восстановлено. Такие ситуации удобно моделировать с помощью состояний и переходов между ними. Блоки в разделе Servers библиотеки SimEvents не имеют встроенных средств для моделирования состояний. Однако можно моделировать состояния сервером с помощью других средств Simulink и Stateflow.
Для моделирования состояния, представляющего невозможность или отказ сервера принимать сущность даже в случае, если сервер не занят, можно использовать вентиль – блок Enabled Gate, предшествующий серверу.
Блок Enabled Gate предотвращает доступ к серверу пока управляющий сигнал на входном порту en равен нулю или отрицателен. Логика, формирующая сигнал en, определяет находится ли сервер в состоянии отказа или поломки. Такую логику можно реализовать с помощью блока Matlab Function, подсистемы, содержащей логические блоки, или графа состояний Stateflow.
Пример 1. Отказ и восстановление (починка) сервера. В следующем примере блок Stateflow использован для описания машины с двумя состояниями (рис. 24). Сервер либо
47
отключен (отказ), либо включен (работа). Состояние сервера определяется выходным сигналом блока Stateflow, который используется для открытия вентиля Enabled Gate, предшествующего серверу.
Рис. 24. Отказ и восстановление сервера
Модель состоит из двух параллельных систем обслуживания. Нижняя система обслуживания моделирует поток отказов. Генерация сущности в этой подсистеме соответствует отказу в верхней системе обслуживания. Обслуживание сущности-отказа (починка) соответствует времени, в течение которого сервер в верхней системе отключен. Завершение обслуживания сущности-отказа соответствует возврату к функционированию верхней системы.
Когда нижняя система генерирует сущность, изменение ее серверного сигнала #n включает блок Stateflow, определяющий состояние верхней системы обслуживания. Увеличение сигнала #n приводит к отключению сервера, а уменьшение – к включению.
Задание. Выполните моделирование рассмотренного выше примера 1. Модифицируйте модель путем добавления
48