В рабочем процессе Модельно-ориентированное проектирование вы используете MathWorks® продукты для генерации кода для числовых приложений, которые используют арифметику с фиксированной и плавающей точками.
Для разработки моделей вы используете MATLAB®, Simulink®, и Stateflow®.
Чтобы сгенерировать исходный код, вы используете Simulink Coder™ и Embedded Coder®.
Чтобы протестировать числовую эквивалентность между вашей моделью и сгенерированным кодом, вы сравниваете результаты симуляции модели и сгенерированного кода. Для примера режима normal mode результаты моделирования по сравнению с результатами моделирования ПО в цикле (SIL).
Результаты моделирования и моделирования сгенерированного кода численно непротиворечивы, если:
В приложениях с фиксированной точкой результаты согласуются в битовом сравнении.
В приложениях с плавающей точкой результаты согласуются с заданным допуском ошибки.
Для сравнения результатов используйте Данные моделирования Inspector. Чтобы определить, существуют ли расхождения или они значительны, можно задать абсолютное и относительная погрешность значения:
Для приложений с фиксированной точкой можно задать абсолютную погрешность нуля.
Для приложений с плавающей точкой можно задать допуск относительно ссылки значения или сигнала. Выбор ссылки зависит от вашего приложения. Рассмотрим следующие примеры:
Алгоритм, который решает линейное алгебраическое уравнение итеративными вычислениями прямой ошибки. Можно задать допуск относительно eps
.
Пропорционально-интегрально-производный (ПИД) контроллер для системы с обратной связью. Для переходного поведения можно задать допуск с критериями из стандарта. Для статического поведения можно задать допуск со ссылкой на характеристики ПИД-регулятора.
Программно можно задать абсолютное и относительная погрешность значения через absTol
и relTol
свойства Simulink.sdi.Signal
объект.
Для сложных систем числовые разности между моделями и сгенерированным кодом симуляциями могут быть результатом различий на уровне блоков, распространяющихся через систему. Если вы наблюдаете числовые различия в уровень системы:
Идентифицируйте блоки, для которых числовые различия блочного уровня превышают допуск ошибки.
Исследуйте каждый идентифицированный блок.
Рассмотрим следующую модель объекта управления.
T формирует опорные или тестовые сигналы.
C является компонентом контроллера. Выходным контроллер выходом является вход объекта управления. C может быть блоком Model, который содержит несколько блоков Model.
P является компонентом объекта управления. Выходной выход объекта управления вычитается из опорного сигнала для создания входа контроллера.
Чтобы проверить числовую эквивалентность между контроллером модели и сгенерированной версией сгенерированного кода:
Запустите модель в режим normal mode и, используя Данные моделирования Inspector, запишите выход C.
Задайте режим SIL для C. Перезапустите симуляцию, записав выход C.
Используя Данные моделирования Inspector, сравните выходы normal и SIL mode со ссылкой на ваш заданный допуск ошибки.
Если сравнение Данных моделирования Inspector указывает на соответствие, результаты модели и сгенерированного кода численно согласуются.
Если выходы normal и SIL не совпадают:
В пределах C включите регистрацию сигнала для выходов блоков.
Запустите модель в режим normal mode.
Перезапустите симуляцию с C в режиме SIL.
Используя Данные Моделирования Inspector, сравните записанные выходные сигналы со ссылкой на ваш заданный допуск ошибки. См. Сравнение данных моделирования.
Идентифицируйте блоки, для которых выходные различия в режиме normal и SIL превышают допуск ошибки.
Проанализируйте каждый идентифицированный блок и найдите причину. Для примера сгенерированный код может использовать другую математическую библиотеку, чем MATLAB.
Примечание
Если требуется сравнение большого количества сигналов, можно автоматизировать рабочий процесс с помощью Simulink Test™. Смотрите верификацию для подсистемы (Simulink Test).
В разработке приложений с фиксированной и плавающей точками существуют факторы, которые могут повлиять на численное согласие между результатами блочного уровня от моделирования и сгенерированного кода моделирования.
Некоторые факторы могут влиять как на приложения с фиксированной точкой, так и на приложения с плавающей точкой. Для примера использование:
Оптимизация генерации кода.
Пользовательский код.
Записи библиотеки замещения кода, результаты которых отличаются от результатов MATLAB.
Библиотеки замещения кода, которые реализуют различные алгоритмы.
Другие факторы влияют только на приложения с плавающей точкой. Для примера:
Численная обоснованность алгоритма.
Чувствительность алгоритма к входу.
Поведение замкнутого цикла и разомкнутого контура.
[1] IEEE® Стандарт на переходы, импульсы и связанные формы волны, стандарт IEEE 181, 2003, стр. 15-17.