天天看点

组态王中Modbus字节顺序的调整

组态王通过modbus协议读取设备的浮点数和Long型的整数,有时候会出现数值很大,或者为0,还有字符串显示不对的情况,这时候就需要做字节顺序转换。本文重点介绍三种调整Modbus字节顺序的方法。

1.建Swap寄存器

利用给寄存器swapF0等特殊寄存器赋值来改变读取数据的高低字节排序,以浮点型数据为例,在数据词典中定义swapF变量,通道号为0,数据类型BYTE,只写,采集频率为0,如图1所示。

组态王中Modbus字节顺序的调整

然后将swapF0在画面上输出,对其依次赋值0、1、2、3,观察浮点型变量的值,直到浮点型数据的值显示正确,记录swapF0最终的值。具体过程如图2、图3、如图4所示。

组态王中Modbus字节顺序的调整
组态王中Modbus字节顺序的调整

由图4可见,当 swapF0等于1时,浮点数显示正常,然后在应用程序命令语言的启动时把swapF0的赋值脚本写上,即swapF0=1,如图5所示。

组态王中Modbus字节顺序的调整

需要注意的是,swapF0在数据词典中定义的初始值与最终调试所赋予的值不能一样,比如本例中swapF0=1,那么swapF0变量的初始值就不能为1,可以设为其他值,在程序启动时,swapF0的值需要有一个变化的过程。按照这种方法,同样可以调整字符串型、长整型、CRC校验、长BCD型字节顺序,其变量定义的如图6所示。

组态王中Modbus字节顺序的调整

2.修改安装路径-Driver文件夹中modbusmaster.ini文件

打开组态王的安装路径,找到modbusmaster.ini文件,如图7所示。

组态王中Modbus字节顺序的调整

在文档的最下方,找到[Swap],通过对long、float、longbcd、string赋值,就可以改变其对应的字节顺序,如图8所示。

组态王中Modbus字节顺序的调整

注:此种方式修改会影响工程中所有的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次序不可更改。

继续阅读