日本无码免费高清在线|成人日本在线观看高清|A级片免费视频操逼欧美|全裸美女搞黄色大片网站|免费成人a片视频|久久无码福利成人激情久久|国产视频一二国产在线v|av女主播在线观看|五月激情影音先锋|亚洲一区天堂av

  • 手機(jī)站
  • 小程序

    汽車測(cè)試網(wǎng)

  • 公眾號(hào)
    • 汽車測(cè)試網(wǎng)

    • 在線課堂

    • 電車測(cè)試

上海恩艾儀器有限公司

NI的集成式軟硬件平臺(tái)

TestStand?代碼?模?塊?開發(fā)?最佳?實(shí)踐

概覽使用TestStand創(chuàng)建測(cè)試程序時(shí),核心測(cè)試功能在單獨(dú)的代碼模塊中實(shí)現(xiàn)。TestStand提供的適配器可調(diào)用使用各種編程環(huán)境和語(yǔ)言(例如LabVIEW、LabVIEW NXG、LabWindows?/CVI?、C#、VB .NET、C/C++和ActiveX)開...
本公司推薦產(chǎn)品
企業(yè)信息

上海恩艾儀器有限公司

企業(yè)商鋪二維碼

掃碼通過手機(jī)逛商鋪

產(chǎn)品信息
概覽

使用TestStand創(chuàng)建測(cè)試程序時(shí),核心測(cè)試功能在單獨(dú)的代碼模塊中實(shí)現(xiàn)。TestStand提供的適配器可調(diào)用使用各種編程環(huán)境和語(yǔ)言(例如LabVIEW、LabVIEW NXG、LabWindows?/CVI?、C#、VB .NET、C/C++和ActiveX)開發(fā)的代碼模塊。

本文檔討論了開發(fā)測(cè)試系統(tǒng)代碼模塊并從測(cè)試序列中調(diào)用這些模塊時(shí)可能會(huì)用到的最佳實(shí)踐。要使用本文檔,您需要掌握TestStand的基本工作原理,其中包括創(chuàng)建基本測(cè)試序列的方法。

內(nèi)容

· 確定代碼模塊開發(fā)的策略
· 選擇要實(shí)現(xiàn)功能的位置
· 實(shí)現(xiàn)代碼模塊的最佳實(shí)踐
· 使用代碼模塊中的儀器
· 查閱TestStand高級(jí)架構(gòu)系列的其他章節(jié)

1  確定代碼模塊開發(fā)的策略

開始開發(fā)測(cè)試系統(tǒng)之前,請(qǐng)考慮為測(cè)試系統(tǒng)的以下方面確定一種通用方法:

· 代碼模塊的粒度 — 定義每個(gè)模塊的功能范圍。
· 定義測(cè)試代碼的目錄結(jié)構(gòu) — 定義明確的目錄結(jié)構(gòu)使開發(fā)人員之間可以更輕松地共享代碼,且更易于測(cè)試系統(tǒng)的代碼部署。

代碼模塊的粒度

在設(shè)計(jì)測(cè)試系統(tǒng)時(shí),請(qǐng)務(wù)必為代碼模塊定義一致的粒度級(jí)別。 粒度是指測(cè)試系統(tǒng)中每個(gè)代碼模塊的功能范圍。 粒度低的測(cè)試序列調(diào)用的代碼模塊數(shù)量少,每個(gè)代碼模塊執(zhí)行的功能更多;而粒度高的測(cè)試序列調(diào)用的代碼模塊數(shù)量多,每個(gè)代碼模塊執(zhí)行的功能更少。

低粒度

·
代碼模塊更少,更易于維護(hù)

·
代碼模塊調(diào)用次數(shù)更少,因而提高了性能

高粒度

·
序列文件的可讀性提高,但粒度過高的序列會(huì)導(dǎo)致混亂

·
更容易隔離代碼模塊中的問題和漏洞

由于二者各有優(yōu)勢(shì),因此您應(yīng)該在這些極端情況之間取得平衡。

TestStand代碼模塊開發(fā)最佳實(shí)踐
利用不同的粒度級(jí)別實(shí)現(xiàn)簡(jiǎn)單測(cè)試

為了在整個(gè)測(cè)試系統(tǒng)中保持一致的粒度,需要為代碼模塊開發(fā)創(chuàng)建一組標(biāo)準(zhǔn),例如:

· 在單獨(dú)的代碼模塊中執(zhí)行硬件初始化和關(guān)閉,讓TestStand管理硬件會(huì)話的生命周期。

·
為每個(gè)需求項(xiàng)目創(chuàng)建單個(gè)測(cè)試步驟,從而根據(jù)測(cè)試需求確定粒度。 這種方法可以更輕松地確保所有要求均得到滿足。 此外,NI Requirements Gateway可與TestStand搭配使用,創(chuàng)建測(cè)試步驟與需求文檔之間的關(guān)聯(lián)。 如需更多信息,請(qǐng)參閱《NI Requirements Gateway與TestStand搭配使用》教程。

·
所需的測(cè)試結(jié)果結(jié)構(gòu)可用于幫助確定各個(gè)步驟的范圍。 由于每個(gè)步驟都會(huì)生成一個(gè)結(jié)果條目,因此創(chuàng)建測(cè)試步驟到所需結(jié)果條目的一對(duì)一映射將使組織測(cè)試結(jié)果變得更容易,且對(duì)報(bào)告或數(shù)據(jù)庫(kù)記錄的更改最少。

定義序列文件和代碼模塊的目錄結(jié)構(gòu)

指定測(cè)試步驟中代碼模塊的路徑時(shí),可選擇使用絕對(duì)路徑或相對(duì)路徑。建議不要使用絕對(duì)路徑,原因如下:

· 在磁盤上移動(dòng)序列文件及其依賴項(xiàng)后,相應(yīng)路徑將失效。

·
如果將序列文件部署到目標(biāo)計(jì)算機(jī),除非文件安裝在同一位置,否則相應(yīng)路徑將失效。

指定相對(duì)路徑時(shí),TestStand會(huì)使用搜索目錄列表來解析路徑。 這些搜索目錄通常包含當(dāng)前序列文件目錄、TestStand特定目錄和系統(tǒng)目錄。

在開始開發(fā)之前,請(qǐng)務(wù)必為測(cè)試序列和代碼模塊定義文件結(jié)構(gòu)。 請(qǐng)按照以下指南定義用于存儲(chǔ)序列文件和代碼模塊的策略。

· 對(duì)于用于單個(gè)序列文件的代碼模塊,請(qǐng)將代碼模塊文件保存在與序列文件相關(guān)的子目錄中。 這將確保,即使序列文件在系統(tǒng)中移動(dòng)或復(fù)制到另一個(gè)系統(tǒng)上,它也能夠找到代碼模塊。

·
對(duì)于在多個(gè)相關(guān)序列文件之間共享的代碼模塊,如果相關(guān)序列文件保存在同一目錄中,則可以使用與單個(gè)序列文件相同的方法。 考慮創(chuàng)建一個(gè)工作區(qū)來容納所有相關(guān)的序列文件和代碼模塊。

·
對(duì)于在多個(gè)不相關(guān)的序列文件之間共享的代碼模塊,請(qǐng)考慮創(chuàng)建一個(gè)特定目錄來容納所有共享的代碼模塊,并創(chuàng)建指向此位置的新搜索目錄。 這將確保系統(tǒng)中的所有序列文件都可以使用此搜索目錄的相對(duì)路徑來找到相應(yīng)文件。 部署代碼模塊時(shí),可同時(shí)部署位于\Cfg\SearchDirectories.cfg的搜索目錄配置文件。 使用此方法時(shí),請(qǐng)不要在目錄內(nèi)移動(dòng)代碼模塊文件,以免破壞調(diào)用序列文件時(shí)指定的路徑。

TestStand代碼模塊開發(fā)最佳實(shí)踐1
定義目錄結(jié)構(gòu),其中代碼模塊位于序列文件的子目錄中

使用TestStand部署工具部署測(cè)試代碼時(shí),可為序列文件和相關(guān)代碼模塊選擇特定的目標(biāo)。 如果序列文件和代碼模塊的目標(biāo)目錄之間存在相對(duì)路徑,則TestStand部署工具會(huì)更新序列文件中的路徑來指向更新后的位置。 在大多數(shù)情況下,最好使部署的目錄結(jié)構(gòu)與開發(fā)系統(tǒng)上的目錄結(jié)構(gòu)相匹配,從而確保部署與開發(fā)計(jì)算機(jī)上的代碼盡可能相似。

2  選擇要實(shí)現(xiàn)功能的位置

在定義測(cè)試系統(tǒng)的代碼模塊范圍時(shí),請(qǐng)務(wù)必定義在代碼模塊和序列文件中實(shí)現(xiàn)功能的策略。以下部分可幫助確定最適合實(shí)現(xiàn)常用功能的位置:

· 根據(jù)極限評(píng)估測(cè)試測(cè)量值

·
定義激勵(lì)值

·
報(bào)告并記錄測(cè)試結(jié)果和錯(cuò)誤

·
循環(huán)操作

·
執(zhí)行開關(guān)操作

·
執(zhí)行計(jì)算和處理數(shù)據(jù)

評(píng)估極限和測(cè)試結(jié)果

理想情況下,代碼模塊應(yīng)包含與獲得測(cè)試測(cè)量值直接相關(guān)的功能,并且測(cè)試序列應(yīng)處理原始測(cè)試結(jié)果。這種方法具有以下優(yōu)勢(shì):

· 由于在序列文件中可使用屬性加載器等工具在單個(gè)中心節(jié)點(diǎn)管理多個(gè)步驟的極限,因此測(cè)試極限在序列文件中更易于管理。

·
序列中定義的測(cè)試極限將自動(dòng)添加到測(cè)試結(jié)果中,例如報(bào)告或數(shù)據(jù)庫(kù)。

·
測(cè)試極限可在不更改代碼模塊的情況下進(jìn)行更新,并且由于只修改了測(cè)試序列,因此所需的驗(yàn)證更少。

為了簡(jiǎn)化測(cè)量,代碼模塊可以將原始測(cè)量值返回到序列中進(jìn)行處理。例如,如果測(cè)試步驟用于測(cè)量待測(cè)設(shè)備(UUT)特定引腳上的電壓,則代碼模塊應(yīng)返回測(cè)量值,而不是直接在代碼模塊中執(zhí)行檢查。 您可以使用數(shù)值邊界測(cè)試步驟來處理該值,從而確定序列文件中的測(cè)試結(jié)果。

TestStand代碼模塊開發(fā)最佳實(shí)踐2
在測(cè)試步驟中評(píng)估極限可簡(jiǎn)化代碼模塊并改進(jìn)結(jié)果記錄

但是,由于某些測(cè)試十分復(fù)雜,因此并非總是能夠在序列文件中處理原始測(cè)試結(jié)果。 對(duì)于更復(fù)雜的測(cè)量,可能需要對(duì)結(jié)果數(shù)據(jù)進(jìn)行進(jìn)一步處理。 復(fù)雜數(shù)據(jù)可處理為單個(gè)字符串或數(shù)值結(jié)果,然后便可以在TestStand中使用字符串或數(shù)值比較功能對(duì)其進(jìn)行評(píng)估。 例如,掃頻測(cè)試的結(jié)果很復(fù)雜,無(wú)法直接進(jìn)行評(píng)估,但可以將這些數(shù)據(jù)處理為代表最小值的單個(gè)數(shù)字。 在這種情況下,代碼模塊應(yīng)評(píng)估處理后的結(jié)果,并以單獨(dú)的參數(shù)形式返回頻率數(shù)據(jù),以便記錄,如下面的移動(dòng)設(shè)備測(cè)試示例所示:

TestStand代碼模塊開發(fā)最佳實(shí)踐3
對(duì)于更復(fù)雜的數(shù)據(jù),請(qǐng)?jiān)诖a模塊中處理數(shù)據(jù),生成數(shù)值或字符串結(jié)果,然后使用參數(shù)傳出原始數(shù)據(jù),以便記錄

如果原始數(shù)據(jù)非常大,則將數(shù)據(jù)傳遞給TestStand的過程可能會(huì)對(duì)性能產(chǎn)生重大影響。 在這種情況下,可考慮將數(shù)據(jù)直接記錄到TDMS文件中,并在測(cè)試報(bào)告中添加指向該文件的鏈接。 如此一來,可在無(wú)需將數(shù)據(jù)傳遞給TestStand的情況下從報(bào)告中引用數(shù)據(jù)。 關(guān)于此方法的更多信息,請(qǐng)參閱《在報(bào)告中添加超鏈接 — TDMS文件》。

如果該步驟無(wú)法使用測(cè)試步驟中可用的評(píng)估類型來確定測(cè)試結(jié)果,請(qǐng)考慮創(chuàng)建具有附加功能的新步驟類型來處理所需的測(cè)試類型。 關(guān)于創(chuàng)建自定義步驟類型的更多信息,請(qǐng)參閱本系列中的《自定義步驟類型開發(fā)的最佳實(shí)踐》一文。

定義測(cè)試激勵(lì)

對(duì)于許多測(cè)試而言,UUT或測(cè)試環(huán)境必須處于特定狀態(tài)下才能執(zhí)行測(cè)試。 例如,進(jìn)行溫度測(cè)量可能需要使用激勵(lì)電壓,或者必須將加熱室設(shè)置為指定溫度。 對(duì)于這些類型的模塊,應(yīng)使用參數(shù)來傳遞輸入值,例如激勵(lì)電壓或所需溫度。 與上一部分所述的直接在代碼中處理極限相比,這與在測(cè)試代碼模塊中返回原始數(shù)據(jù)具有許多相同的優(yōu)勢(shì)。

記錄測(cè)試結(jié)果

TestStand具有使用測(cè)試步驟的結(jié)果來生成報(bào)告和記錄數(shù)據(jù)庫(kù)的內(nèi)置功能。因此,請(qǐng)避免直接在代碼模塊內(nèi)進(jìn)行任何類型的數(shù)據(jù)記錄。 相反,請(qǐng)確保將要記錄的所有數(shù)據(jù)以參數(shù)形式傳出,并使用TestStand記錄相應(yīng)數(shù)據(jù)。 一些數(shù)據(jù)(例如測(cè)試結(jié)果、極限和錯(cuò)誤信息)將自動(dòng)記錄。 要記錄其他數(shù)據(jù),可使用其他結(jié)果功能來指定要添加到報(bào)告中的其他參數(shù)。

關(guān)于將結(jié)果添加到測(cè)試報(bào)告中的更多信息,請(qǐng)參閱TestStand隨附的《將自定義數(shù)據(jù)添加到報(bào)告》示例。

如果您對(duì)記錄有特定要求,請(qǐng)考慮修改或創(chuàng)建結(jié)果處理插件。如此一來,可以使用內(nèi)置的TestStand結(jié)果收集功能收集結(jié)果,同時(shí)可以確定結(jié)果的處理方式和顯示方式。如需更多信息,請(qǐng)參閱《TestStand過程模型開發(fā)和自定義的最佳實(shí)踐》文檔的“創(chuàng)建插件”部分

循環(huán)操作

由于實(shí)現(xiàn)循環(huán)的每種方法都有其自身的優(yōu)缺點(diǎn),因此很難確定理想的方法。請(qǐng)使用以下指南來幫助確定最適合您的應(yīng)用程序的策略:

在代碼模塊中進(jìn)行內(nèi)部循環(huán)

· 性能得以提高,尤其是在快速循環(huán)時(shí)。 由于每次代碼模塊調(diào)用都會(huì)產(chǎn)生幾毫秒的開銷,因此使用外部循環(huán)進(jìn)行數(shù)百或數(shù)千次迭代循環(huán)會(huì)影響測(cè)試速度。

·
支持更復(fù)雜的循環(huán)行為。

在序列文件中進(jìn)行外部循環(huán)

· 直接在序列文件中查看和修改循環(huán)設(shè)置,不需要修改代碼模塊。

·
輕松訪問序列文件中的循環(huán)索引。 這對(duì)于確定基于當(dāng)前迭代而變化的開關(guān)路由或其他行為很有用。

·
循環(huán)的每次迭代均單獨(dú)記錄,在報(bào)告或數(shù)據(jù)庫(kù)中顯示每次迭代的結(jié)果。

執(zhí)行開關(guān)操作

許多測(cè)試系統(tǒng)可借助開關(guān)功能使用單個(gè)硬件測(cè)試多個(gè)待測(cè)區(qū)。 借助預(yù)定義的路由,開關(guān)功能支持以編程方式控制連接到特定硬件的待測(cè)設(shè)備(UUT)引腳。

您可以通過以下方式在TestStand代碼模塊中實(shí)現(xiàn)開關(guān)功能:

· 使用步驟的內(nèi)置開關(guān)屬性(需要NI Switch Executive)

·
使用TestStand IVI Switch步驟(僅適用于32位TestStand)

·
直接在代碼模塊中調(diào)用開關(guān)驅(qū)動(dòng)程序函數(shù)

使用NI Switch硬件時(shí),NI Switch Executive可用于快速定義路由。在可以訪問NI Switch Executive的情況下,使用內(nèi)置的步驟設(shè)置來實(shí)現(xiàn)開關(guān)功能通常是最佳方法,此方法具有以下優(yōu)勢(shì):

· 在步驟中定義開關(guān)配置可以將開關(guān)函數(shù)與測(cè)試代碼分離,從而提高可復(fù)用性并降低代碼模塊的復(fù)雜性。

·
開關(guān)設(shè)置中的許多字段都是通過表達(dá)式指定的,因此可利用RunState.LoopIndex屬性或其他變量來為要迭代的步驟建立路由或路由組名稱的索引。

·
對(duì)于并行測(cè)試,可在路由字符串中添加測(cè)試插槽索引(RunState.TestSockets.MyIndex),對(duì)每個(gè)測(cè)試插槽使用不同的開關(guān)路由。

·
連接生命周期可與步驟、序列、線程或執(zhí)行關(guān)聯(lián)起來。

TestStand代碼模塊開發(fā)最佳實(shí)踐4

使用NI Switch Executive直接在TestStand步驟設(shè)置中指定路由,包括TestStand表達(dá)式支持,從而使用當(dāng)前循環(huán)索引或其他屬性來動(dòng)態(tài)確定路由

關(guān)于使用開關(guān)步驟屬性整合開關(guān)功能的更多信息,請(qǐng)參見《借助NI Switch Executive加速開發(fā)并簡(jiǎn)化維護(hù)》在線教程。

執(zhí)行計(jì)算和處理數(shù)據(jù)

為了避免為較簡(jiǎn)單的任務(wù)維護(hù)代碼模塊,可使用TestStand中的表達(dá)式語(yǔ)言來執(zhí)行基本計(jì)算和單維數(shù)組操作。由于編程語(yǔ)言提供了更適合這些任務(wù)且更強(qiáng)大的功能,因此應(yīng)在代碼模塊中執(zhí)行更高級(jí)的編程要求。 例如,與使用表達(dá)式語(yǔ)言相比,使用原生LabVIEW創(chuàng)建數(shù)組函數(shù)可更輕松地完成多維數(shù)組的連接。

在某些情況下,可使用.NET框架隨附的原生類避免創(chuàng)建過于復(fù)雜的表達(dá)式。 例如,System.IO.Path類可在無(wú)需創(chuàng)建代碼模塊的情況下用于快速執(zhí)行路徑操作。

TestStand代碼模塊開發(fā)最佳實(shí)踐5
無(wú)需代碼模塊的參與,即可借助.NET步驟來使用.NET框架方法

3  實(shí)現(xiàn)代碼模塊的最佳實(shí)踐

實(shí)現(xiàn)代碼模塊時(shí),許多設(shè)計(jì)決策都會(huì)影響創(chuàng)建的許多代碼模塊。 本部分提供有關(guān)以下概念的指南:

· 將數(shù)據(jù)從TestStand傳遞到代碼模塊

·
處理代碼模塊中的序列終止

·
向TestStand報(bào)告代碼模塊錯(cuò)誤

·
管理代碼模塊的執(zhí)行速度和內(nèi)存使用

將數(shù)據(jù)從TestStand傳遞到代碼模塊

訪問代碼模塊中的TestStand數(shù)據(jù)的方法有兩種:

· 通過代碼模塊參數(shù)傳遞數(shù)據(jù)

·
使用TestStand API在代碼模塊內(nèi)直接訪問數(shù)據(jù)

在大多數(shù)情況下,與使用TestStand API直接訪問數(shù)據(jù)相比,使用參數(shù)傳遞數(shù)據(jù)是一種更好的方法,具體原因如下:

· 出錯(cuò)可能性更低 — 由于參數(shù)值是在TestStand的步驟類型設(shè)置中定義的,而不是直接在代碼模塊中定義的,因此更容易發(fā)現(xiàn)屬性名稱或數(shù)據(jù)類型中的錯(cuò)誤。

·
更易于維護(hù) — 對(duì)步驟屬性的更改是在TestStand的參數(shù)配置中指定的,無(wú)需修改代碼模塊。

·
更容易在TestStand之外復(fù)用 — 由于代碼模塊不依賴于TestStand API,因此模塊無(wú)需修改即可在TestStand之外使用

TestStand代碼模塊開發(fā)最佳實(shí)踐6
盡可能使用參數(shù)將所需數(shù)據(jù)傳遞到代碼模塊

但是,根據(jù)步驟的狀態(tài),當(dāng)代碼模塊需要?jiǎng)討B(tài)訪問各種數(shù)據(jù)時(shí),使用API直接訪問屬性可能很有幫助。 在這種情況下,使用步驟參數(shù)會(huì)導(dǎo)致參數(shù)過多,而在不同情況下,實(shí)際用到的參數(shù)只有一部分。

