在 Stateflow 图中集成 MATLAB 函数
为了在 Stateflow® 图中实现复杂算法,请使用 MATLAB® 函数。MATLAB 函数允许您在 Stateflow 图中结合 MATLAB 的数学能力。有关创建 MATLAB 函数的详细信息,请参阅通过定义 MATLAB 函数重用 MATLAB 代码。
支持的函数类型
Stateflow 图可以调用以下 MATLAB 函数类型:
您在函数体中定义的局部函数。
图形函数、Simulink® 函数和真值表函数。
支持代码生成的内置 MATLAB 函数。
仅用于仿真执行的外部函数。有关详细信息,请参阅Call Extrinsic MATLAB Functions in Stateflow Charts。
向 Stateflow 图添加 MATLAB 函数
在此示例中,您构建一个包含两个 MATLAB 函数的模型,然后使用这些函数计算输入到图的数据的均值和标准差。
设置模型
创建一个新 Simulink 模型。
向您的模型添加以下模块:
Chart 模块
Constant 模块
两个 Display 模块

将模型另存为
call_stats_function_stateflow。
配置 Stateflow 图
打开 Chart 模块。
使用 MATLAB 函数图标
添加两个 MATLAB 函数。用以下签名标记函数:
meanout = meanstats(vals)stdevout = stdevstats(vals)
添加到一个终止结点的默认转移,条件动作如下:
{ mean = meanstats(invals); stdev = stdevstats(invals); }
如果函数签名的参量是标量,请检查函数调用的输入和输出是否遵循标量扩展规则。有关详细信息,请参阅为矩阵的所有元素赋值。
定义数据元素
打开符号窗格。
使用类型列设置以下数据的类型:
invals:输入数据stdev:输出数据mean:输出数据

标准差函数编程
打开 stdevstats 函数并添加以下代码:
function stdevout = stdevstats(vals) %#codegen % Calculate standard deviation len = length(vals); stdevout = sqrt(sum(((vals-avg(vals,len)).^2))/len); function meanfcn = avg(inputArray,inputSize) meanfcn = sum(inputArray)/inputSize;
函数 sum 计算 stdevout 的值。%#codegen 编译指令帮助检测支持代码生成的 MATLAB 函数中语法和语义的编译时违规。
均值函数编程
打开 meanstats 函数并添加以下代码:
function meanout = meanstats(vals) %#codegen % Calculate statistical mean len = length(vals); meanout = avg(vals,len); % Plot results (simulation only) coder.extrinsic("plot"); plot(vals,"-+"); function meanfcn = avg(inputArray,inputSize) meanfcn = sum(inputArray)/inputSize;
length 函数支持代码生成,并返回向量的长度。函数 avg 计算 meanout 的值。您将 plot 定义为外部函数,因为它不支持代码生成。
对模型进行仿真
要对模型进行仿真,请先将 Simulink 模块连接到图输入端口和输出端口。

点击运行。均值和标准差数字出现在 Display 模块窗口中。

代码生成要求
要生成代码,所有函数都必须支持代码生成。如果函数不支持代码生成,您可以使用 coder.extrinsic (Simulink) 将其标记为异常。对于 MATLAB 支持代码生成的函数的列表,请参阅 C/C++ 代码生成支持的函数和对象 (MATLAB Coder)。
另请参阅
coder.extrinsic (Simulink)
主题
- 函数类型
- 使用 MATLAB 引擎在 MATLAB Function 模块中执行函数调用 (Simulink)