Этот пример показывает, как сгенерировать код, который импортирует значение параметров из вашего внешнего кода.
Предположим, что ваш внешний код задает векторный параметр 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 и выберите Import Data.
В диалоговом окне Import, набор Выходной Тип к 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')

В модели выберите View> Model Data Editor.
В Model Data Editor осмотрите вкладку Parameters.
Используйте Столбец значений, чтобы установить значение параметра Усиления в блоке Gain к myGains.
Нажмите кнопку дополнительной информации Show/refresh. Таблица данных теперь содержит строку, которая представляет объект параметра, myGains.
Используйте столбец Типа данных, чтобы установить тип данных myGains к my_int8.
Для другой строки (который представляет параметр Усиления блока Gain), Тип данных набора к Inherit: Inherit from 'Gain'. С этой установкой параметр Усиления наследовал тип данных my_int8 от myGains.
Установите представление Change выпадающий список на 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')
Сгенерируйте код из модели.
rtwbuild('ex_vector_import')
### Starting build procedure for model: ex_vector_import ### Successful completion of build procedure for model: ex_vector_import
Сгенерированный 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 объекта параметра. Однако, если вы используете симуляцию режима external mode, внешний исполняемый файл начинает симуляцию при помощи значения из вашего кода. Смотрите Факторы для Других Целей Моделирования.