В этом примере показано, как создать код, который импортирует значение параметра из внешнего кода.
Предположим, внешний код определяет параметр вектора myGains с тремя элементами. Сохранение определения в текущей папке в файле с именем ex_vector_import_src.c.
#include "ex_vector_import_decs.h"
my_int8 myGains[3] = {
2,
4,
6
};
Сохранить объявление в текущей папке в файле с именем ex_vector_import_decs.h.
#include "ex_vector_import_cust_types.h" extern my_int8 myGains[3];
Сохранить определение типа данных my_int8 в текущей папке в файле с именем ex_vector_import_cust_types.h.
typedef signed char my_int8;
В текущей папке щелкните файл правой кнопкой мыши ex_vector_import_src.c и выберите Импорт данных.
В диалоговом окне «Импорт» задайте для параметра «Тип вывода» значение Numeric Matrix.
Задайте для имени созданной переменной MATLAB значение tempVar.
Выберите только значения параметров (2, 4, и 6) для импорта.

Импортируйте данные, установив зеленый флажок. Переменная MATLAB tempVar отображается в базовой рабочей области.
Можно также использовать командную строку для создания вручную tempVar.
tempVar = [2;4;6];
В командной строке создайте Simulink.Parameter объект, представляющий myGains.
myGains = Simulink.Parameter(tempVar);
Создание модели ex_vector_import.
open_system('ex_vector_import')

Откройте приложение Embedded Coder.
На вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor).
В Редакторе данных модели (Model Data Editor) проверьте вкладку Параметры (Parameters).
Используйте столбец «Значение», чтобы задать значение параметра «Усиление» в блоке «Усиление» равным myGains.
Нажмите кнопку Показать/обновить дополнительную информацию. Таблица данных теперь содержит строку, представляющую объект параметра, myGains.
Используйте столбец «Тип данных» для установки типа данных myGains кому my_int8.
Для другой строки (представляющей параметр Gain блока Gain) установите для параметра Data Type значение Inherit: Inherit from 'Gain'. С помощью этого параметра параметр Gain наследует тип данных my_int8 от myGains.
Установите в раскрывающемся списке Изменить представление значение Code.
Задать эти свойства для myGains:
Класс хранения для ImportFromFile
Файл заголовка для ex_vector_import_decs.h
Можно также использовать следующие команды в командной строке для настройки объекта и блока:
set_param('ex_vector_import/Gain','Gain','myGains',... 'ParamDataTypeStr','Inherit: Inherit from ''Gain''') myGains.DataType = 'my_int8'; myGains.CoderInfo.StorageClass = 'Custom'; myGains.CoderInfo.CustomStorageClass = 'ImportFromFile'; myGains.CoderInfo.CustomAttributes.HeaderFile = 'ex_vector_import_decs.h';
В командной строке создайте Simulink.AliasType объект для представления пользовательского типа данных my_int8. Установите DataScope и HeaderFile для импорта определения типа из внешнего кода.
my_int8 = Simulink.AliasType('int8'); my_int8.DataScope = 'Imported'; my_int8.HeaderFile = 'ex_vector_import_cust_types.h';
Задайте для параметра конфигурации модели Исходные файлы значение ex_vector_import_src.c.
set_param('ex_vector_import','CustomSource','ex_vector_import_src.c')
Создать код.
slbuild('ex_vector_import')
### Starting build procedure for: ex_vector_import ### Successful completion of build procedure for: ex_vector_import Build Summary Top model targets built: Model Action Rebuild Reason ================================================================================================= ex_vector_import 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 9.6498s
Созданный файл ex_vector_import.h включает внешние файлы заголовков ex_vector_import_decs.h и ex_vector_import_cust_types.h, которые содержат объявление переменной параметра (myGains) и определение пользовательского типа (my_int8).
file = fullfile('ex_vector_import_ert_rtw','ex_vector_import.h'); rtwdemodbtype(file,'#include "ex_vector_import_cust_types.h"',... '#include "ex_vector_import_cust_types.h"',1,1) rtwdemodbtype(file,'/* Includes for objects with custom storage classes. */',... '#include "ex_vector_import_decs.h"',1,1)
#include "ex_vector_import_cust_types.h" /* Includes for objects with custom storage classes. */ #include "ex_vector_import_decs.h"
Сгенерированный алгоритм кода в модели step функция в созданном файле ex_vector_import.c использование myGains для расчетов.
file = fullfile('ex_vector_import_ert_rtw','ex_vector_import.c'); rtwdemodbtype(file,'/* Model step function */','/* Model initialize function */',1,0)
/* Model step function */
void ex_vector_import_step(void)
{
/* Outport: '<Root>/Out1' incorporates:
* Gain: '<Root>/Gain'
* Inport: '<Root>/In1'
*/
rtY.Out1[0] = (real_T)myGains[0] * rtU.In1;
rtY.Out1[1] = (real_T)myGains[1] * rtU.In1;
rtY.Out1[2] = (real_T)myGains[2] * rtU.In1;
}
Созданный код не определяет (выделяет память для) и не инициализирует глобальную переменную myGains поскольку область данных соответствующего объекта параметра импортируется.
При моделировании модели в Simulink модель использует значение, сохраненное в Value свойства объекта параметра. Однако при использовании моделирования внешнего режима внешний исполняемый файл начинает моделирование с использованием значения из кода. См. раздел Рекомендации по другим целям моделирования.