如果要在代碼模塊中使用TestStand API,則需要向SequenceContext對(duì)象(ThisContext)傳遞一個(gè)引用作為參數(shù)。SequenceContext對(duì)象可訪問所有其他TestStand對(duì)象,包括TestStand引擎和當(dāng)前的Runstate。如果使用終止監(jiān)視器或模態(tài)對(duì)話框VI,則需要序列上下文引用。

TestStand代碼模塊開發(fā)最佳實(shí)踐7
使用SequenceContext訪問代碼模塊中的TestStand API,可用于以編程方式訪問數(shù)據(jù)

如果要在TestStand之外復(fù)用代碼模塊,請(qǐng)記住,只有在從TestStand序列調(diào)用相應(yīng)模塊的情況下,才能使用TestStand API進(jìn)行操作。模塊通過API從TestStand獲取的所有數(shù)據(jù)將不可用。 從TestStand外部調(diào)用代碼模塊時(shí),可先檢查序列上下文引用是否為空,從而定義獲取測(cè)試數(shù)據(jù)的備用機(jī)制。 在LabVIEW中,可以使用Not A Number/Path/Refnum?函數(shù),它會(huì)返回一個(gè)布爾值,如圖3所示。

TestStand代碼模塊開發(fā)最佳實(shí)踐8

