在 MATLAB 函数中访问 Simulink 总线信号
此示例说明如何使用 MATLAB 和 Stateflow® 总线在 MATLAB® 函数中读取和写入 Simulink® 总线信号。MATLAB 结构体使您能够将不同大小和类型的数据捆绑到一个变量中。您可以创建一个 MATLAB 结构体来实现以下目的:
将相关数据存储在 MATLAB 函数的一个局部变量或持久变量中
读取或写入局部 Stateflow 总线
在输入或输出端口与 Simulink 总线信号对接
MATLAB 函数仅支持非虚拟总线。有关详细信息,请参阅合成接口规范 (Simulink)。
在 MATLAB 函数中定义结构体
在此示例中,Stateflow 图处理来自一个 Simulink 总线信号的数据,并将结果输出到另一个 Simulink 总线信号。输入和输出总线信号都由 Simulink.Bus (Simulink) 对象 BusObject 定义。这些总线有四个字段:sb、a、b 和 c。字段 sb 也是由 Simulink.Bus 对象 SubBus 定义的总线信号。它有一个名为 ele 的字段。

在图中,Simulink 总线信号与 Stateflow 总线 in 和 out 对接。函数 sb2abc 从输入总线中提取信息,并将其存储在局部 Stateflow 总线 localbus 中。然后,该图将局部总线的值和结构体数组 subBusArray 的元素之一组合起来,写入输出总线。有关访问和修改 Stateflow 总线或 Stateflow 总线数组的内容的详细信息,请参阅对 Stateflow 结构体进行索引并赋值。

MATLAB® 函数 sb2abc 接受 SubBus 类型的 Stateflow 总线,并返回 BusObject 类型的 Stateflow 总线。该函数将来自其输入的字段 ele 的值分解为三个组成部分:一个向量、一个 3×2 矩阵和一个标量。该函数将这些组成部分存储在一个局部 MATLAB 中,后者与 structSimulink.Bus 对象 BusObject 具有相同的字段。然后,该函数将 MATLAB struct 的值赋给输出总线 y。
X是标量struct,具有名为ele的单个字段。此字段包含一个类型为int8的 3×3 矩阵,此矩阵与Simulink.Bus对象SubBus的布局相匹配。Y是具有以下四个字段的标量struct:sb是SubBus类型的子结构体,a是double类型的二维向量,b是uint8类型的 3×2 矩阵,c是double类型的标量。这些字段与Simulink.Bus对象BusObject的布局相匹配。
function y = sb2abc(u)
% extract data from input bus
A = double(u.ele(1:2,1)); B = uint8(u.ele(:,2:3)); C = double(u.ele(3,1));
% create local bus
X = struct(ele=int8(zeros(3))); Y = struct(sb=X,a=A,b=B,c=C);
% assign value to output bus
y = Y;
end
定义输入和输出结构体
要在 MATLAB 函数中访问局部 Stateflow 总线或对接 Simulink 总线信号,请为该函数定义输入和输出总线:
在 Simulink 基础工作区中,创建一个定义总线数据类型的
Simulink.Bus对象。在符号窗格中,选择函数输入或输出。
在属性检查器中,将类型属性设置为
Bus: <object name>。用定义 Stateflow 总线的Simulink.Bus对象的名称替换 <对象名称>。
例如,在函数 sb2abc 中:
输入
u的类型属性指定为Bus: SubBus。输出
y的类型属性指定为Bus: BusObject。
有关详细信息,请参阅Define Stateflow Buses。
定义局部和持久结构体变量
要将相关数据存储在 MATLAB 函数内的单个变量中,您可以创建一个 MATLAB struct 类型的局部或持久变量。例如,函数 sb2abc 定义了两个局部 MATLAB 结构体,用于在写入输出总线 y 之前临时存储从输入总线 u 提取的数据:
有关详细信息,请参阅为代码生成定义标量结构体 (Simulink)。
另请参阅
struct | Simulink.Bus (Simulink)