近期在Amesim技术交流群中,看到大家讨论Amesim如何实现判断与选择,这是一个非常常用的需求,例如根据一些设定条件去选择不同的输入数据,或者开展故障注入等分析,全部都需要判断选择才能实现。
在编程领域,常用的判断与选择主要为如下两种类型,我们将使用Amesim信号库实现这一个过程:
1) If-else语句:
1) Switch-case语句:
首先要介绍的就是最常用的signal switch元件,一共包含4个端口,左侧两个为输入信号,顶部为命令信号,参数中包含一个阈值参数。
当命令信号大于等于阈值参数,则输出信号等于3号口的输入信号,反之则输出4号口的输入信号。
在如下的例子中,我们在4号口接入一个sin正弦信号,在3号口接入正弦信号的积分信号,顶部命令信号接入一个阶跃信号,阈值参数为0.5,则我们可以看到输出的结果信号中,在5s位置发生变化,表明判断与选择是完全正确的。
模型运行后的结果如下,可见在5s位置,命令信号发生变化以后,输出信号进行了切换,实现了判断与选择,实现的功能就是if-else语句。
上文实现的判断选择仅仅支持两路,而我们建模的时候需要做更加复杂的判断,输入信号超过2路,因此在Amesim中还支持多路判断与选择。
主要用到的元件就是多路信号选择器,左侧端口数量可以自定义,顶部就是指定编号,如下的例子中自定义了三路信号输入,则顶部参数可以指定任意一路信号输出,想要指定某一路信号的编号,可以通过外部变量直接查看。
在本例中看似很笨拙,只是固定某一路输出,但是考虑到顶部信号可以不断判断和变化,则此元件可以实现非常丰富复杂的判断。
Amesim中判断元件主要包括图中红框圈中的四个元件,各自功能和使用场景不同,但是大同小异:
第1个和第3个都有控制信号,差别在于第1个存在判断过程,第3个是直接指定输出,没有判断过程。第1个只能支持两路输入,第3个可以自定义输入信号数量。
第2个和第4个都没有控制信号,都是指定输出并且支持自定义输入信号数量,差别第4个可以输出多路信号,而第2个只能输出1个信号。
与判断选择元件搭配的常用信号为下图中蓝框圈中的两个元件,其中第1个元件是将多路信号编为一路复合信号,第2个元件是将复合信号解压为多个独立信号。在大家连接的时候,一定要确保接口的数量保持一致,否则就会报错。
本节内容相对简单,但是是十分常用好用的元件,大家可以自己练习搭建如下逻辑:
练习题目:在一个循环中,x的初始值为1,每次循环中对x进行判断,如果x为质数则x=2*x,如果x为偶数则x=x+3,如果x不是质数也不是偶数则x=x+1,直到x>1000停止循环,输出每个循环中x的值。
大家可以尝试做一下,这样就可以非常熟练的使用Amesim中的判断元件了,希望本篇文章能对大家有所启发和帮助。