在LabVIEW中使用NI-VISA接收和发送二进制/十六进制数据
主要软件:
主要软件版本: 8.2
主要软件修正版本: N/A
次要软件: Driver Software>>NI-VISA
硬件: Serial
问题:
VISA Read 和 VISA Write功能在LabVIEW中仅使用strings作为有效数据类型. 我的应用程序需要使用二进制和十六进制值, 而不是通常使用的ASCII码. 如何在LabVIEW VISA函数中使用二进制或十六进制数据?
解答: 尽管LabVIEW的VISA函数要求需要一个字符串值作为数据输入和输出,但是这个字符值并不是标准的ASCII字符。每个字符是一个无符号8位整数(U8),值的范围是0到255。传送二进制数据的关键是首先要将数据转化为字符串格式,这样才能被传递给VISA Write 函数。类似地,VISA Read 函数的输出字符值也能被转化为所需的输出格式。
传输二进制数据有许多方法,这取决于源数据的格式:
-
传输十六进制常量,并以HEX格式显示接收的数据
传输十六进制常量最简单的方法是使用字符串常量,右键单击该常量选择Hex Display,这样就可以直接在字符串输入控件或常量中输入非ASCII字符的十六进制值,然后直接传递给VISA Write函数。当使用VISA Read读取数据时,该字符串可以直接连到设置为hex display模式的字符串显示控件,这样就在前面板上显示十六进制值了。
发送和接收HEX常量
- 传输U8整数(单个值或数组)
为了传输字节数据(U8整数),应该使用只有一个元素的Build Array函数。Byte Array To String可以用于创建与VISA Write兼容的字符串。传输字节数组时可以使用相同的方法,除了无需使用Build Array。
发送和接收单个U8整数
发送和接收U8整数数组
- 传输非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
- hexarray.jpg
- hexdisplay.jpg
- multibyte.jpg
报告日期: 11/16/2006
最近更新: 09/15/2007
文档编号: 43FDH92W
Other Support Options
Ask the NI Community
Collaborate with other users in our discussion forums
Request Support from an Engineer
A valid service agreement may be required, and support options vary by country.