【研发日记】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 logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

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

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