文档

外部C/ c++代码之间的数据交换金宝app模型或生成的代码

是否将外部代码导入到Simulink中金宝app®模型(例如,通过使用遗留代码工具)或将生成的代码导出到外部环境,模型或生成的代码通常与您的代码交换数据(信号、状态和参数)。

C或c++代码中的函数,包括你的外部函数,可以通过以下方式与调用者或被调用函数交换数据:

  • 函数的参数(形式形参)。当函数通过参数交换数据时,应用程序可以多次调用该函数。被调用函数的每个实例都可以操作自己的独立数据集,这样实例之间就不会相互干扰。

  • 直接访问全局变量。全局变量可以:

    • 允许不同算法(函数)和同一算法的实例共享校准参数和错误状态等数据。

    • 使多任务系统的不同速率(功能)能够交换数据。

    • 支持不同算法异步交换数据。

在Si金宝appmulink中,您可以组织和配置数据,以便模型使用这些交换机制来提供、提取数据,并与您的代码共享数据。

在尝试匹配数据接口之前,要选择整体集成方法,请参见选择外部代码集成工作流

将外部代码导入模型

要在模型和外部函数之间交换数据,请基于您选择的集成函数的技术来选择交换机制。

  • 要通过外部函数的参数交换数据,可以根据参数的数据类型构造和配置模型来创建和打包数据。然后,连接和配置调用或表示函数的块,以接受、产生或引用来自模型的数据。

    例如,如果您使用遗留代码工具生成功能块调用你的函数,块的端口和参数对应函数的参数。将上行块的输出信号连接到输入端口,并在块掩码中设置参数值。然后,您可以从块的输出端口创建信号线,并将这些信号连接到下游块。

  • 要通过外部代码已经定义的全局变量交换数据,最佳实践是使用Stateflow®图表来调用函数并访问变量。在图表中编写算法C代码,以便在模拟或执行生成的代码期间,模型对变量进行读写。

    要在模型的其他地方使用这样一个全局变量作为参数数据(不是信号或状态数据)的项,您可以创建一个数值MATLAB®变量或金宝app仿真软件。参数对象,表示变量。如果您在两次模拟运行之间更改了C-code变量的值,则必须手动同步Simulink变量或对象的值。金宝app如果你的算法代码(函数)在模拟过程中改变了C-code变量的值,相应的Simulink变量或对象不会改变。金宝app

    如果您选择创建C-code变量的Simulink表示金宝app,您可以配置Simulink表示,以便生成的代码读取和写入变量,但不复制变量定义。将存储类应用到Simulink表示中。金宝app

外部功能整合技术 与模型交换数据的机制 示例和更多信息
功能

函数参数

要通过使用遗留代码工具创建的s函数调用函数,请参见用遗留代码工具将C函数集成到Simulink模型中金宝app(金宝app模型)。

Stateflow图表

函数参数和对全局变量的直接访问

要在状态流图中调用函数并访问全局变量,请参见在状态流图中访问自定义代码变量和函数(Stateflow)。有关在图表中创建数据项(可以将其作为参数传递给函数)的信息,请参见添加Stateflow数据(Stateflow)。

coder.cevalMATLAB函数

函数参数

在a中调用函数MATLAB函数块用coder.ceval,请参阅使用MATLAB函数块集成C代码(金宝app模型)。中创建数据项的详细信息MATLAB函数块(您可以将其作为参数传递给函数),参见端口和数据管理器(金宝app模型)。

导出生成的代码到外部环境

若要将生成的代码导出到外部代码中,请参见外部调用代码与生成代码之间的数据交换(金宝app仿真软件编码器)。

金宝appC数据类型和结构的表示

建模和重用自定义C数据,如结构、枚举和类型定义别名,使用这些表中的信息。

外部C代码中数据匹配的建模模式

C数据类型或结构 示例C代码 金宝app等效模型 更多的信息

