数据和字符串的操作技巧
- 更新时间2025-08-27
- 阅读时长5分钟
与仪器通信涉及发送数据至仪器和从仪器接收数据。使用仪器驱动时,无需格式化发送至仪器和从仪器上获取的数据,因为仪器驱动会自动格式化。但是,编写与仪器通信的VI时,需格式化数据。
与基于消息的仪器通信时,必须按照格式创建正确的命令字符串。这样,仪器才能进行正确的操作并返回响应。
基于寄存器的仪器通信无相关标准。各种设备操作不同,如要学习怎样对设备编程,可参考说明文档。
一般而言,命令字符串,也称问询,是字符和数值的组合。一些仪器的命令字符串仅限于文本,要求将数值转换为文本,并将其连接在命令字符串之后。同理,要使用LabVIEW中仪器返回的数据,必须将数据转换为VI、函数、显示控件可接受的格式。
(Windows)可使用Instrument I/O Assistant,将问询发送至仪器并格式化仪器返回的数据。将Instrument I/O Assistant Express VI放置在程序框图上,即可访问Instrument I/O Assistant。
可使用格式化写入字符串函数,生成发送至仪器的命令字符串或将其他字符串或数值数据类型添加至初始字符串。
格式化从仪器获取的数据
发送至仪器的字符串包含首尾符号,与此类似,多数仪器返回的数据也包含首和/或尾符号。字符串串首符号通常包含返回的数据点数量或仪器设置等信息。串尾符号通常在数据字符串末尾,包含单位和其他仪器设置信息。仪器说明文档应描述每次数据交换时产生的首尾符号信息。在LabVIEW显示或分析返回信息之前,必须先移除字符串串首和串尾的信息。
可使用截取字符串函数,解析字符串中的首尾符号信息,并将其在字符串显示控件中显示。可使用扫描字符串函数,解析字符串中的数据。
波形传输
仪器也可以其他格式返回数据:如ASCII、单字节二进制和双字节二进制。关于可用格式和如何将数据转换为可用数据的详细信息,见仪器的说明文档。
ASCII波形
如一个仪器返回ASCII格式的数据,可按字符串查看该数据。但是,如需对数据进行运算或需绘制数据,必须将字符串数据转换为数值数据。例如,假设波形由1024个点组成,每个点的值在0到255之间。使用ASCII编码时,每个数据值最多需要4个字节(值最多3个字节,分隔符最多1个字节,如逗号)。用ASCII字符串表示该波形,需要多达4096字节(4字节,1024点),外加首尾字节。可使用分数/指数字符串至数值转换函数,将ASCII字符串转换为数值数组。
单字节二进制波形
有些仪器没有以ASCII格式或二进制格式发送数据的选项。因为二进制格式没有标准,关于仪器如何存储数据值的详细信息,请参考仪器的相关文档。常见的二进制格式为单字节二进制。使用该类型数据编码时,发送数据之前,仪器将每个数据都转换为8位二进制值。
从总线上读取单字节二进制数据时,仪器以字符串形式返回数据。但是,字符看似与期望数据不相关。LabVIEW将二进制数值解析为ASCII字符,并显示相应的字符。例如,如将值65作为一个数据值发送,将从总线中读取到字符A。如果是值13,不存在可打印的ASCII字符,因为13对应的是不可见的回车符。
右键单击显示控件,从快捷菜单中选择'\'代码显示,可在字符串中显示这些不可见字符。在字符串显示控件中,回车符为\r。
要在ASCII字符串中使用数值,与分析VI配合使用,在图形或图表中显示数值数据,必须将二进制字符串转换为数值数组。如仪器发送了一个包含1024个单字节二进制编码值的二进制字符串,波形需1024字节,外加字节首信息。使用二进制编码,假设各个值都是不带符号的8位整型数据,则只需一个字节表示这些数值。可使用“截取字符串”函数和字符串至字节数组转换函数,将二进制字符串转换为整数数组。
双字节二进制波形
数据为双字节二进制时,编码方式是二进制,按ASCII字符发送,与单字节二进制格式相似。但是,每个数据值由16位数据,即2个ASCII字符表示。虽然该格式使用的空间是单字节二进制格式的两倍,其压缩速度ASCII更快。
例如,假设一个示波器以二进制方式传递波形数据。在该例中,假设波形由1024个数据点输诚,每个点的值都是双字节带符号整型数据。因此,整个波形就需要2048字节,外加5字节首信息和2字节尾信息。移除5字节首信息后,使用从字符串还原函数,将波形字符串转换为16位整数组成的数组。
当数据以双字节二进制格式传输时,明确接收字节的顺序尤其重要。双字节组合qH对应的整型数是29000,而顺序相反的Hq对应的整型数则是18545。
如先接收高字节,将其转换位整数值之前,必须先反转字节顺序。可使用从字符串还原函数,反转字节顺序。