本帖最后由 lvxisi 于 2016-3-25 17:50 编辑
最近做
labview与硬件设备间的485
通信,利用到了modbus通信协议,在CRC校验以及4个字节转换成浮点值上遇到了不少问题。这几天里,查找了不少资料,终于总结出来了一直比较简单的方式,可以轻松完成数据帧的CRC校验,将收到的多个字节转换成浮点类型。和大家分享一下。
LabVIEW DSC 工具包内置了对modbus总线的支持,自动CRC校验,可以很方便的实现Modbus通信,支持串口和TCP两种传输方式。如1图所示。
图1 Modbus Master 选板
如果是简单的Modbus通信,没有必要使用DSC工具。NI公司提供了简易的Modbus库,用于一般的Modbus通信。
主站发送命令:
利用labview编程如图2所示
图2 Modbus 读取寄存器
将计算机的两个串口相连接(可以使用虚拟串口测试)。软件运行之后,利用串口助手可以接收到发出的数据,如图3所示。可见,Labview自动添加了CRC校验,无需自己编写校验程序。
图3 串口助手接收信息
在接受到数据后,迅速回复信息,如图4所示。在前面板中显示收到的数据,与发送的数据相对应,如图5所示。
图4 利用串口助手回复信息
labview接收数据:
图5 labview收到的数据
浮点格式:
MODBUS 用4个字节传输32位浮点数,其结构如下:
S-尾数的符号;1=负数,0 = 正数;
E-指数;与十进制数127的差值表示。
M-尾数;低23位,小数部分。
当E不全”0”时,且不全”1时浮点数与十进制数转换公式:
浮点数为: C1 B0 80 00
1100 0001 1011 0000 1111 1000 0000 0000
S = 1
E = 10000011
M = 011 0000 1111 1000 0000 0000
= - 22.0625
Labview提供了简单的工具,不需要也可以将4个字节转换成32位浮点形式。将获得的数组直接强制转换,就可以了。注意转换的类型为single。如图6所示。
图6 四个字节转换为浮点类型
得到的值与之前计算的结果完全相同。如图7所示。
图7 转换后的结果
15