说明:以下内容仅来自个人观点。
本人最近在使用Goto/From模块穿越子系统时遇到以下报错内容:
Goto/From connections cannot cross nonvirtual subsystem boundaries. The only exception is when a goto is connected to a state output port.
(Goto/From连接不能跨越非虚拟子系统边界。唯一的例外是当goto连接到状态输出端口时。)
1.虚拟/非虚拟
在网上或MATLAB的帮助文档中并没有找到关于虚拟/非虚拟子系统的详细介绍,但是可以找到关于虚拟/非虚拟模块的介绍,大致如下:
simulink将模块分为虚拟/非虚拟模块。非虚拟模块在仿真中起主动作用,添加或删除会影响仿真结果;虚拟模块在仿真中不起主动作用,只是用来组织、简化模型。
典型的虚拟模块有:Goto、From、Mux等。
对于Subsystem模块,默认为虚拟子系统。若将其改为条件执行子系统,如,Enabled Subsystem、Trigger Subsystem等(个人认为是Ports & Subsystems库中除了Subsystem模块外的所有条件子系统,具体可自行测试),则为非虚拟子系统。其在系统仿真中的作用可类比非虚拟模块。
非虚拟和虚拟模块帮助文档网址:https://ww2.mathworks.cn/help/simulink/ug/nonvirtual-and-virtual-blocks.html