Modbus协议应用纪实

  • Modbus协议是一种单主/多从的通信协议,同一时间总线上只能有一个主设备,从设备最多可有247个。
    主设备可采用两种模式向从设备发送请求报文,从设备只能被动接收请求报文后给出响应报文,分别是单播模式和广播模式。
    通常情况下,主设备不占用地址,从设备地址必须为1~247中的一个,且同一网络中不允许重复。在广播模式下,从机只接收并执行事务处理,不进行应答,所以广播模式下请求指令必须是写指令,且将报文中的地址设为0x00表示广播报文。

Modbus传输帧模式

传输帧模式帧格式
ASCII消息帧以英文冒号”:”(0x3A)开始,以回车(0x0D)和换行(0x0A)结束,允许传输的字符集为十六进制的0~9和A~F。每个8位的字节被拆分成两个ASCII字符进行发送,比如十六进制0xAF(1010 1111),会被分解成ASCII字符“A”(0100 0001)和”F”(0100 0110)进行发送。ACII模式允许两个字符之间间隔的时间长达1s而不引发通信故障,该模式采用纵向冗余校验(LRC),其最高位(b7)用作奇偶校验位。在这里插入图片描述
RTU采用二进制表示数据的方式,RTU则没有开始和结束标志符,需要用时间间隔来判断一帧数据的开始和结束,协议中规定两个不同的报文帧间隔需大于3.5个字符周期,报文帧内部字符间传输时间间隔也不能大于1.5个字符周期,否则会出错 。采用CRC校验。 在这里插入图片描述

|TCP| Modbus TCP协议则是在RTU协议上加一个MBAP报文头,由于TCP是基于可靠连接的服务,RTU协议中的CRC校验码就不再需要,所以在Modbus TCP协议中是没有CRC校验码。数据在TCP/IP以太网上传输,支持Ethernet II和802.3两种帧格式,Modbus TCP数据帧包含报文头、功能代码和数据3部分,MBAP报文头(MBAP、Modbus Application Protocol、Modbus应用协议)分4个域,共7个字节,整个报文最大帧长度为260Byte。ModbusTCPIP服务器通常使用502端口建立连接。在这里插入图片描述

寄存器地址和协议地址区别

Modbus的操作对象有四种:线圈、离散输入、保持寄存器、输入寄存器。在Modbus协议中,经常会出现类似于3xxxx,4xxxx寄存器,这个表示的是寄存器支持的数据类型。Modbus数据地址格式是从0开始,类似的数据地址格式经常在组态软件以及PLC系统中用到。
在这里插入图片描述

  • 寄存器PLC地址

    寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。第一位数字和寄存器类型的对应关系如表1所示。PLC地址例如40001、30002等。

  • 寄存器协议地址

    寄存器协议地址指指通信时使用的寄存器地址,例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址一般使用16进制描述。再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002,虽然两个PLC寄存器寄存器通信时使用相同的地址,但是需要使用不同的命令访问,所以访问时不存在冲突。

功能码

Modbus有功能码,校验码,异常功能码和错误代码;用户自定义功能代码有两组,分别为65~72和100~110,其他为标准功能码不能修改。
异常功能码和错误代码非常容易混淆,一般来说异常功能码指的是某个功能码执行的时候出现的相应异常功能码,一般都是在功能码的基础上加上0x80,比如03功能码出现的异常码是0x83异常功能码,16功能码对应出现的异常功能码则是0x90;而错误代码则是表示出现错误的具体情况,比如寄存器地址不存在,不管是读还是写,如果该寄存器地址不存在的话,错误代码为02。
在这里插入图片描述

以下为错误代码:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值