Методика генерации из моделей MATLAB текста программ на языке
С
для процессоров встроенных систем
В.М. Понятский,
нач. сект., к.т.н, доц.,
Д.В. Кушников,
нач. сект.,
В.Г. Федорищева,
вед. инж.,
ГУП «КБП», kbkedr@tula.net, г. Тула
Пакет MATLAB помимо широких возможностей динамического моделирования сложных изделий,
состоящих из подсистем различной физической природы, имеет возможности по
автоматической генерации С-кода. Генерация С-кода основана на применении
пакетов-расширений MATLAB: Real-Time Workshop и
Real-Time Workshop Embedded Coder [1]. Сгенерированный
исходный код может применяться для создания приложений, работающих в реальном
времени вне среды MATLAB, в том числе и для
микропроцессоров встроенных систем.
В развитие технологий,
изложенных в [2, 3], предлагается методика
генерации С-кода из
модели Simulink, включающая следующие этапы:
этап
1 – создание Simulink-модели в соответствии
с заданным алгоритмом и ее отладка;
этап
2 – доработка Simulink-модели с учетом дискретных преобразований сигналов;
этап
3 – преобразование Simulink-модели в
модель для расчетов c фиксированной точкой;
этап
4 – генерация С-кода из модели Simulink;
этап
5 – тестирование сгенерированного С-кода;
этап
6 – интеграция сгенерированного С-кода
в среду разработки
процессора.
С помощью предлагаемой
методики реализован алгоритм управления рулевым приводом для встроенного
микропроцессора.
На этапе 1 в соответствии со структурной схемой и
математическим описанием в среде динамического моделирования Simulink пакета
MATLAB создается
и отлаживается непрерывная модель рулевого привода (рис.1).
рис. 1 Модель рулевого привода в Simulink
Проводится проверка
правильности функционирования разработанной модели на соответствие заданному
алгоритму с помощью построения ЛАФЧХ
звеньев модели, а также по результатам отработки тестовых сигналов (рис.2).
а)
б)
рис. 2 Отработка тестовых
сигналов Simulink-модели рулевого привода:
a – в линейной зоне; б – на упорах
На рисунках обозначены:
входной сигнал
выход Simulink-модели
Блок управления рулевого привода, из которого будет
генерироваться C-код, с помощью команды Create subsystem преобразуется
в подсистему BU (рис.3).
рис. 3 Simulink-модель
рулевого привода с блоком управления в виде подсистемы
Внутренняя структура
блока управления рулевым приводом
приведена на риcунке.4.
рис.4 Внутренняя структура блока управления
рулевым приводом
На этапе 2 осуществляется
приведение Simulink-модели к физической модели реальной аппаратуры, для которой
будет генерироваться С-код. Доработка Simulink-модели заключается в добавлении
блоков, реализующих преобразование сигналов с помощью АЦП, ЦАП и
различные инверсии сигналов, присутствующие в реальной системе
управления (рис.5, 6).
На этапе 3 осуществляется
преобразование непрерывной модели Simulink в модель для расчетов с
фиксированной точкой. Основными критериями при назначении типов данных блоков
Simulink-модели являются:
·
требуемая
точность;
·
диапазон
изменения сигналов;
·
разрядность
процессора.
На этапе 3 выполняются следующие шаги:
· преобразование непрерывных блоков подсистемы
(интеграторов, блоков передаточных функций) в дискретные;
· подключение входов и выходов подсистемы к непрерывной
части модели через блоки преобразования типов данных Data Type Conversion;
· назначение типов
данных блоков с
фиксированной точкой с определением места положения точки по известным диапазонам изменения сигналов;
· уточнение положения точки (дробной части числа) с
помощью графического интерфейса Fixed-Point Tool.
рис.5 Simulink-модель
рулевого привода с учетом преобразования сигналов
рис.6 Simulink-модель блока
управления рулевым приводом с учетом преобразования сигналов
Окно графического интерфейса
Fixed-Point Tool показано на рисунке 7.
Для уточнения положения точки
с помощью Fixed-Point Tool выполняются
следующие действия:
· определяются реальные диапазоны изменения сигналов в
блоках моделированием с типом данных double;
· пересчитываются в зависимости от диапазонов типы
данных блоков подсистемы;
· присваиваются новые рассчитанные типы данных;
· проводится сравнение результатов моделирования с double
и с fixed point.
В результате выполнения итераций по уточнению
положения точки (дробной части числа) обеспечивается требуемая точность
вычислений при отсутствии
переполнений и насыщения
сигналов.
рис.7 Окно графического интерфейса Fixed-Point
Tool
На рисунке 8 приведена окончательная
модель блока управления рулевым приводом, преобразованная для расчетов с
фиксированной точкой и готовая к
генерации С-кода.
рис.8 Simulink-модель блока
управления рулевым приводом для расчетов с фиксированной точкой
На этапе 4 проводится
генерация С-кода из подсистемы блока управления рулевым приводом,
преобразованной для расчетов с фиксированной точкой.
Процесс генерации С-кода
включает следующие процедуры:
·
настройка
параметров решателя;
·
выбор целевого
файла;
·
выбор аппаратной
реализации;
·
выбор опций
оптимизации кода;
·
генерация С-кода.
Можно воспользоваться уже
готовыми настройками параметров генерации кода для получения оптимизированного
С-кода, выбрав из библиотеки Real-Time Embedded Coder->Configurations Wizard соответствующий блок и перенеся его внутрь
подсистемы, из которой генерируется код. Настройки активируются с помощью
двойного клика.
Вместе с файлами кода можно
сгенерировать файл отчета о сгенерированном коде (рис.9). Отчет содержит
информацию о дате генерации кода, версии MATLAB, версии Simulink-модели, информацию о настройках
генерации кода, тексты файлов кода. Также отчет позволяет осуществлять
навигацию из текста кода в Simulink-модель и обратно.
рис.9 Резюме
отчета о сгенерированном коде
На этапе 5 осуществляется проверка
сгенерированного кода путем сравнения результатов его выполнения с моделью
Simulink - SIL-тестирование. Для этого из сгенерированного кода
создается S-функция. Эта S-функция представляет собой обертку, в которую
помещается сгенерированный С-код. Получить S-функцию из сгенерированного кода можно с помощью
инструментов Real-Time Workshop, Legacy Code Tool или
блока Simulink
S-Function
Builder. S-функция подключается параллельно модели Simulink и
проводится моделирование для сравнения результатов выполнения С-кода и модели
(рис.10).
а)
б)
в)
рис.10 Тестирование
сгенерированного кода с помощью S-функции (SIL-тестирование):
a – Simulink-модель
рулевого привода с S-функцией; б – результаты тестирования в линейной зоне;
в – результаты тестирования при
выходе на упоры
На рисунках обозначены:
входной сигнал
выход Simulink-модели с непрерывным
блоком управления
выход Simulink-модели с блоком управления в виде S-функции,
содержащей сгенерированный код
На этапе 6 осуществляется
интеграция MATLAB со средой разработки процессора, для которого
генерируется С-код. В пакете MATLAB есть
специальные инструменты для интеграции Simulink с
программной средой специализированных микропроцессоров: Embedded IDE Link и
Target Support Package. Они позволяют создавать из генерируемого кода исполняемую программу и загружать ее в
процессор.
На рисунке 11 показана
Simulink-модель блока управления рулевым приводом с блоком Custom Board для
интеграции со средой Texas Instruments
Code Composer Studio
рис.11 Simulink-модель
блока управления рулевым приводом с блоком Custom Board
На этом этапе проводится PIL-тестирование – сравнение результатов
выполнения программы в процессоре с моделью Simulink. В режиме
PIL-симуляции программное обеспечение
Real-Time Workshop Embedded Coder
генерирует эффективный код из модели алгоритма управления. Этот код выполняется на микроконтроллере в пошаговом режиме и
результаты его выполнения сравниваются с результатами моделирования
Simulink-модели. Для генерации кода на компьютере вместе с пакетом MATLAB
должна быть установлена среда разработки специализированного процессора
(например, для процессоров Texas Instruments – среда Code Composer
Studio), микропроцессор или его
эмулятор.
Автоматическая генерация
С-кода с
помощью пакета MATLAB позволяет
избежать ошибок, неизбежных при ручном программировании, ускорить процесс
написания и тестирования программного обеспечения для микроконтроллеров
встроенных систем, оперативно вносить изменения в разработанное программное обеспечение, что
особенно важно при отработке различных вариантов изделия.
1.
Дьяконов В.,
Круглов В. Математические
пакеты расширения MATLAB. Специальный справочник. – СПб.: Питер,
2001.
2.
3.
Понятский В.М.
Кушников Д.В., Федорищева В.Г. Автоматизированная технология генерации
программы в среде MATLAB для реализации алгоритмов управления рулевого привода
Изв. ТулГУ. Сер. «Проблемы проектирования и производства систем и
комплексов». - Тула: ТулГУ, 2010, Вып.11. С. 462-467.