exponenta event banner

Конфигурирование процессора в петле (PIL) для пользовательского целевого объекта

Создайте целевую конфигурацию подключения с помощью целевых 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. Проверьте созданный код, скомпилированный для компьютера, сравнив поведение моделирования 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

Класс, настраивающий инструмент для запуска исполняемого файла 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 регистрирует новую конфигурацию целевого подключения и задает необходимые условия для его использования. Условия, указанные в этом файле, могут включать имя целевого файла системы и параметры реализации оборудования.

Можно просмотреть файл sl_customization. В этом примере нет необходимости вносить изменения в файл.

edit(fullfile(sl_customization_path,'sl_customization.m'))

Добавьте папку sl_customization в путь поиска и обновите настройки.

addpath(sl_customization_path);
sl_refresh_customizations;

Тест сгенерированного кода с моделированием PIL

Запустите моделирование 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)

Связанные темы