Импортируйте пользовательский код Используя мастер средства импорта Simulink кода

Этот пример использует код С для контроллера теплового насоса, чтобы показать, как использовать мастер Средства импорта Simulink® Кода, чтобы импортировать пользовательский код C/C++ в Библиотеку Simulink. Пример также показывает, как выполнить эквивалентные действия с помощью интерфейса командной строки Средства импорта Simulink Кода в MATLAB®. Для получения дополнительной информации смотрите Импорт Пользовательский Код C/C++ Используя Средство импорта Simulink Кода.

Контроллер теплового насоса пользовательский код

Они код С исходные и заголовочные файлы содержат полный код для контроллера теплового насоса.

Исходные файлы находятся в src директория:

  • tempController.c

  • utils.c

Заголовочные файлы находятся в include директория:

  • tempController.h

  • utils.h

  • controllerTypes.h

Файл tempController.c содержит алгоритм для пользовательского кода С для модуля теплового насоса. Controller функция в том файле использует комнатную температуру (Troom_in) и установленная температура (Tset) как входные параметры. Выходом является pump_control_bus введите структуру с сигналами, которые управляют вентилятором, тепловым насосом и направлением теплового насоса (тепло или холодный). pump_control_bus структура имеет эти поля: fan_cmd, pump_cmd, и pump_dir. pump_control_bus тип структуры задан в файле controllerTypes.h.

Эта таблица суммирует выход Controller алгоритм.

Температура УсловиеСистема СостояниеВентилятор КомандаНасос КомандаНасос Направление|Troom_\in - Tset | < DeltaT_вентиляторIdle00IDLEDelatT_вентилятор <= |Troom_\in - Tset | < DeltaT_насосFan только10IDLE|Troom_\in - Tset | >= DeltaT_насос и Tset < Troom_\inCooling11COOLING|Troom_\in - Tset | >= DeltaT_насос и Tset > Troom_\inHeating11HEATING

Controller функционируйте использует две служебных функции, absoluteTempDifference и pumpDirection, которые заданы в utils.c файл. absoluteTempDifference функция возвращает абсолютную разность между Tset и Troom_in как двойное. pumpDirection функция возвращает один из них PumpDirection введите перечислимые значения.

Температура УсловиеНасос НаправлениеTset < Troom_\inCOOLINGTset > Troom_\inHEATING

PumpDirection перечислимый type задан в файле controllerTypes.h.

Откройте мастер средства импорта кода

Чтобы открыть мастер Средства импорта Кода, создайте пустую Библиотеку Simulink где src и include папки расположены и сохраняют его. В данном примере библиотека сохранена как heatpumpController.

Затем на вкладке Modeling выберите Design> Code Importer.

Задайте библиотеку Simulink

Если Страница приветствия загружает, нажмите Start, чтобы начать процесс импорта.

На Странице настроек:

  1. Имя файла Библиотеки Simulink автозаполняется с сохраненным именем библиотеки, в этом случае, heatpumpController.

  2. Папка Output автозаполняется с местоположением сохраненной Библиотеки Simulink.

Опционально, выберите сгенерированную библиотеку Add к Браузеру Библиотеки Simulink, чтобы создать slblocks.m файл.

slblocks.m файл используется, чтобы добавить сгенерированную библиотеку в браузер Библиотеки Simulink. Для получения дополнительной информации смотрите, Добавляет Библиотека к Браузеру Библиотеки.

Нажмите Далее, чтобы продолжиться.

Примечание: следующий код MATLAB эквивалентен этому шагу.

obj = Simulink.CodeImporter('heatpumpController');
obj.LibraryFileName = 'heatpumpController';
obj.OutputFolder = '$pwd$'; %This evaluates to the pwd

Задайте пользовательский код, чтобы импортировать

На странице Specify Custom Code:

  1. Для Языка выберите C.

  2. Для Интерфейсных заголовков задайте необходимые заголовочные файлы. В данном примере задайте tempController.h.

  3. Для Исходных файлов задайте необходимые исходные файлы. В данном примере задайте tempController.c и utils.c местоположение файлов в src папке как .\src\tempController.c; .\src\utils.c.

  4. Для директорий Include укажите, что необходимые включают директории. В данном примере задайте .\include.

