Интерактивное вмешательство.

Концепция виртуального стенда предусматривает возможность активного вмешательства пользователя в функционирование модели. В частности, пользователь может изменять значения переменных во время прогона модели.

Например, пусть вы хотите исследовать поведение вашего маятника при изменении ускорения силы тяжести g. Для этого нужно, во-первых, трансформировать g из константы в переменную.

Замечание. Константа – это величина, которая никогда не меняется. Параметр – это величина, которая может меняться для разных экземпляров класса и для данного экземпляра только однократно в начале прогона. Переменная может меняться во время прогона модели.

Такую трансформацию очень легко выполнить методом «drag-and-drop», перетащив g из секции констант в секцию переменных в определении класса (Рис 4.18).

Интерактивное вмешательство. - student2.ru

Рис 4.18

Пусть мы желаем, например, в конце первого периода колебаний сделать значение g равным 50. Щелкните дважды мышью на строке этой переменной в окне переменных )модель можно и не останавливать) и в появившемся диалоге (Рис 4.19) задайте новое значение (можно вводить не только числовые значения, но и любые формулы, включающие предопределенные функции и переменные модели, например 5*g*sin(Time)).

Интерактивное вмешательство. - student2.ru

Рис 4.19

Результат изменения виден на Рис 4.20: с ростом g частота колебаний увеличивается.

Интерактивное вмешательство. - student2.ru

Рис 4.20

Для того, чтобы менять переменную плавно, необходима 2D-анимация.

Замечание. Визуальные инструменты моделирования дают огромные возможности, но пользоваться ими нужно с оглядкой на существо математической модели. Например, если вы захотите скачком изменить длину маятника L, вам нужно будет не забыть одновременно изменить и угловую скорость Omega, чтобы не нарушить закон сохранения момента импульса, в противном случае вы получите неверный результат. Если же вы захотите менять L плавно, то это вообще нельзя делать: нужно вводить другие уравнения. К сожалению, пакет моделирования не в состоянии контролировать семантику задачи и позволит вам плавно менять L, оставляя на вашей совести совершенно физически бессмысленный полученный результат.

D-анимация.

Несмотря на все богатство возможностей 3D-анимации, двумерная анимация не теряет своего значения для пакетов визуального моделирования. Это прежде всего касается разного рода динамических блок-схем и панелей управления, которые по своей природе являются двумерными.

С помощью команды «Окна/Новая 2D-анимация» создадим анимационное окно. Далее откроем с помощью кнопки Интерактивное вмешательство. - student2.ru или команды «Сервис/Стандартные 2D-компоненты» панель 2D-компонент (Рис 4.21).

Интерактивное вмешательство. - student2.ru

Рис 4.21

Выберем на этой панели компоненту «Ползунок» и методом «drag-and-drop» перетащим ее в левую часть окна анимации. Щелкнем на появившемся изображении ползунка правой клавишей мыши и с помощью команд всплывающего меню установим вертикальное расположение ползунка, режим показа числового значения и интервал значений 0 .. 100 (Рис 4.22).

Интерактивное вмешательство. - student2.ru

Рис 4.22

С помощью мыши можно перемещать 2D-компоненту в пределах окна анимации, а также изменять размер компоненты. Щелкнем правой клавишей мыши сверху от компоненты и, выполнив команду «Добавить надпись» всплывающего меню, создадим пояснительную надпись для ползунка (Рис 4.23). Надпись также можно перемещать с помощью мыши с прижатой клавишей.

Теперь нужно сделать самое важное – связать ползунок с переменной модели. Делается это аналогично 3D-анимации: методом «drag-and-drop» перемещаем переменную g из окна переменных и бросаем ее на изображении ползунка. Теперь ползунок будет отображать текущее значение переменной, а при перемещении ползунка с помощью мыши присваивать соответствующее значение этой переменной. Кроме ползунка интерактивными 2D-компонентами являются еще «Круговой регулятор» и «Кнопка». Остальные компоненты позволяют только отображать текущее значение переменной. Используем две компоненты «Линейный индикатор сплошной» для индикации значений переменных Alpha и Omega (Рис 4.23).

Интерактивное вмешательство. - student2.ru

Рис 4.23

Результат плавного изменения ускорения силы тяжести показан на Рис 4.24. Обратите внимание, если резко уменьшить величину g в момент прохождения нижнего вертикального положения (максимум кинетической энергии), то маятник можно закрутить вокруг оси вращения. Это иллюстрация важного свойства интерактивной анимации: через пользователя замыкается обратная связь, вы видите на экране динамику системы и соответственно немедленно реагируете.

Интерактивное вмешательство. - student2.ru

Рис 4.24

Останов по условию.

