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-го порядка, сравнивает ошибку и на основе этой ошибки увеличивает или уменьшает шаг. И всё что ему для этого нужно - задать значения относительной и абсолютной погрешности, о которых я рассказывал выше. Смотрите сами:

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

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

From:
Anonymous( )Anonymous This account has disabled anonymous posting.
OpenID( )OpenID You can comment on this post while signed in with an account from many other sites, once you have confirmed your email address. Sign in using OpenID.
User
Account name:
Password:
If you don't have an account you can create one now.
Subject:
HTML doesn't work in the subject.

Message:

 
Notice: This account is set to log the IP addresses of everyone who comments.
Links will be displayed as unclickable URLs to help prevent spam.
Page generated Sep. 20th, 2017 12:03 am
Powered by Dreamwidth Studios