В этом примере показано, как проверить сгенерированный код с помощью выполнения команд software-in-the-loop (SIL) и processor-in-the-loop (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.
При выполнении 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). Чтобы устранить эту проблему, используйте сопоставленный сетевой диск для UNC-пути в качестве текущей рабочей папки 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