在 Stateflow 图中集成 MATLAB 函数
您可以使用 MATLAB® 函数在 Stateflow® 图中实现复杂算法。您可以使用 MATLAB 函数来:
表达数学计算、处理数据或分析统计信息。
将已建立的 MATLAB 算法合并到状态机中。
封装复杂逻辑,使图设计更清晰。
有关创建用于 Stateflow 图的 MATLAB 函数的详细信息,请参阅通过定义 MATLAB 函数重用 MATLAB 代码。
向 Stateflow 图添加 MATLAB 函数
在此示例中,您构建一个包含两个 MATLAB 函数的模型,然后使用这些函数计算输入到图的数据的均值和标准差。
设置模型
创建一个新 Simulink® 模型。
添加一个 Chart 模块、一个 Constant 模块和两个 Display 模块。
将 Constant 模块的值设置为 [2 3 4 5]。

将模型另存为
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 模块中。

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