Создайте целевое строение подключения с помощью целевых API-интерфейсов подключения. С целевым строением подключения можно запустить симуляции процессора в цикле (PIL) на пользовательском встраиваемом оборудовании.
Вы узнаете, как:
Адаптируйте процесс сборки для поддержки PIL симуляций.
Сконфигурируйте инструмент для загрузки и запуска выполнения исполняемого файла PIL на целевом компьютере.
Сконфигурируйте канал связи между хостом и объектом для поддержки PIL симуляции на целевой компьютер.
Начните с модели, настроенной для симуляции ПО в цикле (SIL). Этот пример проведет вас через процесс создания целевого строения связи, чтобы можно было симулировать модель в PIL-режиме. Пример полностью работает на вашем хосте-компьютере. Можно выполнить те же действия, чтобы создать строение подключения для собственного встроенного целевого оборудования.
Смотрите также Тестирование Сгенерированного кода с SIL и PIL Simulations и создайте целевой канал связи для моделирования процессора в цикле (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')
Блок CounterA Model отображает текст (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. Пусковая установка. Откройте этот класс в редакторе.
edit(which('mypil.Launcher'))
Проверьте содержимое этого файла. Метод setArgString подает дополнительные параметры командной строки в исполняемый файл. Эти параметры могут включать номер порта TCP/IP. Для реализации встраиваемого процессора можно выбрать жесткий код этих настроек.
Просмотрите mypil класса. ConnectivityConfig.
edit(which('mypil.ConnectivityConfig'))
Проверьте содержимое этого файла. Вы должны иметь возможность идентифицировать:
Создание образца rtw.connectivity.RtIOStreamHostCommunicator, который конфигурирует хост-сторону канала связи TCP/IP.
Вызов метода setArgString Launcher, который конфигурирует целевую сторону канала связи 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 функций rt IOS tream Open, rt IOS tream Send и rt IOS tream Recv. Эти функции требуются для связи целевого компьютера с вашими хостами-компьютерами. Вы должны предоставить реализацию для каждой из этих функций, которая характерна для вашего целевого компьютера и канала связи.
Класс, который конфигурирует дополнительные файлы, чтобы включить в сборку, является 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)