В этом примере используется код C для контроллера теплового насоса, чтобы показать, как с помощью мастера импорта кода Simulink ® импортировать пользовательский код C/C + + в библиотеку Simulink. В примере также показано, как выполнять эквивалентные действия с помощью интерфейса командной строки Simulink Code Importer в MATLAB ®. Дополнительные сведения см. в разделе Импорт пользовательского кода C/C + + с помощью средства импорта кода Simulink.
Эти исходные и заголовочные файлы кода C содержат полный код для контроллера теплового насоса.
Исходные файлы находятся в src каталог:
tempController.c
utils.c
Файлы заголовков находятся в include каталог:
tempController.h
utils.h
controllerTypes.h
Файл tempController.c содержит алгоритм для пользовательского кода C для блока теплового насоса. Controller функция в этом файле использует комнатную температуру (Troom_inи заданную температуру (Tset) в качестве входных данных. Выходные данные представляют собой pump_control_bus типовая конструкция с сигналами, которые управляют вентилятором, тепловым насосом и направлением теплового насоса (тепловым или холодным). pump_control_bus структура имеет следующие поля: fan_cmd, pump_cmd, и pump_dir. pump_control_bus тип структуры определен в файле controllerTypes.h.
Эта таблица суммирует выходные данные Controller алгоритм.
Controller функция использует две служебные функции, absoluteTempDifference и pumpDirection, которые определены в utils.c файл. absoluteTempDifference функция возвращает абсолютную разницу между Tset и Troom_in как двойник. pumpDirection функция возвращает одно из следующих значений: PumpDirection введите значения перечисления.
PumpDirection enum type определен в файле controllerTypes.h.
Чтобы открыть мастер импорта кода, создайте пустую библиотеку Simulink, в которой src и include папки находятся и сохраняют их. В этом примере библиотека сохраняется как heatpumpController.
Затем на вкладке Моделирование выберите Конструктор > Импортер кода.

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

На странице «Параметры»:
Имя файла библиотеки Simulink автоматически заполняется именем сохраненной библиотеки, в данном случае heatpumpController.
Папка вывода автоматически заполняется расположением сохраненной библиотеки Simulink.
При необходимости выберите «Добавить созданную библиотеку в браузер библиотеки Simulink» для создания файла slblocks.m.
slblocks.m используется для добавления созданной библиотеки в браузер библиотеки Simulink. Дополнительные сведения см. в разделе Добавление библиотеки в обозреватель библиотек.

Нажмите кнопку Далее, чтобы продолжить.
Примечание.Следующий код MATLAB эквивалентен этому шагу.
obj = Simulink.CodeImporter('heatpumpController'); obj.LibraryFileName = 'heatpumpController'; obj.OutputFolder = '$pwd$'; %This evaluates to the pwd
На странице «Указать пользовательский код»:
Для параметра «Язык» выберите C.
Для заголовков интерфейса укажите требуемые файлы заголовков. В этом примере укажите tempController.h.
Для параметра «Исходные файлы» укажите требуемые исходные файлы. В этом примере укажите tempController.c и utils.c расположение файлов в папке src как .\src\tempController.c; .\src\utils.c.
Для параметра «Включить каталоги» укажите требуемые каталоги. В этом примере укажите .\include.

Затем нажмите кнопку Далее.
Нажмите кнопку Далее на странице Анализ.
Примечание.Следующий код эквивалентен этому шагу.
% 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();
На странице Импорт выберите функции для импорта в библиотеку Simulink. В этом примере выберите Controller. Затем нажмите кнопку Далее.

Для каждой функции, выбранной на предыдущей странице, мастер генерирует спецификацию порта функции. Выбранные порты используются для сгенерированного блока 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, на этой странице можно подтвердить операцию обновления, выполняемую в библиотеке.
Выберите Overwrite, чтобы удалить все существующие блоки и создать новые блоки C Caller для выбранных функций пользовательского кода.
Выберите «Обновить», чтобы сохранить существующие блоки и добавить новые блоки C Caller для выбранных функций пользовательского кода.
В этом примере выберите Обновить и нажмите кнопку Далее.

Этот параметр доступен только при наличии лицензии Simulink Test™.
Чтобы протестировать импортированную функцию пользовательского кода с помощью Simulink Test Manager, выберите параметр Автоматически создавать тестовый электрический жгут для всех импортированных функций. Каждый блок в созданной библиотеке будет присоединен к внутреннему тестовому жгуту.
В этом примере выберите Пропустить. Нажмите кнопку «Далее», чтобы создать библиотеку 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-файла) можно выбрать «Добавить», выбрать требуемый файл проекта и добавить созданный файл в этот проект.
Нажмите кнопку Готово, чтобы закрыть мастер.
После нажатия кнопки Готово (Finish) выберите, следует ли сохранить текущие настройки импорта в файл JSON. Этот файл можно использовать для загрузки мастера импорта кода с текущими параметрами импорта.
Добавление библиотек в обозреватель библиотек | Вызывающий абонент C | Импорт пользовательского кода C/C + + с помощью средства импорта кода Simulink | Интеграция кода C с использованием блоков вызывающего абонента C