- •Предисловие
- •1.3. Порядок выполнения работы
- •1.3.1. Меню командного окна
- •1.3.2. Настройка системы
- •Команда Set Path
- •Команда Preferences
- •Средства помощи пользователю. Демонстрация возможностей системы
- •1.3.3. Запуск Simulink
- •Демонстрация возможностей Simulink
- •1.3.5. Организация работы с библиотекой Simulink
- •Контрольные вопросы
- •2.2.1. Меню File
- •2.2.2. Меню Edit
- •2.2.3. Меню View
- •2.2.4. Меню Simulation
- •2.2.4.1. Установка параметров расчета модели
- •2.2.4.2. Установка параметров обмена с рабочей областью
- •2.2.5. Меню format
- •Контрольные вопросы
- •3.2.2. Simulink – Math, блок Combinatorial Logic
- •3.2.3. Описание логики функционирования элементов
- •3.2.4. Проверка работоспособности модели
- •3.2.5. Установка значений параметров модели
- •3.2.6. Редактирование блок-схемы диаграммы
- •3.2.7. Сохранение результатов моделирования
- •3.2.8. Накопление и использование результатов серии экспериментов
- •3.2.9. Использование взаимодействующих s-моделей
- •Контрольные вопросы
- •4.2.2. Генерация случайных величин с заданными параметрами
- •Контрольные вопросы
- •5.2.1. Выбор шага моделирования
- •5.2.2. Управление окончанием сеанса моделирования
- •5.2.3. Синхронизация параллельных процессов
- •Контрольные вопросы
- •Библиографический список
5.2.2. Управление окончанием сеанса моделирования
Существует несколько способов управления окончанием моделирования. Наиболее простой из них состоит в указании длительности интервала моделирования. При таком подходе сеанс моделирования завершается при достижении модельным временем значения, заданного параметром Stop time. Текущее состояние модели (или моделируемой системы) в данном случае не учитывается.
С целью расширения возможностей исследователя по управлению модельным экспериментом в состав библиотеки Simulink включен блок Stop Simulation (раздел Sinks). С его помощью можно увязывать окончание сеанса моделирования с выполнением тех или иных условий. Такими условиями, в частности, могут быть:
• переход моделируемой системы в определенное состояние;
• завершение выполнения какой-либо операции (системой в целом или одной из ее подсистем);
• достижение показателем эффективности заданного значения.
Условия окончания сеанса моделирования должны быть заданы в S-модели таким образом, чтобы при их наступлении на вход блока Stop Simulation поступал ненулевой сигнал (если сигнал векторный, то хотя бы один его элемент должен быть отличен от нуля).
На рис. 5.4 показан вариант моделирования работы накопителей HD1 и HD2 с использованием блока Stop Simulation. Условием окончания сеанса моделирования является исчерпание емкости хотя бы одного из накопителей (если накопитель заполнен, то Ки≥1). Поскольку в рассматриваемом примере накопители заполняются достаточно медленно, целесообразно установить интервал моделирования существенно больше заданного по умолчанию (скажем, Stop time=50). Вы можете убедиться в «досрочном» завершении сеанса моделирования, просмотрев вектор значений времени tout, сохраняемый в рабочей области MATLAB (флажок Time на вкладке Workspace I/O должен быть установлен).
Рис. 5.4. Пример использования блока Stop Simulation
При моделировании сложных систем бывает необходимо задавать несколько различных условий окончания эксперимента. В таких случаях в состав S-модели может включаться несколько блоков Stop Simulation, каждый из которых связан со своим признаком завершения сеанса. Пусть, например, при моделировании работы накопителя сеанс должен завершаться не только при исчерпании его емкости, но и при генерации сообщения, размер которого превышает заданный порог. Соответствующая блок-диаграмма показана на рис. 5.5.
Рис. 5.5. Применение блока Stop Simulation при наличии нескольких условий
Для идентификации указанных событий используются блоки Hit Crossing (их имена поясняют назначение каждого из них); для визуализации причины окончания сеанса блока Stop Simulation связаны с блоками Display. Как вы, вероятно, догадались, значение «1», выводимое в блоке Display, указывает на соответствующую причину завершения моделирования.
5.2.3. Синхронизация параллельных процессов
В приведенных выше примерах присутствовали только асинхронные параллельные процессы, то есть такие, которые не влияют друг на друга. «Привязку» таких процессов к единой оси модельного времени Simulink выполняет сам, освобождая от соответствующих проблем разработчика. Другое дело, когда имеют место синхронные параллельные процессы, состояние каждого из которых зависит от текущего состояния другого. При согласовании таких процессов должна учитываться специфика решаемой задачи, и без помощи разработчика Simulink здесь уже обойтись не может.
Для корректного управления модельным временем в таких моделях необходимо:
1. Установить, какой из взаимодействующих процессов является подчиненным по отношению к другому.
2. Определить, могут ли в подчиненном процессе происходить события, не связанные с изменением состояния управляющего процесса.
3. Обеспечить приращение модельного времени на интервал времени до ближайшего события в управляющем процессе.
4. Контролировать условия окончания сеанса моделирования.
В качестве иллюстрации к сказанному вновь воспользуемся моделью работы накопителя. Очевидно, что запись сообщения на диск может начаться только при условии его поступления, поэтому процесс записи является подчиненным по отношению к процессу приема сообщений в систему. Если интервал между сообщениями значительно больше длительности операции записи, то продвижение модельного времени будет определяться только событиями управляющего процесса (поступлением сообщений). Блок-диаграмма такой системы не будет ничем отличаться от приведенной ранее на рис. 5.1. Если же интервал между сообщениями соизмерим с длительностью записи сообщения, то необходимо отразить в модели дополнительное условие: «обслуживание» нового сообщения не может начаться до тех пор, пока не завершится запись предыдущего. При такой постановке задачи оба процесса становятся равноправными с точки зрения влияния на значение модельного времени. Соответственно, очередной шаг модельного времени в этом случае вычисляется как сумма двух временных интервалов: промежутка до нового сообщения и длительности операции записи.
Соответствующая очередная модификация модели показана на рис. 5.6. Предполагается, что время, необходимое для записи очередного сообщения, является СВ, распределенной равномерно в интервале [3, 7] единиц времени. Сообщения поступают через случайные промежутки времени, величина которых подчинена нормальному закону с параметрами m=40, v=5.
Как было уже сказано, для формирования текущего значения модельного времени удобнее всего использовать блок Discrete-Time Integrator. Однако он имеет только один информационный вход. Поэтому при наличии в модели нескольких типов событий, влияющих на изменение модельного времени, соответствующие им интервалы времени должны предварительно суммироваться. Наиболее подходящий для этого блок ‑ это блок Sum, число входов которого можно изменять.
Рис.5.6. Управление модельным временем при наличии двух синхронных процессов
Для отображения в модели временных параметров процесса записи сообщений в модель введены два блока MATLAB Fсn (на диаграмме они обозначены как Генератор длительности записи и Генератор интервалов). Блоки Sum и Discrete-Time Integrator обеспечивают продвижение модельного времени на соответствующую величину.
Как и в предыдущем варианте модели, собственный таймер Simulink в данном случае играет роль «тактового генератора». Для наблюдения за изменением модельного времени и влияющими на него процессами в блок-диаграмму был дополнительно включен блок Scope, имеющий три входных порта. Полученные с его помощью временные диаграммы показаны на рис. 5.7.
В окне «Модельное время» текущее значение модельного времени отмечается на оси ординат, а на оси абсцисс указаны «номера тактов» работы модели (их можно трактовать как номера сообщений, поступающих от источника).
Разумеется, в реальной системе процессы поступления сообщений и их записи на накопитель являются синхронными, так как очередное сообщение может начать записываться только после его поступления от источника. В модели такая строгая синхронизация не обеспечивается: мы не можем утверждать, что сначала Simulink добавляет к модельному времени отрезок, соответствующий интервалу до поступления очередного сообщения, и только после этого изменяет модельное время на длительность записи. Нам известно только то, что обе эти величины добавляются к текущему значению модельного времени в каждом такте моделирования, то есть для каждого очередного сообщения.
Рис. 5.7. Временные диаграммы работы модели
Сейчас же мы вернемся на некоторое время к первоначальной формулировке задачи об оценке работы двух накопителей. И обратим внимание на то, что оба они работают одновременно и совершенно независимо друг от друга, то есть асинхронно. В начале данного подраздела было отмечено, что Simulink сам обеспечивает привязку таких процессов к единой оси времени. Однако это справедливо только для тех моделей, в которых и для управления сеансом моделирования используется собственный таймер Simulink. Если же этот таймер играет роль «тактового генератора», как это было в двух последних примерах, то в блок-диаграмму следует включить дополнительные средства контроля за временем.
Например, предположим, что сеанс моделирования должен быть остановлен по истечении 300 единиц модельного времени («внешнего» по отношению к таймеру Simulink). В этом случае в качестве средств продвижения времени может быть использована та же пара блоков — Sum и Discrete-Time Integrator. Однако только этих двух блоков уже недостаточно. Дело в том, что если просто суммировать затраты времени на работу HD1 с затратами времени на работу HD2, то это приведет к двойному учету времени (ведь накопители работают одновременно!).
В подобных ситуациях целесообразно использовать следующий способ продвижения модельного времени.
Будем исходить из того, что процесс обслуживания каждого сообщения состоит из двух составляющих:
• ожидания его поступления (в течение времени tож);
• записи на носитель (за время tз).
Тогда HD1 обслужит очередное сообщение за время T1 = tож1 + tз1, а накопитель HD2 — за время T2 = tож2 + tз2.
Еще одно важное допущение состоит в том, что начало обслуживания очередного сообщения каждым накопителем совпадает с очередным тактом работы модели, задаваемым таймером Simulink.
Тогда продвижение модельного времени в каждом такте будет определяться большей из величин T1 и T2:
tм = tм + max{T1, T2}.
Блок-диаграмма, соответствующая описанному подходу, показана на рис. 5.8 (поскольку способ вычисления коэффициента использования накопителей Ки при этом не изменяются, соответствующие блоки в данном варианте диаграммы не показаны).
Рис. 5.8. Управление окончанием моделирования при наличии двух параллельных процессов
Блоки, используемые в модели для управления временем, выполняют следующие функции:
• Sum1 — вычисляет значение T1 для очередного такта моделирования (то есть для очередного сообщения);
• Sum2 — вычисляет значение T2;
• Sum3 — обеспечивает сравнение величин T1 и Т2;
• Switch — пересылает на вход блока Discrete-Time Integrator большую из величин T1 и T2;
• Discrete-Time Integrator — вычисляет новое значение модельного времени.
