aeshnik


Уменьшая скорость роста энтропии вселенной


Previous Entry Share Next Entry
Настройка модели Simulink для симуляции в реальном времени
aeshnik
Посты, описывающие работу с другими подсистемами, в соответствии с жизненным циклом системы:
1. моделирование механических систем в SimMechanics;
2. определение требований к подсистеме;
3. выбор варианта структурной реализации исполнительного устройства;
4. этот пост.
===

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

Сейчас у нас есть работающая модель объекта (элерона, гидропривода), которой мы довольны. У нас есть настроенная модель системы управления (выбрана структура системы управления, заданы параметры системы управления). Мы хотим использовать эти модели вне среды виртуальной симуляции. Например, у нас уже есть запрограммированный в соответствии с моделью системы управления контроллер, но нет объекта. И мы хотим проверить его работоспособность, учитывая обмен данными с настоящим объектом. Для этого нам нужна аппаратура, которая способна исполнять модель объекта (она уже есть у нас) в режиме жесткого реального времени. Эта аппаратура должна обладать такими интерфейсами, какие есть у реального объекта, чтобы контроллер "думал", что он общается с реальным объектом.

Чтобы "вынимать" машиночитаемые модели из среды MATLAB/Simulink, существует генератор кода. Он выдает описание, соответствующее модели (тут нужно отметить, что это соответствие вообще-то нужно подтверждать, и для этого есть специальные практики; но об этом мы не говорим в этом посте), на языке C. Это описание компилируется и исполняется в режиме реального времени. Проблема с нашей моделью в том, что в ней присутствуют компоненты, которые описаны при помощи так называемой жесткой системы дифференциальных уравнений. Это такая система, в которой есть существенно (на несколько порядков) отличающаяся по скорости динамика. Как правило, физические (акаузальные) модели все такие. если их решать обычными численными методами, то чтобы обеспечить точность, необходимо выбирать слишком маленький шаг интегрирования (из-за быстрой динамики). Это здорово замедляет вычисления, и не то, что о реальном времени, о простой виртуальной симуляции речи идти не может. Поэтому для таких систем и рекомендуют применять специальные неявные методы. Они могут "игнорировать" быструю, но не слишком влияющую на результат динамику. Однако, они более требовательны к вычислительным мощностям, чем явные методы.

Всё это верно и для Simulink. На всех предыдущих шагах ликбеза с физическими моделями мы применяли неявные методы. Но заметим, что применяли мы их ко всей модели системы, тогда как жесткими уравнениями описывается только ее часть. Вычислительный ресурс - довольно дорогое удовольствие, и вряд ли правильно тратить его на обсчет неявными методами того, что можно считать явными. Кроме того, всё это время мы использовали численные методы с переменным шагом (они обеспечивают заданную точность, но шаг интегрирования может быть какой угодно). Это неприемлемо для вычислений в реальном времени. Всё это надо перенастроить перед тем, как делать из модели код (то есть, выносить ее из среды виртуального моделирования для запуска на другой платформе в реальном времени). Этим и займемся.

У нас есть модель гидравлического исполнительного устройства, системы управления и механическая модель элерона. До сих пор мы использовали метод решения дифференциальных уравнений с переменным шагом, гарантирующий определенную точность вычислений. Теперь мы хотим запустить эту модель в режиме жесткого реального времени. Для этого необходимо использовать метод с фиксированным шагом.
Рис. 1. Модель, подготовленная для виртуальной симуляции.
Рис. 1. Модель, подготовленная для виртуальной симуляции.

Однако, часть нашей модели описывает численно жесткую задачу. Нам нужно выбрать такие настройки методов решения уравнений, которые позволят исполнить модель системы в режиме жесткого реального времени. Для этого мы будем использовать локальные методы Simscape (Simscape Local Solvers). Мы могли бы попробовать считать модель всей системы в реальном времени, используя неявные методы с фиксированным шагом. Однако для этого нам потребуется гораздо больше вычислительных ресурсов, чем на самом деле нужно для обсчета нежесткой части нашей системы.
Рис. 2. Возможный вариант выбора численных методов, неприемлемый из-за нагрузки на вычислитель.
Рис. 2. Возможный вариант выбора численных методов, неприемлемый из-за нагрузки на вычислитель.

Поэтому мы применим неявный метод с фиксированным шагом к численно жесткой задаче, соответствующей физической сети нашей модели. К остальной части модели мы применим явный метод.
Рис. 3. Правильный выбор методов решения для симуляции в реальном времени.
Рис. 3. Правильный выбор методов решения для симуляции в реальном времени.

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

У нас есть трехмерная механическая модель элерона, описанная в SimMechanics. Гидравлическое исполнительное устройство описано в SimHydraulics. В модели есть оборотные клапаны, трубопроводы, предохранительные клапаны и цилиндр двухстороннего действия. Модель системы управления описана в Simulink.
Рис. 4. Блок-схема верхнего уровня модели системы.
Рис. 4. Блок-схема верхнего уровня модели системы.

Во-первых, запишем эталонные результаты. Эталонными мы будем считать результаты, полученные с использованием метода решения уравнений с переменным шагом ODE15s. Сохраним результаты на графике, чтобы было проще сравнивать их с результатами моделирования с фиксированным шагом.
Рис. 5. Результаты моделирования с применением методов с переменным шагом.
Рис. 5. Результаты моделирования с применением методов с переменным шагом.

Настроим модель для счета по методу с фиксированным шагом, перезапустим моделирование. Сравним вновь полученные результаты с эталонными. Видно, что результаты достаточно близки. Если изменить масштаб, можно увидеть, насколько точные результаты мы получили на самом деле.
Рис. 6. Сравнение результатов симуляции с применением разных методов интегрирования.
Рис. 6. Сравнение результатов симуляции с применением разных методов интегрирования.

Теперь мы сгенерируем C-код из модели, скомпилируем его и загрузим его на целевую платформу для исполнения в реальном времени. Для исполнения модели в реальном времени используем операционную систему xPC Target и оборудование Speedgoat. Переключим режим исполнения модели в External. Так мы сможем управлять процессом из Simulink. Запустим модель на целевой платформе. Результаты можно наблюдать на виртуальном осциллографе в Simulink и на экране Speedgoat. Но вычисления при этом идут только на компьютере Speedgoat в режиме реального времени. Добавим результаты моделирования на график.
Рис. 7. Сравнение результатов виртуальной симуляции и симуляции в реальном времени.
Рис. 7. Сравнение результатов виртуальной симуляции и симуляции в реальном времени.

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

Полезные ссылки:

Предыдущие посты по системе элерона и исполнительного устройства:

Видеодемонстрация:

?

Log in

No account? Create an account