基元类型别名(类型定义

typedef mySinglePrec_T浮动;

创建一个金宝app仿真软件。AliasType对象。使用对象来:

  • 在模型中设置信号的数据类型和块参数。

  • 为代码生成配置数据类型替换。

生成使用别名数据类型的代码需要嵌入式Coder®

有关为模型定义自定义数据类型的信息,请参见金宝app仿真软件。AliasType而且生成代码中的控件数据类型名称

有关演示如何将生成的代码导出到外部代码的示例,请参见替换和重命名数据类型以符合编码标准

数组

int myArray [6];

请指定信号和参数尺寸信号的维度(金宝app模型)。

生成的代码将多维数据(包括矩阵)定义和访问为列为主的序列化向量。如果您的外部代码使用不同的格式,请考虑使用替代技术来集成生成的代码。看到矩阵和数组的代码生成

有关生成的代码如何存储非标量数据(包括限制)的信息,请参见矩阵和数组的代码生成(金宝app仿真软件编码器)。

有关演示如何将生成的代码导出到外部代码的示例,请参见在生成的代码中重用外部代码中的参数数据

要建模查找表,请参见金宝app仿真软件。LookupTable

枚举

typedef enum myColorsType{红= 0,黄,蓝}myColorsType;

定义一个与枚举定义金宝app相对应的Simulink枚举。使用Simuli金宝appnk枚举来设置模型中的数据类型。

要在Simulink模型中使用枚举数据,请参见金宝app在Simulink模型中使用枚举数据金宝app(金宝app模型)。

有关显示如何生成枚举参数数据的示例,请参见枚举

有关演示如何通过交换枚举数据将生成的代码导出到外部代码的示例,请参见在生成代码和外部代码之间交换结构化和枚举数据

结构

typedef struct myStructType {int count;双多项式系数;} myStructType;

创建一个金宝app仿真软件。公共汽车对象,它对应于您的结构类型。

若要创建结构化信号或状态数据,请将模型中的多条信号线打包为单个非虚拟总线信号。

要创建结构化参数数据,请创建一个参数对象(例如金宝app仿真软件。参数),它存储一个MATLAB结构。使用总线对象作为参数对象的数据类型。

若要将查找表数据打包到结构中,请使用金宝app仿真软件。LookupTable可选地,金宝app仿真软件。断点对象。

有关总线信号的信息,请参见巴士入门(金宝app模型)。有关参数结构的信息,请参见在结构中组织相关块参数定义(金宝app模型)。

有关展示如何通过使用遗留代码工具将外部代码导入模型的示例,请参见集成参数是指向结构指针的C函数(金宝app模型)。

有关展示如何将生成的代码导出到外部代码的示例,请参见在生成代码和外部代码之间交换结构化和枚举数据而且通过外部代码定义的指针访问结构化数据

要将查找表数据打包到一个结构中,金宝app仿真软件。LookupTable

有关在生成的代码中创建结构的一般信息,请参见在生成的代码中将数据组织成结构(金宝app仿真软件编码器)。

用于代码生成的其他建模模式(嵌入式编码器

C数据类型或结构 示例C代码 金宝app等效模型 更多的信息

#定义myParam 9.8

应用存储类定义而且ImportedDefine参数。使用宏,您可以在算法中的多个位置重用参数值,并在代码编译之间更改参数值,而不需要占用内存来存储该值。通常,宏表示在代码执行期间不希望更改的工程常量。

这种技术需要嵌入式编码器。

宏定义(#定义)

存储类型限定符,例如常量而且挥发性
const myParam = 9.8;

应用存储类常量挥发性,ConstVolatile数据项。

使用关键字const和volatile保护全局数据(金宝app仿真软件编码器)

位域

typedef结构myBitField {unsigned short int MODE: 1;unsigned short int FAIL: 1;无符号短int OK: 1;} myBitField

  • 应用存储类设置到数据类型为的信号、状态和参数布尔

  • 使用模型配置参数将布尔数据聚合到位字段中。

这些技术需要嵌入式编码器。

通过将布尔数据打包到位域中来优化生成的代码

调用读取或写入数据的自定义外部函数

外部代码:

/*调用此函数获取信号的值。*/ double get_sising (void){返回mybigglobalstruct . sising;}

生成的算法代码:

algorithmInput = get_inSig ();

应用存储类GetSet到信号、状态和参数。每个数据项出现在生成的代码中,作为对读取和写入目标数据的自定义函数的调用。

这种技术需要嵌入式编码器。

通过带有存储类GetSet的函数访问数据

对其他建模目标的考虑

目标 注意事项和更多信息
使用Si金宝appmulink运行生成的代码并与之交互

您可以使用SIL、PIL和外部模式模拟将您的模型连接到相应生成的应用程序进行模拟。当你从外部代码导入参数数据时:

  • 在开始外部模式模拟时,外部可执行文件使用代码用于初始化参数数据的值。但是,当您在模拟过程中更改Simulink中相应的值时(例如通过修改金宝app价值属性),Simulink将下载新值到可执行文件中。金宝app

  • SIL和PIL模拟不会从代码中导入参数值。相反,模拟使用来自Simulink的参数值。金宝app如果将外部代码包含在金宝app仿真软件编码器™构建过程中,重复的数据定义会阻止生成的代码编译。

有关SIL和PIL的信息,请参见选择SIL或PIL方法.有关外部模式模拟的信息,请参见外部模式模拟的主机-目标通信(金宝app仿真软件编码器)。

生成描述导出数据属性(包括物理单元、实际初始值和数据类型)的代码注释

生成这些注释可以帮助您在编写集成代码时匹配数据接口。看到在生成的代码中为变量添加自定义注释

相关的话题