Modbus通讯使用

您所在的位置:网站首页 海康设置失败错误码为0×ff Modbus通讯使用

Modbus通讯使用

2023-12-12 08:11| 来源: 网络整理| 查看: 265

从调试软件使用去分析。Modbus报文分析。地址描述:

平常设备手册写的PLC寄存器地址Y-XXXX,Y:寄存器类型(0x、1x、3x、4x),XXXX:十进制地址(协议标准使用Y-XXXX五位十进制定义地址,而前缀是寄存器类型,协议定义范围:0001~9999,而实际范围可以是0001~65536),与modbus寄存器地址(A)偏移1位范围是:0~65535,十进制(DEC)地址。每个寄存器类型地址范围0~65535,4种不同寄存器类型间地址可相同重复。

PLC地址描述介绍四种寄存器类型同地址不相关地址描述方式对比

Modbus寄存器地址XXXXH,XXXX:16进制地址(范围:0000~FFFF),H:16进制标识(HEX);有些设备也习惯性将地址写做0xAAAA,0x:16进制标识,AAAA:16进制寄存器地址(范围:0000~FFFF)。这里已经讲述了4中寄存器地址的描述方法,所以大家看相关地址时需要注意。

软件十进制(D)与十六进制(X)转换

台达变频器参数手册如图所示:

ModbusTCP通讯报文解析

Log记录文件分析:

主站报文分析:

2022.07.22 15:38:37.496 0B 14 回应序号 00 00 00 06 长度-6 01 报文头MBAP:事务处理标识(2字节)+协议标识(2字节)+长度(2字节)+单元标识符(1字节)

01 功能码

27 11 modbus地址-10001

00 3B 读取个数-59个

2022.07.22 15:38:37.537 0B 14 回应序号一致 00 00 00 0B 长度-11 01 报文头MBAP

01 功能码

08 数据长度8*8=64>59.(数据长度满足请求个数)

00 00 00 00 00 00 00 00 位状态(bin)数据(一个地址的数据为1位),每个字节指示8位状态,03即为0000 0011;位状态读写是单字节数据交互与字节序无关,字节序使用是关于多字节数据状态使用相关,控制大端小端与字节交换等。Modbus数据类型最大支持8字节双精度浮点数数据,最大总共8字节数据,每个字节采用大写字母A~H代表,通讯交互依次从起始地址到结束地址将每个寄存器地址字节拼接组成报文。

如下图例子:1.23采用大端字节交换模式(BADC),1.326采用大端模式(ABCDEFGH),还有各种大端小端字节序组合,注意报文处理字节序问题,以保证数据转换正确,modbus地址字节数据,通讯报文是将各个地址数据连续拼接而成。

字节序问题解析

2022.07.23 21:28:24.567 03 E2 00 00 00 06 01 01 27 11 00 3B 

2022.07.23 21:28:24.768 03 E3 00 00 00 06 01 01 27 11 00 3B 

2022.07.23 21:28:24.970 03 E4 00 00 00 06 01 01 27 11 00 3B 

2022.07.23 21:28:25.181 03 E5 00 00 00 06 01 01 27 11 00 3B 

2022.07.23 21:28:25.385 03 E6 00 00 00 06 01 01 27 11 00 3B 断线读取失败,持续发送请求,通讯报错。

2022.07.22 16:28:47.725 02 15 00 00 00 06 01 

05 功能码

00 01 modbus地址-1

00 00 数值写入线圈0000-0,FF00-1。

2022.07.22 16:28:47.738 02 15 00 00 00 03 01 回应序号一致

85 异常功能码(最高位置1)

02 回复错误码,无响应地址(非法数据地址)。

2022.07.22 17:28:51.796 0C 8A 序号一致 00 00 00 06 01 

05 

00 04 

FF 00 

2022.07.22 17:28:52.293 0C 8A 序号一致 00 00 00 06 01 

05 

00 04 

FF 00 数据帧一致写入成功。

2022.07.22 17:57:42.238 00 FA 00 00 00 06 01 05 00 1E 00 00 主站请求数据未得到回应持续发送请求。

2022.07.22 17:57:42.628 01 12 00 00 00 06 01 05 00 1F 00 00 序号未一致,属于持续发送请求。

2022.07.22 17:57:42.779 00 FB 00 00 00 06 01 05 00 1E 00 00 

2022.07.22 17:57:43.150 01 13 00 00 00 06 01 05 00 1F 00 00 

2022.07.22 16:28:48.259 02 16 00 00 00 06 01 05 00 01 00 00 

2022.07.22 16:28:48.282 02 16 00 00 00 03 01 85 02 序号一致,表明是从站回应数据帧。

2022.09.19 17:50:13.324 03 4F 00 00 00 05 

01 站号

04 功能码

02 F0 起始地址

0F 寄存器个数。

2022.09.19 17:50:13.340 03 50 00 00 00 06 

01 04 站号和功能码

00 85 起始地址

00 01 寄存器个数。

2022.09.19 17:50:13.354 03 50 00 00 00 05 

01 04 站号和功能码