對(duì)于在TestStand之外使用的代碼模塊,請(qǐng)使用Not a Number/Path/Refnum?檢查SequenceContext對(duì)象引用的有效性

在代碼模塊中處理大型數(shù)據(jù)集

在許多情況下,代碼模塊會(huì)在測(cè)量或分析過程中生成大量復(fù)雜數(shù)據(jù)。 由于TestStand會(huì)在存儲(chǔ)此類數(shù)據(jù)時(shí)創(chuàng)建數(shù)據(jù)副本,因此請(qǐng)避免將此類數(shù)據(jù)存儲(chǔ)在TestStand變量中。 這些副本可能會(huì)降低Runtime性能和/或?qū)е聝?nèi)存不足錯(cuò)誤。 使用以下方法來管理大型數(shù)據(jù)集,即可避免創(chuàng)建不必要的副本:

· 在代碼模塊內(nèi)處理大型數(shù)據(jù)集,例如在獲取數(shù)據(jù)的同一代碼模塊中分析數(shù)據(jù),并且僅向TestStand返回所需的結(jié)果

·
在TestStand和代碼模塊之間傳遞數(shù)據(jù)指針。 對(duì)于LabVIEW代碼模塊,請(qǐng)使用數(shù)據(jù)值引用(DVR)

處理代碼模塊中的序列終止

