在LabVIEW中使用NI-VISA傳送或接收二進位以及十六進位資料

更新 Jan 9, 2019

產品資訊

Software

  • LabVIEW Base
  • LabVIEW Full
  • LabVIEW Professional

Driver

  • NI-VISA

問題敘述

我的應用需要傳送以及接收二進位或十六進位值,而不是使用一般常用的ASCII字元來做為字串的傳送時,但在LabVIEW中 VISA Read 與 VISA Write 功能只接受字串的資料格式。我該怎麼在LabVIEW VISA中使用二進位或十六進位的資料呢?

解決方案

要傳送二進位或十六進位資料,必須先把資料轉換為字串格式,轉換後的字串才能夠透過 VISA Write 功能寫出。同樣的,從VISA Read 獲得的字串資料也可以被轉成期望的資料格式。LabVIEW VISA 函數做資料的輸入與輸出時需要使用字串的方式,這些字元轉換成字串時並不只侷限在標準的ASCII字元。每個字元都是一個unsigned的8-bit整數(U8),代表為0-255的值。

這邊有幾個方法可以用來傳算二進位值,按照不同的來源格式介紹如下:
  • 傳送固定的十六進位值,以及用十六進位格式顯示收到的資料。

最簡單的方法來傳送固定的十六進位(hex)值,即是在LabVIEW中使用一個string的constant,並把這個constant設定成Hex Display (設定方法為在constant上按右件選擇Display Format)。如此就可以把讓你輸入非ASCII字元的十六進為值到string的control或constant中,並直接輸出到VISA write函數。當使用VISA Read來讀取資料的時候,這個字串可以直接連線到一個hex display模式的indicator,這樣就可以把十六進位值顯示在front panel上。

傳送與接受固定的十六進位值: 
  • 傳送U8的正整數(單一值或array)。

為了要傳送一個byte的資料 (U8 整數),會使用Build Array函數來把構成一個只有一個element的array。接著這個Byte Array to String 可以把這個array轉換成VISA write所可以使用的字串格式。這個相同的方法可以用來轉換一個包含多個byte的array,只是這時候不需要再使用Build Array。
 
傳送與接受一個單一的U8整數:


傳送與接受多個U8整數的array:
  • 傳送非U8的值或其他值構成的array。

當傳送的二進位檔案比一個byte還大的時候,必須要先將這個值或array先做typecast轉換成U8的array,然後把這個array再轉成字串以便讓VISA Write使用。同樣相反的操作步驟可以用在VISA Read來把讀到的字串轉成二進位資料格式。這些方法可以用在單一的資料element或是這些element構成的array上。

傳送與接受多byte的值:


備註: 當使用大於一個byte的二進位資料時(I16, U32, DBL, etc...),在遠端的儀器所使用的endianness (也就是byte的順序) 會是一個需要考慮的問題。LabVIEW 預設是使用Big Endian的方式,所以當與使用Little Endian的儀器進行通訊時,必須要改變byte的順序。
 

本文是否有幫助?

無幫助