andreev: (Крупно)
[personal profile] andreev
Как вы помните из предыдущей части, нет ничего интереснее процесса написания математической модели гидропривода. Заниматься этим можно бесконечно, по степени затягивания специалисты-наркологи давно должны были бы поместить это занятие в один ряд с Дотой, WoW и танчиками... но до сих пор не сделали этого. Почему? Ответ прост - заговор.
2015-10-08 17-43-22 Скриншот экрана.png
Корпорации распространяют миф о том, что для того, чтобы писать мат. модели нужно быть как минимум программистом, а ещё лучше - защитить диссертацию по высшей математике. Преподаватели ВУЗов, обслуживающие интересы этих корпораций, охотно поддерживают этот миф. Работает это обычно так: сначала записываются элементарные уравнения, студенту кажется, что не всё так безнадёжно и он близок к пониманию. Затем довольно быстро наносится первый удар - произвольные уравнения раскладываются в ряд Тейлора, затем от этого ряда отбрасываются некоторые члены и декларируется, что теперь мы будем иметь дело с этими новыми уравнением. После этого главное - не допустить промедления и нанести следующий удар - преобразовать получившиеся уравнения по Лапласу, перегруппировать их чудным образом и убедившись, что студенты окончательно запутались, начать рассказывать про построение блок-диаграмм. В результате студент убеждается, что математическое моделирование не для него и спокойно делает ДЗ, переписывая пример из методички, меняя цифры на свои, даже не пытаясь написать свою модель.
Пришло время раскрыть глаза миллионам обманутых людей и научить их делать свои собственные модели при помощи современного софта.
В предыдущей части мы убедились, что для того, чтобы написать мат. модель примитивного гидропривода на бумажке нужно 6 классов школьного образования и полугодичного курса машиностроительной гидравлики. Однако, мы столкнулись с барьером в виде необходимости освоения языка программирования (в маткаде большие модели особо не попишешь). В самих по себе моделях на C или Delpfi нет ничего плохого. Я сам для своей диссертации писал модель в том числе на С, т.к. там мне казалось гораздо проще сделать интерфейс и анимацию. Проблемы начинаются, когда свою модель нужно передать другому человеку, который захочет что-то в ней поменять и использовать для своих целей. Сложно требовать от инженера, чтобы помимо ГОСТов и ЕСКД он ещё освоил все премудрости грамотного и лаконичного программирования, а без этого получается примерно как на этой картинке:
В этот момент на помощь приходит CAE-софт, который позволяет существенно упростить визуальное восприятие математических моделей. Началось всё с того, что технические устройства стали описывать передаточными функциями, которые в соответствии с уравнениями математической модели преобразовывали входной сигнал. Теперь гидроцилиндр описывался не кучей уравнений, а прямоугольником, с двумя стрелочками на входе (расход и сила), и двумя на выходе (перемещение поршня и давление). К этому прямоугольничку можно было присоединить такой же прямоугольничек распределителя, к распределителю - блок насоса и так далее. Логическим продолжением было дорисовать в квадратиках схематичное обозначение гидроцилиндра, вместо абстрактных входных стрелок с расходами, давлениями и другими параметрами, нарисовать гидравлические и механические связи и... вуаля! теперь для того, чтобы написать мат. модель уже достаточно лишь внимательно перенести гидросхему на поле соответсветствующей программы. Казалось бы! Я уверен, что рано или поздно так всё оно и будет. Более того, может быть скоро в CAE программы мы будем загружать отсканированную гидросхему с масляными пятнами, а на выходе будем получать исчерпывающую визуализацию её работы.
Пока что, если проводить аналогии с автомобилями, большинство CAE программ находятся примерно на уровне Жигули шестёрки. Т.е. для того, чтобы поехать, уже не нужно быть инженером-механиком и самостоятельно сконструировать свою самодвижущуюся тележку, но ещё недостаточно быть блондинкой, которая знает на какую кнопку нажать и на какую из двух педалей жать. Нужно знать как отрегулировать карбюратор, если из выхлопной трубы пошёл белый дым, нужно понимать почему в салоне иногда воняет сцеплением, идеально - если есть где перебрать коробку, если вдруг появился треск при переключении передач и так далее.
Таким образом, для того, чтобы писать математические модели даже с использованием самого современного софта, нужно иметь представление о том как эта программа работает с тем, чтобы в тот момент, когда она откажется считать и выдаст ошибку, знать какой "винтик" крутить. Этим я и предлагаю заняться.

Для начала мы научимся превращать уравнения в структурные схемы.

