TestStand也有自己的語言?
TestStand也有自己的語言嘛?在回答這個問題之前大家可以想一下在使用TestStand時有一個和語言密切相關(guān)的屬性。沒錯那就是表達(dá)式(Expressions),在這篇文章中,小編將以Q&A的方式來帶著大家來理解并熟悉TestStand表達(dá)式中較為常用的一些語法規(guī)則以及運算符使用。
在了解TestStand語法規(guī)則和運算符之前,大家先回憶一下還記得表達(dá)式是什么嘛?表達(dá)式分為哪幾類?
那么根據(jù)上面這張圖,大家是不是有記起一些呢?除了運行前表達(dá)式、運行時表達(dá)式、狀態(tài)表達(dá)式,還有步驟中Statement(賦值表達(dá)式),Precondition Expression(先決條件表達(dá)式)等。表達(dá)式起到什么作用、什么時候執(zhí)行都是有明確的區(qū)分的。
本文分享:
Teststand語法
一、算數(shù)運算符(Arithmetic)
"+" :加法運算符,需注意的是如果一個操作數(shù)是字符串,另一個操作數(shù)是數(shù)值,操作符會先將字符串轉(zhuǎn)換為數(shù)值。如果兩個參數(shù)都是字符串,則運算符會創(chuàng)建一個新的字符串,新的字符串是將兩個字符串的內(nèi)容連接起來。如果兩個參數(shù)都是數(shù)組,則運算符會創(chuàng)建一個新數(shù)組,將兩個數(shù)組的內(nèi)容連接起來。運算使用時需要注意數(shù)據(jù)類型是否一致,舉個例子創(chuàng)建Locals.x(數(shù)值類型),執(zhí)行該表達(dá)式Locals.x = "3" +5,Locals.y執(zhí)行結(jié)果為8;
"-" :減法運算符,僅適用于數(shù)值,實現(xiàn)的就是簡單的減法運算。
"*" :乘法運算符,僅適用于數(shù)值,實現(xiàn)的就是簡單的乘法運算。
"/" :第一個數(shù)除以第二個數(shù),僅適用于數(shù)值。
"MOD"(Basic syntax) :計算第一個數(shù)除以第二個數(shù)的余數(shù),適用于整數(shù)和實數(shù)。
"%"(C/C++/C# syntax):計算第一個數(shù)除以第二個數(shù)的余數(shù),適用于整數(shù)和實數(shù)。
"++" :增量運算符,前增量或后增量,將數(shù)值增加1,可以放在數(shù)值前或數(shù)值后。如果將該運算符放在數(shù)值之前,則表達(dá)式的值為增加1后的新值,反之放在數(shù)值之后,則表達(dá)式的值為原值。
"--" :減量運算符,使用方法和增量運算符相同。
了解了算數(shù)運算符后,想必大家也發(fā)現(xiàn)TestStand表達(dá)式的語法規(guī)則和文本語言十分相像甚至可以說是一模一樣,算法運算符在單純使用方面和文本語言幾乎一模一樣,那么這里提出一個簡單的問題!
Q
Locals.x的值為3,若執(zhí)行表達(dá)式1:Locals.y = ++Locals.x + 10和表達(dá)式2:Locals.y = Locals.x++ +10兩個表達(dá)式的運算結(jié)果分別是什么呢?
和文本語言語法規(guī)則相同,表達(dá)式1在執(zhí)行后Locals.x的值為4,Locals.y的值為14,表達(dá)式2在執(zhí)行后Locals.x的值為3,Locals.y的值為13。
Q
若要使兩個字符串連接起來組成一個新的字符串,類似于LabVIEW中的連接字符串,可以通過何種方法在TestStand中實現(xiàn)呢?
可以使用加法運算符來實現(xiàn)該功能,因為如果運算符前后都是字符串,則會創(chuàng)建一個新的字符串,將兩個字符串的內(nèi)容連接起來,比如Local.x = "a" + "b",執(zhí)行后Locals.x結(jié)果為"ab"。
二、賦值運算符(Assignment)
除了算法運算符,賦值運算符同樣和文本語言類似!
"=" :對運算符右側(cè)表達(dá)式求值,并將運算符左側(cè)的操作數(shù)設(shè)置為結(jié)果。需注意在對容器屬性進(jìn)行操作時,左右兩側(cè)的子屬性名稱的層次結(jié)構(gòu)必須匹配。對于每個屬性值,賦值會盡可能在不同數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換,例如將數(shù)值轉(zhuǎn)換為字符串。
"+=" :該運算符實現(xiàn)的是對運算符右側(cè)的表達(dá)式求值,并將結(jié)果相加到左邊的操作數(shù)。如果運算符右側(cè)的表達(dá)式是字符串,則運算符在將其添加到左側(cè)的操作數(shù)之前將其轉(zhuǎn)換為數(shù)值。如果兩邊都是字符串,運算符將右邊的字符串連接至左邊的字符串。如果兩邊都是數(shù)組,則運算符將右邊數(shù)組的元素附加到左邊數(shù)組的末尾。
"-=" :對運算符右側(cè)的表達(dá)式求值,并從左側(cè)的操作數(shù)中減去作為結(jié)果。使用方法和"+="運算符相同。
"*=" :對運算符右側(cè)的表達(dá)式求值,并與左側(cè)的操作數(shù)相乘作為結(jié)果。使用方法和"+="運算符相同。
"/=" :對運算符右側(cè)的表達(dá)式求值,并與左側(cè)的操作數(shù)相除作為結(jié)果。使用方法和"+="運算符相同。
"%=" :對運算符右側(cè)的表達(dá)式求值,并與左側(cè)的操作數(shù)相除取余作為結(jié)果。使用方法和"+="運算符相同。
"^=" :對運算符右側(cè)表達(dá)式值和左側(cè)數(shù)值執(zhí)行異或操作后得到的數(shù)值作為結(jié)果。
"&=" :對運算符右側(cè)表達(dá)式值和左側(cè)數(shù)值執(zhí)行與操作后得到的數(shù)值作為結(jié)果。使用方法和"^="相同。
"|=" :對運算符右側(cè)表達(dá)式值和左側(cè)數(shù)值執(zhí)行或操作后得到的數(shù)值作為結(jié)果。使用方法和"^="相同。
Q
假設(shè)Locals.x為10,執(zhí)行以下表達(dá)式Locals.x^= 3 + 2,執(zhí)行后的結(jié)果是多少呢?
執(zhí)行該表達(dá)式Locals.x ^= 3 + 2,即將10(二進(jìn)制1010)和5(二進(jìn)制0101)進(jìn)行異或得到的結(jié)果為15(1111)。
三、位運算符(Bitwise)
"AND"、"&" :計算兩個數(shù)值的與運算,舉個例子Locals.x = 3(0011) AND 6(0110)得到的結(jié)果是2(0010)。
"OR"、"|" :計算兩個數(shù)值的或運算,使用方法和"AND"相同。
"XOR"、"^" :計算兩個數(shù)值的異或運算,使用方法和"AND"相同。
"<<" :將運算符左邊的數(shù)值向左移動運算符右邊數(shù)值的位數(shù)。舉個列子Locals.x = 3(0011) << 1,得到的結(jié)果是6(0110)。
">>" :將運算符左邊的數(shù)值向右移動運算古右邊數(shù)值的位數(shù)。使用方法和">>"相同。
四、比較運算符(Comparison)
"==" :判斷運算符左右兩邊是否相等,若相等則返回值為True,不相等則返回值為False。如果一個是字符串,另一個是數(shù)值,那么運算符會將字符串轉(zhuǎn)換為數(shù)值。如果兩個都是字符串,則比較不區(qū)分大小寫。
"!="、"<>" :如果左邊操作數(shù)和右邊操作數(shù)不相等,則計算結(jié)果為True。適用于字符串、數(shù)值和布爾值。使用方法和"=="相同。
">" :如果運算符左邊數(shù)值大于右邊數(shù)值,則計算結(jié)果為True。適用于字符串、數(shù)值和布爾值。該類運算符比較簡單,">="、"<"和"<="使用方法都是相同的。
五、邏輯運算符(Comparison)
"&&" :邏輯與運算符,如果兩個操作數(shù)都為True,則計算結(jié)果為True。如果第一個操作數(shù)為False,則不計算第二個操作數(shù)。在應(yīng)用操作符之前,數(shù)值操作數(shù)如果非零則轉(zhuǎn)換為True,如果為零則轉(zhuǎn)換為False。如果文本為“True”或包含非零數(shù)字的表示形式,則字符串操作數(shù)將轉(zhuǎn)換為True,否則為False。
"||" :邏輯或運算符,如果一個或兩個操作數(shù)為True,則計算結(jié)果為True。如果第一個操作數(shù)為True,則不計算第二個操作數(shù)。使用方法和"&&"相同。
六、其他運算符(Other)
"( )" :改變求值順序。
"." :屬性字段分隔符。
",(;)" :表達(dá)式分隔符,使用逗號來分割傳遞給表達(dá)式函數(shù)的參數(shù),用法:
"? :" :根據(jù)布爾表達(dá)式的結(jié)果,從其他兩個表達(dá)式中選擇一個來求值。用法:booleanValue ?
"/* */" :指定分隔符中的字符為注釋。
"http://" :指定一行上的其余字符為注釋。比如Locals.Channel += 1 //Advance to next channel
小編將以一個實際項目上遇到的問題來作為這篇文章的結(jié)束!
Q
TestStand能不能通過表達(dá)式自定義等待(Wait)時間,比如第一次循環(huán)等待10s,然后第二次循環(huán)的時候跑到3s序列跑死了,我再重新跑的時候想只跑剩下的7s,這個在不添加步驟的情況下可以通過表達(dá)式實現(xiàn)嗎?
當(dāng)然可以,首先我們整理一下應(yīng)用背景,wait本來需要10s,但是當(dāng)序列跑死后我們只需要他跑剩余的時間,這里我們簡化一下問題使其變得略微簡單一些:在一個循環(huán)中,當(dāng)?shù)谝淮蔚却龝r等待3s,第二次等待時等待7s。我們需要在不添加步驟的情況下實現(xiàn),首先我們要明確我們應(yīng)該使用哪種表達(dá)式,很明顯我們用到的是先決條件表達(dá)式(Precondition Expression),因為在執(zhí)行該表達(dá)式前我們需要對循環(huán)次數(shù)進(jìn)行判斷。因此我們需要一個變量Locals.i來保存循環(huán)次數(shù),說到這里想必大家都已經(jīng)有自己的思路和理解了。那我們需要用到的運算符是"? :",那么實現(xiàn)該功能的表達(dá)式就已經(jīng)呼之欲出了:Locals.i < 2 == True ? 3:7,當(dāng)循環(huán)次數(shù)<2的時候為True,等待時間為3s,反之則為7s。
七、總結(jié)
TestStand中表達(dá)式有多種寫法,語法規(guī)則也不唯一,如果想要實現(xiàn)某個具體算法、邏輯、功能,可以查看本篇文章進(jìn)行嘗試,如果遇到問題或者想實現(xiàn)比較難的算法、邏輯、功能歡迎一起討論!
以上內(nèi)容就是本期的全部內(nèi)容,更多關(guān)于測試系統(tǒng)中的實際軟硬件應(yīng)用知識,可關(guān)注本公眾號/下方合集,敬請期待!
-
運算符
+關(guān)注
關(guān)注
0文章
172瀏覽量
11375 -
TestStand
+關(guān)注
關(guān)注
7文章
7瀏覽量
11271 -
華穗科技
+關(guān)注
關(guān)注
1文章
13瀏覽量
149
原文標(biāo)題:知識分享 | Teststand也有自己的語言?
文章出處:【微信號:華穗科技,微信公眾號:華穗科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Linux內(nèi)核中C語法擴(kuò)展-語句表達(dá)式
JAVA語言的運算符及表達(dá)式
數(shù)據(jù)類型、運算符與表達(dá)式
關(guān)于C語言的運算符和表達(dá)式--筆記1
C語言程序設(shè)計--運算符與表達(dá)式
單片機(jī)C語言教程-運算符和表達(dá)式
基于運算符信息的數(shù)學(xué)表達(dá)式檢索技術(shù)

RTL表達(dá)式和運算符
SystemVerilog-運算符/表達(dá)式規(guī)則
RTL表達(dá)式和運算符
RTL表達(dá)式和運算符
運算符/表達(dá)式規(guī)則

邏輯運算符與表達(dá)式

位邏輯運算符與表達(dá)式

評論