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

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

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

Для продолжения нажмите кнопку Далее.
Примечание: Следующий код MATLAB эквивалентен этому шагу.
obj = Simulink.CodeImporter('heatpumpController'); obj.LibraryFileName = 'heatpumpController'; obj.OutputFolder = '$pwd$'; %This evaluates to the pwd
На странице «Задать пользовательский код»:
Для параметра «Язык» выберите C.
Для заголовков Interface укажите необходимые файлы заголовков. В данном примере задайте 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, эта страница позволяет вам подтвердить выполнение операции обновления в библиотеке.
Выберите Перезапись, чтобы удалить все существующие блоки и создать новые блоки C Caller для выбранных функций пользовательского кода.
Выберите Update, чтобы сохранить существующие блоки и добавить новые блоки C Caller для выбранных функций пользовательского кода.
В данном примере выберите Update, затем нажмите Next.

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