От записи уравнений к результату

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

В нашем случае задача будет предельно проста:

Имеется цилиндрический плунжер диаметром 10 мм, с приведенной массой 100 кг, он работает на пружину жесткостью 200 Н/мм и демпфер с коэффициентом вязкого трения — 1000 Н/(м/с). Нужно посмотреть как он будет перемещаться, если мы ступенькой подадим в полость с начальным объемом 20 см3 давление 200 бар. Чтобы плунжер не превратился в пулю, поставим между источником давления и камерой дроссель диаметром 0,2 мм.

Рисунок 1. Гидравлическая схема для моделирования.

С чего же начать? Многим может показаться, что нужно начать с выбора софта, в котором можно моделировать такую систему. Это не так. На самом деле, начать нужно с листа бумаги и карандаша. Если при помощи этих инструментов внимательно записать уравнения, то потом можно будет решить их в любом софте.

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

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

Первое правило: «Дроби задачи на подзадачи!»

В нашем случае можно выделить несколько физических процессов, поддающихся математическому описанию:
  • прохождение рабочей жидкости через дроссель (дросселирование);
  • её сжатие в рабочей полости плунжера;
  • перемещение массы с учетом взаимодействия с пружиной и демпфером.
Второе правило: «Начинай с конца!»

Что мы хотим получить в итоге? Наверное, график зависимости перемещения плунжера x от времени t. Так давайте и начнем описание с уравнения движения этого плунжера:

где m - масса плунжера, Ap – площадь плунжера, Сpr – жесткость пружины, btr – коэффициент вязкого трения, p – давление в камере.

Здесь нет ничего нового для тех, кто учился хотя бы до 6-го класса школы. Разве что производные заменены точками для удобства. Единственное на что необходимо обратить внимание, это на выбор положительного направления перемещения и на знаки действующих сил.

На рисунке видно, что в качестве положительного направления я выбрал перемещение плунжера вправо. Тогда сила со стороны жидкости в уравнении будет со знаком «плюс», сила со стороны пружины и демпфера со знаком «минус». Вот и всё.

К черту формулы! Даешь моделирование!

Поскольку мы моделируем в SimInTech, то что бы не откладывать в долгий ящик, мы можем начинать создавать модель, в полном соответствии с правилом 1, решаем задачу по частям сначала – плунжер с пружиной.

Открываем SimInTech и создаем новый проект общего вида (Главное меню Файл → Новый проект → Схема модели общего вида).

Сначала запишем в качестве констант исходные данные, которые нам нужны для расчета. На схемном окне проекта вызовем редактор скрипта, здесь мы запишем все константы из исходных данных (см. Рисунок 2).

Рисунок 2. Задание глобальных параметров расчета

Константы задаются через запятую, после последней ставится точка запятой. (см. Рисунок 2). Для того, чтобы не путаться в дальнейшем, все константы заданы в стандартных единицах измерений.

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

Константы и переменные, заданные в данном окне, доступны в любой части проекта.

Разместим на схеме блоки Ступенька из закладки «Источники», Язык программирования из закладки «Динамические» и Временной график из закладки «Данные». Схема должна получится сходной с рисунком (Рисунок 3).

Рисунок 3. Схема модели плунжера

С помощью блока ступенька будем моделировать входное воздействие, для модели плунжера это давление.
На 1 секунде расчета значение будет меняться с 0 до 200 бар. Для этого в свойствах блока зададим значения, указанные на рисунке (Рисунок 4).

Рисунок 4. Настройки параметров ступеньки

Если сейчас запустить модель на расчет (кнопка «Пуск»), то график отразит ступеньку исходных данных, блок «Язык программирования», по умолчанию просто передает сигнал без изменений:

Рисунок 5. График ступеньки

В блоке «Язык программирования» можно записывать уравнения динамики объекта в форме Коши. Прежде чем перейти к записи модели преобразуем уравнение (*), в систему двух уравнений, добавив новую переменную – скорость v(t) = dx(t)/dt.

