主要内容

在状态流图中集成自定义结构

这个例子展示了如何在statflow®图表中使用自定义代码的结构。您可以在C代码中定义结构类型数据,并将其与statflow结构和Simulink®总线信号集成。金宝app通过与自定义代码共享数据,可以增强statflow支持的功能,并利用现有代码。金宝app有关更多信息,请参见在状态流程图中重用自定义代码

在本例中,状态流图处理来自一个Simulink总线信号的数据,并将结果输出到另一个Simulink总线信号。金宝app总线的输入和输出信号都是由金宝app仿真软件。公共汽车(金宝app模型)对象COUNTERBUS.在图中,Simulink总线信号与s金宝apptatflow结构接口inbusoutbus.图表调用一个定制的C函数来写入输出结构outbus

在C代码中定义自定义结构

1.在你的C代码中,通过创建一个自定义头文件来定义一个结构。头文件包含类型定义定义自定义结构属性的声明。例如,在这个模型中,头文件counterbus.h声明三个自定义结构:

...Typedef struct {int input;} SIGNALBUS;
Typedef struct {int upper_saturation_limit;int lower_saturation_limit;} LIMITBUS;
typedef struct {SIGNALBUS输入信号;LIMITBUS限制;} COUNTERBUS;...

2.在总线编辑器中,定义金宝app仿真软件。公共汽车匹配每个自定义结构的类型定义声明。在头文件每一个领域金宝app仿真软件。公共汽车对象,输入包含匹配项的头文件的名称类型定义声明。

3.配置状态流程图以包含自定义C代码,如为模型指定自定义代码

4.构建并运行您的模型。

将状态流结构传递给自定义代码

当您调用以结构指针为参数的自定义代码函数时,请按地址传递statflow结构。要将statflow结构或其中一个字段的地址传递给自定义函数,请使用操作符和点符号:

  • &outbus提供statflow结构的地址outbus

  • &outbus.inputsignal提供子结构的地址inputsignal的结构outbus

  • &outbus.inputsignal.input提供字段的地址输入子结构的outbus.inputsignal

有关更多信息,请参见为状态流结构建立索引和赋值

例如,本例包含一个定制的C函数counterbusFcn它以结构指针为参数。自定义头文件counterbus.h包含以下函数声明:

extern void counterbusFcn(COUNTERBUS *u1, int u2, COUNTERBUS *y1, int *y2);

图表将地址传递给statflow结构counterbus_structoutbus通过使用这个函数调用:

counterbusFcn(&counterbus_struct, u2, &outbus, &y2);

该函数读取图表输入的值u2以及局部结构counterbus_struct.它写入图表输出y2输出结构outbus

另请参阅

(金宝app模型)

相关的话题