在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字符。每个字符都是无符号8位整数(U8),数值范围为0到255。

传输二进制数据有许多方法,这取决于源数据的格式:
  • 传输十六进制数值常量,并以HEX格式显示接收的数据。

传输十六进制(hex)常量的最简单方法是使用字符串常量,右键单击该常量选择“十六进制显示”。这样就可以在字符串输入控件或常量中输入非ASCII字符的十六进制值,然后直接传递给VISA Write函数。使用VISA Read读取数据时,可以将字符串直接连接至设置为“十六进制显示”模式的字符串显示控件,这样就可以将十六进制数值显示在前面板上。

发送和接收十六进制常量:
  • 传输U8整数(单个值或数组)。

为了传输字节数据(U8整数),应该使用“创建数组”函数创建具有单个元素的数组。“字节数组至字符串转换”可以用于创建与VISA Write兼容的字符串。传输字节数组时可以使用相同的方法,但无需调用“创建数组”函数。
发送和接收单个U8整数:


发送和接收U8整数数组:
  • 传输非U8单值或数组。

当要传输的二进制数据大于单个字节时,必须首先将该数值或数组类型转换为U8类型数组,然后将该数组转换为VISA Write可以接受的字符串。执行相同的反操作可以将VISA Read函数输出的字符串转换为二进制数据类型。对于单个数值或者数组都是这样操作的。

发送和接收多字节数:


注意 :当要处理的二进制数据大于单个字节(I16,U32,DBL等)时,远端设备的字节顺序(endianness)会成为一个问题。 LabVIEW默认使用大端字节序(Big Endian),因此与小端字节序(Little Endian)设备的通信需要改变数据元素的字节顺序。
 

本文是否有帮助?

无帮助