В своей практике я часто сталкиваюсь с ситуацией, когда при упоминании мною в разговоре некой «машины реального времени» в глазах собеседника проскакивает миллион ассоциаций, к сожалению, не имеющих отношения к теме разговора.
В первой статье я хочу немного пролить свет на данную тему со столь необычно звучащим для русскоязычной инженерной аудитории названием.
Всех интересующихся запуском алгоритмов управления и физических моделей в виде моделей 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)
selenite
08.07.2015 14:10Фразы типа " Переписывание прошивки заново чревато внесением новых ошибок и сводит на смарку предыдущие этапы." приводят к впечатлению того, что индустриальная разработка заключается в «кое-как разобрались с тем, что сделано в соседней сфере, тяп-ляп и в продакшн», сплошное желание отделаться побыстрее и не накосячить же. Вот и берутся подходы, выброшенные на свалку много лет назад… узкая специализация виновата, имхо.
slovak Автор
08.07.2015 16:56Не совсем понял Ваш комментарий.
Что Вы имеете ввиду под подходами выброшенными на свалку?
Конечно, идеальный вариант иметь универсального алгоритмиста-программиста, у которого докторская по биологии и опыт разработки под микропроцессоры.
На практике такие самородки редко встречаются. Чаще всего бывает нужно подружить алгоритмиста со знанием дела и программиста со знанием железа и ПО. Иногда между этими людьми находится очень большая пропасть из взаимного непонимания.
Alexor
09.07.2015 12:29+1Спасибо за статью!
Поясните пожалуйста такой вопрос по видео “PLC Siemens + Speedgoat real-time machine”: После того как была загружена программа в реальный ПЛК, откуда приходит сигнал On для включения установки?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 нашей модели нагревателя и он переходит в рабочее состояние.
На самом деле не обязаятельно делать это вручную. Можно целый сценарий эксперимента заранее продумать.
Так просто нагляднее.Alexor
09.07.2015 13:35+1Спасибо, про GUI я понял.
То есть, нажимаете кнопку на экране, значение попадает в машину реального времени, после чего с “железного” выхода этой машины идёт на вход ПЛК (I1.0)?slovak Автор
09.07.2015 14:34Абсолютно верно.
Модель Simulink на моем ноутбуке — зеркало исполняемого файла на машине реального времени.
Atakua
Спасибо за статью, и жду продолжения! Очень хочется иметь структурированный материал по моделированию именно такому, на границе реальности и компьютера. Сам-то я из стана создателей чисто программных моделей.
Если возможно, то хотелось бы увидеть рассказ о том, как именно требуется модифицировать персоналку для того, чтобы она стала пригодной для такого типа задач. Недавно на Хабре этот вопрос краем задевался, хочется увидеть ещё мнений от практиков.
slovak Автор
Я с удовольствием прочел диалог по предложенной ссылке.
Единственный правильный подход — отталкиваться от задач, и от предоставленных ресурсов. Временных, материальных, человеческих.
Если для решения поставленных задач хватает «мягкого» реального времени — можно смело использовать персоналку.
Есть куча решений для этого с использованием различных технологий. От мультимедийных таймеров до микроядер ОС.
Выбег за временной интервал — снижение качества сервиса.
Если же необходимо обеспечить «жесткое» реальное время — необходимо обезопасить себя от SMM, и других прерываний и временных задержек не контролируемых ОС и целевым приложением. И использовать соответствующую ОС жесткого реального времени.
Звучит просто, но на практике выливается в переписывание BIOS, перепайку материнской платы и прочие милые инженеру вещи.
А потом приходит момент, когда необходимо синхронизировать две машины, или сделать внешнее тактирование, или прерывания, или вынести часть логики на FPGA. Тогда реальное время на коленке перерастает в полноценную разработку аппаратной и программной части.
Это безумно интересно!
Но в итоге мы занимаемся разработкой инструментов, а не решением задач возложенных на инструменты.
Эти две активности нужно очень четко разделять.