用戶按下“終止”按鈕時(shí),TestStand會(huì)停止執(zhí)行序列并運(yùn)行所有“清理”步驟。但是,如果執(zhí)行調(diào)用了代碼模塊,則該模塊必須完成執(zhí)行并將控制權(quán)交回TestStand,然后序列才能終止。如果代碼模塊的運(yùn)行時(shí)間超過數(shù)秒,或者模塊需要等待用戶輸入之類的條件發(fā)生,對(duì)于用戶來說,終止命令可能會(huì)被忽略。

要解決此問題,可以使用終止監(jiān)視器,讓代碼模塊檢查并響應(yīng)調(diào)用執(zhí)行的終止?fàn)顟B(tài)。例如,“計(jì)算機(jī)主板測(cè)試”隨附范例會(huì)使用仿真對(duì)話框中的終止監(jiān)視器,如下圖所示。 如果測(cè)試序列終止,則檢查終止?fàn)顟B(tài)VI會(huì)返回假值,循環(huán)停止。

TestStand代碼模塊開發(fā)最佳實(shí)踐9
關(guān)于使用終止監(jiān)視器的更多信息,請(qǐng)參閱終止監(jiān)視器示例。

處理錯(cuò)誤

測(cè)試系統(tǒng)中的錯(cuò)誤是非預(yù)期Run-Time行為,會(huì)妨礙測(cè)試的執(zhí)行。代碼模塊產(chǎn)生錯(cuò)誤時(shí),請(qǐng)將該信息傳回測(cè)試序列,以此確定下一步要執(zhí)行的操作,例如終止執(zhí)行、重復(fù)上一次測(cè)試或提示測(cè)試操作員。

