exponenta event banner

Примеры интеграции внешнего кода

В этом разделе представлены различные сценарии интеграции внешнего кода.

Интеграция внешнего кода C++ в модель с использованием S-функций

В этом примере показано, как интегрировать код C++ в модель с помощью S-функций.

Открыть пример модели

Открыть пример модели rtwdemo_cpp.

open_system('rtwdemo_cpp');

Настройка компилятора C++

1. В окне команд MATLAB введите следующую команду:

mex -setup

2. В ответ на запрос выберите компилятор C++, установленный на компьютере разработчика.

Интеграция кода C++

Код C++ можно интегрировать в модель с помощью S-функций.

1. Подготовьте источник S-функций.

2. Откройте приложение Simulink Coder или Embedded Coder.

3. Настройка исходных файлов и папок S-функции. Откройте диалоговое окно Параметр конфигурации модели (Model Configuration Parameter), перейдите на панель Создание кода (Code Generation) > Пользовательский код (Custom Code) и добавьте исходные файлы S-функций и include папки.

4. Встроите S-функцию, чтобы исключить служебные данные S-функций в сгенерированном коде.

Открытые sfun_cppcount_cpp.tlc

Настройка модели для генерации кода C++

Задайте для параметра конфигурации модели Язык значение C++.

Создание и просмотр кода.

Создайте и просмотрите код C++.

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

Вставка внешнего кода C и C++ в диаграммы потока состояний для создания кода

В этом примере показано, как использовать Stateflow ® для интеграции внешнего кода в модель.

Открыть модель

model='rtwdemo_sfcustom';
open_system(model);

Интегрировать код

1. Пример включает пользовательский файл заголовка my_header.c и пользовательский исходный файл my_function.c.

%Open files my_header.h and my_function.c
eval('edit my_header.h')
eval('edit my_function.c')

2. В диалоговом окне Параметры конфигурации модели (Model Configuration Parameters) на панели Цель моделирования (Simulation Target) введите пользовательский исходный файл и файл заголовка. Также введите дополнительные каталоги и исходные файлы.

В этом примере настраиваемый файл заголовка my_header.c и исходный файл my_function.c вводятся на панели цели моделирования.

%Open Configuration Parameters dialog box
configSet = getActiveConfigSet(model);
openDialog(configSet);

3. Чтобы создать код, в диалоговом окне Параметры конфигурации модели (Model Configuration Parameters) «Создание кода» (Code Generation) > панель «Пользовательский код» (Custom Code) введите один и тот же пользовательский исходный файл и файл заголовка. Также введите те же дополнительные каталоги и исходные файлы.

В этом примере настраиваемый файл заголовка my_header.c и исходный файл my_function.c вводятся на панели «Создание кода» > «Пользовательский код».

Откройте панель Создание кода (Code Generation) > Пользовательский код (Custom Code) диалогового окна Параметры конфигурации модели (Model Configuration Parameters).

configSet = getActiveConfigSet(model);
openDialog(configSet);

Создать код

slbuild('rtwdemo_sfcustom')
### Starting build procedure for: rtwdemo_sfcustom
### Successful completion of build procedure for: rtwdemo_sfcustom

Build Summary

Top model targets built:

Model             Action                       Rebuild Reason                                    
=================================================================================================
rtwdemo_sfcustom  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 6.8965s

Код вызова C из Stateflow

Чтобы вызвать пользовательские функции кода C из Stateflow, используйте тот же синтаксис, что и вызовы графических функций: result = my_custom_function(in_args);

Для вызова переменных структурного типа используйте точечную нотацию: result = my_var.my_field;

См. также

Закрыть модель

rtwdemoclean;
close_system('rtwdemo_sfcustom',0);

Интеграция внешнего кода C в сгенерированный код с помощью пользовательских блоков кода и параметров конфигурации модели

В этом примере показано, как поместить внешний код в созданный код с помощью пользовательских блоков кода и параметров конфигурации модели.

1. Открытие модели rtwdemo_slcustcode.

open_system('rtwdemo_slcustcode')

2. Откройте приложение Simulink Coder или Embedded Coder.

3. Откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters) и перейдите на панель Пользовательский код (Custom Code).

4. Проверьте настройки параметров конфигурации модели Source file и Initialize function.

  • Исходный файл указывает комментарий и задает переменную GLOBAL_INT2 до -1.

  • Функция инициализации инициализирует переменную GLOBAL_INT2 на 1.

5. Закройте диалоговое окно.

6. Дважды щелкните блок «Источник модели». Параметр блока «Верх источника модели» указывает, что генератор кода объявляет переменную GLOBAL_INT1 и установите значение 0 в верхней части созданного файла rtwdemo_slcustcode.c.

7. Откройте запускаемую подсистему Amplifier. Подсистема включает в себя блок системных выходов. Генератор кода помещает код, указанный в этом блоке, в созданный код для ближайшей родительской атомной подсистемы. В этом случае генератор кода помещает внешний код в созданный код для Amplifier подсистема. Внешний код:

  • Объявляет переменную указателя *intPtr и инициализирует его значением переменной GLOBAL_INT1.

  • Задает переменной указателя значение -1 во время выполнения.

  • Сбрасывает переменную указателя на 0 перед выходом.

8. Создание кода и отчета о создании кода.

