Основное назначение данного текста – показать как создавать модели в SimInTech, зная математические уравнения физических процессов. В качестве примера использовались уравнения физических процессов в гидроприводе.
За основу, с любезного разрешения автора, было взято вот это методическое пособие: Андреев М.А. Математическое моделирование гидропривода: Учебное пособие. — на правах рукописи, 2017. — 61 с.
Оригинал расположен здесь: https://vk.com/doc2869_441829149
С автором оригинального руководства можно связаться по контактам
ВКонтакте: https://vk.com/max.andreev
Facebook: https://www.facebook.com/max.andreev
Telegram: https://t.me/MaximAndreev
Предисловие от Максима Андреева:
С SimInTech я столкнулся будучи студентом ещё в те времена, когда она называлась «МВТУ» (Моделирование В Технических Устройствах). Так что, свои первые неловкие попытки моделировать гидропривод я предпринимал именно в ней. Скажу честно, что после того как у меня появилась возможность работать в MATLAB Simulink, я постарался забыть об этом опыте как о страшном сне (впрочем, после пары лет работы в программе SimulationX я и об опыте моделирования в Simulink (включая Simscape) предпочитаю лишний раз не вспоминать).
Тем не менее, мои глубинные патриотические чувства не может не трогать тот факт, что команда разработчиков в последние годы активно принялась за совершенствование этого важного для отечественной инженерной отрасли наследия советских инженеров и существенно продвинулась в этом деле (об этом говорит хотя бы то, что модели, созданные в SimInTech, используются для моделирования работы АЭС, в т.ч. и в Германии). Поэтому, когда ко мне обратились за разрешением адаптировать текст моего учебного пособия для SimInTech, я конечно же согласился.
В советское время было написано достаточно много литературы, посвященной расчету гидропривода, в том числе описанию физических процессов и математическому моделированию. Но проблема заключается в том, что для того, чтобы эти книги принесли пользу читателю, необходимо уже уметь писать математические модели. По крайней мере мне нигде не удалось найти описания пошагового процесса создания математической̆ модели гидропривода. В лучшем случае автор подробно описывает откуда берётся каждое уравнение огромной системы, но что с ними дальше делать, обычно не очень понятно.
Здесь я постараюсь изложить общую методологию создания математической модели гидропривода различной сложности, начиная от расчетной схемы, записи уравнений и заканчивая реализацией в SimInTech.
После прочтения этого руководства вы будете в состоянии самостоятельно, без использования каких-либо шаблонов, смоделировать работу гидропривода с учетом основных физических процессов и понимать специальную литературу, из которой сможете опять-таки самостоятельно почерпнуть способы описания более сложных процессов.
Принципы создания моделей гидропривода можно применять для любых других систем, дифференциальные уравнения которых, вам известны.
В освоении любого незнакомого ранее ремесла, очень важно взять посильную тренировочную задачу.
В нашем случае задача будет предельно проста:
Рисунок 1. Гидравлическая схема для моделирования.
Более того, как показывает практика, если посадить человека за какую-нибудь программу, где математические модели можно писать путем перетаскивания готовых блочков из библиотек, чаще всего результат оказывается неудовлетворительным. В лучшем случае модель просто отказывается считаться. В худшем случае она выдает какой-то бредовый результат, но автору уже трудно поверить в то, что проблема не в софте, а в его кривых руках.
Поэтому я убежден, что по крайней мере на начальном этапе просто необходимо прописывать все уравнения. Этим и займёмся.
Первое правило: «Дроби задачи на подзадачи!»
Что мы хотим получить в итоге? Наверное, график зависимости перемещения плунжера x от времени t. Так давайте и начнем описание с уравнения движения этого плунжера:
Здесь нет ничего нового для тех, кто учился хотя бы до 6-го класса школы. Разве что производные заменены точками для удобства. Единственное на что необходимо обратить внимание, это на выбор положительного направления перемещения и на знаки действующих сил.
На рисунке видно, что в качестве положительного направления я выбрал перемещение плунжера вправо. Тогда сила со стороны жидкости в уравнении будет со знаком «плюс», сила со стороны пружины и демпфера со знаком «минус». Вот и всё.
К черту формулы! Даешь моделирование!
Поскольку мы моделируем в SimInTech, то что бы не откладывать в долгий ящик, мы можем начинать создавать модель, в полном соответствии с правилом 1, решаем задачу по частям сначала – плунжер с пружиной.
Открываем SimInTech и создаем новый проект общего вида (Главное меню Файл → Новый проект → Схема модели общего вида).
Рисунок 2. Задание глобальных параметров расчета
Так же выполним расчет площади проходного сечения. Площадь мы рассчитываем в секции инициализации, которая выполняется только один раз при старте расчета.
Константы и переменные, заданные в данном окне, доступны в любой части проекта.
Рисунок 3. Схема модели плунжера
Рисунок 4. Настройки параметров ступеньки
Рисунок 5. График ступеньки
Таким образом, уравнения движения примут вид:
Рисунок 6. Модель плунжера с пружиной
input P; – вход в блок (давление),
оutput x; – выхода из блока.
init x=0, v=0; – объявление динамических переменных и присвоение им начальных значений;
Дальше идет текст, который выполняется на каждом шаге моделирования.
В принципе текст на языке программирования практически повторяет систему уравнений, где производные dx(t)/dt и dv(t)/dt обозначены как x’ и v’.
Рисунок 7. График перемещения плунжера
Фактически это:
Третье правило моделирования: При любых непонятных результатах уменьшай шаг интегрирования!
Рисунок 8. Настройка шага интегрирования
Рисунок 9. Результат при максимальном шаге 0,01.
Решение задачи по частям дает возможность нам проверить правильность физического моделирования, путем постановки численного эксперимента.
Рисунок 10. Результат при Btr = 100
Рисунок 11. Результат при m = 1000
Pst – давление статическое;
x_st – перемещение поршня (сажание пружины);
Pst*Ap = Cpr*x_st или x_st = Pst*Ap/Cpr.
Рисунок 12. Проверка конечного положения плунжера
Получив и проверив модель плунжера с пружиной, можно переходить к модели камеры.
Видно, что входным сигналом для модели плунжера является давление в рабочей камере. Неплохо было бы знать это значение давления в рабочей камере. И тут уже появляется что-то новенькое. Оказывается, то что нам рассказывали в школе и на младших курсах про несжимаемость жидкости — враньё. На самом деле она сжимается, особенно в гидроприводе с давлением от 160 бар и выше.
Да, я знаю, что вы сейчас в глубоком шоке от этой новости, но нужно как-то с этим дальше жить и описывать этот процесс уравнениями. На мой взгляд, удобнее всего это описывается следующим образом:
Вывести это выражение нетрудно из формулы для определения объемного модуля упругости:
Логично предположить, что давление будет меняться тем быстрее, чем выше модуль упругости рабочей жидкости E, и тем медленнее, чем больше объем этой жидкости V. Поэтому модуль упругости у нас в числителе, а объем — в знаменателе. В скобки я поместил алгебраическую сумму расходов. В данном случае мы имеем дело с расходом через дроссель Q и с геометрическим расходом от перемещения плунжера. Положительное значение расхода Q при прочих равных будет приводить к росту давления (положительная скорость изменения давления), а положительная скорость перемещения плунжера к падению давления. Поэтому расход через дроссель в уравнении со знаком «плюс», а геометрический расход со знаком «минус».
Объем камеры в свою очередь можно описать формулой:
На самом деле, влияние изменения объема жидкости очень несущественно, и во избежание лишних ошибок (например, при отрицательных x), лучше принимать просто постоянный объём, равный половине разницы объёмов в конечном и начальном положениях.
Но мы его посчитаем честно.
Ко мне часто приходят студенты, которые не первые сутки бьются над своей моделью, которая выдаёт какой-то бред в виде астрономических значений давления, нереальных перемещений и т.п. Очень часто мне бывает достаточно примерно одной минуты «общения» с моделью, чтобы она заработала. И дело тут не в моей гениальности, а в том, что почему-то около 80% ошибок у начинающих «моделистов» приходятся именно на неправильную расстановку знаков в уравнении баланса расходов (уравнении сжимаемости жидкости). Я не был исключением. Мне, насколько я помню, понадобилась где-то неделя, чтобы найти в своей первой модели гидропривода эту ошибку.
А поскольку у нас модель плунжера в SimInTech уже отлажена, более того, у нас есть возможность проверить положение штока, мы не будем тратить недели на поиск ошибок.
Рисунок 13. Константы в скрипте программы
Рисунок 14. Модель камеры цилиндра
Рисунок 15. Модель плунжера с добавленных выходом - скоростью
Рисунок 16. Общая модель цилиндра и камеры
Но можно включить голову и вспомнить, что на предыдущем этапе мы подавали на вход модели плунжера давления ступенькой с 200е5 Па (200 бар). Теперь нам нужно из этого блока подать такой расход, чтобы в камере сформировалось давление 200 бар.
Если использовать блок ступенька, то в момент его включения начнет подаваться расход, и он будет постоянным в течение всего времени моделирования, а для требуемого повышения давления мы должны подать в камеру расход только на некоторое время, достаточное для создания давления 200 бар, и после этого прекратить подачу.
Рисунок 17. Настройки источника расхода в камеру
Рисунок 18. Результаты расчета первое приближение
Рисунок 19. Результаты моделирования равномерной подачи в камеру
Теперь нам интересно сравнить модель плунжера с пружиной, которую мы создали на первом этапе и ту же модель, но уже подключённую к камере. Поскольку первую модель мы нагружали ударной нагрузкой (ступенькой), то для формирования похожего импульса, необходимо быстро подать в камеру объем, который необходим для создания такого же давления, но за более короткое время. Можно попробовать сократить время импульса, например в 10 раз, и увеличить в 10 раз расход.
Скопируем блок плунжера с пружиной и подадим на него ступеньку 200 бар.
Рисунок 20. Сравнение модели плунжера с камерой и без камеры
Видно, что у нас положение плунжера примерно соответствует полученному при отдельном моделировании. Таким образом, мы с помощью SimInTech решили еще одну подзадачу.
Остался последний рывок!
Ну вот мы и подходим к последнему уравнению, которое описывает расход через дроссель:
f – площадь сечения дросселя;
μ – коэффициент расхода;
pn–давление нагнетания;
p – давление в камере цилиндра.
В этой формуле тоже нет ничего нового для тех, кто хотя бы пол семестра изучал курс гидравлики. Единственная поправка, которую нужно внести — это учёт теоретической возможности обратного тока рабочей жидкости в случае отрицательной разницы давлений (например, когда на поршень действует сила больше, чем может противопоставить сила со стороны рабочей жидкости). Без этого мы рискуем получить отрицательное подкоренное выражение.
Рисунок 21. Список констант проекта
Рисунок 22. Программа блока дроссель
После этого можно соединить на схеме: выход расхода соединить с камерой, а на вход нагнетания подать ступеньку с 0 до 200 бар, как мы делали при создании плунжера с пружинкой. Общая схема получится как на рисунке (Рисунок 23).
Рисунок 23. Схема моделирования и результат расчета
Как удобнее создавать модель – из блоков или написанием кода? Раньше я, не задумываясь, ответил бы что, конечно, лучше из блоков. «Язык программирования» надо использовать только тогда, когда требуемых блоков нет.
Рисунок 24. Модель в виде схемы
Рисунок 25. Отладка программы в блоке «Язык программирования»
Поэтому старый добрый холивар, что лучше схема или текст программы уже не актуален. Если у вас SimInTech – используете то, что вам больше нравится, и будет вам счастье.
Но если вам нужно, чтобы вашим результатом могли пользоваться другие специалисты, которые не имели счастья программировать или рисовать схемы SimInTech, следует стремиться к тому, чтобы результат был максимально приближен к реальной принципиальной схеме устройства.
Чем хороша принципиальная схема? Каждый элемент этой схемы, это устройство, которое описывается паспортными данными завода-изготовителя если конечно производитель их знает и предоставляет (розовая мечта разработчика).
Другими словами, камера и плунжер с пружиной должны быть объединены в один элемент. Косвенным свидетельством правильности такого объединения является то, что площадь сечения плунжера используется и в уравнениях камеры, и в уравнениях плунжера.
Для того, чтобы превратить расчетную схему в принципиальную, мы воспользуемся блоком «Субмодель».
Поместим 2 блока на схему. Один из них подпишем «Гидроцилиндр», другой «Дроссель».
Рисунок 26. Настройка свойств блока
Рисунок 27. Настройка параметров блока
Рисунок 28. Схема блока «Гидроцилиндр»
В нашем случае дроссель рассчитывает расход и передает его в камеру по контакту А, но ему для расчета нужно давлении в камере. Поэтому мы забираем расход и отдаем в контакт B. А на схеме у нас одна линия.
Рисунок 29. Схема блока дроссель
Рисунок 30. Свойства блока дроссель
Рисунок 31. Параметры блока дроссель
Рисунок 32. Расчет площади сечения дросселя в его модели
Вместо непонятных линий связи, мы получили принципиальную схему, где есть источник давления, дроссель, и гидроцилиндр (картинки, конечно, я поменял).
Рисунок 33. Расчётная схема, приведенная к принципиальной
Рисунок 34. Диаметр через объявленную константу d
Рисунок 35. Влияние уменьшения диаметра плунжера в 2 раза
Мы уже рассмотрели три способа создания модели.
На самом деле 2, создание принципиальной схемы, это просто оформительские изыски, при этом внутри блоков принципиальной схемы, могли быть как блоки на языке программирования, так и схемы из стандартных блоков. А можно их и сочетать: например, дроссель сделать на базе блока типа «Язык программирования», а гидроцилиндр собрать из блоков в синей и зеленой рамке на рисунке 23, или наоборот.
Но оба этих варианта для расчета используют готовые методы интегрирования, предоставляемые SimInTech. Но что делать, если мы хотим сами своими руками интегрировать, как настоящие профессионалы? Нам что, нужно бросать SimInTech и брать в руки фортран? Конечно нет!
Не спешите кидаться к учебнику мат. анализа, он нам не пригодится, ведь у нас в арсенале есть большой выбор численных методов решения подобных дифференциальных уравнений. Самый простой из них — метод Эйлера. Суть этого метода заключается в том, что для начала нужно прикинуться валенком и представить, что производная — это не предел отношения приращения функции к приращению её аргумента, а просто отношение разностей (по-научному это называется переходом к конечным разностям). Что это значит? Что, например, первое уравнение системы:
Если же объяснять совсем по-простому, то система уравнений в форме Коши, это когда слева стоят производные (скорости изменения величин), а справа формулы для их вычисления. Что бы решить систему методом Эйлера, нам нужно знать начальное состояние Х10 ... XN0 (оно известно).
Из системы в форме Коши мы можем посчитать скорости изменений всех величин V10 ... VN0 в начальный момент времени (системы уравнений).
А теперь, главное предположение, мы выбираем шаг таким маленьким Δt, что все скорости в системе не меняются в течение шага интегрирования. И тогда любая величина на следующем шаге будет равна Х11 = Х10 + V10 × Δt (время на скорость изменения).
Ура! Мы получили новые значения Х11 .. XN1! Повторим шаг. С божьей помощью из уравнений Коши мы получили новые значения скорости; и так мелким шагами, пока не посчитали весь процесс.
Это простой, но работающий способ! Можно будет хоть на калькуляторе посчитать значения ровно для такого количества шагов, на которое хватит терпения. Но лучше, конечно, доверить это рутинное занятие вычислительной машине. Можно написать цикл на C++, в Delphi, а мы сделаем это в SimInTech.
Рисунок 36. Объявления констант и переменных
Рисунок 37. Подготовка первого шага
Рисунок 38. Цикл расчета шагов по времени
Рисунок 39. Основной текст программы
Рисунок 40. Отладка программы прямого расчета
Теперь можно выводить все варианты на один график и производить всякие сравнения и численные эксперименты.
Что самое интересное в процессе написания математической модели гидропривода? Уравнения? Составление блок-схем? Поиск ошибок? Нет! Самое интересное — это когда ты только садишься за схему и пытаешься представить, что же это будет в конечном итоге за модель. В этот момент решается для чего модель будет использоваться, насколько подробно будет описан каждый элемент, где придется влезть в теорию, где удастся использовать эксперимент. Именно эту стадию можно действительно назвать творческой. Всё остальное — так себе, рутина. О творческой составляющей математического моделирования в этой главе и поговорим.
Блок диаграмма математической модели при различных допущениях.
Упражняться будем снова на элементарной модели плунжера:
Жидкость может быть сжимаемой или не сжимаемой.
Объём камеры может быть изменяемым или постоянным.
Даже дроссель – и тот можно моделировать с учетом трубы, в которую он встроен или без её учета. Комбинация только этих четырех факторов уже даст как минимум 8 вариантов математической модели этой предельно простой схемы.
В этот раз мы подробно остановимся на двух факторах: учете массы плунжера и сжимаемости жидкости. Чего тут учитывать, спросите вы? Масса дана? Дана! Жидкость сжимаема? Сжимаема! Значит надо учитывать и то и то, потому что мы за правду! Так то оно так, да только в этом случае можно до кучи учесть гравитацию Луны и силу ветра в помещении.
На самом деле инерция и сжимаемость жидкости не всегда будут существенно влиять на процесс перемещение плунжера.
Например, при развиваемом усилии более 150 кгс и отсутствии пружины учитывать массу плунжера нужно только если она сопоставима с этим усилием. Учёт массы в 100 г только усложнит наши расчёты, но не прибавит точности. Аналогично, если давление в системе не превышает 2–5 бар, о каком учёте сжимаемости жидкости может идти речь?
Рисунок 41. Структурная схема
Рисунок 42. Переходный процесс в плунжере
Рисунок 43. Схема расчета без учета сжимаемости
[Ошибка]: "Ошибка вычисления LU-декомпозиции матрицы"
[Ошибка]: "Ошибка нахождения решения СЛАУ"
Вот так вот, мои маленькие любители моделирования, никто и не обещал, что будет легко.
Что делать? SimInTech не работает и нужно переходить на Фортран? Конечно нет! Нам на помощь приходит
Четвёртое правило моделирования: При любых непонятных результатах, когда не помогает уменьшение шага интегрирования, меняй метод интегрирования!
Нажимаем на кнопку с отверткой и молотком «Параметры расчета».
Рисунок 44. Настройка методов интегрирования
Рисунок 45. Расчет без учета сжимаемости
Но давление ведет себя явно неестественно, прыгает до 200 бар, потом падает обратно, и медленно растет. Что за хрень? Мы же ставили дроссель именно для того, чтобы давление не прыгало как во время взрыва!
Так сработал блок нелинейное уравнение F(y)=0, это блок решил, что в первый момент скачка давление в камере должно равняется давлению нагнетания, потом оно падает как только поршень начинает двигаться.
Рисунок 46. Структурная схема без сжимаемости и инерции
Рисунок 47. Результат моделирования без учета инерции и сжимаемости
Чтобы сравнить результаты, наложим их на одно поле графика:
Метод интегрирования | Адаптивный 1 |
Минимальный шаг | 1е-12 с |
Максимальный шаг | 1е-2 с |
Коэффициент ускорения расчета | 187,5 раз |
Число шагов | 1810 |
Метод интегрирования | Адаптивный неявный |
Минимальный шаг | 1е-12 с |
Максимальный шаг | 1 с |
Коэффициент ускорения расчета | 1,1 раз |
Число шагов | 321700 |
Метод интегрирования | Адаптивный 1 |
Минимальный шаг | 1е-12 с |
Максимальный шаг | 1е-2 с |
Коэффициент ускорения расчета | 1000 раз |
Число шагов | 328 |
Получается, что в нашей задаче без учета сжимаемости рабочей жидкости не обойтись, т. к. колебания системы связаны именно с этим свойством. Экзерсисы с учетом инерции, но без учета сжимаемости в данном случае себя не оправдали. Видно, что при таких допущениях решатель дает слегка рваный график давления (это может быть связано с тем, что порядок расходов — 1e−3, а порядок давлений — 1e+6) и, несмотря на это, большую вычислительную трудоемкость (даже без учета внутренних итераций).
Стоило ли городить огород, если всё равно выяснилось, что мы с самого начала всё верно учли? Конечно же так получилось, потому что я подобрал параметры системы, чтобы не выглядеть дурачком в предыдущих частях. На самом деле не всегда всё так гладко.
Скажу честно, мне не удалось вывести однозначной и простой рекомендации, в каких случаях нужно учитывать сжимаемость жидкости, а в каких — нет. Слишком уж от многих факторов зависит постоянная времени сжимаемого объёма жидкости.
Общая рекомендация такая: если сомневаетесь, учитывайте сжимаемость везде. В худшем случае немного уменьшится скорость расчёта. Если точно знаете, что масса пренебрежимо мала, не учитывайте ни сжимаемость, ни инерцию. Сэкономите сразу 2 порядка системы дифференциальных уравнений для каждого элемента.
Во всех остальных случаях нужно писать несколько разных математических моделей с различными допущениями и смотреть уже по факту.
Использование библиотеки готовых элементов
Конечно, неохота каждый раз переписывать для разных допущений уравнения, а потом переделывать структурные схемы. Для того, чтобы упростить задачу инженерам, многие производители CAE-софта совершенствуют оболочки, где математическая модель создается так же, как если бы мы собирали физическую систему, т. е. при помощи готовых блоков физических элементов.
Как создавать свои готовые блоки SimInTech, по известным уравнениям, мы показали ранее (см. подраздел «От непонятной модели к понятной принципиальной схеме»). Посмотрим, как создавать модели в SimInTech из готовых блоков.
В SimInTech есть библиотека "Гидро- и пневмосистемы". Данная библиотека постоянно дорабатывается и расширяется. В ней уже содержатся готовые элементы, в которых подготовлены порты для соединения элементов в принципиальные гидравлические схемы.
Есть так же библиотека "Механика", где содержатся элементы для моделирования механических систем. Вот давайте и соберем из разных «кубиков» готовую систему. Нам понадобятся следующие блоки:
«ГПС - Источник постоянного давления»
ГПС - Гидравлический турбулентный дроссель постоянного сечения
ГПС - Гидравлическая полость переменного объема
«ГПС - Гидромеханический преобразователь посткупального движения»
Инерция поступательного движения
Фрикционный демпфер поступательного движения
Пружина поступательного движения
"Запись в список сигналов"
Рисунок 48. Схема с использованием стандартных элементов
Линии между полостями и дросселем – это каналы течения жидкости, аналогично линия между камерой и преобразователем.
Линии между механическими элементами – это линии механической связи.
Линия между ступенькой и записью – это просто передача числа (одного сигнала).
Для удобства часть рассчитываемых параметров уже выведена в подписи блоков, их можно настраивать, добавляя и удаляя параметры. Для этого проекта мы будем использовать тот же самый набор констант (см. рисунок 20) для задания параметров элементов.
Отдельное пояснение по блоку «Запись в список сигналов». Как уже было сказано выше, блок «ГПС - Источник постоянного давления» не имеет явно входов, куда можно подключить ступеньку, для имитации скачка давления, но мы работаем в SimInTech, где можно все, от слова совсем.
Чтобы поменять давления в камере постоянного давления, мы создадим глобальный сигнал проекта. Пункт главного меню программы «Сервис/Сигналы».
Рисунок 49. Создание сигнала для давления нагнетания
Рисунок 50. Задание свойств для источника постоянного давления
Задайте все остальные параметры других блоков из списка констант (см. Рисунок 21).
Рисунок 51. Результаты расчета на схеме
Все просто. Как раз два три! Следите за руками!
Рисунок 52. Вызов графиков для стандартных объектов
Рисунок 53. График перемещения
Рисунок 54. Модель для сравнения методов
- А зачем константу оправляют на график?
Рисунок 55. Результат сравнения методов
А давайте заглянем в эти стандартные блоки и попытаемся их изменить!
Изменим камеру с переменным объемом так, чтобы она совпадала по свойствам с данными в условиях задачи.
Рисунок 56. Заглядываем под капот
Рисунок 57. Внутреннее устройство модели
Рисунок 58. Редактирование расчета свойств
Рисунок 59. Сравнения моделей после диверсии