4.6. Пример моделирования движения летящей капли воды в среде Simulink

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

Начальные условия: == 600 м/с, =0.

Дифференциальные уравнения движения точки имеют вид:

(4.2)

Уравнения преобразуем таким образом, чтобы в левой части осталась производная второго порядка.

Создадим новую модель File – New – Model.

Из окна Simulink Library Browser перетаскиваем необходимые блоки и соединяем их друг с другом.

Созданную модель сразу сохраняем. Например, как kamen. mdl (рис. 4.5).

Рис. 4.5. Окно модели с пояснениями

(уравнениями для моделирования)

Теперь из окна обозревателя библиотеки стандартных блоков Simulink выбираем подходящие нам элементы.

Мы видим, что в уравнениях присутствует сложение и умножение на постоянные k и g. Для моделирования производных воспользуемся блоками интегрирования.

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

Рис. 4.6. Модель с первыми блоками

Используемые блоки:

§  Integrator (аналоговый интегратор) (раздел Continuous),

§  Sum (сумматор – суммирует или вычитает сигналы) (раздел Math Operations),

§  Gain (умножитель – умножает сигнал на постоянную величину) (раздел Math Operations) .

НЕ нашли? Не то? Что вы ищете?

Разбираемся, как будет изменяться сигнал.

Проведем линии сигнала от входа и выхода интегратора. Для этого делаем щелчок левой клавишей мыши на входе (слева) или выходе (справа) блока и с зажатой клавишей мыши «тянем» указатель в сторону, рис. 4.7.

Рис.4.7. Блок с первыми сигналами

Получившиеся линии пунктирные и красного цвета, так как «висят в воздухе» и никуда не присоединены.

Делаем пояснения. Пусть в интегратор «входит» сигнал x’’ (производная второго порядка от х), тогда выходить будет x’ (производная первого порядка от х).

Теперь рассмотрим, как получается сигнал x’’ – исходя из уравнения:

(4.3)

Получается, необходимо взять сигнал x’ и умножить его на постоянную k/m.

Воспользуемся для этого блоком Gain. Для удобства развернем его в обратную сторону. Из блока вытягиваем линии для связи его с другими блоками.

Напомним: развернуть блок, повернуть его можно, вызвав команды из контекстного меню: щелчок правой клавишей на блоке: Format–Flip Block. Или Rotate Block (рис. 4.8).

Рис. 4.8. Добавление блока Gain

Теперь прикрепляем линии. Если конец одного сигнала подвести близко к началу другого, то появляется знак удвоенного перекрестия. И линия присоединится (рис. 4.9).

Рис. 4.9. Соединение первых линий сигнала

Требуется найти траекторию движения капли воды, а, значит, нам потребуется сигнал чистый х (без производной). Копируем еще один Integrator и при помощи него интегрируем сигнал x’ в сигнал х (рис.4.10).

Рис. 4.10. Добавление второго интегратора

В блок Gain вносим константу –k/m.

Напоминаем: постоянные в Simulink возможно вносить несколькими методами.

Первый метод – двойной щелчок на блоке Gain открывает его содержимое, куда можно внести значение (-0.03).

Второй метод – в блок Gain можно ввести арифметическое выражение – в нашем случае (-0.06/2).

Третий способ - в блок Gain можно ввести арифметическое выражение в виде (-k/m). А уже в командном окне ввести k=0.06; m=2; Эти постоянные будут храниться в рабочей области, и ими можно будет пользоваться в других моделях.

Воспользуемся вторым способом.

Напоминаем: в Simulink разделитель десятичной части, как и MATLAB в целом, это только точка. Использование запятой разделяет два разных числа, т. е. 0,06 MATLAB воспримет как два числа – 0 и 6.

Для просмотра ответа воспользуемся блоками визуализации. В библиотеке Sinks найдем и «перетащим» на поле модели два блока – Scope и Display.

Напоминаем: в Simulink блок Display показывает текущее значение сигнала – в данный момент моделирования. После окончания моделирования остается последнее значение.

Напоминаем: в Simulink блок Scope показывает график изменения сигнала во все время моделирования (рис. 4.11).

Рис. 4.11. Добавление блоков Scope и Display

Соединяем блоки и запускаем моделирование. Блок сумматора, который нам пока не пригодился (рис.4.12).

Рис. 4.12. Собранная модель

Моделирование заканчивается очень быстро, и ничего вроде не происходит. О полученных результатах нам докладывает только блок Display - там появилось значение 0. Двойной щелчок на блоке Scope открывает график, показывающий пустое черное поле и прямую, т. е. ноль (рис.4.13).

Рис. 4.13. Полученный график переменной х

Напоминаем: при использовании блока Scope нужно пользоваться «автомасштабом» - после «открытия» графика нажать на пиктограмму с изображенным биноклем.