9. Проверьте код в созданном исходном файле rtwdemo_slcustcode.c. В верхней части файла, после #include , вы находите следующий код объявления. В примере указывается первое объявление с параметром конфигурации Source file и второе объявление с блоком Model Source.

int_T GLOBAL_INT2 = -1;

int_T GLOBAL_INT1 = 0;

Функция вывода для Amplifier подсистема включает в себя следующий код, который показывает внешний код, интегрированный с сгенерированным кодом, который применяет усиление. Пример задает три строки кода для переменной указателя с блоком «Системные выходы» в Amplifier подсистема.

int_T *intPtr = &GLOBAL_INT1;

*intPtr = -1;

rtwdemo_slcustcode_Y.Output = rtwdemo_slcustcode_U.Input << 1;

*intPtr = 0;

Следующее назначение появляется в функции начальной точки инициализации модели. В примере это назначение указывается с помощью параметра конфигурации Initialize function.

GLOBAL_INT2 = 1;

Интеграция внешнего кода C в сгенерированный код с помощью пользовательских блоков кода и параметров конфигурации модели

В этом примере показано, как поместить внешний код в созданный код с помощью пользовательских блоков кода и параметров конфигурации модели.

1. Открытие модели rtwdemo_slcustcode.

open_system('rtwdemo_slcustcode')

2. Откройте приложение Simulink Coder или Embedded Coder.

3. Откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters) и перейдите на панель Пользовательский код (Custom Code).

4. Проверьте настройки параметров конфигурации модели Source file и Initialize function.

  • Исходный файл указывает комментарий и задает переменную GLOBAL_INT2 до -1.

  • Функция инициализации инициализирует переменную GLOBAL_INT2 на 1.

5. Закройте диалоговое окно.

6. Дважды щелкните блок «Источник модели». Параметр блока «Верх источника модели» указывает, что генератор кода объявляет переменную GLOBAL_INT1 и установите значение 0 в верхней части созданного файла rtwdemo_slcustcode.c.

7. Откройте запускаемую подсистему Amplifier. Подсистема включает в себя блок системных выходов. Генератор кода помещает код, указанный в этом блоке, в созданный код для ближайшей родительской атомной подсистемы. В этом случае генератор кода помещает внешний код в созданный код для Amplifier подсистема. Внешний код:

  • Объявляет переменную указателя *intPtr и инициализирует его значением переменной GLOBAL_INT1.

  • Задает переменной указателя значение -1 во время выполнения.

  • Сбрасывает переменную указателя на 0 перед выходом.

8. Создание кода и отчета о создании кода.

9. Проверьте код в созданном исходном файле rtwdemo_slcustcode.c. В верхней части файла, после #include , вы находите следующий код объявления. В примере указывается первое объявление с параметром конфигурации Source file и второе объявление с блоком Model Source.

int_T GLOBAL_INT2 = -1;

int_T GLOBAL_INT1 = 0;

Функция вывода для Amplifier подсистема включает в себя следующий код, который показывает внешний код, интегрированный с сгенерированным кодом, который применяет усиление. Пример задает три строки кода для переменной указателя с блоком «Системные выходы» в Amplifier подсистема.

int_T *intPtr = &GLOBAL_INT1;

*intPtr = -1;

rtwdemo_slcustcode_Y.Output = rtwdemo_slcustcode_U.Input << 1;

*intPtr = 0;

Следующее назначение появляется в функции начальной точки инициализации модели. В примере это назначение указывается с помощью параметра конфигурации Initialize function.

GLOBAL_INT2 = 1;

Вставка внешнего кода C++ в диаграммы потока состояний для создания кода

В этом примере показано, как использовать Stateflow ® для интеграции внешнего кода C++ в модель.

Открыть модель

model='rtwdemo_sfcpp';
open_system(model);

Для настройки компилятора C++ в командной строке введите mex -setup.

Интеграция кода C++

1. Создайте функции-оболочки в стиле C или получите доступ к макросам для каждого метода, вызываемого с языка действий C.

%Open example wrapper functions.
filename=fullfile(matlabroot, 'toolbox', 'rtw', 'rtwdemos', 'custom_cpp_src', 'adder_cpp.cpp');
eval('edit(filename)');
clear filename;

filename=fullfile(matlabroot, 'toolbox', 'rtw', 'rtwdemos', 'custom_cpp_src', 'adder_cpp.h');
eval('edit(filename)');
clear filename;

2. В диалоговом окне «Параметры конфигурации» «Создание кода» > «Пользовательский код» введите исходные файлы S-функции и включите каталоги.

%Open Configuration Parameters dialog box
configSet = getActiveConfigSet(model);
openDialog(configSet);

3. В диалоговом окне «Параметры конфигурации» «Цель моделирования» > «Пользовательский код» введите исходные файлы S-функции и включите каталоги.

%Open Configuration Parameters dialog box
configSet = getActiveConfigSet(model);
openDialog(configSet);

Создать код C++

В диалоговом окне «Параметры конфигурации» на панели «Создание кода» установите для параметра «Язык» значение C++. Для создания кода выберите «Построить».

%Open Configuration Parameters dialog box
configSet = getActiveConfigSet(model);
openDialog(configSet);
clear model;

См. также

Закрыть модель

rtwdemoclean;
close_system('rtwdemo_sfcpp',0);