要向TestStand提供來自代碼模塊的任何錯(cuò)誤信息,請(qǐng)使用步驟的Result.Error容器,如下圖所示。 執(zhí)行每個(gè)步驟之后,TestStand都會(huì)自動(dòng)檢查此屬性來確定是否發(fā)生錯(cuò)誤。 無(wú)需將錯(cuò)誤信息從TestStand傳遞到代碼模塊。如果代碼模塊向TestStand返回錯(cuò)誤,則執(zhí)行過程會(huì)引出分支到測(cè)試序列的另一部分,例如“清理”步驟組。

您可以使用“測(cè)試站選項(xiàng)”的“執(zhí)行”選項(xiàng)卡中的“Run-Time錯(cuò)誤”設(shè)置來確定TestStand響應(yīng)步驟錯(cuò)誤的方式。 通常,在開發(fā)用于協(xié)助調(diào)試的序列時(shí)應(yīng)使用“顯示對(duì)話框”選項(xiàng),因?yàn)榇诉x項(xiàng)可中斷執(zhí)行并檢查序列的當(dāng)前狀態(tài)。 對(duì)于已部署的系統(tǒng),請(qǐng)考慮使用“運(yùn)行清理”或“忽略”選項(xiàng),而不是要求測(cè)試操作員進(jìn)行輸入。 錯(cuò)誤信息將自動(dòng)記錄到測(cè)試結(jié)果中,可用于查找錯(cuò)誤的原因。