Начнём, как обычно, с конца и нарисуем по шагам структурную схему массы на пружине с демпфером, которая описывается уравнением:
2015-10-02 14-40-43 Особенности обучения студентов основам математического моделирования технических систем на примере гидр.png
Самое простое, что здесь можно сделать для начала - установить взаимосвязь между производными перемещения:
2015-10-07 13-42-44 Основы мат моделирования_рисунки -  Visio профессиональный.png
Что может быть логичнее схемы, которая показывает, что для получения перемещения нужно два раза проинтегрировать ускорение? Разве только аналогичная схема для определения ускорения:
Складываем с учётом знаков все силы (со стороны жидкости, пружины и демпфера), делим на массу и получаем ускорение.
Теперь собираем всё вместе, вычисляя силы со стороны пружины и демпфера через перемещение и скорость соответственно:
Вот так хитро мы используем производные, которые получаем интегрированием. Удивительно, но это действительно работает! Чтобы убедиться в этом, дело остаётся за малым: дополнить схему частью с сжимаемостью жидкости, которая описывается следующим уравнением:
2015-10-02 14-52-39 Особенности обучения студентов основам математического моделирования технических систем на примере гидр.png
Здесь всё опять предельно наглядно: давление получаем интегрированием из производной, производную из произведения коэффициента E/V и алгебраической суммы расходов. Геометрический расход, как вы поняли, мы вычислим опять из производных, с расходом Q придётся разобраться дополнительно. Наиболее логичным вариантом выглядит следующий:
Если ограничиться рассуждениями на уровне схемы, здесь можно было бы остановиться, собрать всю схему и завершить этим пост. Но мы хотели бы всё-таки решить эту задачу, а значит настало время постепенно перейти к вопросам численных методов.
Все мы помним, что компьютер не понимает что такое квадратный корень. Чтобы заставить его сделать эту элементарную операцию нужно использовать какой-то итерационный метод (например, метод Ньютона). Нашему решателю и без того хватает проблем с дифференциальными уравнениями, а мы предлагаем ещё нагрузить его итерационной задачкой. Зачем нужно это делать, когда можно заменить вычисление корня обычной линейной интерполяцией?
2015-10-07 15-00-19 Основы мат моделирования_рисунки -  Visio профессиональный.png
В итоге мы просто забиваем таблицу зависимости расхода от давления с интервалом, например, 1 бар, а все остальные значения получаются путём пары элементарных операций.
Остаётся только собрать всю схему целиком:
Вы скажете: «просто говорить «просто», покажи как это сделать в реальности и будете правы.
Но вообще-то, это самое неблагодарное дело – писать гайды к каким бы то ни было программам... Когда я перечитываю своё пособие по началу работы в симулинке, которое писал 4 года назад, у меня из глаз начинает идти кровь, потому что за это время матлаб стал воспринимать кириллицу, сделал более удобный интерфейс и добавил кучу новых фишек. Поэтому, если Вы начнёте учиться работать в матлабе по той моей методичке, вы будете использовать только лишь процентов 60 от его реальных возможностей.
Но совсем без примеров, похоже, не обойтись, поэтому приступим.

