概述
说明:以下内容仅来自个人观点。
本人最近在使用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
2.Goto模块穿越子系统边界
查看goto模块帮助文档可以看到这句话:From-Goto模块连接不能穿过非虚拟子系统边界。但存在以下例外情况,与一个条件子系统的状态端口连接的Goto模块,对另一个条件执行子系统中的From模块是可见的。
Goto模块帮助文档网址:https://ww2.mathworks.cn/help/simulink/slref/goto.html?searchHighlight=goto&s_tid=srchtitle
一个穿越非虚拟子系统边界的很好的例子是该帮助文档下的Building a Clutch LockUp Model.
该模型中Unlocked和Locked都是使能子系统,这两个子系统中的积分模块的状态输出端口连接goto模块,各自积分模块的初始值输入端口来自对应的使能子系统积分模块的状态输出端口。
进行下列实验:将Unlocked子系统中的unlocked_wv在模型最外层系统进行输出显示可得下图。
最后
以上就是爱撒娇小甜瓜为你收集整理的Simulink中的虚拟和非虚拟子系统1.虚拟/非虚拟2.Goto模块穿越子系统边界的全部内容,希望文章能够帮你解决Simulink中的虚拟和非虚拟子系统1.虚拟/非虚拟2.Goto模块穿越子系统边界所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复