TestStand代碼模塊開發(fā)最佳實(shí)踐10
將錯(cuò)誤信息傳遞到Step.Result.Error容器,用于通知TestStand是否發(fā)生了步驟錯(cuò)誤

管理代碼模塊的性能和內(nèi)存使用

默認(rèn)狀態(tài)下,在文件中執(zhí)行序列時(shí),TestStand會(huì)將序列文件中的所有代碼模塊加載到內(nèi)存中,并保持加載狀態(tài),直到關(guān)閉序列文件為止。 使用這些設(shè)置后,如果在模塊加載的同時(shí)開始一個(gè)序列,則會(huì)出現(xiàn)初始延遲。 但是,由于模塊仍在內(nèi)存中,因此序列文件的后續(xù)執(zhí)行會(huì)更快。

步驟設(shè)置窗格的“運(yùn)行選項(xiàng)”選項(xiàng)卡可用于配置何時(shí)加載和卸載代碼模塊。通常,默認(rèn)的加載選項(xiàng)可提供出色的性能,但是在某些情況下,可將加載選項(xiàng)設(shè)置為動(dòng)態(tài)加載,從而使代碼模塊僅在使用時(shí)才加載,這可能是一種更好的選擇。 對(duì)于不在常用執(zhí)行中調(diào)用的代碼模塊,例如僅在特定測(cè)試失敗后才運(yùn)行的診斷,應(yīng)采取動(dòng)態(tài)加載方式,因?yàn)樵诖蠖鄶?shù)情況下這些模塊根本不需要加載。

