如何在 LabVIEW VISA 中使用二进制或十六进位的资料
Q:
在 LabVIEW 中 VISA 的读入与写出功能只接受字符串的资料格式,当应用需要传送以及接收二进制或十六进位值,而不是使用一般常用的 ASCII 字符来做为字符串的传送时,该怎么在 LabVIEW VISA 中使用二进制或十六进位的资料呢?
A:
当 LabVIEW VISA 函数做资料的输入与输出时需要使用字符串的方式,但将这些字符转换成字符串时并不只侷限在标准的 ASCII 字符。每个字符都是一个 unsigned 的 8-bit 整数(U8),代表为 0-255 的值。传送二进制资料的的关键为,先将这些值转换成字符串的格式,如此才能够使用 VISA 的方式来做 write 的动作。同样地,VISA read 来的字符串值,也可以被转换成需要的输出格式。
这边有几个方法可以用来传算二进制值,按照不同的来源格式介绍如下:
传送固定的十六进位值,以及用十六进位格式显示收到的资料
最简单的方法来传送固定的十六进位(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 的顺序。
长见识了。讲述得很仔细。
必须得赞一个啊
标签标签标签标签
获益匪浅!感谢前辈分享学习!
多谢,这个帖子很赞
谢谢分享
必须赞一个,看看有帮助