TestStand也有自己的语言?
TestStand也有自己的语言嘛?在回答这个问题之前大家可以想一下在使用TestStand时有一个和语言密切相关的属性。没错那就是表达式(Expressions),在这篇文章中,小编将以Q&A的方式来带着大家来理解并熟悉TestStand表达式中较为常用的一些语法规则以及运算符使用。
在了解TestStand语法规则和运算符之前,大家先回忆一下还记得表达式是什么嘛?表达式分为哪几类?
那么根据上面这张图,大家是不是有记起一些呢?除了运行前表达式、运行时表达式、状态表达式,还有步骤中Statement(赋值表达式),Precondition Expression(先决条件表达式)等。表达式起到什么作用、什么时候执行都是有明确的区分的。
本文分享:
Teststand语法
一、算数运算符(Arithmetic)
"+" :加法运算符,需注意的是如果一个操作数是字符串,另一个操作数是数值,操作符会先将字符串转换为数值。如果两个参数都是字符串,则运算符会创建一个新的字符串,新的字符串是将两个字符串的内容连接起来。如果两个参数都是数组,则运算符会创建一个新数组,将两个数组的内容连接起来。运算使用时需要注意数据类型是否一致,举个例子创建Locals.x(数值类型),执行该表达式Locals.x = "3" +5,Locals.y执行结果为8;
"-" :减法运算符,仅适用于数值,实现的就是简单的减法运算。
"*" :乘法运算符,仅适用于数值,实现的就是简单的乘法运算。
"/" :第一个数除以第二个数,仅适用于数值。
"MOD"(Basic syntax) :计算第一个数除以第二个数的余数,适用于整数和实数。
"%"(C/C++/C# syntax):计算第一个数除以第二个数的余数,适用于整数和实数。
"++" :增量运算符,前增量或后增量,将数值增加1,可以放在数值前或数值后。如果将该运算符放在数值之前,则表达式的值为增加1后的新值,反之放在数值之后,则表达式的值为原值。
"--" :减量运算符,使用方法和增量运算符相同。
了解了算数运算符后,想必大家也发现TestStand表达式的语法规则和文本语言十分相像甚至可以说是一模一样,算法运算符在单纯使用方面和文本语言几乎一模一样,那么这里提出一个简单的问题!
Q
Locals.x的值为3,若执行表达式1:Locals.y = ++Locals.x + 10和表达式2:Locals.y = Locals.x++ +10两个表达式的运算结果分别是什么呢?
和文本语言语法规则相同,表达式1在执行后Locals.x的值为4,Locals.y的值为14,表达式2在执行后Locals.x的值为3,Locals.y的值为13。
Q
若要使两个字符串连接起来组成一个新的字符串,类似于LabVIEW中的连接字符串,可以通过何种方法在TestStand中实现呢?
可以使用加法运算符来实现该功能,因为如果运算符前后都是字符串,则会创建一个新的字符串,将两个字符串的内容连接起来,比如Local.x = "a" + "b",执行后Locals.x结果为"ab"。
二、赋值运算符(Assignment)
除了算法运算符,赋值运算符同样和文本语言类似!
"=" :对运算符右侧表达式求值,并将运算符左侧的操作数设置为结果。需注意在对容器属性进行操作时,左右两侧的子属性名称的层次结构必须匹配。对于每个属性值,赋值会尽可能在不同数据类型之间进行转换,例如将数值转换为字符串。
"+=" :该运算符实现的是对运算符右侧的表达式求值,并将结果相加到左边的操作数。如果运算符右侧的表达式是字符串,则运算符在将其添加到左侧的操作数之前将其转换为数值。如果两边都是字符串,运算符将右边的字符串连接至左边的字符串。如果两边都是数组,则运算符将右边数组的元素附加到左边数组的末尾。
"-=" :对运算符右侧的表达式求值,并从左侧的操作数中减去作为结果。使用方法和"+="运算符相同。
"*=" :对运算符右侧的表达式求值,并与左侧的操作数相乘作为结果。使用方法和"+="运算符相同。
"/=" :对运算符右侧的表达式求值,并与左侧的操作数相除作为结果。使用方法和"+="运算符相同。
"%=" :对运算符右侧的表达式求值,并与左侧的操作数相除取余作为结果。使用方法和"+="运算符相同。
"^=" :对运算符右侧表达式值和左侧数值执行异或操作后得到的数值作为结果。
"&=" :对运算符右侧表达式值和左侧数值执行与操作后得到的数值作为结果。使用方法和"^="相同。
"|=" :对运算符右侧表达式值和左侧数值执行或操作后得到的数值作为结果。使用方法和"^="相同。
Q
假设Locals.x为10,执行以下表达式Locals.x^= 3 + 2,执行后的结果是多少呢?
执行该表达式Locals.x ^= 3 + 2,即将10(二进制1010)和5(二进制0101)进行异或得到的结果为15(1111)。
三、位运算符(Bitwise)
"AND"、"&" :计算两个数值的与运算,举个例子Locals.x = 3(0011) AND 6(0110)得到的结果是2(0010)。
"OR"、"|" :计算两个数值的或运算,使用方法和"AND"相同。
"XOR"、"^" :计算两个数值的异或运算,使用方法和"AND"相同。
"<<" :将运算符左边的数值向左移动运算符右边数值的位数。举个列子Locals.x = 3(0011) << 1,得到的结果是6(0110)。
">>" :将运算符左边的数值向右移动运算古右边数值的位数。使用方法和">>"相同。
四、比较运算符(Comparison)
"==" :判断运算符左右两边是否相等,若相等则返回值为True,不相等则返回值为False。如果一个是字符串,另一个是数值,那么运算符会将字符串转换为数值。如果两个都是字符串,则比较不区分大小写。
"!="、"<>" :如果左边操作数和右边操作数不相等,则计算结果为True。适用于字符串、数值和布尔值。使用方法和"=="相同。
">" :如果运算符左边数值大于右边数值,则计算结果为True。适用于字符串、数值和布尔值。该类运算符比较简单,">="、"<"和"<="使用方法都是相同的。
五、逻辑运算符(Comparison)
"&&" :逻辑与运算符,如果两个操作数都为True,则计算结果为True。如果第一个操作数为False,则不计算第二个操作数。在应用操作符之前,数值操作数如果非零则转换为True,如果为零则转换为False。如果文本为“True”或包含非零数字的表示形式,则字符串操作数将转换为True,否则为False。
"||" :逻辑或运算符,如果一个或两个操作数为True,则计算结果为True。如果第一个操作数为True,则不计算第二个操作数。使用方法和"&&"相同。
六、其他运算符(Other)
"( )" :改变求值顺序。
"." :属性字段分隔符。
",(;)" :表达式分隔符,使用逗号来分割传递给表达式函数的参数,用法:
"? :" :根据布尔表达式的结果,从其他两个表达式中选择一个来求值。用法:booleanValue ?
"/* */" :指定分隔符中的字符为注释。
"//" :指定一行上的其余字符为注释。比如Locals.Channel += 1 //Advance to next channel
小编将以一个实际项目上遇到的问题来作为这篇文章的结束!
Q
TestStand能不能通过表达式自定义等待(Wait)时间,比如第一次循环等待10s,然后第二次循环的时候跑到3s序列跑死了,我再重新跑的时候想只跑剩下的7s,这个在不添加步骤的情况下可以通过表达式实现吗?
当然可以,首先我们整理一下应用背景,wait本来需要10s,但是当序列跑死后我们只需要他跑剩余的时间,这里我们简化一下问题使其变得略微简单一些:在一个循环中,当第一次等待时等待3s,第二次等待时等待7s。我们需要在不添加步骤的情况下实现,首先我们要明确我们应该使用哪种表达式,很明显我们用到的是先决条件表达式(Precondition Expression),因为在执行该表达式前我们需要对循环次数进行判断。因此我们需要一个变量Locals.i来保存循环次数,说到这里想必大家都已经有自己的思路和理解了。那我们需要用到的运算符是"? :",那么实现该功能的表达式就已经呼之欲出了:Locals.i < 2 == True ? 3:7,当循环次数<2的时候为True,等待时间为3s,反之则为7s。
七、总结
TestStand中表达式有多种写法,语法规则也不唯一,如果想要实现某个具体算法、逻辑、功能,可以查看本篇文章进行尝试,如果遇到问题或者想实现比较难的算法、逻辑、功能欢迎一起讨论!
以上内容就是本期的全部内容,更多关于测试系统中的实际软硬件应用知识,可关注本公众号/下方合集,敬请期待!
全部0条评论
快来发表一下你的评论吧 !