NI-VISA 中的終止字元

綜覽

許多訊息架構的匯流排,都會使用終止字元來指出訊息傳輸作業的結束。針對呼應完整 488.2 通訊協定的 VISA 資源類型 (GPIB Instr、VXI/GPIB-VXI Instr、USB Instr 與 TCPIP Instr),您通常無需使用終止字元,因為通訊協定實作也會採用原生機制來指定訊息結尾處。除非您使用其他 VISA 資源類型 (Serial Instr、USB Raw 與 TCPIP Socket),否則無需告知 VISA 訊息的終止方式。

傳入與傳出訊息都可以具備終止字元。換行字元 (代碼顯示為 '\n'、ASCII 十進位制 10 或 hex 0x0A) 與歸位字元 (代碼顯示為 '\r'、ASCII 十進位制 13 或 hex 0x0D),是常見的 2 大終止字元。

處理終止的 NI-VISA 屬性共有 4 個:其中 2 個隸屬訊息架構設定,另外 2 個則屬序列設定。訊息架構的屬性為「終止字元」「終止字元已啟用」,而序列專用屬性則為「適用於讀取的序列結束模式」「適用於寫入的序列結束模式」。我們將詳細討論每個屬性,接著探討特別考量因素。

內容

終止字元 (TermChar)

終止字元


這個屬性會以無正負號的 8 位元整數做為輸入。因此,除非您知道終止符號的 ASCII 值,否則最好對值進行類型轉換,以設定屬性,如上方所示。使用這個屬性值當做讀取與寫入的終止字元。將這個屬性值設為無論是否使用都不受影響。

雖然 TermChar 並不限於序列通訊,但與具備完整 488.2 通訊協定的匯流排進行通訊時,建議您依照簡介所述,使用其他終止機制。舉例來說,透過 GPIB 通訊時,標準做法為使用硬體行 EOI 來終止。

注意:VISA Configure Serial Port.vi 會透過預設值為換行字元 (0x0A = '\n' = LF) 的 termination char 參數,來設定這個值。

終止字元啟用 (TermChar En)


終止字元已啟用

如果設為 True,這個屬性就會在遇到終止字元時,要求 VISA 停止讀取。請注意,TermChar En 不限於序列通訊,您可以使用這個屬性來終止其他匯流排的讀取作業。

重要:如果「適用於讀取的序列結束模式」(將於下方說明) 已設為 Term Char,這個屬性就會遭到略過,且不會傳回錯誤。

這個屬性不會影響寫入作業的終止字元。

注意:VISA Configure Serial Port.vi 會透過預設值為 True 的 Enable Termination Char 參數來設定這個屬性。

適用於讀取序列結束模式 (ASRL End In)

適用於讀取的序列結束模式


這個屬性會為序列通訊指定如何終止來自軟體緩衝的讀取作業。有效值為:

數值
說明
None (0)如果遇到終止字元,讀取作業將不會停止。
Last Bit (1)只要達到最後 1 個位元集,就立即停止讀取。
TermChar (2)
(預設)
如果遇到終止字元,讀取作業就會停止。這是預設值。


重要:如果將值設為 TermChar (2),就會忽略「終止字元已啟用」屬性值。

如果達到位元組數 (由 VISA Read 指定) 或逾時 (VISA 屬性),無論將這個屬性設為什麼值,讀取都會終止。

只要將「停止結束已啟用」屬性設為 True,即可停用這個屬性。

注意:VISA Configure Serial Port.vi 會在 Enable Termination Char 輸入設為 F 時,將這個屬性設為 None;並在 Enable Termination Char 輸入設為 T 時,將這個屬性設為 TermChar。

適用於寫入序列結束模式 (ASRL End Out)

適用於寫入的序列結束模式



這個屬性會指定用來終止寫入作業的方法。有效值為:

數值
說明
None (0)
(預設)
不會將終止字元附加至寫入。
Last Bit (1)寫入會以最高明確位元來傳輸最後 1 個字元以外的所有字元,並以最高設定字元來傳輸最後 1 個字元。
TermChar (2)終止字元值會附加至所有寫入的結尾處。
Break (3)每次寫入後,都會傳送序列中斷。序列中斷為一系列的持續空白值,經常會用來讓儀器停止進行中作業,或捨棄輸出緩衝中的任何資料。請謹慎使用這個方法。


您可能會看到,舊版儀器驅動程式在 VISA Write 前附加終止字元。原因在於,舊版 VISA 不支援這個屬性,因此使用者需要明確附加終止字元。鑑於只要設定好這個屬性,即可達成這項目的,現在已不再需要進行上述操作。

只要將「傳送結束已啟用」(Send End En) 屬性設為 False,就能停用這個屬性。

注意:VISA Configure Serial Port.vi 不會設定這個屬性。您必須透過屬性節點進行設定,如上圖所示。

ASCII 通訊


執行 ASCII 通訊時,請於開始進行應用或驅動程式初始化常式時,設定您的終止屬性與其他匯流排通訊設定。終止字元設定必須與儀器設定相符。請記住,有些儀器的設定可供配置。請參閱所屬儀器的使用者手冊。

建議:針對處理更多匯流排的高穩定性應用,「終止字元已啟用」與「適用於讀取的序列結束模式」應一律保持同步 (也就是說,如果啟用/停用任一項,另一項的設定也需隨之改變)。

二進位通訊


進行二進位通訊時,如果某個二進位資料值的二進位表示法與終止字元相同,即可提早終止讀取。因此,請將「終止字元已啟用」設為 False,並將「適用於讀取的序列結束模式」設為 None (0),以停用終止字元。您必須透過不同方法來終止讀取,例如硬體行或位元組數。

執行二進位通訊


注意:使用對應至完整 488.2 通訊協定 (GPIB Instr、VXI/GPIB-VXI Instr、USB Instr 與 TCPIP Instr) 的 VISA 資源類型時,您通常無需先啟用終止字元,也不必先停用終止字元設定,因此可更輕鬆地進行二進位通訊。

使用多個終止字元儀器


有些儀器會傳送多個終止字元,例如歸位換行字元 (代碼顯示為 '\r\n',或 ASCII hex 0x0D0A)。鑑於 VISA 只允許使用 1 個終止字元,您必須尋求替代解決方案。首先,請檢查儀器終止序列是否可供設定。如果無法設定,則可改為設定 VISA,以便在最後 1 個字元終止,然後使用 Scan from String,自實際訊息剖析出其他字元。下圖顯示了代表 '\r\n' 或 '\n' 終止的代碼。

多個終止字元


注意:若要使用這個設定,就必須將屬性 Display Style 設為反斜線 ('\') 代碼。如需反斜線 ('\') 代碼顯示的詳細資訊,請參閱反斜線 ('\') 代碼顯示 - LabVIEW 說明

 

Was this information helpful?

Yes

No