Создайте целевую конфигурацию подключения с помощью целевых 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')
Блок 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, TargetStartFramework.m и ConnectivityConfig.m.
dir './+mypil'. Launcher.m .. TargetApplicationFramework.m ConnectivityConfig.m
Класс, настраивающий инструмент для запуска исполняемого файла PIL, является mypil. Пусковая установка. Откройте этот класс в редакторе.
edit(which('mypil.Launcher'))Просмотрите содержимое этого файла. Метод setArgString предоставляет исполняемому файлу дополнительные параметры командной строки. Эти параметры могут включать номер порта TCP/IP. Для встраиваемой реализации процессора можно выбрать жесткое кодирование этих настроек.
Просмотр мипиля класса. Конфигурационный элемент подключения.
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. TargetStartFramework. Откройте этот класс в редакторе.
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)