Создайте целевую настройку возможности соединения при помощи целевых API возможности соединения. С целевой настройкой возможности соединения можно запустить процессор в цикле (PIL) симуляции на пользовательском встроенном оборудовании.
Вы учитесь как:
Адаптируйте процесс сборки, чтобы поддержать PIL симуляции.
Сконфигурируйте инструмент для загрузки и запуска выполнения исполняемого файла PIL на вашем целевом компьютере.
Сконфигурируйте канал связи между хостом и целью, чтобы поддержать PIL симуляцию на целевом компьютере.
Начните с модели, сконфигурированной для программного обеспечения в цикле (SIL) симуляцию. Этот пример проводит вас по процессу создания целевой настройки возможности соединения так, чтобы можно было симулировать модель в режиме PIL. Пример запускается полностью на вашем хосте - компьютере. Можно выполнить те же шаги, чтобы создать настройку возможности соединения для собственного оборудования целевого процессора.
См. также Тестовый Сгенерированный код с SIL симуляциями и PIL симуляциями и Создайте Целевой Канал связи для Процессора В Цикле (PIL) Симуляция.
Позже в этом примере, вы добавите папку в путь поиска файлов. Создайте путь к папке.
sl_customization_path = fullfile(matlabroot,... 'toolbox',... 'rtw',... 'rtwdemos',... 'pil_demo');
Если эта папка уже находится на пути поиска файлов, удалите его.
if strfind(path,sl_customization_path) rmpath(sl_customization_path) end
Сбросьте индивидуальные настройки.
sl_refresh_customizations
Создайте временную папку (во временной папке вашей системы) для сборки и инспекционного процесса.
currentDir = pwd; rtwdemodir();
Симулируйте модель, сконфигурированную для SIL. Проверьте сгенерированный код, скомпилированный для вашего хоста - компьютера путем сравнения поведения SIL симуляции с нормальным поведением симуляции.
Убедитесь, что модель в качестве примера недавно открыта.
close_system('rtwdemo_sil_modelblock',0); close_system('rtwdemo_sil_counter',0) open_system('rtwdemo_sil_modelblock')
Блок Model CounterA отображает текст (SIL), который указывает, что его модель, на которую ссылаются, сконфигурирована для SIL симуляции.
Запустите симуляцию системы.
set_param('rtwdemo_sil_modelblock','StopTime','10'); sim('rtwdemo_sil_modelblock');
### Starting build procedure for model: rtwdemo_sil_counter ### Successful completion of build procedure for model: rtwdemo_sil_counter ### Preparing to start SIL simulation ... Building with 'Microsoft Visual C++ 2017 (C)'. MEX completed successfully. ### Updating code generation report with SIL files ... ### Starting SIL simulation for component: rtwdemo_sil_counter ### Stopping SIL simulation for component: rtwdemo_sil_counter
Запустите работают над целевой настройкой возможности соединения для PIL.
Сделайте локальную копию целевых классов настройки возможности соединения.
src_dir = ... fullfile(matlabroot,'toolbox','coder','simulinkcoder','+coder','+mypil'); if exist(fullfile('.','+mypil'),'dir') rmdir('+mypil','s') end mkdir +mypil copyfile(fullfile(src_dir,'Launcher.m'), '+mypil'); copyfile(fullfile(src_dir,'TargetApplicationFramework.m'), '+mypil'); copyfile(fullfile(src_dir,'ConnectivityConfig.m'), '+mypil');
Сделайте скопированные файлы перезаписываемыми.
fileattrib(fullfile('+mypil', '*'),'+w');
Обновите имя пакета, чтобы отразить новое местоположение файлов.
coder.mypil.Utils.UpdateClassName(... './+mypil/ConnectivityConfig.m',... 'coder.mypil',... 'mypil');
Проверьте, что у вас теперь есть папка +mypil в текущей папке, которая имеет файлы Launcher.m, TargetApplicationFramework.m и ConnectivityConfig.m.
dir './+mypil'
. Launcher.m .. TargetApplicationFramework.m ConnectivityConfig.m
Класс, который конфигурирует инструмент для запуска исполняемого файла PIL, является mypil.Launcher. Откройте этот класс в редакторе.
edit(which('mypil.Launcher'))
Рассмотрите содержимое этого файла. Метод setArgString предоставляет дополнительные параметры командной строки к исполняемому файлу. Эти параметры могут включать номер порта TCP/IP. Для реализации встраиваемого процессора можно выбрать к твердому коду эти настройки.
Просмотрите класс mypil.ConnectivityConfig.
edit(which('mypil.ConnectivityConfig'))
Рассмотрите содержимое этого файла. Необходимо смочь идентифицировать:
Создание экземпляра rtw.connectivity.RtIOStreamHostCommunicator, который конфигурирует сторону хоста коммуникационного канала TCP/IP.
Вызов setArgString метода Средства запуска, которое конфигурирует целевую сторону коммуникационного канала TCP/IP.
Вызов setTimer, который конфигурирует таймер для измерения времени выполнения
Чтобы задать ваш собственный целевой таймер в течение времени выполнения, профилируя, необходимо пользоваться Заменяющей Библиотекой Кода, чтобы задать замену для функции code_profile_read_timer. Используйте API командной строки или crtool пользовательский интерфейс.
Просмотрите файл rtiostream_tcpip.c.
rtiostreamtcpip_dir=fullfile(matlabroot,'toolbox','coder','rtiostream','src',... 'rtiostreamtcpip'); edit(fullfile(rtiostreamtcpip_dir,'rtiostream_tcpip.c'))
Прокрутите вниз в конец этого файла. Смотрите, что этот файл содержит реализацию TCP/IP функций rtIOStreamOpen, rtIOStreamSend, и rtIOStreamRecv. Эти функции требуются для целевого компьютера связаться с вашим хостом - компьютером. Необходимо обеспечить реализацию для каждой из этих функций, которая характерна для целевого компьютера и канала связи.
Класс, который конфигурирует дополнительные файлы, чтобы включать в сборку, является mypil.TargetApplicationFramework. Откройте этот класс в редакторе.
edit(which('mypil.TargetApplicationFramework'))
Чтобы использовать новую целевую настройку возможности соединения, необходимо обеспечить sl_customization файл. sl_customization файл указывает вашу новую целевую настройку возможности соединения и задает необходимые условия для ее использования. Условия, заданные в этом файле, могут включать имя вашего системного конечного файла и ваших настроек аппаратной реализации.
Можно просмотреть sl_customization файл. В данном примере вы не должны вносить изменения в файл.
edit(fullfile(sl_customization_path,'sl_customization.m'))
Добавьте sl_customization папку в путь поиска файлов и обновите индивидуальные настройки.
addpath(sl_customization_path); sl_refresh_customizations;
Запустите PIL симуляцию.
close_system('rtwdemo_sil_modelblock',0) open_system('rtwdemo_sil_modelblock') set_param('rtwdemo_sil_modelblock/CounterA','SimulationMode','processor-in-the-loop (pil)'); set_param('rtwdemo_sil_modelblock','StopTime','10'); sim('rtwdemo_sil_modelblock');
### Starting build procedure for model: rtwdemo_sil_counter ### Generated code for 'rtwdemo_sil_counter' is up to date because no structural, parameter or code replacement library changes were found. ### Successful completion of build procedure for model: rtwdemo_sil_counter ### Connectivity configuration for referenced model "rtwdemo_sil_counter": My PIL Example ### EXECUTING METHOD SETARGSTRING SETARGSTRING called from line 71 of ConnectivityConfig.m ### Preparing to start PIL simulation ... Building with 'Microsoft Visual C++ 2017 (C)'. MEX completed successfully. ### Updating code generation report with PIL files ... ### Starting application: 'rtwdemo_sil_counter_ert_rtw\pil\rtwdemo_sil_counter.exe' Starting PIL simulation Started new process, pid = 14132 Stopping PIL simulation Terminated process, pid = 14132
Рассмотрите предыдущие сообщения. Подтвердите, что симуляция запустилась без ошибок. Вы теперь реализовали целевую настройку возможности соединения для PIL. Можно использовать те же API, чтобы реализовать настройку возможности соединения для собственной комбинации встраиваемого процессора, загрузить инструмент и коммуникационный канал.
Удалите путь поиска файлов для этого примера.
rmpath(sl_customization_path)
Сбросьте индивидуальные настройки.
sl_refresh_customizations
Закройте модели.
close_system('rtwdemo_sil_modelblock',0) close_system('rtwdemo_sil_counter',0) rtwdemoclean; cd(currentDir)