請(qǐng)注意,在動(dòng)態(tài)加載代碼模塊時(shí),TestStand只會(huì)在加載代碼模塊之后才會(huì)報(bào)告相應(yīng)代碼模塊的問題,此時(shí)漫長(zhǎng)的執(zhí)行過程可能即將結(jié)束。但是,可以在執(zhí)行之前使用序列分析儀驗(yàn)證序列中是否存在錯(cuò)誤。 分析儀將檢查靜態(tài)和動(dòng)態(tài)加載的代碼模塊。

對(duì)于內(nèi)存密集型代碼模塊,可修改默認(rèn)的卸載選項(xiàng)來減少總內(nèi)存使用量。 例如,將模塊設(shè)置為步驟執(zhí)行后卸載或序列執(zhí)行后卸載。 但是,此更改將增加執(zhí)行時(shí)間,因?yàn)門estStand需要為每次后續(xù)調(diào)用重新加載模塊。如有可能,可以使用64位版本的TestStand和具有更多物理內(nèi)存的系統(tǒng),這種方法更好,在對(duì)內(nèi)存使用量有較高要求的情況下仍獲得出色的測(cè)試性能。

如果代碼模塊維護(hù)共享數(shù)據(jù),例如靜態(tài)變量或LabVIEW功能全局變量,由于在模塊卸載時(shí)會(huì)丟失全局?jǐn)?shù)據(jù),因此修改卸載選項(xiàng)可能會(huì)導(dǎo)致行為改變。更改卸載選項(xiàng)時(shí),請(qǐng)確保將任何必需的數(shù)據(jù)傳遞到TestStand序列或存儲(chǔ)在更為永久的位置,防止數(shù)據(jù)丟失。

關(guān)于優(yōu)化測(cè)試系統(tǒng)性能的其他方式的更多信息,請(qǐng)參閱《提高NI TestStand系統(tǒng)性能的最佳實(shí)踐》。

4  使用代碼模塊中的儀器

代碼模塊的常見用途是與測(cè)試硬件連接以設(shè)置激勵(lì)并進(jìn)行測(cè)試測(cè)量。 與硬件通信的方法包括:

?  使用硬件驅(qū)動(dòng)程序(例如NI-DAQmx)直接與硬件通信。

?  使用儀器驅(qū)動(dòng)程序,此驅(qū)動(dòng)程序可在內(nèi)部通過VISA或IVI硬件驅(qū)動(dòng)程序?qū)⒚畎l(fā)送到儀器。

所采用的通信方式取決于使用的硬件類型。 對(duì)于這兩種通信,您都需要在進(jìn)行特定驅(qū)動(dòng)程序的調(diào)用之前打開針對(duì)驅(qū)動(dòng)程序的引用或會(huì)話,并在交互完成后關(guān)閉句柄。

選擇管理硬件引用的方法

在大多數(shù)情況下,您將在多個(gè)測(cè)試步驟中與同一硬件進(jìn)行通信。為了避免在每個(gè)代碼模塊中打開和關(guān)閉儀器會(huì)話對(duì)性能的影響,請(qǐng)務(wù)必考慮如何在測(cè)試序列中管理硬件引用。 管理硬件引用的常用方法有兩種:

?  通過從代碼模塊調(diào)用初始化和關(guān)閉函數(shù)來手動(dòng)管理硬件引用。

?  使用會(huì)話管理器自動(dòng)管理硬件引用生命周期。

如果使用的是儀器驅(qū)動(dòng)程序,或者使用VISA或IVI驅(qū)動(dòng)程序直接與儀器通信,除非特別需要直接控制硬件會(huì)話生命周期,否則請(qǐng)使用會(huì)話管理器。 如果使用的是DAQmx等硬件驅(qū)動(dòng)程序,則不能使用會(huì)話管理器,必須手動(dòng)管理引用。

使用TestStand變量手動(dòng)管理硬件引用

初始化儀器時(shí),將會(huì)話引用作為輸出參數(shù)傳遞給調(diào)用序列,然后將引用存儲(chǔ)在變量中。 然后,可將變量作為輸入傳遞到需要訪問儀器的各個(gè)步驟。

包括NI-DAQmx和VISA在內(nèi)的許多驅(qū)動(dòng)程序以及大多數(shù)儀器驅(qū)動(dòng)程序都使用I/O引用數(shù)據(jù)類型來存儲(chǔ)會(huì)話引用。在TestStand中使用LabviewIOControl數(shù)據(jù)類型來存儲(chǔ)這些引用。

TestStand代碼模塊開發(fā)最佳實(shí)踐11
使用LabVIEWIOControl類型的變量在代碼模塊之間傳遞硬件引用,例如DAQ任務(wù)引用

在TestStand和代碼模塊之間顯式傳遞儀器句柄時(shí),請(qǐng)將硬件引用存儲(chǔ)在局部變量中。 如果硬件在多個(gè)序列中使用,請(qǐng)將句柄作為序列參數(shù)傳遞給有需求的每個(gè)序列。 避免使用全局變量存儲(chǔ)硬件引用,因?yàn)榭赡茈y以確保儀器已在使用引用之前完成初始化。

