From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



在LabVIEW中使用NI-VISA接收和发送二进制/十六进制数据



主要软件:
主要软件版本: 8.2
主要软件修正版本: N/A
次要软件: Driver Software>>NI-VISA
硬件: Serial

问题:

VISA ReadVISA Write功能在LabVIEW中仅使用strings作为有效数据类型. 我的应用程序需要使用二进制和十六进制值, 而不是通常使用的ASCII码. 如何在LabVIEW VISA函数中使用二进制或十六进制数据?



解答:

尽管LabVIEWVISA函数要求需要一个字符串值作为数据输入和输出但是这个字符值并不是标准的ASCII字符。每个字符是一个无符号8位整数(U8)值的范围是0255。传送二进制数据的关键是首先要将数据转化为字符串格式,这样才能被传递给VISA Write 函数。类似地,VISA Read 函数的输出字符值也能被转化为所需的输出格式。

传输二进制数据有许多方法,这取决于源数据的格式: 

  1. 传输十六进制常量,并以HEX格式显示接收的数据
    传输十六进制常量最简单的方法是使用字符串常量,右键单击该常量选择Hex Display,这样就可以直接在字符串输入控件或常量中输入非ASCII字符的十六进制值,然后直接传递给VISA Write函数。当使用VISA Read读取数据时,该字符串可以直接连到设置为hex display模式的字符串显示控件,这样就在前面板上显示十六进制值了。

                                                 发送和接收HEX常量
  2. 传输U8整数(单个值或数组)
    为了传输字节数据(U8整数),应该使用只有一个元素的Build Array函数。Byte Array To String可以用于创建与VISA Write兼容的字符串。传输字节数组时可以使用相同的方法,除了无需使用Build Array

                                                                发送和接收单个U8整数

                                                发送和接收U8整数数组
  3. 传输非U8单值或者数组
    当要传输的二进制数据大于单个字节时,需要首先将该数值或数组强制转换为U8 Array,然后再把该数组转换为VISA Write可以接收的字符串。VISA Read 读出的字符串要进行同样的反操作以转换为二进制数据类型。对于单个数值或者数组都是这样操作的。

                                                                        发送和接收多字节数


    注意: 当要处理的二进制数据大于单个字节时(如I16, U32, DBL...),远端设备的字节顺序(endianness)会成为一个问题。LabVIEW默认是Big Endian,所以如果和Little Endian设备通信的话,需要改变数据元素的字节顺序。


相关链接: KnowledgeBase 3OIFGTLA: Writing Bits to the Serial Port Instead of Writing ASCII Strings

附件:


singleu8.jpg - singleu8.jpg
hexarray.jpg - hexarray.jpg
hexdisplay.jpg - hexdisplay.jpg
multibyte.jpg - multibyte.jpg


报告日期: 11/16/2006
最近更新: 09/15/2007
文档编号: 43FDH92W