02 总共2字节数据,1寄存器地址

00 00 数据为0x00。

2022.09.19 17:50:13.359 03 51 00 00 00 06 01 04 00 86 00 01 

2022.09.19 17:50:13.386 03 51 00 00 00 05 01 04 02 00 00 

2022.09.19 17:50:13.401 03 52 00 00 00 09 

01 10 站号和功能码

00 87 起始地址

00 01 寄存器数量

02 数据长度

00 00 写入数据为0x00。

2022.09.19 17:50:13.417 03 52 00 00 00 06 

01 10 

00 87 起始地址

00 01 寄存器数量——写入成功。

2022.09.19 17:50:13.421 03 53 00 00 00 06 

01 04 

00 97 起始地址

00 14 寄存器个数。

2022.09.19 17:50:13.449 03 53 00 00 00 2B 

01 04 

28 共计40字节,寄存器个数20个

2A F8 11 00 00 75 30 00 86 A0 00 01 21 34 00 00 F8 30 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

2022.09.19 17:50:13.465 03 54 00 00 00 43 

01 10 

00 AB 起始地址

00 1E 寄存器数量

3C 数据长度

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

2022.09.19 17:50:13.480 03 54 00 00 00 06 

01 10 

00 AB 

00 1E ——写入成功。

从站报文分析:

2022.09.08 12:02:38.315 0B B4 00 00 00 06 

01 站号

03 功能码

27 1B 起始modbus地址

00 44 寄存器数量。

2022.09.08 12:02:38.362 0B B4 00 00 00 8B 

01 03 站号与功能码

88 数据长度

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

2022.09.08 12:02:38.377 0B B5 00 00 00 06 

01 03 

27 11 

00 08 

2022.09.08 12:02:38.383 0B B5 00 00 00 13 

01 03 

10 总共16字节数据,8寄存器地址数据。

12 01 12 00 12 00 12 00 12 00 12 00 12 00 12 00 

2022.09.08 12:02:38.423 0B B6 00 00 00 06 

01 03 

28 A1 

00 10 

2022.09.08 12:02:38.430 0B B6 00 00 00 23 

01 03 

20 

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

RTU通讯报文解析

03功能码保持寄存器报文分析

异常功能码情况:

01功能码线圈寄存器报文分析

 需要注意功能码描述,在通讯交互报文中都是16进制,报文中功能码描述是十六进制(HEX),如上图报文交互功能码0F和10,就是对应15(写多线圈寄存器)和16(写多保持寄存器)功能码;而平常我们所描述的功能码都是十进制描述(DEC)注意区分如下图软件设置读写寄存器定义功能码就是十进制描述。

ASCII模式

模式选择,报文通讯模式RTU||ASCII,模式不匹配将造成通讯超时。

ASCII模式报文分析

报文ASCII转换字符

01读取多线圈——:+RTU码字符转换ASCII码(无CRC码转换)+LRC校验码(9+9)+er+nl

帧头是冒号(:),帧尾是回车换行符(\r\n)

05写单线圈置0——:+RTU码字符转换ASCII码+ LRC校验码(F+9)+er+nl

05写单线圈置1——:+RTU码字符转换ASCII码+ LRC校验码(F+A)+er+nl

15写单线圈置0——:+RTU码字符转换ASCII码+ LRC校验码(E+B)+er+nl

15写单线圈置1——:+RTU码字符转换ASCII码+ LRC校验码(E+A)+er+nl

03读取多保持寄存器——:+RTU码字符转换ASCII码+ LRC校验码(A+2)+er+nl

06写单保持寄存器——:+RTU码字符转换ASCII码+ LRC校验码(0+2)+er+nl

16写多保持寄存器——:+RTU码字符转换ASCII码+ LRC校验码(F+4)+er+nl

LRC校验计算需要把RTU码(包括CRC校验)计算得出:算法计算自行查询。

流控制

Serial Port通讯参数设置,高级设置——数据流控制。软流控,硬流控。

DSR- Data Set Ready,数据准备好

CTS- Clear To Send,清除发送

DTR- Data Terminal Ready,数据终端准备好

RTS切换-Request To Send,请求发送切换

RTS禁用延时(ms)- RTS切换时有效。(0~100ms整数)

移除重复(如果适用)-未知?

从站中流控制可以选择DSR+CTS || RTS切换,主站任意选择。

本地测试-主站必须选择DTR||RTS切换其中一个,否者将超时错误,主站如果选中移除重复(如果适用)将造成主站接收接收的字节数不足报错;从站任意选择无效果,RTS禁用延时无效果。

流控制相关形式:

1、RS232标准中的RTS,CTS----请求发送/清除发送,用于半双工时的收发切换,属于辅助流控信号。实现收发切换,避免同时收发造成数据丢失。

2、MODEM硬件流控中的RTS与CTS----不存在每次单向数据传输的发起者问题。如果主机输出RTS有效,那么模块有数据就会发往主机;如果模块输出CTS有效,那么主机就可以将数据送达模块接收。

