在 TestStand 中以程式方式獲取任意TestStand Property的名稱

更新 Feb 10, 2025

產品資訊

軟體

  • TestStand

問題敘述

我該如何以程式方式獲取任意TestStand Property的名稱?當我查看Expression Browser對話框中的Step或是Sequence properties時,都沒有Name property的字眼。像是如何獲取當前Step或是 Sequence的名稱?

解決方案

有四種常見的方法可以通過程式方式獲取任意TestStand Property的名稱。您可以使用NameOf()function, .Name object property, AsPropertyObject().Name property 或是 TestStand API.

相關資訊

要使用這些function和object Property,您需要其名稱的object並需要取得它的reference。以下是一些Property路徑的列表,這些路徑引用了一些常見的Property objects:

Property Property Path to Use
Current Sequence File: RunState.SequenceFile
Current Sequence: RunState.Sequence
Current Step: Step or RunState.Step
Calling Sequence File: RunState.Caller.SequenceFile
Calling Sequence: RunState.Caller.Sequence
Calling Step: RunState.Caller.Step



使用NameOf()Function 
如果您需要從step中的expression(例如pre- or post-expression)存取property名稱,則可以使用此函數。 NameOf()function會返回作為參數傳遞的任意property object其名稱。
您可以使用上述property路徑之一作為要傳遞的參數。例如,您可以使用以下expression來獲取當前sequence的名稱:

Locals.MySequenceNameVariable = NameOf(RunState.Sequence)

其中MySequenceNameVariable是一個 local string variable,您可以定義它來保存當前sequence的名稱。

使用.Name 以及AsPropertyObject().Name Properties
您可以使用 .Name property來存取任何property object或step的名稱,例如上面列出的那些。如果object沒有name 的property的話你可以使用.Name accessor,你可以使用AsPropertyObject()方法將該object轉換為generic object。此時該對象將具有名稱 property,而您現在就可以使用.Name accessor存取該property。範例如下:

Locals.MySequenceNameVariable = RunState.Sequence.AsPropertyObject().Name

使用 TestStand API
如果您需要從external code module存取property名稱,您可以使用 TestStand API。首先,您將需要對您要獲取名稱property的object做references,然後讀取object's class中定義的Name property。

例如,如果您想獲取當前sequence的名稱,您可以獲取對應當前sequence的property object,如果您是要將sequence context傳遞給您的code module,則是用ThisContext.Sequence,然後讀取 Name property。有關如何使用 ActiveX 以正確存取這些property的信息,請參閱您的programming environment help。

對於LabWindows/CVI,下面是獲取object reference然後獲取該object名稱的範例:

TS_PropertyGetPropertyObject (testData->seqContextCVI, &errorInfo,"RunState.Sequence", 0, &CurrentSequence);

TS_PropertyGetProperty (CurrentSequence, &errorInfo, TS_PropertyName, CAVT_CSTRING, &SequenceName);