Таким образом, уравнения движения примут вид:

Из такой системы уже можно создавать модель. Входным параметром модели будет давление p(t), выходным параметром будет перемещение плунжера х(t).

В модели будут две динамические переменные х(t) и v(t), начальные значения этих переменных принимаем равными 0. Такую систему уже можно записывать на языке программирования, как показано на рисунке (Рисунок 6).

Рисунок 6. Модель плунжера с пружиной

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

input P; – вход в блок (давление),

оutput x; – выхода из блока.

init x=0, v=0; – объявление динамических переменных и присвоение им начальных значений;

Дальше идет текст, который выполняется на каждом шаге моделирования.

В принципе текст на языке программирования практически повторяет систему уравнений, где производные dx(t)/dt и dv(t)/dt обозначены как x’ и v’.

Если сейчас запустить процесс моделирования, то скорее всего вы получите график как на рисунке (Рисунок 7). Как говорится упс! У нас получилась полная хрень, ни на что не похожая. Данный график наглядно иллюстрирует необходимость соблюдения правила номер раз. «Дроби задачи на подзадачи!» Поскольку мы решаем уравнение, описывающее движение массы на пружинке, мы приблизительно понимаем, что ожидать. Должен быть колебательный процесс, который из-за наличия силы трения должен затухать. Мы же видим колебания, которые ведут себя очень странно.

Рисунок 7. График перемещения плунжера

Главное здесь не пугаться и не впадать в панику, таких бессмысленных и беспощадных графиков вы еще насмотритесь. Первое, что рекомендуем сделать – изменить шаг интегрирования.

Фактически это:

Третье правило моделирования: При любых непонятных результатах уменьшай шаг интегрирования!

Нажмите кнопку с молотком и отверткой на схемном окне, найдите в параметрах расчета максимальный шаг моделирования и измените его на 0.01 (см. Рисунок 8). Закройте окно настроек нажав кнопку ОК.

Рисунок 8. Настройка шага интегрирования

Если запустить расчет с такими настройками (как показано на рисунке (Рисунок 8)), то результат буде более похож на правду (см. Рисунок 9).

Рисунок 9. Результат при максимальном шаге 0,01.

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

Решение задачи по частям дает возможность нам проверить правильность физического моделирования, путем постановки численного эксперимента.

Например, если уменьшить коэффициент вязкого трения в 10 раз, то колебания должны затухать дольше. Изменим данный параметр в основном скрипте модели (см. Рисунок 2) и при моделировании получим график как на рисунке (Рисунок 10):

Рисунок 10. Результат при Btr = 100

Если увеличить массу плунжера в 10 раз, оставляя все остальные параметры заданными изначально, то колебания будут происходит с меньшей частотой, и время переходного процесса так же увеличится, что мы наблюдаем на рисунке (Рисунок 11).

Рисунок 11. Результат при m = 1000

Еще одним способом проверки правильности модели будет сравнение конечного перемещения, полученного в модели и рассчитанного из условия равновесия системы. В случае равновесия сила, действующая на плунжер (Pst*Ap), уравновешивается силой сжатой пружины (Cpr*x_st).

Pst – давление статическое;

x_st – перемещение поршня (сажание пружины);

Pst*Ap = Cpr*x_st или x_st = Pst*Ap/Cpr.

Расчет конечного положения плунжера можно выполнить прямо в окне блока «Язык программирования» (см. Рисунок 12).

Рисунок 12. Проверка конечного положения плунжера

Запись расчета стационарного положения можно внести прямо в тело блока, и при нажатии на кнопку «калькулятор» будет выведено окно с значениями переменных скрипта, двойной клик по линии связи на выходе из блока покажет значение сигнала на линии связи. Мы убеждаемся, что переходный процесс завершился с таким же значением, как и статический расчет (см. Рисунок 12). Таким образом можно убедиться, что модель выходит на правильные значения положения и при 150 бар и при 250 бар.

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