Во-первых, нужно собрать саму схему. Результат в MATLAB R2015a должен получиться такой:
Конечно, тысячи юных любителей теории функции комплексного переменного сейчас выплюнули свой кофий прямо в монитор от возмущения при виде интегрирующего звена на основе комплексной переменной s. Не могу не разделить вашего негодования. Действительно, ну какое может быть преобразование по Лапласу, когда у нас в системе есть нелинейность? Именно поэтому в своих схемах я в качестве блока интегрирования использовал значок интеграла. Наши американские друзья и партнёры не так привередливы, поэтому по привычке лепят везде оператор s. Простим им это и продолжим…
Как видите, я не забиваю в блочки никаких цифр. Если вы не хотите получить сюрпризов в процессе работы с моделью, связанных с тем, что изменили, например, площадь в одном месте, а в другом забыли, нужно взять за правило указывать переменные всегда в одном месте. Благо, в симулинке такое место есть и имя ему Model Workspace (вызывается нажатием соответствующей иконки в основном окне симулика:
Здесь необходимо лишь обратить внимание на то, что, естественно, все параметры должны быть указаны в системе СИ.
Интерес так же представляет таблица с характеристикой дросселя:
В нижней строке задаётся ряд от -200 бар до 200 бар с шагом в 1 бар (по-моему, достаточная для нашей задачи точность). Значение расхода не обязательно считать на калькуляторе и вность в таблицу. Матлаб замечательно относится к формулам, если правильно их записывать. В нашем случае имеет место перемножение двух векторов, а значит мы должны объяснить матлабу, что перемножать их нужно почленно. Для этого перед знаком умножения ставится точка, вот так: ".*".
Кроме того, в поле настроек каждого интегратора можно ввести начальные условия, которые, как помните, для нашего случая нулевые:

После того как обозначены все переменные, есть большой соблазн нажать на кнопку «play» и посмотреть, что же получится. Не торопитесь. Помните, что мы с вами – водители «жигулей». Разве поедет водитель «жигулей» на дачу, не разобравшись перед этим как перебирается карбюратор? Конечно же, не поедет. Потому что кому охота разбираться с этим где-нибудь в поле или в лесу? Вот и мы давайте сначала разберёмся как «машина» будет считать нашу систему. Для этого нажмём на шестерёнку на панели. Появится окно выбора решателя.
Для начала давайте найдём здесь что-то, в чём мы уже разбираемся. Для этого выбираем тип решателя с постоянным шагом (Fixed-step) и ищем в списке решателей уже родной нам метод Эйлера (ode1).
Чем хорош этот метод - в настройках решателя всего одно окошко с указанием шага. Давайте попробуем получить такой же результат как при решении этой задачи в маткаде в прошлой части. Для этого последовательно промоделируем систему для шага 1, 2 и 3 мс.
Результат получится следующий:
Что-то знакомое, правда? Вот что получалось в маткаде:
2015-10-02 15-32-55 Особенности обучения студентов основам математического моделирования технических систем на примере гидр.png
Выделяем нужный сигнал (в нашем случае - перемещение x). В Simulation Data Inspector просим застримить выбранный сигнал, как показано на рисунке:
После этого все графики будут отображаться в этом окне:

В итоге мы получили точно такое же решение, поэтому теперь мы можем доверять матлабу решение диффуров численными методами. В такой ситуации грех не попробовать какие-нибудь другие методы. Конечно, следующим мы выберем любимый всеми метод Рунге-Кутты 4-го порядка (ode4). Логично предположить, что точность у него при том же шаге будет на несколько порядков выше, чем у метода Эйлера, но всё-таки интересно сравнить результаты:
Верхнее поле - наложенные на одно поле решения методом Эйлера и методом Рунге-Кутты 4-го порядка с шагом 0,1 мс. На глаз смотрится идеально, но разница этих результатов (красная линия на нижнем поле) говорит, что это совсем не так.
Я хотел бы, чтобы результат метода Эйлера отличался от истины не более чем на 0,1% (относительная погрешность). Для этого я провожу салатовую линию на нижнем поле, которая обозначает допустимое для меня значение относительной погрешности. Всё что ниже этой линии - ок, всё что выше - никуда не годится. Меняется она по времени из-за того, что, понятное дело, 0,1% от 1 мм меньше, чем 0,1% от 8 мм. На то это и относительная погрешность. Этот параметр всем хорош для оценки точности, да только в области нулевых значений будет очень уж привередлив. Зачем мне при перемещении 0,1 мм точность 0,1 мкм? Мне хватит и одного микрометра. Поэтому я ввожу значение абсолютной погрешности на уровне 1e-6. Таким образом я не буду заставлять решение укладываться в область ниже этого значения. Поэтому салатовая линия в самом начале - горизонтальная прямая.
Видно, что в начале переходного процесса мы очень часто вылазим за пределы допустимой погрешности, зато потом (после 0,2 с) находимся глубоко под ней. В жизни я могу многое понять, но никогда не пойму зачем в такой ситуации всё время считать всё с одним шагом??? Очевидно же, что в начале переходного процесса шаг нужно сделать меньше (для лучшей точности), а после 0,2 секунды увеличивать (для увеличения скорости расчёта). Почему так не сделать? Только из лени.
Благо, матлаб позволяет даже ленивым людям не совершать бессмысленных действий и предоставляет в качестве решателя по умолчанию решатель с переменным шагом - ode45. Что он делает? Он решает диффур сначала методом Рунге-Кутты 4-го порядка, а потом 5-го порядка, сравнивает ошибку и на основе этой ошибки увеличивает или уменьшает шаг. И всё что ему для этого нужно - задать значения относительной и абсолютной погрешности, о которых я рассказывал выше. Смотрите сами:

В эти окна я вбил те самые значения абсолютной и относительной погрешностей. Особые гурманы могут назначить значение максимального, минимального и начального шага по времени.
А вот результат решения:

Разве не гениально?
Теперь мы умеем не просто писать математическую модель элементарного гидропривода, но и решать эту задачу гениальными методами! В следующих частях мы поговорим о допущениях при составлении математических моделей, ну а дальше и до модели настоящего следящего гидропривода недалеко!

Date: 2016-05-07 09:08 pm (UTC)
From: (Anonymous)
Спасибо вам большое за ваши статьи. Вы отлично описали много волнующих меня вопросов и полноценно и простым языком на них ответили. Буду всегда следить за вашими работами и самосовершенствоваться благодаря вашим статьям. Я начинающий гидравлик, и еще более начинающий пользователь Matlab, и возник у меня вопрос, я ни как не могу вывести графики, как показано у вас в примере. Возможен ли вывод таких графиков в Matlab 14a? Т.е. вывод всех графиков в одном окне?

Date: 2016-05-08 07:23 am (UTC)
From: [identity profile] engineerandreev.livejournal.com
Спасибо за отзыв!
До версии 2015 я всё время с этим мучился. Для отладки удобно использовать блок Mux, объединяющий несколько сигналов в вектор. Если вектор завести в Scope, получится как раз несколько переходных процессов в одном окне.
Для оформления я экспортировал сигналы в Workspace и строил графики стандартными инструментами матлаба. На эту тему есть много примеров в гугле.

Profile

andreev: (Default)
andreev

December 2016

S M T W T F S
    123
45678910
11121314151617
18192021222324
25262728293031

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 27th, 2017 08:29 am
Powered by Dreamwidth Studios