MBD_入门篇_22_SimulinkSignalRouting

22.SignalRouting

22.1 概述

Signal Routing,信号路由。

23.2 回顾常用模块

22.2.1 Bus

总线的信号组合,非虚拟Bus相当于c代码的结构体,虚拟的Bus只是组合起来,但是生成代码还是分散的。

22.2.2 Mux

组合成数组的时候可以用到,使用方法和Bus类型相似。

22.2.3 Switch

相当于c语言的if,做分支选择,不过要注意的是在生成代码的时候,有些还会进行运算,并不能完全等效于if。

22.2.4 VectorConcatenate

向量连接模块,可以将单个变量或者是Bus等组合成向量的形式。

22.2 GotoFrom

Goto、From是成对使用的,Goto是将信号输出做一个类似的标签的作用,From是接收相应的Goto模块的信号,两个模块之间没有信号线连接,但是信号是相连的。

信号直接连接的输出和用Goto,From接过来的是等效的,只是在视觉层面看上去信号线没有连接。作用就是比如一个信号有多个地方使用,使用信号连接的话,可能信号线互相交叉,信号线特别多的时候,会看起来特别乱,使用goto和from就可以使模型看起来更加简洁。

Goto模块,标签是比较重要的,一般使用标签作为Goto和From配对的名字。

已经存在的标签名,可以一次性替换成新的名字。

可见范围,推荐使用默认的local,就是只在当前子系统里可见,上层和下层均不可以与这个标签配对。global和scoped不建议使用,会让模型变得特别混乱,不然模型想找标签跑到另外的子系统会特别麻烦,容易出错。

图标显示方式,一般默认Tag。

From的设置,与Goto配对的Tag名,图标显示方式。

Goto和From模块互相链接,可以点击超链接跳转到配对的模块。

一个Goto可以有多个From,相当于一个信号可以接到好几个地方使用。一个From不能配对多个Goto,相当于一个信号它只能有一个源头,不能同时被多个源头赋值。

22.3 Merge

Merge模块可以自动选择更新的模块的输出,前端输入的模块必须是互斥的,在某一个时刻只能有一个Source可以被激活,比如if else分支,任何时刻都只可能更新其中一个分支,Switch case也是一样的逻辑。

Merge模块连普通的输入是报错的。

选择分支可以仿真出结果。

22.4 BusAssignment

BusAssignment模块可以对Bus的部分元素进行重新赋值的模块。

没有接输入的时候,参数设置都是空的。

新建一个Bus,里面包含Sig1和Sig2,分别对应的值是1和2。

选择Sig1进行重新赋值。

挑选Sig1进行赋值3,Sig2保持不变。

可以看到输出跟我们期望的一致。在工作中比如有些Bus非常大,里面成员特别多,层级也比较多,我们每次拆分开进行赋值特别麻烦,当只需要对其中个别成员赋值的时候,我们可以用BusAssignment模块来操作。

输入也可以是非虚拟Bus。

22.5 DataStore

平常使用的Simulink模型都是单向的数据流,从Inport进来做一系列运算以后,输出给其他层级。

22.5.1 DataStoreMemory

DataStoreMemory相当于在模型中声明一个全局的数据,这个数据可以在任何地方赋值和读取。

比较重要的是名字,用来标志。

初始值设置。

诊断,设置仿真警告,报错的行为。当检测到读在写之前,仿真的结果是警告还是报错还是无提示。

记录数据。

22.5.2 DataStoreWrite

Data Store Write是进行写操作的模块。

22.5.3 DataStoreRead

Data Store Read是进行读操作的模块。

执行结果是2。

移动位置,执行结果。

实际执行的结果是先执行写2的后面的Subsystem,然后再执行写1的前面的Subsystem,跟信号线的数据流没有关系。

22.6 GotoTagVisibility

Goto Tag Visibility不建议使用,因为会造成模型混乱。这个模块是对goto和from结合使用的。将goto的可见性改为scoped。

定位到子系统里,虽然子系统里没有goto模块,仍然可以通过from模块读取goto值。

goto全局范围可见更不推荐使用。

22.7 MultiportSwitch

22.7.1 MultiportSwitch

MultiportSwitch是多路开关模块,类似于C语言的switch case语法。

选择Zero-based表示从0开始的序号,第一个从0开始,选择One-based表示第一个从1开始,总数由下面的数字控制,现在是3个,代表是从0-2。

选择Specify indices代表是由我们指定顺序,比如现在的{1,3,6},代表的是如果输入(第一个port输入)是3,则输出的3这路的值。

选择默认case,也就是不属于指定的值以外的输入值,是怎么输出的方式有可以选择最后一个指定的输出作为默认值还是再添加一个单独的默认值输入。

设置默认值的诊断行为,是无提示,警告,还是报错。

当输入是5的时候,输出应该是指定的5输入的这路作为输出。

设置多个输出同一路。

选择输出数组,或者结构体,结构体数组等复杂数据类型也可以。

但是要注意,维度不同会报错。数据类型也要相同。

多路开关可以用在枚举的选择上,多个定义缩减为更少的输出定义时,用起来很方便。比如颜色[红1 红2 黄1 黄2 蓝1 蓝2]是输入,输出定义是[红 黄 蓝],那就可以用这个模块来做。

22.7.2 IndexVector

IndexVector相当于是MultiportSwitch的特殊形态,当数量选择为1的时候,变为此形态。可以类比多路开关的使用。

22.8 ManualSwitch

ManualSwitch是手动开关,不能用于生成代码,只能仿真。

在模型仿真过程中可以双击模块切换选择不同的输入源进行输出。

22.9 Selector

Selector是选择模块,可以用来选择数组中的元素。可以选择为单个信号,也可以选多个信号,选择完输出是重新排布的数组,可以组合输出一维或者多维的数组。

Selector的参数设置有,输入的维度,表示一维数组还是二维数组等,Index模式,Zero-Based还是One-Based的,Index的设置方式,对话框还是输入Port等,输入Port的size,就是比如1X3的数组,dimensions设置为1,size设置为3,或者size设置为-1表示继承,可以自动继承过来。

输入为一维数组,选择从1开始的第3个元素,值为3.

选择[1 3]输出为[0 3],输出是数组。

选择二维数组的第1维的2,和第2维的1,选出来是5.

选择二维数组的第1维的2,和第2维的[2 4],选出来是[6 8].

选择二维数组的第1维的[1 2],和第2维的[2 4],选出来是[1 3; 6 8].

选择二维数组的第1维的[1 2],和第2维的[2 3 4],选出来是[1 2 3; 6 7 8].

选择二维数组的第1维的[1 2],和第2维重新选择顺序的[4 3 2],选出来是[3 2 1; 8 7 1].

第2维Index用输入Port来设置。

Index设置选择对话框和Port设置比较常用。

  • 26
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值