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



Всех интересующихся запуском алгоритмов управления и физических моделей в виде моделей 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. Буду крайне рад, если в участниках будут хабраюзеры с интересными вопросами!

Спасибо за прочтение!

Комментарии (8)


  1. Atakua
    08.07.2015 13:37
    +1

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

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

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


    1. slovak Автор
      08.07.2015 16:50

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


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

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

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

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

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


  1. selenite
    08.07.2015 14:10

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


    1. slovak Автор
      08.07.2015 16:56

      Не совсем понял Ваш комментарий.
      Что Вы имеете ввиду под подходами выброшенными на свалку?

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

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


  1. Alexor
    09.07.2015 12:29
    +1

    Спасибо за статью!

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


    1. slovak Автор
      09.07.2015 12:40
      +1

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


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

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

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


      1. Alexor
        09.07.2015 13:35
        +1

        Спасибо, про GUI я понял.

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


        1. slovak Автор
          09.07.2015 14:34

          Абсолютно верно.

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