Примеры использования машины реального времени (MATLAB, Simulink, Программно-аппаратный симулятор)

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



    Всех интересующихся запуском алгоритмов управления и физических моделей в виде моделей Simulink в режиме жесткого реального времени с минимальными трудозатратами — прошу под кат!
    Внимание, много изображений!



    Итак, краткое определение:

    • Машина реального времени — это компьютер, который предназначен для выполнения широкого спектра задач в режиме реального времени.

    Пояснения к краткому определению:

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

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

    В русскоязычной литературе и обиходе часто встречается термины программно-аппаратный симулятор и полунатурное моделирование. С моей точки зрения, они не являются полными. Потому как «симуляция моделей» — не единая функция данного устройства.

    Перечень производителей таких решений довольно обширен. Я приму к рассмотрению изделия от Speedgoat, с которыми мне посчастливилось довольно плотно работать.

    Ниже, на основе примеров, я постараюсь раскрыть суть использования таких машин.

    Пример №1

    Команда инженеров занимается разработкой электрического привода. Есть модель в Simulink, в которой подсистему Controller (система управления) разработал инженер по системам управления, а подсистему Plant (модель двигателя) — инженер отдела физического моделирования.

    Задача: Аппаратного прототипа контроллера еще нет, и не ясно когда будет. Прототипа двигателя тоже нет, или его страшно подключать к пока еще сырой системе управления.

    Решение: Использовать машину реального времени для быстрого прототипирования системы управления. И еще одну машину, но более производительную, для запуска физической модели двигателя в реальном времени. Интерфейсы между такими машинами могут и должны быть такими же, как между реальным двигателем и контроллером. Такая связка называтся HIL — Hardware-In-The-Loop. По простому — программно-аппаратная симуляция. Она позволяет на ранних стадиях интегрировать и тестировать алгоритмы управления в связке с моделью объекта управления в реальном времени с учетом влияния среды передачи данных между устройствами.

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



    Пример №2

    Все та же команда. Появился прототип двигателя, прототип контроллера еще только в разработке.

    Задача: Необходимо протестировать систему управления на реальном объекте управления.

    Решение: Система управления уже оттестирована на модели двигателя при работе на ПК. Потом еще более полно в режиме HIL. Теперь же, когда появился реальный прототип — его уже не так страшно запускать. Потому как большинство ошибок уже отловлено и необходимо лишь валидировать работу системы.

    Возможен также случай, когда объект управления был с самого начала. Тогда быстрый переход от модели системы управления к работающей железке можно назвать Быстрым Прототипированием или Rapid Prototyping.



    Пример №3

    Опять знакомая команда. Вышел первый образец контроллера.

    Задача: Необходимо подключить первый образец к, возможно, многокиловатному двигателю

    Решение: Из соображений безопасности не стоит горячится, а сперва прогнать пару тестов с использованием модели двигателя на машине реального времени. Это будет чистой воды Plant Simulation или Симуляция Объекта Управления.

    Можно и целую модель самолета на машине реального времени запустить. В авиации такой симулятор часто нежно называют «электронная птица».

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

    Ниже иллюстрация описывающая суть решения задачи и видео рабочего процесса с PLC Siemens в качестве контроллера, и машины реального времени в качестве объекта управления.




    PLC Siemens + Speedgoat real-time machine

    Пример №4

    Финальная стадия разработки.

    Задача: Необходимо провести 100500 тестов на реальном приводе и задокументировать результаты в кратчайшие сроки.

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



    Как видно из примеров, одна и та же машина может быть переиспользована в различных вариантах использования. Но все же полностью унифицировать данные устройства невозможно — есть некое распределение по функционалу. Линейка Speedgoat, например, имеет следующий вид:



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

    Машину реального времени от Speedgoat внутри имеет робот Гепард от MIT:



    И две таких же я отвез в Набережные Челны на кафедру систем управления филиала КФУ.

    У меня есть еще задум более подробно осветить следующие вопросы.
    А именно:
    • Генерация кода C/C++/Verilog/VHDL
    • Аппаратное обеспечение, платы ввода вывода
    • Программное окружение, ОСРВ, BIOS
    • Отладка в реальном времени (External mode)

    Это должно вылится в следующую статью. Очень хочу выслушать в комментариях вопросы и возможные пожелания.
    В августе я планирую провести технический вебинар по данной тематике. Приглашение будет размещено на сайте matlab.ru. Буду крайне рад, если в участниках будут хабраюзеры с интересными вопросами!

    Спасибо за прочтение!
    • +10
    • 12.7k
    • 8
    Share post

    Comments 8

      +1
      Спасибо за статью, и жду продолжения! Очень хочется иметь структурированный материал по моделированию именно такому, на границе реальности и компьютера. Сам-то я из стана создателей чисто программных моделей.

      Но, опять же, чаще всего — это IBM совместимый компьютер с аппаратными и програм[м]ными компонентами, позволяющими ему работать [в] жестком реальном времени.

      Если возможно, то хотелось бы увидеть рассказ о том, как именно требуется модифицировать персоналку для того, чтобы она стала пригодной для такого типа задач. Недавно на Хабре этот вопрос краем задевался, хочется увидеть ещё мнений от практиков.
        0
        как именно требуется модифицировать персоналку для того, чтобы она стала пригодной для такого типа задач
        Недавно на Хабре этот вопрос краем задевался


        Я с удовольствием прочел диалог по предложенной ссылке.

        Единственный правильный подход — отталкиваться от задач, и от предоставленных ресурсов. Временных, материальных, человеческих.

        Если для решения поставленных задач хватает «мягкого» реального времени — можно смело использовать персоналку.
        Есть куча решений для этого с использованием различных технологий. От мультимедийных таймеров до микроядер ОС.
        Выбег за временной интервал — снижение качества сервиса.

        Если же необходимо обеспечить «жесткое» реальное время — необходимо обезопасить себя от SMM, и других прерываний и временных задержек не контролируемых ОС и целевым приложением. И использовать соответствующую ОС жесткого реального времени.
        Звучит просто, но на практике выливается в переписывание BIOS, перепайку материнской платы и прочие милые инженеру вещи.
        А потом приходит момент, когда необходимо синхронизировать две машины, или сделать внешнее тактирование, или прерывания, или вынести часть логики на FPGA. Тогда реальное время на коленке перерастает в полноценную разработку аппаратной и программной части.

        Это безумно интересно!
        Но в итоге мы занимаемся разработкой инструментов, а не решением задач возложенных на инструменты.
        Эти две активности нужно очень четко разделять.
        0
        Фразы типа " Переписывание прошивки заново чревато внесением новых ошибок и сводит на смарку предыдущие этапы." приводят к впечатлению того, что индустриальная разработка заключается в «кое-как разобрались с тем, что сделано в соседней сфере, тяп-ляп и в продакшн», сплошное желание отделаться побыстрее и не накосячить же. Вот и берутся подходы, выброшенные на свалку много лет назад… узкая специализация виновата, имхо.
          0
          Не совсем понял Ваш комментарий.
          Что Вы имеете ввиду под подходами выброшенными на свалку?

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

          На практике такие самородки редко встречаются. Чаще всего бывает нужно подружить алгоритмиста со знанием дела и программиста со знанием железа и ПО. Иногда между этими людьми находится очень большая пропасть из взаимного непонимания.
          +1
          Спасибо за статью!

          Поясните пожалуйста такой вопрос по видео “PLC Siemens + Speedgoat real-time machine”: После того как была загружена программа в реальный ПЛК, откуда приходит сигнал On для включения установки?
            +1
            Поясните пожалуйста такой вопрос по видео “PLC Siemens + Speedgoat real-time machine”: После того как была загружена программа в реальный ПЛК, откуда приходит сигнал On для включения установки?


            Начиная с времени 13:44 я выбираю режим запуска модели Simulink — «External». Это означает, что оригинальный исполняемый файл будет выполнятся на машине реального времени, но управлять им я смогу из модели Simulink. Модель в данном случае выполняет роль GUI для получившегося экзешника.

            Начиная с моента 14:32, когда исполняемый файл уже запущен на машинке, я подаю сигнал «включения» установки вручную, нажав на переключатель в модели симулинк. Можно увидеть, как после нажания блок константы изменяет свое значение с 0 на 1. Данное значение подается на вход POWER нашей модели нагревателя и он переходит в рабочее состояние.

            На самом деле не обязаятельно делать это вручную. Можно целый сценарий эксперимента заранее продумать.
            Так просто нагляднее.
              +1
              Спасибо, про GUI я понял.

              То есть, нажимаете кнопку на экране, значение попадает в машину реального времени, после чего с “железного” выхода этой машины идёт на вход ПЛК (I1.0)?
                0
                Абсолютно верно.

                Модель Simulink на моем ноутбуке — зеркало исполняемого файла на машине реального времени.

          Only users with full accounts can post comments. Log in, please.