【研发日记】Matlab/Simulink开箱报告(十)——Signal Routing模块模块

2024-03-27 07:52

本文主要是介绍【研发日记】Matlab/Simulink开箱报告(十)——Signal Routing模块模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

前言

Signal Routing模块

虚拟模块和虚拟信号

Mux和Demux

Vector Concatenate和Selector

Bus Creator和Bus Selector

分析和应用

总结


前言

        见《开箱报告,Simulink Toolbox库模块使用指南(五)——S-Fuction模块(C MEX S-Function)》

        见《开箱报告,Simulink Toolbox库模块使用指南(六)——S-Fuction模块(TLC)》

        见《开箱报告,Simulink Toolbox库模块使用指南(七)——S-Fuction Builder模块》     

        见《研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块》

        见《研发日记,MatlabSimulink开箱报告(九)——Simulink Test模块》

Signal Routing模块

        Signal Routing模块是Simulink中为了降低数据路径复杂度,提高模型搭建效率,把数据进行组合和分解,并实现跨越式传送的一类模块,Mathworks官方Help对该部分内容的说明如下所示:

        Signal Routing模块在Simulink Toolbox库中的位置如下:

        上述library中一些模块的应用都比较基础,不再赘述。本文挑选其中容易混淆的几类,重点对其异同进行辨析。

虚拟模块和虚拟信号

        Simulink® 模块分为两个基本类别:非虚拟模块和虚拟模块。非虚拟模块在系统的仿真中起主动作用。如果您添加或删除非虚拟模块,模型行为将发生改变。虚拟模块有助于以图形方式组织模型。虚拟模块在仿真中不起主动作用,但它们会影响其他模块的执行顺序。有些 Simulink 模块在某些情况下是虚拟的,而在其他情况下是非虚拟的。这种模块称为条件虚拟模块

        虚拟信号是一种以图形表达方式,不存在于生成的代码中。有些模块(如 Mux 模块)始终生成虚拟信号。有些模块(如 Bus Creator 模块)既可以生成虚拟信号,也可以生成非虚拟信号。如果生成信号的模块是虚拟的,则信号是虚拟信号。非虚拟信号是一种在仿真和代码生成中起主要作用的信号。有些模块(如 Vector Concatenate 模块)始终生成非虚拟信号。如果生成信号的模块是非虚拟的,则信号是非虚拟信号。

Mux和Demux

        Mux模块是将相同数据类型的输入信号合并为虚拟向量,然后基于这个虚拟向量对它们做一些统一的数据处理,这样既可以提高工程师的建模效率,也可以提高模型的可读性,示例如下:

        Tip1:Mux模块的四个输入信号必须是相同的数据类型,比如上图中都是double型;

        Tip2:上述四个信号经过Mux模块后,只是外观看上去匝在一起,但实质上他们之间互不影响。

        Demux模块是Mux模块的逆向操作,把虚拟向量分解开,将元素或者子向量提取并输出。示例如下:

        Tip1:一般情况下要求Deux模块设置的输出端口数与虚拟向量中元素的个数一致,这时是按顺序均匀输出;

        Tip2:如果Demux模块设置的输出端口数比虚拟向量中元素的个数少,这时个别输出上就会自动多一个元素,以虚拟子向量的形式输出;

        Tip3:如果想让Demux模块按照我们的设定输出,就需要在“Number of outputs”中设置对应输出端口的大小。比如[-1, 2, -1],同时包含正值2和 -1,该模块会首先保证有2个元素分配给第二个端口然后将其余元素均匀地分布在值为 -1 的第一个端口和第三个端口上。

Vector Concatenate和Selector

        Vector Concatenate 模块会把输入信号串联起来创建一个实质性的向量,作为一个Array[n]来使用,示例如下:

        Tip1:Vector Concatenate模块的三个输入端口必须是相同的数据类型,比如上图中都是double型;

        Tip2:输入端口不管是向量或者标量,都会按照顺序被串联起来形成一个新的向量;

        Selector模块是Vector Concatenate模块的逆向操作,可以根据指定的索引提取向量的元素,示例如下:

        Tip1:Selector模块的“Input port size”必须与实际输入向量的大小一致,否则会报错;

Bus Creator和Bus Selector

        Bus Creator 模块将输入信号合并成一个总线,相比前面的Mux和Vector,这里输入的信号可以是不同的数据类型。示例如下:

        Tip1:默认情况下,Bus Creator模块创建的是一个虚拟总线,它类似于用束线带绑在一起的一捆电线,每一根电线都有唯一的名称,粗细颜色各部不同,各自独立工作着。

        Tip2:需要时该模块也可以创建非虚拟总线,这类似于C代码中的结构体,总线与里边的信号存在着较强的父与子关系。虚拟总线和非虚拟总线在线型上有所不同。

        Bus Selector是模块Bus Creator模块的逆操作,可以从总线中按名称提取信号。与前面的Mux和Vector相比,这里不需要按索引Index查询提取,而是直接可以按信号名称提取。示例如下:

Tips:总线除了可以将元素信号提取出来使用外,还能通过Bus to Vector模块转换成向量使用,但是这种转换仅限于虚拟向量。

分析和应用

        为了简化模型外观,可以对信号连接进行组合,为模型组件和模块创建合成接口。上文三种不同的合成接口使用不同的开发情景,对比分析如下:

        虚拟总线可满足合成接口的大多数建模要求,并可灵活地组合不同类型的元素。虚拟总线可减少模块图中线条的复杂度和杂乱无章,并使进一步更改接口变得更容易。例如,如果您必须在组件接口中添加或删除元素,修改总线可能比添加或删除端口更简单。创建虚拟总线时,可以根据信号线的功能对其进行分组。通过将信号连接组织到逻辑分组中,可以降低将来进行重大重构的可能性。如果要在生成的代码中,将总线定义实现为一个结构体,就要考虑将虚拟总线改为非虚拟总线。如果要在子系统(例如 For Each 子系统)中以迭代方式处理大量类型相同的数据,适合选用Vector向量。如果各个子元素还要保持相对的独立性,适合选用Mux虚拟向量

        如下流程图可以帮助我们选择合适的接口类型:

总结

        以上就是本人在使用Signal Routing模块时,一些个人理解和分析的总结,首先介绍了Signal Routing的基本知识,然后展示它的使用方法,最后分析了该模块的特点和适用场景。

        后续还会分享另外几个最近总结的Simulink Toolbox库模块,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成文本人持续分享的动力。

        另外,上述例程使用的Demo工程,可以到笔者的主页查找和下载。


        版权声明,原创文章,转载和引用请注明出处和链接,侵权必究!

这篇关于【研发日记】Matlab/Simulink开箱报告(十)——Signal Routing模块模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/851413

相关文章

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

一文详解Java Condition的await和signal等待通知机制

《一文详解JavaCondition的await和signal等待通知机制》这篇文章主要为大家详细介绍了JavaCondition的await和signal等待通知机制的相关知识,文中的示例代码讲... 目录1. Condition的核心方法2. 使用场景与优势3. 使用流程与规范基本模板生产者-消费者示例

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一