В этом примере показано, как проверить сгенерированный код с помощью выполнения ПО в цикле (SIL) и ПО в цикле (PIL). В этом примере при выполнении PIL используется аппаратная плата Raspberry Pi ®.
Этот пример использует следующие вспомогательные файлы:
kalman01.m
содержит функцию MATLAB ® kalman01
для оценки состояния фильтра Калмана.
position.mat
содержит входные данные о траектории объекта.
test01_ui.m
является скриптом MATLAB, который загружает входные данные из position.mat
в рабочую область, вызывает kalman01
оценить местоположение объекта с помощью алгоритма фильтрации Калмана и, наконец, вызвать plot_trajectory
функция, которая строит графики как фактической траектории объекта, так и оценки Калмана.
plot_trajectory.m
содержит plot_trajectory
функция, описанная выше.
Чтобы протестировать код MATLAB, запустите скрипт test01_ui
.
test01_ui
Current plot held
Current plot released
На графике, который отображается, вы видите, что оценка Калмана тесно соответствует фактической траектории объекта. Тестовые данные включают два внезапных сдвига или разрывы в положении. Эти разрывы проверяют, что фильтр Калмана может быстро перерегулировать свою оценку и вернуться к точному отслеживанию объекта.
Для получения дополнительной информации смотрите Генерацию кода C для алгоритма фильтрации MATLAB Kalman.
При выполнении SIL, через интерфейс MATLAB SIL, генератор кода компилирует и запускает библиотечный код на вашем компьютере разработчика.
Создайте coder.EmbeddedCodeConfig
объект для создания статической библиотеки C. Установите VerificationMode
свойство к 'SIL'
. При необходимости включите отладчик Microsoft ® Visual Studio ® для выполнения SIL.
config = coder.config('lib'); config.VerificationMode = 'SIL'; % config.SILDebugging = true;
Проверьте, что для настройки производственного оборудования задано значение по умолчанию 'Generic->MATLAB Host Computer'
.
disp(config.HardwareImplementation.ProdHWDeviceType);
Generic->MATLAB Host Computer
Используйте codegen
команда с объектом строения config
чтобы сгенерировать статическую библиотеку C и интерфейс SIL для kalman01
функция. Для выполнения выполнения SIL можно просто вызвать сгенерированный интерфейс SIL kalman01_sil
в командной строке MATLAB.
В codegen
команда, -test
Опция позволяет вам запустить тестовый скрипт test01_ui
с вызовами на kalman01
функция заменена вызовами сгенерированного интерфейса SIL kalman01_sil
.
codegen -config config -args {zeros(2,1)} kalman01 -report -test test01_ui
Code generation successful: View report Running test file: 'test01_ui' with MEX function 'kalman01_sil.mexw64'. Current plot held ### Starting SIL execution for 'kalman01' To terminate execution: clear kalman01_sil
Current plot released
Генератор кода создает следующие выходы папки:
codegen\lib\kalman01
- Статическая библиотека для kalman01
.
codegen\lib\kalman01\sil
- код интерфейса SIL для kalman01
.
Обратите внимание, что вывод этого запуска совпадает с выходом из kalman01
Функция MATLAB.
Если включить отладчик Microsoft Visual Studio, выполнение тестового файла откроет среду IDE Microsoft Visual Studio с точками останова отладчика в начале kalman01_initialize
и kalman01
функций.
Можно использовать функции отладчика для наблюдения за поведением кода. Для примера можно пройти по коду и изучить переменные.
Чтобы завершить сеанс отладки:
Удалите все точки останова.
Нажмите кнопку «Продолжить» (F5).
Выполнение SIL выполняется до своего завершения.
Завершает процесс выполнения SIL.
clear kalman01_sil;
### Stopping SIL execution for 'kalman01'
Можно также использовать команду clear mex
, который очищает MEX-функции от памяти.
Указания по применению для выполнения SIL на платформе Windows:
Брандмауэр Windows потенциально может заблокировать выполнение SIL. Чтобы разрешить выполнение, используйте диалоговое окно «Предупреждение безопасности Windows». Для примера в Windows 7 нажатий кнопки Разрешить доступ.
Предположим, что текущая рабочая директория MATLAB (папка, которая pwd
Отображения) являются UNC- пути (для примера, \\server\a\b\c
) на платформе Windows. Если вы запускаете исполняемый файл SIL из этого пути, расположение, где запускается исполняемый файл SIL, может быть непредсказуемым и отличаться от текущей рабочей директории MATLAB (для примера, C:\Windows
). Чтобы устранить эту проблему, используйте сопоставленный сетевой диск для пути в качестве текущей рабочей директории MATLAB.
При выполнении PIL, через интерфейс MATLAB PIL, генератор кода перекрестно компилирует и запускает производственные объектные коды на целевом процессоре или эквивалентном симуляторе процессора. Перед запуском выполнения PIL необходимо настроить строение подключения PIL для целевого компьютера. В этом примере при выполнении PIL используется аппаратная плата Raspberry Pi ®.
Создайте coder.EmbeddedCodeConfig
объект для создания статической библиотеки C. Установите VerificationMode
свойство к 'PIL'
. Установите Hardware
свойство объекта строения аппаратной платы для Raspberry Pi.
config = coder.config('lib'); config.VerificationMode = 'PIL'; config.Hardware = coder.hardware('Raspberry Pi');
Если вы впервые подключены к аппаратной плате Raspherry Pi, необходимо также указать Username
, DeviceAddress
, и Password
свойства config.Hardware
параметр.
Используйте codegen
команда с объектом строения config
чтобы сгенерировать статическую библиотеку C и PIL-интерфейс для kalman01
функция. Для выполнения PIL-выполнения можно просто вызвать сгенерированный PIL-интерфейс kalman01_pil
в командной строке MATLAB.
В codegen
команда, -test
Опция позволяет вам запустить тестовый скрипт test01_ui
с вызовами на kalman01
функция заменена вызовами сгенерированного PIL-интерфейса kalman01_pil
.
codegen -config config -args {zeros(2,1)} kalman01 -report -test test01_ui
### Connectivity configuration for function 'kalman01': 'Raspberry Pi' Location of the generated elf : /home/pi/MATLAB_ws/R2021a/C/Users/aghosh/Documents/ExampleManager/aghosh.Bdoc21a.j1630849/ecoder-ex65983262/codegen/lib/kalman01/pil Code generation successful: View report Running test file: 'test01_ui' with MEX function 'kalman01_pil.mexw64'. Current plot held ### Connectivity configuration for function 'kalman01': 'Raspberry Pi' ### Starting application: 'codegen\lib\kalman01\pil\kalman01.elf' To terminate execution: clear kalman01_pil ### Launching application kalman01.elf...
Current plot released
Генератор кода создает следующие выходы папки:
codegen\lib\kalman01
- Статическая библиотека для kalman01
.
codegen\lib\kalman01\pil
- Код интерфейса PIL для kalman01
.
Обратите внимание, что вывод этого запуска совпадает с выходом из kalman01
Функция MATLAB.
Брандмауэр Windows потенциально может заблокировать выполнение PIL. Чтобы разрешить выполнение, используйте диалоговое окно «Предупреждение безопасности Windows». Для примера в Windows 7 нажатий кнопки Разрешить доступ.
Завершает процесс выполнения PIL.
clear kalman01_pil;
### Host application produced the following standard output (stdout) and standard error (stderr) messages:
Можно также использовать команду clear mex
, который очищает MEX-функции от памяти.
codegen
| coder.config
| coder.EmbeddedCodeConfig