将 MATLAB 代码转换为 Stateflow 流程图
要将 MATLAB® 代码转换为 Stateflow® 流程图和图形函数,请使用构型向导。支持的转换模式包括:
if
、if-else
及其他嵌套决策语句。for
和while
循环。switch
语句。
构型向导可以转换 MATLAB 函数和脚本。
MATLAB 函数转换为 Stateflow 图形函数。
MATLAB 脚本转换为 Stateflow 流程图。
仅在独立的 Stateflow 图中支持转换 MATLAB 代码。有关详细信息,请参阅Create Stateflow Charts for Execution as MATLAB Objects。
根据 MATLAB 脚本创建流程图
此 MATLAB 脚本根据经验验证 Collatz 猜想的一个实例。当给定数值输入 u
时,脚本通过迭代以下规则来计算冰雹序列 n0 = u
, n1, n2, n3, ⋯:
如果 ni 为偶数,则 ni+1 = ni/2。
如果 ni 为奇数,则 ni+1 = 3ni + 1。
Collatz 猜想指出,每个正整数都有一个最终达到 1 的冰雹序列。
% Hailstone sequence u, c(u), c(c(u)),... y = u; while y(end) ~= 1 y(end+1) = c(y(end)); end disp(y); function n = c(n) % Compute next number in hailstone sequence. % If n is even, then c(n) = n/2. % If n is odd, then c(n) = 3*n+1. if rem(n,2) == 0 n = n/2; else n = 3*n+1; end end
while
循环,该循环重复调用辅助函数 c
,直到产生输出值 1。函数 c
由条件 if
-else
语句组成,该语句的输出取决于输入的奇偶性。要将此脚本转换为流程图和图形函数,请执行以下操作:
打开一个新的独立图。
edit hailstone.sfx
在状态图选项卡上,选择构型 > 选择文件。
在对话框中,选择 MATLAB 脚本,然后点击打开。构型向导会在您的 Stateflow 图中添加一个流程图和一个图形函数。双击图形函数以查看其内容。
在符号窗格中,点击解析未定义的符号 。Stateflow 编辑器将
u
和y
解析为局部数据。保存您的图。
要从 Stateflow 编辑器中执行图,请在符号窗格中输入值
u
= 9,然后点击运行 。当流程图正在执行时,Stateflow 编辑器通过图动画突出显示激活的转移。当执行停止时,MATLAB 命令行窗口会显示从值 9 开始的冰雹序列:9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
点击停止 。
您可以复制生成的流程图和图形函数,并将其粘贴到其他图中,包括 Simulink® 模型中的 Stateflow 图。如果您的 MATLAB 代码使用的功能仅限于 Simulink 中的代码生成,则必须在仿真图之前修改流程图动作。有关详细信息,请参阅Call Extrinsic MATLAB Functions in Stateflow Charts。
注意
假设您在 MATLAB 函数中使用 nargin
,则需要将该函数转换为图中的图形函数。由于 nargin
将图对象视为图形函数的输入参量之一进行计数,图形函数中 nargin
的值等于 1 加上原始 MATLAB 函数中 nargin
的值。有关详细信息,请参阅Execute a Standalone Chart。