Но и после использования «автомасштаба» видна только прямая линия – переменная х постоянна и равна нулю во все время моделирования.

В чем же дело? Попробуем разобраться.

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

Что же делать? Вспоминаем математику!

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

Рис. 4.14. Открытые свойства элемента Integrator

с измененными начальными условиями

Начальные условия: ==600 м/с., =0.

Значит, скорость меняется от 600 м/с до нуля.

Тогда в свойствах первого интегратора ставим параметр Initial condition равным 600.

Запускаем модель, открываем график, нажимаем «автомасштаб». На блоке дисплей изменилось значение, на графике появилась кривая. Это явный успех!

Примечание: графики в Simulink выводятся по умолчанию на черном фоне желтыми линиями. В связи с тем, что данное руководство будет издаваться в печатном виде – изменим параметры отображения графиков – для улучшения качества отображения на бумаге (рис.4.15).

Рис. 4.15. Изменение параметров блока Scope

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

Рис. 4.16. Изменения в работе модели после внесения начальных условий

Обратите внимание, что время моделирования у нас указано – 10 секунд. Оно видно в окошке наверху модели, рядом с кнопкой «старт симуляции». Изменим время на 100 (для примера).

Тогда процесс симуляции будет идти дольше и на дисплее отобразится другое значение (рис.4.17).

Рис. 4.17. Значение на дисплее и на графике изменились –

симуляция продолжалась дольше

Итак, мы моделируем уравнение с переменной х, и все получилось. Попробуем сделать то же самое с у.

Чтобы не делать почти такую же схему с нуля – просто копируем всю модель – выделяем «растягивающейся рамкой» все блоки вместе с линиями сигнала. Потом нажимаем Ctrl+С и на свободном месте «вставляем» копию.

Иногда таким образом копировать блоки неудобно или слишком долго. Тогда после выделения объекта нажимаем и удерживаем Ctrl – и перетаскиваем блоки – они не просто перетянутся, а скопируются (рис.4.18).

Рис. 4.18. Модель с двумя моделируемыми уравнениями после копирования

Теперь на нижней копии меняем все пояснения, и добавляем блоки, которыми можем вычитать постоянный сигнал g – это сумматор и источник постоянного сигнала. Не забываем у сумматора изменить один плюс на минус (рис.4.19, 4.20).

Рис. 4.19. Модель с двумя уравнениями после корректировки

Рис. 4.20. Графики сигналов модели после запуска

Для исследования уравнений ВМЕСТЕ – т. е. как системы из двух уравнений – мы используем блок XY Graph. Очевидно – к верхнему входу подсоединяем сигнал х, а к нижнему – у.

После запуска моделирования обнаруживаем две вещи: во-первых, блок XY Graph открывается автоматически после завершения симуляции, а во-вторых – показывает просто прямую линию (рис.4.21).

Рис. 4.21. Блок XY Graph после окончания моделирования

Результат мы получили хороший, но мы можем выводить график не только на осях до х = +1 и у = +1.

Cделав двойной клик на блок XY Graph, мы открываем его свойства. Обнаруживаем несколько настраиваемых параметров – х-min, х-max и так далее. Они показывают, какое максимальное значение могут принять оси координат – в обе стороны от начала координат.

Рассмотрим, какие значения нам использовать. Вряд ли капля при броске сразу начнет лететь в обратную сторону. Нам хочется узнать, как будут меняться ее координаты, но полетит она, скорее всего, под углом к горизонту. Но вот насколько далеко? Для этого нам пригодятся блоки Display, которые мы установили в модели. Они показывают, что после 100 секунд моделирования «х» принял значение почти 20 000, а «у» принял отрицательное значение – капля упала на землю до нулевой отметки и «полетела» еще ниже (рис.4.22).

Рис. 4.22. Меню параметров блока XY Graph

Изменим параметры блока так, чтобы нам был виден процесс изменения координат капли воды более полно. Пусть х-min и у-min станут равны нулю (нам не нужна отрицательная составляющая), а х - max, у - max станут равны по 20 000 (самое большое значение, которое мы наблюдали).

Получим вот такой график на блоке XY Graph.

Видно, что капля летит по параболе. Его максимальное, наивысшее положение – чуть меньше 10 000. Максимальная длина полета – менее 20 000. На графике XY Graph мы видим траекторию полета (рис.4.23).

Рис. 4.23. Траектория полета капли воды

Теперь, варьируя время полета, мы можем останавливать симуляцию раньше или позже. На блоках Displey будет показано «последнее» значение – это и будут последние координаты капли.

Все процессы смоделированы, осталось только их исследовать.

Из этой модели не только можно получить все данные, но с ней можно проводить эксперименты. Например, менять начальные условия, массу и т. д. Можно добавлять в модель новые зависимости – силу сопротивления воздуха, попутный ветер и т. д.