Этот пример использует код С для контроллера теплового насоса, чтобы показать, как использовать мастер Средства импорта 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
алгоритм.
Controller
функционируйте использует две служебных функции, absoluteTempDifference
и pumpDirection
, которые заданы в utils.c
файл. absoluteTempDifference
функция возвращает абсолютную разность между Tset
и Troom_in
как двойное. pumpDirection
функция возвращает один из них PumpDirection
введите перечислимые значения.
PumpDirection
перечислимый type
задан в файле controllerTypes.h
.
Чтобы открыть мастер Средства импорта Кода, создайте пустую Библиотеку Simulink где src
и include
папки расположены и сохраняют его. В данном примере библиотека сохранена как heatpumpController
.
Затем на вкладке Modeling выберите Design> Code Importer.
Если Страница приветствия загружает, нажмите Start, чтобы начать процесс импорта.
На Странице настроек:
Имя файла Библиотеки Simulink автозаполняется с сохраненным именем библиотеки, в этом случае, heatpumpController
.
Папка 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:
Для Языка выберите C
.
Для Интерфейсных заголовков задайте необходимые заголовочные файлы. В данном примере задайте tempController.h
.
Для Исходных файлов задайте необходимые исходные файлы. В данном примере задайте tempController.c
и utils.c
местоположение файлов в src папке как .\src\tempController.c; .\src\utils.c
.
Для директорий 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, эта страница позволяет вам подтверждать операцию обновления, которая будет выполняться на библиотеке.
Выберите Overwrite, чтобы удалить любые существующие блоки и создать новые блоки Вызывающей стороны C для выбранных функций пользовательского кода.
Выберите 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. Можно использовать этот файл, чтобы загрузить мастер Средства импорта Кода с текущими настройками импорта.
Интегрируйте код С Используя блоки вызывающей стороны C | C вызывающая сторона | Добавьте библиотеки в браузер библиотеки | Импортируйте Пользовательский Код C/C++ Используя Средство импорта Simulink Кода