請(qǐng)使用“設(shè)置”步驟組初始化硬件,并使用“清理”步驟組關(guān)閉硬件引用,具體原因如下:

?  由于清除步驟組總是在執(zhí)行終止時(shí)運(yùn)行,因此如果用戶終止序列執(zhí)行,硬件引用仍將關(guān)閉。

?  由于設(shè)置和清除步驟組會(huì)在所選步驟之前和之后執(zhí)行,因此可交互地執(zhí)行使用硬件引用的步驟。

TestStand代碼模塊開發(fā)最佳實(shí)踐12
使用“設(shè)置”和“清理”組初始化和關(guān)閉硬件引用

使用會(huì)話管理器自動(dòng)管理硬件引用

對(duì)于VISA和IVI儀器句柄,可使用會(huì)話管理器自動(dòng)管理硬件引用。使用會(huì)話管理器具有諸多優(yōu)勢(shì),包括:

? 少耦合 — 不必在軟件組件之間傳遞儀器句柄變量。每個(gè)組件都會(huì)指定一個(gè)邏輯儀器名稱來獲取會(huì)話。

? 減少編程語(yǔ)言障礙 — 用不同語(yǔ)言編寫的代碼模塊可以使用同一會(huì)話,而無(wú)需傳遞可能難以在各種語(yǔ)言之間轉(zhuǎn)換的句柄。

? 生命周期控制 — 由于儀器會(huì)話是具有引用計(jì)數(shù)的ActiveX對(duì)象,因此可將會(huì)話的生命周期與ActiveX引用變量的生命周期相關(guān)聯(lián),而無(wú)需使用支持ActiveX引用變量的語(yǔ)言顯式關(guān)閉儀器。

會(huì)話管理器會(huì)在創(chuàng)建會(huì)話后自動(dòng)初始化相應(yīng)句柄,并在針對(duì)此會(huì)話的最后一個(gè)引用釋放后自動(dòng)關(guān)閉相應(yīng)句柄。代碼模塊和序列會(huì)傳遞一個(gè)邏輯名稱(例如“DMM1”),用于從會(huì)話管理器中獲取會(huì)話對(duì)象,該對(duì)象包含相應(yīng)的儀器句柄。

使用會(huì)話管理器時(shí),請(qǐng)將會(huì)話對(duì)象存儲(chǔ)在TestStand對(duì)象引用變量中。 由于會(huì)話生命周期與對(duì)象引用變量的生命周期相關(guān)聯(lián),因此無(wú)論有多少序列代碼模塊和子序列訪問同一會(huì)話,每次執(zhí)行時(shí)儀器句柄都會(huì)初始化和關(guān)閉一次。

在以下示例中,“獲取DMM會(huì)話”步驟使用邏輯名稱獲取針對(duì)DMM儀器會(huì)話對(duì)象的引用。此步驟將會(huì)話引用存儲(chǔ)在局部變量中,使會(huì)話在序列執(zhí)行期間保持初始化狀態(tài)。

TestStand代碼模塊開發(fā)最佳實(shí)踐13
借助會(huì)話管理器,可使用邏輯名稱引用儀器。 會(huì)話管理器VI使用邏輯名稱獲取DMM IO引用

關(guān)于如何使用會(huì)話管理器的更多信息,請(qǐng)參閱\National Instruments\Shared\Session Manager中的《NI會(huì)話管理器幫助》。

上一個(gè)示例序列從調(diào)用會(huì)話管理器的LabVIEW代碼模塊中獲取會(huì)話,而不是直接調(diào)用會(huì)話管理器,因?yàn)樵撌纠龑abVIEW適配器配置為在單獨(dú)的進(jìn)程中運(yùn)行VI。 關(guān)于如何使用會(huì)話管理器的更多信息,請(qǐng)參閱\National Instruments\Shared\Session Manager中的《NI會(huì)話管理器幫助》。

調(diào)用硬件驅(qū)動(dòng)程序庫(kù)

要與任意類型的硬件通信,需要使用驅(qū)動(dòng)程序庫(kù),該庫(kù)提供的一系列功能有助于使用編程語(yǔ)言執(zhí)行各種任務(wù)。 使用驅(qū)動(dòng)程序庫(kù)時(shí),通常會(huì)調(diào)用多個(gè)VI或函數(shù)來執(zhí)行單個(gè)邏輯操作,例如進(jìn)行測(cè)量或配置觸發(fā)器。 創(chuàng)建代碼模塊來實(shí)現(xiàn)此功能,而不是直接在TestStand步驟中調(diào)用庫(kù)函數(shù),此方法具有以下優(yōu)勢(shì):

?  避免了針對(duì)各函數(shù)的步驟功能產(chǎn)生的開銷

?  提供了驅(qū)動(dòng)程序調(diào)用和TestStand序列之間的抽象層

?  更易于跨測(cè)試程序共享實(shí)現(xiàn)過程
反對(duì) 0 舉報(bào) 0 收藏 0 評(píng)論 0
滬ICP備11026917號(hào)-25