LabVIEW
串口通信浮点小数转四个字节和数据打包
LabVIEW
编程的虚拟仪器,作为
PC
与单片机的上位机,十分直观方便。
LabVIEW
中控制串口使用
VISA
十分方便。
串口通信都是发送的一个一个字节,字节中包含需要的信息,有些需要多个
字节的组合才能传递一个完整的信息。
一般的数据通信都是通过数据包来传递信
息的,现在我们要用
LabVIEW
向单片机发送单精度浮点小数。
现在遇到一些问题:
1.
串口发送的都是字节,怎样把浮点小数转换成字节?
2.LabVIEW
中
VISA
串口的写入传送的字符串,如果直接发字符串,单片机得
到是字符的
ASCII
码,单片机无法解析成需要的浮点小数。如何把字符串转换成
相应的字节?
3.
数据一直向串口传输,为便于单片机解析出想要的数据,如何进行打包?
问题
1
:
浮点小数在计算机中的存储遵循
ieee754
协议,实际上一般情况下,各种仪
器发送的数据都是按照
ieee754
协议转换成的字节数据包。我们传递浮点小数,
可以按照
ieee754
协议转换成字节数组。
例如单精度浮点小数
8.25
转换成字节数组用十六进制表示为
41 04 00 00
,
为
四个字节。那么如何通过
LabVIEW
实现呢,我这儿有个程序利用强制转换来实
现,不知是哪位大神写的,反正是十分方便、有效,确实很
NB
。因为关于强制
转换,
LabVIEW
帮助和网上根本查不到资料,尤其是其上端的连线
--
类型,根本
不知道连接什么量。
程序框图主要利用强制转换和数据拆分来实现
ieee754
协议转换为四个字符
串。
单精度数字
SGL
(单精度浮点型)类型,经过强制转换,变成
I32
(
32
位长整形)类型,再
经过两次拆分,得到四个
U8
(无符号字节,
8
位整型)类型的数据,再经过数值至十六进
制字符串转换,字符宽度为
2
,得到十六进制整型字符串,再将
4
个字符连接起来。
8.25
转
换得到
41040000
。
前面板如下: