主要内容

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

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

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

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

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

...类型定义struct {int输入;} SIGNALBUS;
Typedef struct {int upper_saturation_limit;int lower_saturation_limit;} LIMITBUS;
typedef struct{信号总线输入信号;LIMITBUS限制;} COUNTERBUS;…

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

3.配置状态流图以包括自定义C代码,如中所述为您的模型指定自定义代码

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

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

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

  • &outbus提供状态流结构的地址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);

图表将地址传递给状态流结构counterbus_struct而且outbus通过使用这个函数调用:

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

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

另请参阅

(金宝app模型)

相关的话题