3、通信协议中的RTS与CTS----相当于一种握手协议,主要用来解决"隐藏终端"问题。基站A向基站B发送信息,基站C未侦测到A也向B发送,故A和C同时将信号发送至B,引起信号冲突,最终导致发送至B的信号都丢失了。可以监测实现多主一从?

注意,硬件流控是靠软件实现的,之所以强调“硬件”二字,仅仅是因为硬件流控提供了用于流量情况指示的硬件连线,并不是说,你只要把线连上,硬件就能自己流控。如果软件不支持,光连上RTS和CTS是没有用的。

关于流控制使用,232→232全双工从站无需流控制接口,TX发RX收;

232→485全双工转半双工,需要232转485串口转换器需要流控制实现半双工差分信号传输控制发送与接收分时收发,或者将232两线短接再接入485,但可能出现数据丢失且主发送数据自己也收到自己数据,需要在应用层做好收发控制避免同时收发,也可以采用低波特率的情况实现交互避免丢失数据;

232→422之间只要将单端和差分信号处理即可实现通讯交互,将T-,R-与GND短接后,TX发RX收;

422→485之间转换也是采用232串口转换器实现,先处理单端和差分信号然后就可以转换,或者将T-,R-与GND短接后,使用232的方法T+,R+与485连接。

总结:

1、接口通讯效率距离优先级422>485>232。

2、单功能串口资源时最好使用串口服务器转换做处理,避免丢失数据和数据出错,或者软件应用层做处理。

3、数据收发需要软硬件配合处理,像现在有些485串口采用芯片实现数据回环自动收发处理,2线差分信号也可以实现全双工工作。

4、像现在很多串口都是采用复用串口(多功能通讯串口),一个串口可以多用的情况,但不能同时使用2种或3种接口,采用软件处理切换出口模式。如:485串口可以采用422(T-R-短接,T+R+短接)软件上进行模拟485来实现。

5、像一些设备硬件(如串口服务器、串口转换器)就处理了自动收发转换特有电路控制数据流方向,无需任何握手信号(如RTS、DTR等),无需跳线即可实现422与485切换或者手动开关切换串口模式或者跳线。

6、通过硬件实现收发流控制和串口模式切换就不用经过人为处理串口及软件应用层处理,所以现场情况还得结合实际产品联系产品公司了解情况后再进行操作。

7、正常情况下连接串口设备,本机电脑设备管理器中将会读取到端口资源也就是平常描述的COM口,串口连接选择对应的串口号即可;注意产品介绍,有些设备绑定了COM串口号和硬件串口;一般我们都不需要对硬流控制,硬流控制一般是通过跳线短接或者软件微开关控制切换,串口收发器芯片管理控制等。

以上总结来自网络学习,其结论未全部经过实际验证。

ModbusUDP连接方式

TCP/IP需要建立连接才能进行收发数据,UDP/IP不需要建立连接即可一直广播发送数据。

建立连接方式

IPV6建立连接方式

勾选任何地址,两主一从建立连接情况:该从站可被多个从站IP建立连接。

若取消勾选任何地址,只有唯一IP地址主站成功通讯交互数据。

从站设备勾选忽略设备ID情况:

忽略设备ID从站设备,无论主站请求从站id多少,该从站设备都可以回复响应的设备报文,回复从站数据。类似虚拟了多个从站ID,对任何主站请求都可以回复。

主站如果已经和一从站建立连接无法从新连接新建立从站。

ModbusTCP其他功能码报文分析

AND Mask与掩码;OR Mask或掩码。

报告从站ID

常见的错误情况

Modbus串口通讯,若从站号没有对应从站是不会回复数据

ModbusTCP通讯,若从站号没有对应从站是有回复对应序号数据,但主站没有接收数据打印,若此时从站设备恢复服务器存储区从站号,将恢复正常通讯。异常码:大小2字节,byte1=0x80(高位置1)+功能码,byte2=错误码。

Modbus错误码(10进制)

主站连接错误,检查IP和端口设置,是否存在从站连接地址,可能连接超时。

从站建立连接地址错误,检查IP端口设置,注意占用或填写错误情况。

轮询间隔时间范围:0~1000ms之间整数。

响应超时时间保证通讯正常,50~100000ms之间整数。

IPV4地址输入错误

IPV6地址输入错误

关于串口服务器使用问题

使用串口服务器改变接口(物理层、数据链路层),传输数据协议(传输层)串口服务器自动实现转换,透明传输。通过串口服务器配置软件配置串口连接参数转为以太网连接方式(配置串口服务器)。低代码直接使用ModbusTCP通讯与串口服务器通讯即可实现对串口设备ModbusRTU通讯控制。

调试助手中的modbus rtu Over tcp/ip:是tcp网络通信,但是本质上还是rtu。RTU通讯转换使用以太网连接方式使用,实现方式与串口服务器不同,使用TCP通讯连接方式走ModbusRTU通讯协议报文。

个人理解的OSI模型分析Modbus通讯协议如下:

个人学习总结,如有错误欢迎指正,大家点关注一起学习分享,谢谢大家。END



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3