主要内容

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

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

C或C ++代码中的功能,包括外部函数,可以通过调用者或呼叫函数交换数据:

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

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

    • 启用相同算法的不同算法和实例以共享数据,例如校准参数和错误状态。

    • 启用多任务系统的不同速率(函数)以交换数据。

    • 启用不同的算法以异步交换数据。

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

在尝试匹配数据界面之前,选择整体集成方法,请参阅选择外部代码集成工作流程

将外部代码导入模型

要在模型和外部功能之间交换数据,请根据您选择集成功能的技术选择一个Exchange机制。

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

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

  • 要通过全局变量交换数据,即您的外部代码已经定义,最好的做法是使用状态流®调用函数并访问变量的图表。您在图表中编写算法C代码,以便在模拟或执行生成的代码期间,模型读取并写入变量。

    要在模型中的其他位置使用这样的全局变量作为参数数据(不是信号或状态数据),您可以创建一个数字MATLAB®变量或金宝appSimulink.Parameter.代表变量的对象。如果在模拟运行之间更改C代码变量的值,则必须手动同步Simulink变量或对象的值。金宝app如果您的算法代码(函数)在模拟期间更改C代码变量的值,则相应的Simulink变量或对象不会改变。金宝app

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

集成外部功能的技术 用模型交换数据的机制 示例和更多信息
S函数

函数参数

要通过使用遗留代码工具创建的S函数来调用函数,请参阅将C功能集成到具有遗留代码工具的Simulink模型中金宝app

stateflow图表

函数参数并直接访问全局变量

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

编码器.CEVAL.in.Matlab功能

函数参数

在a中调用您的功能Matlab功能通过使用阻止编码器.CEVAL.,看看使用MATLAB功能块集成C代码。有关在A中创建数据项的信息Matlab功能块(您可以传递给您的函数作为参数),请参阅端口和数据管理器

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

要将生成的代码导出到外部代码中,请参阅在外部调用代码和生成的代码之间交换数据

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

模拟并重用您的自定义C数据,如结构,枚举和typedef.别名,使用这些表中的信息。

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

C数据类型或构造 示例C代码 金宝appSimulink等价物 更多信息

原始别名(typedef.

typedef float mysingleprec_t;

创建A.金宝appsimulink.aliaStype.对象。使用对象:

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

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

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

有关定义模型定义自定义数据类型的信息,请参阅金宝appsimulink.aliaStype.在生成的代码中控制数据类型名称(嵌入式编码器)

有关显示如何将生成的代码导出到外部代码的示例,请参阅替换并重命名数据类型以符合编码标准(嵌入式编码器)

阵列

int myArray [6];

指定如上所述的信号和参数尺寸确定信号尺寸

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

有关生成的代码如何存储Nonscalar数据(包括限制)的信息,请参阅代码生成矩阵和数组

有关显示如何将生成的代码导出到外部代码的示例,请参阅在生成的代码中重用来自外部代码的参数数据(嵌入式编码器)

要模拟查找表,请参阅金宝appsimulink.lockuptable.

枚举

typedef枚举mycolorstype {red = 0,黄色,蓝色} mycolorstype;

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

要在Simulink模型中使用枚举数据,请参阅金宝app在Simulink模型中使用枚举数据金宝app

有关显示如何生成枚举参数数据的示例,请参阅枚举(嵌入式编码器)

有关显示如何通过交换枚举数据将生成的代码导出到外部代码的示例,请参阅在生成和外部代码之间交换结构化和枚举数据(嵌入式编码器)

结构

typedef struct mystructtype {int count;双Coeff;mystructype;

创建A.金宝appsimulink.bus.对应于您的结构类型的对象。

要创建结构化信号或状态数据,将模型中的多个信号线封装成单个非传真总线信号。

要创建结构化参数数据,请创建参数对象(例如金宝appSimulink.Parameter.)存储Matlab结构。使用总线对象作为参数对象的数据类型。

将查找表数据包装成结构,使用金宝appsimulink.lockuptable.并且,可选的,金宝appsimulink.breakpoint.对象。

有关总线信号的信息,请参阅将信号线组分为虚拟总线。有关参数结构的信息,请参阅组织结构中的相关块参数定义

有关示出如何通过使用遗留代码工具将外部代码导入模型的示例,请参阅集成C功能,其参数是指向结构的指针

有关显示如何将生成的代码导出到外部代码的示例,请参阅在生成和外部代码之间交换结构化和枚举数据(嵌入式编码器)通过外部代码定义的指针访问结构化数据(嵌入式编码器)

将查找表数据包装为结构,金宝appsimulink.lockuptable.

有关在生成的代码中创建结构的一般信息,请参阅将数据组织到生成代码中的结构中

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

C数据类型或构造 示例C代码 金宝appSimulink等价物 更多信息

#define myparam 9.8.

应用存储类界定ImportedDefine.参数。使用宏,您可以在算法中重复使用多个位置中的参数值,并在不使用内存存储该值的情况下更改代码编译之间的参数值。通常,宏表示您不希望在代码执行期间更改的工程常量。

该技术需要嵌入式编码器。

宏定义(#define)(嵌入式编码器)

存储类型限定符如const挥发性
Const MyParam = 9.8;

应用存储类const挥发性,和植物数据项。

使用关键字const和volatile保护全局数据

比特领域

typedef struct mybitfield {无符号短int模式:1;unsigned短int失败:1;unsigned短int确定:1;mybitfield.

  • 应用存储类位菲尔德到数据类型的信号,状态和参数布尔基

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

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

位菲尔德(嵌入式编码器)

通过将布尔数据包装到位域中优化生成的代码(嵌入式编码器)

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

外部代码:

/ *调用此功能以获取信号的值。* / double get_insig(void){return mybigglobalstruct.insig;}

生成的算法代码:

algorithminput = get_insig();

应用存储类拍打发信号,状态和参数。每个数据项都会显示在生成的代码中作为对自定义功能的调用,即读取和写入目标数据。

该技术需要嵌入式编码器。

通过使用存储类GetSet的函数访问数据(嵌入式编码器)

其他建模目标的考虑因素

进球 考虑和更多信息
使用Si金宝appmulink运行并与生成的代码交互

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

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

  • SIL和PIL仿真不会导入代码中的参数值。相反,模拟使用Simulink的参数值。金宝app如果您包含您的外部代码金宝appSimulink Coder™构建过程,重复的数据定义可以防止生成的代码编译。

有关SIL和PIL的信息,请参阅选择SIL或PIL方法(嵌入式编码器)。有关外部模式仿真的信息,请参阅用于参数调谐和信号监控的外部模式模拟

生成描述导出数据的属性的代码注释,包括物理单位,现实世界初始值和数据类型

生成这些评论可以帮助您在手写集成代码时匹配数据接口。看为生成的代码中的变量添加自定义注释(嵌入式编码器)

相关主题