Затем нажмите Далее.

Нажмите Далее на странице Analyze.

Примечание: следующий код эквивалентен этому шагу.

% The src and include directories should be located in pwd
obj.CustomCode.InterfaceHeaders = 'tempController.h';
obj.CustomCode.Language = 'C';
obj.CustomCode.SourceFiles = {'.\src\tempController.c', '.\src\utils.c'};
obj.CustomCode.IncludePaths = '.\include';

% Analyze the specified custom code
obj.parse();

Задайте настройки импорта

Задайте функции, чтобы импортировать

На странице Import выберите функции, чтобы импортировать в Библиотеку Simulink. В данном примере выберите Controller. Затем нажмите Далее.

Установите технические требования порта блока

Поскольку каждая функция выбрала On предыдущей страницы, мастер генерирует функциональную спецификацию порта. Выбранные порты используются для сгенерированного блока C Caller.

В этом примере таблица спецификации порта приводит формальные аргументы Tset, Troom_in, и out для Controller функция.

Измените метку out аргумент к control_out. Нажать Далее.

Примечание: следующий код эквивалентен этому шагу.

% Requires a successful obj.parse() to get the function objects
fcnObj = obj.ParseInfo.getFunctions();

%fcnObj = 
%
%  Function with properties:
%
%                 Name: "Controller"
%           CPrototype: "pump_control_bus Controller(real_T Tset, real_T Troom_in);"
%    PortSpecification: [1×1 Simulink.CodeImporter.SimulinkPortSpecification]
%              IsEntry: 1
%            IsDefined: 1
%               IsStub: 0
%          ArrayLayout: NotSpecified
%      IsDeterministic: 0

fcnObj.PortSpecification.ReturnArgument.Label = 'control_out';

Задайте типы, чтобы импортировать

Затем выберите типы, чтобы импортировать в Simulink. Если тип требуется функциями, вы выбрали для импорта, он выбран и потускнел. В данном примере pump_control_bus требуется. Мастер создает словарь данных Simulink, содержащий этот тип, и соединяет словарь со сгенерированной библиотекой.

Нажать Далее.

Задайте установку обновления библиотеки

Поскольку этот пример использует сохраненную Библиотеку Simulink, эта страница позволяет вам подтверждать операцию обновления, которая будет выполняться на библиотеке.

  1. Выберите Overwrite, чтобы удалить любые существующие блоки и создать новые блоки Вызывающей стороны C для выбранных функций пользовательского кода.

  2. Выберите Update, чтобы сохранить существующие блоки и добавить новые блоки Вызывающей стороны C для выбранных функций пользовательского кода.

В данном примере выберите Update, затем нажмите Далее.

Создайте тестовую обвязку

Эта опция доступна, только если у вас есть лицензия Simulink Test™.

Чтобы протестировать импортированную функцию пользовательского кода использование менеджера по Simulink Test, выберите Automatically, создают тестовую обвязку для всех импортированных функций. Каждый блок в созданной библиотеке будет присоединен к внутренней тестовой обвязке.

В данном примере выберите Skip. Нажмите Далее, чтобы сгенерировать Библиотеку Simulink.

После импорта кода мастер создает библиотеку, присоединенную к словарю данных Simulink, который задает pump_control_bus как Simulink.Bus объект.

Примечание: следующий код эквивалентен этому шагу.

% Requires Simulink Test license to generate the test harness
obj.Options.CreateTestHarness = true;
obj.import('Functions', 'Controller', ...
           'Types', 'pump_control_bus', ...
           'Overwrite', 'off');          

Если у вас есть существующий файл проекта (файл PRJ), можно выбрать Add, выбрать желаемый файл проекта и добавить сгенерированный файл в тот проект.

Нажмите Finish, чтобы закрыть мастер.

Когда вы нажимаете Finish, выберите, сохранить ли текущие настройки импорта к файлу JSON. Можно использовать этот файл, чтобы загрузить мастер Средства импорта Кода с текущими настройками импорта.

Смотрите также

| | |