Что такое simulink в matlab

REDMOND

Система моделирования динамических систем Simulink

Программа 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 (в левой части окна) и показаны ее разделы (в правой части окна).

Simulink

Simulink – среда динамического междисциплинарного моделирования сложных технических систем и основной инструмент для модельно-ориентированного проектирования. Его основным интерфейсом является графический инструмент для построения диаграмм и настраиваемый набор библиотек блоков. Он предлагает тесную интеграцию с остальной средой MATLAB и может либо использовать MATLAB, либо создавать сценарии из него. Simulink широко используется в автоматическом управлении и цифровой обработке сигналов для многодоменного моделирования и проектирования на основе моделей.

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

Модельно-ориентированное проектирование: от концепции к коду

Simulink предназначен для моделирования и симуляций на системном уровне, что позволяет проводить всестороннее исследование разрабатываемой системы в единой среде проектирования.

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

Модели Simulink поддерживают автоматическую генерацию кода промышленного качества на языках С, C++ и HDL. Результаты работы сгенерированного кода и модели идентичны. Следующим шагом является развертывание кода на целевом вычислителе или FPGA/ASIC.

Simulink использует преимущества MATLAB

Система управления в Simulink

Алгоритмы, созданные в MATLAB, не требуется переделывать для повторного использования в Simulink. Код MATLAB добавляется в блок Simulink или диаграмму Stateflow без изменений.

Так же MATLAB используется для создания наборов входных данных для симуляций систем. Симуляции масштабируются на кластеры для ускорения таких инженерных задач как перебор параметров или оптимизация, а затем их результаты анализируются и визуализируются в MATLAB.

Система управления в Simulink Система управления в Simulink

Модельно-ориентированное проектирование на коленке, идентификация систем в MATLAB/Simulink

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

Оборудование и программное обеспечение в наличии

    Watchduck:

    Выполняет ту же функцию, что и Watchdog timer, но применительно к инженеру — помогает выйти из зависания.

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


Инструментам я не изменяю. Как и в предыдущих моих постах, я буду использовать Simulink для создания моделей, генерировать из них код и запускать его на интересных железках.

В собранном виде, если это можно назвать собранностью, все выглядит так:

Постановка задачи

Есть система — необходимо получить её модель для дальнейшей работы. Проще некуда.
Поведение системы и её модели должно максимально совпадать в пределах допустимых входных воздействий. Метод «черного ящика» подразумевает, что мы не будем, или почти не будем, принимать во внимание физику процессов внутри системы, а будем рассматривать её с общей точки зрения теории управления.

В детали я вдаваться в этот раз не буду, поначалу все и так видно, на глаз.
Но следует учесть, что за кулисами остаются архиважные и преинтереснейшие темы — планирование эксперимента (DOE) и дисперсионный анализ (ANOVA), которые заслуживают отдельного рассмотрения.

  • Дискретная подсистема — Arduino
  • Непрерывная механическая подсистема — двигатель
  • Непрерывная электрическая подсистема — Motor Shield

20 секунд тестового воздействия.
Выглядит тестовый вектор так:

На выходе системы я ожидаю увидеть хоть что-то подобное 🙂
Для успешной идентификации тестовый вектор должен покрывать максимальное количество режимов работы системы, в которых она будет, или может работать. Метод «черного ящика» не позволяет в полной мере исследовать аварийные режимы ввиду ограниченности количества экспериментальных образцов. Я буду исследовать систему в рабочих режимах плавного пуска и старт-стоп.

Выход системы — скорость вращения вала, угол поворота вала. С квадратурного энкодера, при вращении вала двигателя, я получаю два меандра со смещением по фазе на pi/2. Их обрабатывает аппаратный декодер, который присутствует на одной из конфигурируемых плат ввода-вывода. При загрузке модели Simulink на машину реального времени происходит «прошивка» ПЛИС (FPGA) для обеспечения требуемых входов/выходов. Тики, с декодера умножаем на коэффициент и превращаем в угол, а скорость изменения их количества в скорость. Энкодер двигателя делает 64 триггирования за один оборот, что позволяет с хорошей точностью отслеживать описанные выше параметры. Основной алгоритм на машине реального времени установлен мною на работу с частотой 10 kHz — на выходе я получаю экспериментальные данные с периодом дискретизации 0,0001с. Аппаратная же часть ПЛИС работает на частоте 33 MHz, что позволяет, помимо основного алгоритма декодирования, успевать применить еще и антидребезговые алгоритмы без ущерба точности измерениям на довольно высоких оборотах. Простыми словами декодирование квадратурного сигнала на FPGA описано в прекрасной статье fpga4fun —> QuadratureDecoder.

