组态王通过modbus协议读取设备的浮点数和Long型的整数,有时候会出现数值很大,或者为0,还有字符串显示不对的情况,这时候就需要做字节顺序转换。本文重点介绍三种调整Modbus字节顺序的方法。
1.建Swap寄存器
利用给寄存器swapF0等特殊寄存器赋值来改变读取数据的高低字节排序,以浮点型数据为例,在数据词典中定义swapF变量,通道号为0,数据类型BYTE,只写,采集频率为0,如图1所示。
然后将swapF0在画面上输出,对其依次赋值0、1、2、3,观察浮点型变量的值,直到浮点型数据的值显示正确,记录swapF0最终的值。具体过程如图2、图3、如图4所示。
由图4可见,当 swapF0等于1时,浮点数显示正常,然后在应用程序命令语言的启动时把swapF0的赋值脚本写上,即swapF0=1,如图5所示。
需要注意的是,swapF0在数据词典中定义的初始值与最终调试所赋予的值不能一样,比如本例中swapF0=1,那么swapF0变量的初始值就不能为1,可以设为其他值,在程序启动时,swapF0的值需要有一个变化的过程。按照这种方法,同样可以调整字符串型、长整型、CRC校验、长BCD型字节顺序,其变量定义的如图6所示。
2.修改安装路径-Driver文件夹中modbusmaster.ini文件
打开组态王的安装路径,找到modbusmaster.ini文件,如图7所示。
在文档的最下方,找到[Swap],通过对long、float、longbcd、string赋值,就可以改变其对应的字节顺序,如图8所示。
注:此种方式修改会影响工程中所有的modbus设备,建议工程中只有一个modbus设备时使用。
3.设备地址后边加上Swap功能设定
定义设备时,在设备地址处设置该设备中某种数据类型的字节排列顺序。
串口连接方式(Rtu和ASCII):
Address[:Delay: BeforeDelay][|SwapF|SwapL|SwapC]
TCP连接方式:
IP[:Port] Address[/TimeOut] [|SwapF|SwapL|SwapC]
Address 0-255 设备地址
Delay 0-60000 发送每条命令帧后的延迟时间(毫秒)
BeforeDelay 0-60000 发送每条命令帧前的延迟时间(毫秒)
Port 0-65535 设备IP地址端口,(不写时默认为502)
TimeOut 0-65535 网络超时(不写时默认3秒)
SwapF 0-3 浮点数的字节顺序,默认为配置文件中所写
SwapL 0-3 长征性的字节顺序,默认为配置文件中所写
SwapC 0-1 CRC校验的字节顺序,默认为配置文件中所写
如:1:500:500|1|0|0
如:192.168.21.20:502 1/50|1|0|0
注:如果在设备定义中对Swap系列功能设定,需要同时设定3个Swap顺序,且SwapF、SwapL、SwapC次序不可更改。