При проведении экспериментов с моделью часто возникает необходимость останавливаться в некоторых характерных точках фазовой траектории (например, мы меняли величину g «в конце первого периода колебаний». Точно определить этот момент «на глазок», например, наблюдая графики, достаточно сложно. Поэтому в пакете предусмотрена возможность останова по условию. Этим условием может быть истинность некоторого логического выражения (предиката), срабатывание определенного или любого перехода, а также вход в определенный узел карты состояний. В данном случае нам понадобится останов по предикату.

С помощью кнопки Интерактивное вмешательство. - student2.ru или команды «Сервис/Условия останова» откроем диалог «Условия останова», выберем страничку «По предикату», щелкнем на ней правой клавишей мыши и, выполнив команду «Добавить» всплывающего меню, перейдем в диалог редактирования логического предиката (Рис 4.25).

Интерактивное вмешательство. - student2.ru

Рис 4.25

Новый предикат добавится в список «ждущих» предикатов (Рис 4.26). Галочка около предиката показывает, что он активен, т.е. по нему может произойти останов модели. Предикат можно пассивизировать и снова активизировать с помощью мыши.

Интерактивное вмешательство. - student2.ru

Рис 4.26

Останов по ждущему предикату происходит в момент, когда его значение меняется с FALSE на TRUE. Сработавший предикат выделяется красным цветом.

В нашем случае первый останов произойдет в начальный момент. Нажмем кнопку «Продолжить» и дождемся второго останова – это и будет начало второго периода колебаний. Момент останова (как и любого другого переключения в гибридной одели) определяется с точностью до временной погрешности, заданной в установках численных методов (по умолчанию 1e-6).

Формульный калькулятор.

Иногда в ходе эксперимента возникает необходимость разовых расчетов по определенным формулам. Например, если вы захотите интерактивно изменить длину маятника L, то, как было указано выше, необходимо одновременно изменить значение угловой скорости, исходя из соотношения Интерактивное вмешательство. - student2.ru . Для этого удобно использовать формульный калькулятор.

В нужный момент времени с помощью кнопки Интерактивное вмешательство. - student2.ru или команды «Сервис/Калькулятор» откроем окно формульного калькулятора. Затем введем нужное выражение и нажмем клавишу «Enter» (Рис 4.27).

Интерактивное вмешательство. - student2.ru

Рис 4.27

Выражения в калькуляторе могут включать в себя любые предопределенные функции (см. описание входного языка), а также имена переменных модели (берется их текущее значение). Подробнее работа с калькулятором описана во встроенной справочной системе.

План.

Часто бывает удобно запрограммировать определенную последовательность воздействий на модель и воспроизводить ее автоматически в каждом прогоне. Для этого служит план прогона модели.

Редактор плана вызывается кнопкой Интерактивное вмешательство. - student2.ru или командой «Сервис/План» главного меню. На Рис 4.28 показан план прогона, в котором на 4-й единице времени величина g принимает значение 50, а на 12-й единице прогон завершается. Подробнее работа с планом описана во встроенной справочной системе.

Интерактивное вмешательство. - student2.ru

Рис 4.28

Создаем гибридную модель.

В качетсве типовой гибридной рассмотрим модель отрывающегося маятника. Новый проект мы будем создавать на основе рассмотренного выше проекта «Маятник.mvb». Для этого с помощью команды «Проект/Сохранить как» сохраним этот проект как «ОтрывающийсяМаятник.mvb» и далее будем редактировать уже существующий класс «Маятник». Несколько позже будет рассмотрено как создать для отрывающегося маятника новый класс в том же проекте, унаследовав нужные свойства от простого маятника.

Путь к готовому примеру «Модели\Маятник\ОтрывающийсяМаятник.mvb».

Это модель изолированной системы с несколькими качественными состояниями. Поэтому класс, создаваемый по умолчанию при открытии нового проекта, для нее подходит не вполне. Напомним, что при открытии нового проекта в создаваемом по умолчанию классе автоматически создается «Система_уравнений_1», которая приписывается начальному состоянию Init в главной карте поведения. «Система_уравнений_1» нам еще пригодится, а вот приписывание ее даму состоянию в данном случае не нужно. Выделим узел Init в главной карте поведения (Рис 5.1) и с помощью кнопки Интерактивное вмешательство. - student2.ru или команды «Установить пустое локальное поведение» всплывающего меню сделаем узел Init пустым.

Интерактивное вмешательство. - student2.ru

Рис 5.1

Учитывая, что узел Init унаследован от родительского класса CDevice и ни удалить, ни переименовать в данной версии пакета его нельзя, можно рекомендовать две «стратегии» построения главной карты поведения гибридной модели:

Интерактивное вмешательство. - student2.ru

Рис 5.2

Интерактивное вмешательство. - student2.ru

Рис 5.3

1) Стоится новая «Карта_поведения_1» (Рис 5.3), которая приписывается узлу Init (Рис 5.2).

2) Узел Init по-прежнему используется как начальный с безусловным переходом в узел, соответствующий первому содержательному состоянию модели - в данном случае это состояние «Колебания» (Рис 5.4). Этот подход удобен в том случае, когда вычисление согласованных начальных значений переменных является нетривиальной процедурой, связанной, например, с однократным решением системы алгебраических уравнений. В этом случае начальную последовательность формул удобно помещать во входных действиях начального узла, а начальную систему алгебраических уравнений приписывать начальному узлу как непрерывное поведение. Важно уяснить, что даже если длительность пребывания в каком-либо состоянии равна нулю в непрерывном времени )вход в состояние и выход из состояния происходят в одной «временной щели»), то алгебраическая составляющая системы уравнений, приписанной этому состоянию, все равно будет решена ! На Рис 5.4 показано вычисление начальных значений в начальном узле Init.

Интерактивное вмешательство. - student2.ru

Рис 5.4

В любом случае для описания гибридного поведения вам придется создавать новую карту поведения или модифицировать главную.

Далее в этом примере мы будем использовать подход, показанный на Рис 5.2, Рис 5.3.

Создание карты поведения.

Новую карту поведения можно создать двумя способами:

1) переместить мышь на секцию «Локальные карты поведения» в окне класса, вызвать по правой кнопке мыши всплывающее меню и выполнить команду «Добавить». В дальнейшем вам придется приписать новую карту поведения какому-то узлу другой карты поведения более высокого уровня иерархии методом «drag-and-drop»;

2) выделить узел, которому вы хотите приписать новую карту поведения, вызвать правой кнопкой мыши всплывающее меню и выполнить команду «Создать новую карту поведения». В результате новая карта поведения будет не только создана (она появится в секции «Локальные карты поведения» окна класса), но и будет приписана данному узлу.

Наши рекомендации