Дискретизация величин, временные задержки, моменты инерции механических деталей, трение спокойствия, трение скольжения, трение качения, механический люфт, разбалансировка, резонансные явления, коммутация индуктивных цепей, скользящий контакт, искрение — не полный перечень факторов, с которыми нам пришлось бы столкнуться при попытке описать данную систему аналитически. А ведь это — всего лишь ардуинка с моторчиком!
Соглашусь, некоторыми нюансами вполне можно пренебречь, но на практике, решение пренебречь каким-либо фактором — не самое простое решение.

Так выглядит ШИМ из Arduino (желтый) и напряжение на чисто резистивной нагрузке, которая подключена к шилду:

А вот графики при подключенном двигателе в режимах, когда двигатель еще не вращается, и уже вращается:

REDMOND

Коммутация индуктивной нагрузки с механическим контактом полупроводниковыми ключами — крайне интересная тема для исследований, но сегодня мы внимания ей уделять не будем. Мы срежем по прямой — будем рассматривать только вход и выход системы, не вникая в физику процессов.

Модели Simulink

На машине реального времени я запускаю вот такую модель:

Структура её крайне проста. Есть блоки для входов, выходов, общие настройки плат ввода-вывода, вывод информации на дисплей машинки и простая внутренняя логика пересчета тиков от квадратурного энкодера в угол и скорость.

Модель для получения прошивки под Arduino выглядит следующим образом:

Таблица истинности, которая отслеживает знак сигнала и управляет входами Motor Shield

Код алгоритма можно посмотреть под спойлером:

Весь проект можно скачать здесь.

Модель, которую я буду использовать для проверки результатов:

Все модели можно скачать здесь.
«Открыл и запустил» может не сработать, есть нюансы. С вопросами в личку, или в комментарии.

Видео

Результаты

Вот, что получилось в итоге:

Синий — это входной сигнал с пределами от -255 до +255. В пересчете на вольты будет примерно от -8,5 до 8,5.
Зеленый — скорость вращения вала двигателя.

Видим временную задержку, отсутствие вращения, либо крайне малое вращение при подаче ШИМ менее 25%. Также наблюдаем классический апериодический переходной процесс.

А вот информация, которая выводится во время проведения эксперимента на дисплей, подключенный к машине реального времени:

Идентификация

Одна из подсистем, а именно двигатель, может быть описан следующей передаточной функцией:

Так нам говорит курс ТАУ, с неё мы и начнем.

В составе MATLAB есть прекрасный инструмент для идентификации систем — System Identification Toolbox. Он доступен как в виде графического интерфейса, так и в виде набора функций, которые можно использовать в скриптах MATLAB. Рассмотрим сперва работу в графическом интерфейсе.

Импортируем данные, полученные в ходе эксперимента и тестовое воздействие:

После импорта нам становятся доступны инструменты предварительной обработки данных. Мы имеем возможность, например, разделить массивы данных на две части — для идентификации и отдельно для верификации. Но это для более сложных случаев, давайте же скорее перейдем к делу!

Выбираем из выпадающего списка «Estimate» пункт Transfer Function Models.

Получаем передаточную функцию:

Давайте сравним поведение полученной функции и системы:

Синим отображен отклик передаточной функции на исходный тестовый вектор. Видно, что данную функцию можно использовать как модель исходной системы только в режиме старт-стоп. И не удивительно — нелинейное поведение, которое присутствует в системе, не может быть описано таким способом.

Продвигаемся дальше, используем шаблон модели Хаммерштейна-Винера, которая дает возможность описывать нелинейное поведение системы:

В качестве входной нелинейности выберем Dead Zone — отсутствие реакции системы на входной сигнал менее определенного порогового значения. Такой тип нелинейности должен взять на себя описание трения спокойствия и влияния постоянных магнитов, которое имеет место в системе.
Остальные параметры по умолчанию, жмем Estimate.

Update#1 по просьбе MichaelBorisov:
Более подробно настройка нелинейной части выглядит так:

Для случая с Dead Zone все просто — задаем тип и пороговые значения.

Настройка линейной части позволяет предварительно указать порядок и оценить задержку:

Несмотря на то, что это «черный ящик» — на практике получение адекватного результата очень зависит от колличества знаний о системе, которые Вы вложили в конфигурацию расчета.
endOfUpdate#1 по просьбе MichaelBorisov:

Сравниваем полученный результат с экспериментальными данными:

Выглядит гораздо лучше! Не идеально — заметно некоторое аномальное поведение, но мы ведь только слегка коснулись идентификации нелинейных систем.

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

Благодарю за внимание, надеюсь было интересно?
И еще раз благодарю за ответы на небольшой опрос:

REDMOND

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *