Преимущества simulink как среды компьютерного моделирования
Simulink – среда динамического междисциплинарного моделирования сложных технических систем и основной инструмент для модельно-ориентированного проектирования. Его основным интерфейсом является графический инструмент для построения диаграмм и настраиваемый набор библиотек блоков. Он предлагает тесную интеграцию с остальной средой MATLAB и может либо использовать MATLAB, либо создавать сценарии из него. Simulink широко используется в автоматическом управлении и цифровой обработке сигналов для многодоменного моделирования и проектирования на основе моделей.
В сочетании с другими своими продуктами Simulink может автоматически генерировать исходный код на языке C для реализации систем в режиме реального времени. Поскольку эффективность и гибкость кода улучшаются, он становится все более широко распространенным для производственных систем, в дополнение к тому, что является инструментом для разработки встроенных систем из-за его гибкости и способности к быстрой итерации, Встроенный кодер создает код, достаточно эффективный для использования во встроенных системах.
Simulink. Начало работыМодельно-ориентированное проектирование: от концепции к коду
Модельно-Ориентированное Проектирование в SimulinkSimulink предназначен для моделирования и симуляций на системном уровне, что позволяет проводить всестороннее исследование разрабатываемой системы в единой среде проектирования.
Моделирование и симуляции позволяют провести проверку поведения системы в критических условиях или аварийных сценариях. Тем самым происходит снижение затрат на дорогостоящие физические прототипы. Проверка системы осуществляется с помощью полунатурного моделирования и быстрого прототипирования.
Модели Simulink поддерживают автоматическую генерацию кода промышленного качества на языках С, C++ и HDL. Результаты работы сгенерированного кода и модели идентичны. Следующим шагом является развертывание кода на целевом вычислителе или FPGA/ASIC.
Simulink использует преимущества MATLAB
Алгоритмы, созданные в MATLAB, не требуется переделывать для повторного использования в Simulink. Код MATLAB добавляется в блок Simulink или диаграмму Stateflow без изменений.
Так же MATLAB используется для создания наборов входных данных для симуляций систем. Симуляции масштабируются на кластеры для ускорения таких инженерных задач как перебор параметров или оптимизация, а затем их результаты анализируются и визуализируются в MATLAB.
В наши дни компьютерная математика находится на этапе быстрого развития. Она породила специальные программные средства – системы компьютерной математики (СКМ). Среди СКМ выделяется математическая система MATLAB – одна из самых эффективных среди систем для численных вычислений. MATLAB имеет мощные средства диалога, графики и комплексной визуализации вычислений. Система MATLAB предлагается разработчиками (корпорация The Math Works, Inc.), как лидирующий на рынке язык программирования высокого уровня для технических вычислений, расширяемый большим числом пакетов прикладных программ – расширений (их существует свыше сотни). Самым известным из них стало расширение Simulink,обеспечивающее блочное имитационное моделирование различных систем и устройств с применением современной технологии визуально-ориентированного программирования.
Особенностью расширения Simulink является то, что в нем реализована возможность решения линейных и нелинейных дифференциальных уравнений численными методами. Для нас это важный момент, так как мы уже говорили, что нам надо будет моделировать динамические объекты, которые описываются дифференциальными уравнениями, а получение решения многих дифференциальных уравнений часто оказывается очень громоздким, так что практическая польза от них становится весьма сомнительной или вообще отсутствует. В Simulink имеется обширный набор решателей дифференциальных уравнений без ограничение на вид. Итак, пакет расширения Simulink предназначен для математического моделирования динамических систем, представленных блок-схемой, которая называется S-моделью. Для построения функциональной блок-схемы Simulink имеет обширную библиотеку блоков и удобный редактор блок-схем. Используя наборы блоков, пользователь с помощью мыши переносит нужные блоки из библиотеки на рабочий стол пакета Simulink и соединяет линиями входы и выходы блоков. Таким образом, создается блок-схема объекта или системы, то есть модель.
S-модель является фактически программой, которую можно просмотреть с помощью редактора файлов системы MATLAB. Файлы модели имеют расширение .mdl. Однако, эти файлы довольно громоздки и могут содержать, даже для довольно простых моделей, тысячи строк программного кода. Поэтому мы в дальнейшем будем работать только на уровне блоков и составленных из них схем. Это является достоинством визуально-ориентированного программирования.
Итак, Simulink автоматизирует наиболее трудоемкий этап моделирования – он составляет и решает системы сложных алгебраических и дифференциальных уравнений, описывающих собранную функциональную схему, обеспечивая удобный и наглядный визуальный контроль за поведением моделируемого объекта.
Основы работы с пакетом Simulink
1. Запуск пакета Simulink
После инсталляции Simulink (отдельно от MATLAB или в его составе) он автоматически интегрируется с MATLAB. Внешне это выражается появлением кнопки New Simulink Model в панели инструментов системы MATLAB. При нажатии этой кнопки открывается окно браузера библиотек «Library: simulink» и окно для создания новой модели Simulink «untitled».
Рис.4.1 – Окно браузера библиотек
Можно также запустить Simulink , выполнив в командной строке MATLAB команду
Работа с Simulink происходит на фоне открытого окна системы MATLAB, в котором нередко можно наблюдать за выполняемыми операциями – если их вывод предусмотрен программой моделирования. Интеграция пакета Simulink с системой MATLAB имеет глубокий смысл. Любые манипуляции с схемой модели выполняются соответствующими командами системы MATLAB. Решение большинства задач моделирования базируются на решении сложных систем линейных и нелинейных ДУ. Наиболее эффективное решение подобных систем достигается за счет применения аппарата матричных вычислений, реализованных в системе MATLAB. Поэтому сочетание Simulink с системой MATLAB стало столь плодотворным.
2. Особенности интерфейса Simulink
Интерфейс Simulink полностью соответствует стилю интерфейса типичных приложений Windows. Меню окна Simulink содержит следующие позиции:
File –работа с файлами моделей и библиотек (их создание, сохранение, считывание и печать);
Edit –операции редактирования, работа с буфером обмена и создание подсистем;
View –управление отображением панели инструментов и строки состояния;
Simulation –управление процессом моделирования (старт, пауза, вывод окна настройки параметров моделирования);
Format –операции форматирования модели (смена шрифтов, редактирование надписей, повороты блоков, использование тени от блоков, операции с цветами линий блоков, их фоном и общим фоном)
Tools –управление видом анализа (в линейной области и в режиме реального времени).
Программа Simulink является приложением к пакету MATLAB . При моделировании с использованием Simulink реализуется принцип визуального программирования, в соответствии с которым, пользователь на экране из библиотеки стандартных блоков создает модель устройства и осуществляет расчеты. При этом, в отличие от классических способов моделирования, пользователю не нужно досконально изучать язык программирования и численные методы математики, а достаточно общих знаний требующихся при работе на компьютере и, естественно, знаний той предметной области в которой он работает.
Simulink является достаточно самостоятельным инструментом MATLAB и при работе с ним совсем не требуется знать сам MATLAB и остальные его приложения. С другой стороны доступ к функциям MATLAB и другим его инструментам остается открытым и их можно использовать в Simulink. Часть входящих в состав пакетов имеет инструменты, встраиваемые в Simulink (например, LTI-Viewer приложения Control System Toolbox – пакета для разработки систем управления). Имеются также дополнительные библиотеки блоков для разных областей применения (например, Power System Blockset – моделирование электротехнических устройств, Digital Signal Processing Blockset – набор блоков для разработки цифровых устройств и т.д).
При работе с Simulink пользователь имеет возможность модернизировать библиотечные блоки, создавать свои собственные, а также составлять новые библиотеки блоков.
При моделировании пользователь может выбирать метод решения дифференциальных уравнений, а также способ изменения модельного времени (с фиксированным или переменным шагом). В ходе моделирования имеется возможность следить за процессами, происходящими в системе. Для этого используются специальные устройства наблюдения, входящие в состав библиотеки Simulink . Результаты моделирования могут быть представлены в виде графиков или таблиц.
Преимущество Simulink заключается также в том, что он позволяет пополнять библиотеки блоков с помощью подпрограмм написанных как на языке MATLAB, так и на языках С++, Fortran и Ada .
2. Запуск Simulink
Для запуска программы необходимо предварительно запустить пакет MATLAB. Основное окно пакета MATLAB показано на Рис. 2.1. Там же показана подсказка появляющаяся в окне при наведении указателя мыши на ярлык Simulink в панели инструментов.
Рис 2.1. Основное окно программы MATLAB
После открытия основного окна программы MATLAB нужно запустить программу Simulink . Это можно сделать одним из трех способов:
Последний вариант удобно использовать для запуска уже готовой и отлаженной модели, когда требуется лишь провести расчеты и не нужно добавлять новые блоки в модель. Использование первого и второго способов приводит к открытию окна обозревателя разделов библиотеки Simulink (рис. 2.2).
Рис 2.2. Окно обозревателя разделов библиотеки Simulink
3. Обозреватель разделов библиотеки Simulink
Окно обозревателя библиотеки блоков содержит следующие элементы (Рис. 2.2):
На рис. 2.2 выделена основная библиотека Simulink (в левой части окна) и показаны ее разделы (в правой части окна).
Сегодня я хочу показать простой пример идентификации системы, основываясь на наблюдениях и экспериментальных данных. Это первая и крайне важная ступень в разработке системы управления устройством, которое описать аналитически либо невозможно, либо слишком сложно, либо неохота. Для начала рассмотрим метод «черного ящика с котом», «серый» и «белый» методы оставим на следующий раз.
Интересующихся прошу под кат.
Оборудование и программное обеспечение в наличии
В данном ПК (а это по сути и есть IBM совместимый ПК) присутствуют платы ввода-вывода с аналоговыми, дискретными, и прочими входами и выходами, которые я использую как для сбора данных, так и для управления ходом эксперимента. Но самое главное — я могу одним нажатием запускать на ней модели Simulink в режиме жесткого реального времени. О таких машинках (да простят мне уменьшительно-ласкательное дальнейшее к Ней обращение:-) я много еще могу рассказать. Если интересно — можно выделить для этого отдельный топик.
Инструментам я не изменяю. Как и в предыдущих моих постах, я буду использовать Simulink для создания моделей, генерировать из них код и запускать его на интересных железках.
В собранном виде, если это можно назвать собранностью, все выглядит так:
Постановка задачи
Есть система — необходимо получить её модель для дальнейшей работы. Проще некуда.
Поведение системы и её модели должно максимально совпадать в пределах допустимых входных воздействий. Метод «черного ящика» подразумевает, что мы не будем, или почти не будем, принимать во внимание физику процессов внутри системы, а будем рассматривать её с общей точки зрения теории управления.
В детали я вдаваться в этот раз не буду, поначалу все и так видно, на глаз.
Но следует учесть, что за кулисами остаются архиважные и преинтереснейшие темы — планирование эксперимента (DOE) и дисперсионный анализ (ANOVA), которые заслуживают отдельного рассмотрения.
- Дискретная подсистема — Arduino
- Непрерывная механическая подсистема — двигатель
- Непрерывная электрическая подсистема — Motor Shield
20 секунд тестового воздействия.
Выглядит тестовый вектор так:
На выходе системы я ожидаю увидеть хоть что-то подобное :-)
Для успешной идентификации тестовый вектор должен покрывать максимальное количество режимов работы системы, в которых она будет, или может работать. Метод «черного ящика» не позволяет в полной мере исследовать аварийные режимы ввиду ограниченности количества экспериментальных образцов. Я буду исследовать систему в рабочих режимах плавного пуска и старт-стоп.
Выход системы — скорость вращения вала, угол поворота вала. С квадратурного энкодера, при вращении вала двигателя, я получаю два меандра со смещением по фазе на pi/2. Их обрабатывает аппаратный декодер, который присутствует на одной из конфигурируемых плат ввода-вывода. При загрузке модели Simulink на машину реального времени происходит «прошивка» ПЛИС (FPGA) для обеспечения требуемых входов/выходов. Тики, с декодера умножаем на коэффициент и превращаем в угол, а скорость изменения их количества в скорость. Энкодер двигателя делает 64 триггирования за один оборот, что позволяет с хорошей точностью отслеживать описанные выше параметры. Основной алгоритм на машине реального времени установлен мною на работу с частотой 10 kHz — на выходе я получаю экспериментальные данные с периодом дискретизации 0,0001с. Аппаратная же часть ПЛИС работает на частоте 33 MHz, что позволяет, помимо основного алгоритма декодирования, успевать применить еще и антидребезговые алгоритмы без ущерба точности измерениям на довольно высоких оборотах. Простыми словами декодирование квадратурного сигнала на FPGA описано в прекрасной статье fpga4fun --> QuadratureDecoder.
Дискретизация величин, временные задержки, моменты инерции механических деталей, трение спокойствия, трение скольжения, трение качения, механический люфт, разбалансировка, резонансные явления, коммутация индуктивных цепей, скользящий контакт, искрение — не полный перечень факторов, с которыми нам пришлось бы столкнуться при попытке описать данную систему аналитически. А ведь это — всего лишь ардуинка с моторчиком!
Соглашусь, некоторыми нюансами вполне можно пренебречь, но на практике, решение пренебречь каким-либо фактором — не самое простое решение.
Так выглядит ШИМ из Arduino (желтый) и напряжение на чисто резистивной нагрузке, которая подключена к шилду:
А вот графики при подключенном двигателе в режимах, когда двигатель еще не вращается, и уже вращается:
Коммутация индуктивной нагрузки с механическим контактом полупроводниковыми ключами — крайне интересная тема для исследований, но сегодня мы внимания ей уделять не будем. Мы срежем по прямой — будем рассматривать только вход и выход системы, не вникая в физику процессов.
Модели Simulink
На машине реального времени я запускаю вот такую модель:
Структура её крайне проста. Есть блоки для входов, выходов, общие настройки плат ввода-вывода, вывод информации на дисплей машинки и простая внутренняя логика пересчета тиков от квадратурного энкодера в угол и скорость.
Модель для получения прошивки под Arduino выглядит следующим образом:
Таблица истинности, которая отслеживает знак сигнала и управляет входами Motor Shield
Код алгоритма можно посмотреть под спойлером:
Весь проект можно скачать здесь.
Модель, которую я буду использовать для проверки результатов:
Все модели можно скачать здесь.
«Открыл и запустил» может не сработать, есть нюансы. С вопросами в личку, или в комментарии.
Видео
Результаты
Вот, что получилось в итоге:
Синий — это входной сигнал с пределами от -255 до +255. В пересчете на вольты будет примерно от -8,5 до 8,5.
Зеленый — скорость вращения вала двигателя.
Видим временную задержку, отсутствие вращения, либо крайне малое вращение при подаче ШИМ менее 25%. Также наблюдаем классический апериодический переходной процесс.
А вот информация, которая выводится во время проведения эксперимента на дисплей, подключенный к машине реального времени:
Идентификация
Одна из подсистем, а именно двигатель, может быть описан следующей передаточной функцией:
Так нам говорит курс ТАУ, с неё мы и начнем.
В составе MATLAB есть прекрасный инструмент для идентификации систем — System Identification Toolbox. Он доступен как в виде графического интерфейса, так и в виде набора функций, которые можно использовать в скриптах MATLAB. Рассмотрим сперва работу в графическом интерфейсе.
Импортируем данные, полученные в ходе эксперимента и тестовое воздействие:
После импорта нам становятся доступны инструменты предварительной обработки данных. Мы имеем возможность, например, разделить массивы данных на две части — для идентификации и отдельно для верификации. Но это для более сложных случаев, давайте же скорее перейдем к делу!
Выбираем из выпадающего списка «Estimate» пункт Transfer Function Models.
Получаем передаточную функцию:
Давайте сравним поведение полученной функции и системы:
Синим отображен отклик передаточной функции на исходный тестовый вектор. Видно, что данную функцию можно использовать как модель исходной системы только в режиме старт-стоп. И не удивительно — нелинейное поведение, которое присутствует в системе, не может быть описано таким способом.
Продвигаемся дальше, используем шаблон модели Хаммерштейна-Винера, которая дает возможность описывать нелинейное поведение системы:
В качестве входной нелинейности выберем Dead Zone — отсутствие реакции системы на входной сигнал менее определенного порогового значения. Такой тип нелинейности должен взять на себя описание трения спокойствия и влияния постоянных магнитов, которое имеет место в системе.
Остальные параметры по умолчанию, жмем Estimate.
Для случая с Dead Zone все просто — задаем тип и пороговые значения.
Настройка линейной части позволяет предварительно указать порядок и оценить задержку:
Сравниваем полученный результат с экспериментальными данными:
Выглядит гораздо лучше! Не идеально — заметно некоторое аномальное поведение, но мы ведь только слегка коснулись идентификации нелинейных систем.
Теперь нам остается только экспортировать данную модель в Simulink, где мы можем приступить к разработке системы управления. Но об этом в следующем топике!
Благодарю за внимание, надеюсь было интересно?
И еще раз благодарю за ответы на небольшой опрос:
Читайте также: