Как сделать обратную связь в симулинке

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

Я создал программу и хочу использовать ее в simulink . Как я могу вставить свой m-file в simulink ?

Программа экстраполирует входной сигнал.

а затем повторить;

И как я могу получить N-vector от времени signal и дискретизации?

Существует блок в simulink после 2010b, который называется "встроенным кодом matlab", где вы можете определить типичную функцию matlab, которая запускает каждый шаг вычисления simulink. Это то, что вам нужно? Я думаю, вы также можете дать сигнал "включить" вам блок (если нет, сделать вручную вручную как вход), чтобы запустить ваш код только тогда, когда вы хотите. Надеюсь, поможет

Для запуска программы необходимо предварительно запустить пакет MatLAB. После открытия основного окна программы MatLAB нужно запустить программу Simulink. Это можно сделать одним из следующих способов:

  • - с помощью кнопки Й на панели инструментов командного окна MatLAB (при этом вызывается окно браузера, называемое также окном обозревателя библиотеки - Simulink Library Browser);
  • - набором в строке командного окна слова Simulink с последующим нажатием клавиши [Enter] на клавиатуре (также вызывается окно браузера);
  • - последовательным выбором пунктов меню File (Файл) —>New (Новый) —>Model (Модель) —> открывается окно для создания S- или SPS-модели;
  • - с помощью кнопки открытия документа на панели инструментов (вызывается окно с построенной ранее моделью, сохраненной в виде mdl-файла).

Создание S- или SPS-модели

Для создания S- или SPS- модели необходимо последовательно выполнить ряд действий:

Основные операции при создании и редактировании модели

Для выделения нескольких объектов необходимо выполнять однократные клики ЛКМ по пиктограммам блоков с удержанием клавиши [Shift],

Для выделения фрагмента модели (группы блоков) необходимо установить курсор мыши вблизи группы объектов, нажать ЛКМ и, удерживая ее, начать перемещение мыши. В результате вокруг выделяемых объектов появиться пунктирная рамка, размеры которой будут изменяться при перемещении мыши. Все охваченные рамкой объекты становятся выделенными.

  • 1.2.3.3 Копирование блока. В процессе создания и редактирования модели необходимо копировать блоки, в том числе и из другой модели в текущую модель. Для этого необходимо открыть окно модели-прототипа, выделить нужный блок и перетащить его, нажав и не отпуская правую клавишу мыши (ПКМ), в окно создаваемой (редактируемой) модели. Скопированный блок получает те же значения настраиваемых параметров, что и блок-оригинал. Копировать блоки можно и другим способом. Для этого необходимо выполнить следующие действия:
    • - выделить блок;
    • - выбрать команду Edit (Правка ) —>Сору (Копировать) или нажать кнопку ЧЗ на панели инструментов, также можно нажать ПКМ (курсор предварительно навести на выделенный блок) и выбрать в появившемся контекстном меню команду Сору (Копировать).
    • - сделать активным окно, в которое нужно скопировать блок;
    • - в этом окне на панели инструментов выбрать команду Edit —> Paste (Правка —> Вставить) или нажать на кнопку ®, также можно нажать ПКМ на свободном месте в окне модели и выбрать в появившемся контекстном меню команду Paste (Вставить).

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

    - нажать сочетание клавиши [Ctrl] + ЛКМ и, не отпуская их, перенести блок на свободное место в окне модели;

    Каждому из скопированных блоков автоматически присваивается имя с добавлением порядкового номера. Пользователь может переименовать блок.

    Необходимо отметить, что при выполнении данных операций объекты помещаются в собственный буфер MatLAB и недоступны для других приложений. Использование команды Edit Copy model to clipboard позволяет поместить графическое изображение модели в буфер Windows и, соответственно, делает его доступным для остальных программ.

    1.2.3.4 Перемещение блоков в модели. Любой блок модели можно переместить, выделив его, и передвинув, держа нажатой ЛКМ. При этом автоматически будут перерисованы линии связей перемещенного блока с другими (соединительные линии не разрываются, а лишь сокращаются или увеличиваются в длине).

    Также блок можно переместить кнопками , —> расположенными на кла

    виатуре, предварительно блок следует выделить.

    Для одновременного перемещения нескольких блоков вместе с соединительными линиями следует выделить нужную область рамкой, а затем переместить с помощью ЛКМ один из выделенных блоков в нужное место. Остальные блоки займут новые места. Все относительные расстояния между выделенными блоками и линиями при этом сохранятся.

    1.2.3.5 Удаление блоков. Для удаления блоков из модели, необходимо их вы

    делить и нажать клавишу [Delete] или [Backspace] на клавиатуре, также можно воспользоваться командами Edit Delete (Правка —> Удалить), Edit Cut (Правка

    Вырезать) или кнопкой X на панели инструментов. В случае использования команды Edit —> Cut (Правка —> Вырезать) или кнопки & объекты будут вырезаны (перемещены в буфер) и их можно вставить обратно в модель, воспользовавшись командой Edit —> Paste (Правка Вставить) или кнопкой ® на панели инструментов.

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

    1.2.3.6 Установка параметров блока. Параметры блока устанавливаются в диалоговом окне его настройки, которое вызывается двойным кликом ЛКМ на пиктограмме блока.

    После внесения изменений нужно закрыть окно кнопкой ОК.

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

    • 1.2.3.7.2 Создание разветвления линии. Для создания точки разветвления в соединительной линии необходимо подвести курсор мыши к предполагаемому узлу и, нажав ПКМ, протянуть линию к входному порту нужного блока. Можно воспользоваться и другим способом: входной порт блока подключить к уже существующей линии.
    • 1.2.3.7.3 Создание петли линии выполняется аналогично перемещению блока. Линия соединения выделяется, и затем нужная часть линии перемещается.
    • 1.2.3.7.4 Удаление линий выполняется также как и удаление любых других объектов.
    • 1.2.3.7.5 Отделение блока от линии. Для отделения блока необходимо подвести к нему курсор мыши, нажать клавишу [Shift] + ЛКМ, не отпуская их переместить блок на другое место.
    • 1.2.3.8 Изменение размеров блока. Для изменения размеров блока необходимо выделить блок, установить курсор мыши в один из углов блока и, нажав ЛКМ, изменить размер блока (курсор при этом превратится в двухстороннюю стрелку).
    • 1.2.3.9 Изменение имени блока. Чтобы ввести новое имя блока выполняется однократный клик ЛКМ по старому имени. Имя блока будет обведено рамкой и появится текстовый курсор, после чего можно редактировать имя.

    Не допускается отсутствие имени блока (пустая строка) и наличие в одном окне блоков с одинаковыми именами.

    При работе с блоками можно изменять пиктограммы и их окраску, разворачивать на плоскости, изменять и перемещать их названия (блочные подписи), шрифт текста и т. д. Команды форматирования блоков располагаются в меню Format (Формат), а также и в контекстном меню, вызываемом нажатием ПКМ на блоке.

    1.2.3Л0 Форматирования блока. Некоторые команды форматирования блоков:

    Font - Форматирование шрифта надписей и текстовых блоков.

    Show /Hide name - Отображение или скрытие подписи блока.

    Flip пате - перемещение подписи блока.

    Flip block - поворот блока на 180° относительно вертикальной оси.

    Rotate block - вращение блока на 90° по часовой стрелке.

    Show drop shadow - отображение тени от блока.

    Show port labels - показ меток портов.

    Foreground color - выбор цвета линий для выделенных блоков.

    Background color - выбор цвета фона выделенных блоков.

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

    1.2.3.11 Добавление текстовых надписей. Для повышения наглядности модели удобно использовать текстовые надписи. Для создания надписи нужно указать мышью место надписи и дважды кликнуть ЛКМ. После этого появится прямоугольная рамка с курсором ввода.

    Из Simulink в FBD

    Здравствуйте.
    Появилась задача - перевести модель, собранную в Matlab Simulink, на язык FBD (точнее, на любой, удовлетворяющий стандарту МЭК, но на FBD именно из Симулинка, думаю, будет проще). Вроде бы так посмотрел - всё есть, все блоки имеют свои аналоги, всё хорошо. Но есть несколько вопросов, больше "организационных" - поскольку с CoDeSys и вообще с ПЛК работать не приходилось.

    Во-первых, как в FBD принято организовывать визуальный контроль переменных? То есть каков аналог осциллографа?
    Во-вторых, есть ли готовые библиотеки специфических блоков (например, тиристора, или там, блок разложения сигнала на гармоники)?

    Вроде пока больше вопросов нет. Буду очень признателен за ответы.

    Видите ли Киналь.
    Matlab - сугубо теоретический инструмент расчета и создания моделей.
    CoDeSys - профессиональная система программирования ПЛК. Она не предназначена для сложных математических преобразований и вычислений. Хотя возможно такие библиотеки где то и есть, но не в базовой поставке - надо искать.
    Осцилографирование блока не возможно. Есть в ресурсах трассировка, с помощью которой можно производить осцилографирование переменных.

    Появилась задача - перевести модель, собранную в Matlab Simulink, на язык FBD (точнее, на любой, удовлетворяющий стандарту МЭК…

    Для этого есть специальный инструмент PLClink. Он позволяет интегрировать Simulink c CoDeSys практически бесшовно. Программа автоматом транслируется в исполняемый код, грузится в ПЛК и организуется обратная связь так, что прямо в Simulink видны значения переменных из ПЛК. Параллельно может работать модель и можно сравнить результаты. Очень серьезная штука, но не дешевая. Для маленьких проектов достаточно демо. Принципы работы кратко описаны тут. Аналогично можно преобразовать модель вручную, но естественно только в один конец. Проще в язык ST.

    См. графическая трассировка в CoDeSys. При применении PLClink данные из ПЛК отображаются прямо в осциллографах Симулинка.

    . есть ли готовые библиотеки специфических блоков (например, тиристора, или там, блок разложения сигнала на гармоники)?

    Такого не будет в принципе. Это другой мир. Программистам ПЛК нужны высокоуровневые блоки для прикладных задач (регуляторы, таймеры и пр.). Все системные штуки (типа управления тиристорами через ШИМ, Фурье, свертки, цифровые фильтры) должны быть спрятаны на системном уровне. Например, специалист по дизельным двигателям пишет прикладную программу на контроллере. Он знает про двигатели все досконально, но процессоры и тиристоры его не волнуют. Это обязан сделать системный программист, встроить низкоуровневую поддержку в контроллер и дать прикладнику готовый выход (1 переменная) управления чем надо. Аналогично в Фотошопе не должно быть настроек режимов шины PCI. Это стержневая идея языков МЭК 61131-3: прикладное ПО должно быть четко отделено от системного. Их делают разные люди с образованием в разных областях. Если мы валим все в кучу, то МЭК языки теряют смысл.

    Спасибо за подробные ответы!
    Кажется, я спросил, "а как в телевизоре диктор помещается"=)

    И ещё вопрос, из общих соображений - стоит ли вообще за это браться при отсутствии всяких навыков программирования ПЛК?

    Есть еще один вариант. LabView. Сдается мне что в нем уже есть все необходимое. В том числе специальные библиотеки для создания моделей объектов. На нем делают модели и отлаживают САУ для ,например, турбин, генераторов и прочих серьезных штук.

    Так же можно прикупить платы ввода-вывода. При готовности модели работать с контроллером.

    Разве это язык МЭК?

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

    Вы совершенно верно говорите - Вам нужна модель объекта. Если каким либо образом Вы сможете привести её к законченному мат. выражению - описать его на языках МЭК возможно.
    Но надо четко отдавать отчет - CoDeSys не для построения мат моделей.

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

    С помощью PLClink можно сделать в Симулинке и модель объекта управления и управляющую программу. Откатать все нем, для начала. Затем управляющая программа автоматически транслируется в МЭК языки и далее в код в ПЛК. Получаем 2-й этап отладки-верификации правильности кода (это не позволяют обычные компиляторы будь то МЭК или Си). Автоматически созданная управляющая программа работает в ПЛК. Против нее в Симулинке играет модель. Сравниваем результаты и убеждаемся что программа управления правильная и ее машинный код создан без ошибок (компилятор CoDeSys сработал четко). Затем убираем Симулинк с моделью и заменяем его реальным объектом. Такая вот технология разработки ПО.
    Она применяется в очень сложных и супер дорогих системах. Например, управление углом атаки лопастей ветряных генераторов прямого возбуждения. В Матлабе можно решить соотв-ю модели систему диф. уравнений, создать нужный блок управления, транслировать в МЭК программу и верифицировать код. Все, что в Симулинке наваяли PLClink автоматом переведет в МЭК программу. Без ручного кодирования вообще!
    Для нас препятствием применения этой технологии является высокая стоимость Матлаб и Симулинк.

    . Или доказательство того, что трансляция симулинк-модели в МЭК-модель невозможна принципиально или возможна только при очень специфических условиях.

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

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


    Вопрос очень похож на курсовую работу с выдуманными условиями. Сомнение вызывает практическая реализуемость на ПЛК в реальном времени:
    1) Справится ли с этим процессор ПЛК? В алгоритмах будут вычисления не типичные для ПЛК.
    2) Набор входов/выходов тут будет не типовой для ПЛК.
    3) Готовых ФБ в МЭК языках для этого нет. Придется писать самому.
    Наверняка управление преобразователем сделано не на ПЛК, а на спец. контроллере с DSP? Хорошая модель тут должна быть штукой более сильной и дорогой. Разве нет?



    Изображение взято, и слегка отредактировано, из блога Антона Лопатина. Ну очень вдохновляет.

    Добрый день, уважаемое сообщество!

    В прошлом топике я постарался сделать вводной экскурс в модельно-ориентированное проектирование встраиваемых систем с использованием ARM микропроцессоров Cortex M3 и MATLAB/Simulink. Продолжаем погружение, усложняем задачу. Жаль до концепта на заглавной иллюстрации еще далеко, но процесс разработки одного из важнейших его узлов, а именно системы самонаведения турели, я попытаюсь показать.

    Ниже довольно много изображений, но без них скучновато и не наглядно.

    Аппаратное обеспечение


    • Отладочная плата FiO Std от таиландских друзей из aimagin. Без нее работа с библиотекой RapidSTM32 для Simulink слегка затруднительна. Используется и как hardware key для rapidSTM32, и как управляющий модуль. На борту имеет камень STM32F103RET6.
    • 2 простецких сервомотора SG-5010

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

    • Организовать связь с ПК.
      Устройство наше будет распознаваться как HID, и будет слушать мой ноутбук через USB.
    • Механизировать головку самонаведения.
      Хватит мигать диодами, переходим на сервы. Классика жанра постигания премудростей работы с мехатроникой.
    • Создать систему управления на стороне железа.
      Мех. составляющая + HIL влечет за собой более сложные алгоритмы управления на стороне железа. Как минимум применение PID регулятора. ТАУ наше все!
    • Реализовать алгоритм распознавания видео и выдачи управляющих сигналов на стороне хоста.
      Для слежения за объектом необходимо этот объект идентифицировать. Пока этим будет заниматься мой ноутбук, но в будущем можно переложить и эту задачу на крепкие плечи ARM. Здесь, возможно, стоит присмотреться к bigle board на процессоре TI OMAP3530. То ли еще будет.

    Модель на стороне хоста


    Свернутая модель, на которую возлагаются функции обработки видео и выдачи управляющих сигналов выглядит так:
    Видеосигнал разделенный на каналы передается на подсистемы детектирования и обработки. После них выходные сигналы передаются через USB на плату управления.


    Модель на стороне железа

    Модель Simulink из которой генерится код для заливки в микроконтроллер выглядит как показано на иллюстрации ниже: Выполнена в едином тактировании, что и видно по одинаковой цветовой подсветке для всех блоков модели после обновления. Как и упоминалось ранее, помимо элементарных блоков типа сложения или умножения, модель содержит два PID регулятора. Скорее даже PI, потому как коэффициент дифференцирующей составляющей равен нулю.

    Назначения блоков Saturation и Dead Zone думаю ясны из графиков на их пиктограммах.

    Генерация, компиляция и заливка кода выполняется полностью из под MATLAB. Keil даже запускать отдельно нет нужды.

    Собственно процесс разработки

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


    Пока не было серв (читай отсутствие аппаратной составляющей как таковой) алгоритмы работы системы отрабатывались на вот такой некрасивой, монстрообразной черновой модели:


    Потом она стала вот такой:

    Главной отличительной частью этих моделей является механическая подсистема (выделено синим цветом на предыдущей иллюстрации), которая позволяла оценить работу системы исключительно с помощью ПК. В моем случае важно было оптимизировать угловую скорость вращения серв, и коэффициенты PI регуляторов, но возможен и полный механический анализ системы.
    Так выглядела сборка в Solidworks:


    А так выглядит симуляция движения сборки уже внутри модели Simulink:

    Результаты испытаний

    Ну и наконец видео полевых испытаний:

    Да, довольно страшненькая сборка. На премию супер прямых рук точно не претендует.

    На экране ноутбука творится следующее:

    Выводы

    1. Использовать кота в качестве мишени не получилось. Серый камуфляж не поддается обнаружению, а попытка нацепить на него метку увенчалась провалом. К тому же он еще и ужасно боится жужжания серв. Пришлось испытывать все на себе.
    2. Для увеличения быстродействия и стабильности работы нужно еще много чего совершенствовать. Механическая часть оказалась самой капризной. Калибровка серв заняла большую часть времени отведенной на пусконаладку. При дальнейшем развитии проекта нужно будет обязательно переходить на более качественные девайсы, возможно с последующей доработкой и введением собственной обратной связи.
    3. Я не смог совладать с автоматическим изменением настроек яркости камеры в зависимости от освещения и окружающего фона. Понятно, что это влияло на селективность системы распознавания. В дальнейшем планируется использовать отдельный модуль камеры (возможно с упором на ИК диапазон с соответствующей подсветкой) с прямым присоединением к управляющей плате.
    4. С превеликим удовольствием и безграничной благодарностью приму к сведению разумную критику в комментариях. И здесь же допишу!

    Читайте также: