modbus 协议

Modbus是 OSI 模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。包括了ASCII、RTU、TCP三种报文类型.

Modbus协议使用串口传输时可以选择RTU或者ASCII模式,并规定了消息、数据结构、命令和应答方式,且需要对数据进行校验。ASCII模式采用LRC校验,RTU模式采用16位CRC校验。通过以太网传输时使用TCP,这种模式下不使用校验,因为TCP协议是一个面向连接的可靠协议。TCP和RTU协议非常类似,只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。

Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等.

Modbus的工作方式是请求/应答,每次通讯都是主站先发送指令,可以是广播,或是向特定从站的单播;从站响应指令,并按要求应答,或者报告异常。当主站不发送请求时,从站不会自己发出数据,从站和从站之间不能直接通讯 。

modbus RTU

从站地址(1 byte)+功能码(1 byte)+数据区(N bytes)+校验码(2 bytes)

从站地址:一个字节,作用是索引

功能码:一个字节,表明读写功能

数据:通信所传输的数据,可以是多字节

校验:判断接收的数据在传输过程中是否有损失,两个字节

功能码

读取输出线圈

发送报文格式:

从站地址

功能码

起始(高)

起始(低)

数量(高)

数量(低)

校验码

0x01

0x01

0x00

0x13

0x00

0x1B

XXXX

报文含义解释:读1号从站的输出线圈,起始地址是0x13=19,对应的地址为00020,线圈数量为0x1B=27。即读取1号从站输出线圈,地址是00020-00046,一共27个线圈的状态值。

***注意:***起始地址是0x13是用来索引的,对应的地址为00020才是具体的地址,它是与存储区相关的。

返回报文格式:

从站地址

功能码

字节计数

字节一

字节二

字节三

字节四

校验码

0x01

0x01

0x04

0xCD

0x6B

0xB2

0x05

XXXX

返回报文含义:返回1号从站输出线圈00020-00046,一共27个线圈的状态值,返回的字节数为4个,分别为CD、6B、B2、05

ModbusASCII传输模式

1)ModbusRTU与ModbusASCII在报文数据发送格式上几乎一样,但也存在一些区别,具体体现在:

ModbusASCII有开始字符和结束字符(CR LF),可以作为一帧数据开始和结束的标志,而ModbusRTU没有这样的标。

两者校验方式不同,ModbusRTU是CRC循环冗余校验,ModbusASCII是LCR纵向冗余校验。

在Modbus标准中,RTU是必须要求的,而ASCII是可选项,即作为一个Modbus通信设备可以只支持RTU,也可以同时支持RTU和ASCII,但不能只支持ASCII。

2)当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。报文中字符间的时间间隔可以达一秒,但如果有更大的间隔,则接受设备认为发生了错误。

代码系统:

十六进制,ASCII字符0-9,A-F

消息中的每个ASCII字符都是一个十六进制字符组成

1 起始位、7 数据位, 首先发送最低有效位、1 位作为奇偶校验、1 停止位(有校验是1个停止位,无校验时2个停止位)

错误检测域:LRC(纵向冗长检测)

ModbusTCP介绍

在Modbus TCP/IP协议中,串行链路中的主/从设备分别演变为客户端/服务器端设备。即客户端相当于主站设备,服务器端相当于从站设备。基于TCP/IP网络的传输特性,串行链路上一主多从的构造也演变为多客户端/多服务器端的构造模型。Modbus TCP/IP服务器端通常使用端口502作为接收报文的端口, IANA(Internet Assigned Numbers Authority,互联网编号分配管理机构)给Modbus协议赋予TCP端口号为502,这是目前在仪表与自动化行业中唯一分配到的端口号。

其通信过程:

A、connect 建立TCP连接

B、准备Modbus报文

C、使用send命令发送报文

D、在同一连接下等待应答

E、使用recv命令读取报文,完成一次数据交换

F、通信任务结束时,关闭TCP连接

格式

MBAP(7 byte) + 功能码(1 byte) + 数据(N byte)

MBAP为报文头,长度为7字节

事务处理标识符:用于事务处理配对。在响应中,MODBUS 服务器复制请求的事务处理标识符。没有实质意义,就像序号一样。

协议标识符:用于系统内的多路复用。通过值 0 识别 MODBUS 协议。

长度:长度域是下一个域的字节数,包括单元标识符和数据域。

单元标识符:为了系统内路由,使用这个域。专门用于通过以太网 TCP-IP 网络和 MODBUS 串行链路之间的网关对 MODBUS 或 MODBUS+串行链路从站的通信。MODBUS 客户机在请求中设置这个域,在响应中服务器必须利用相同的值返回这个域。(也就是从站地址)

读输出寄存器:

发送报文格式

事务/协议

长度

单元标识

功能码

起始高

起始低

数量高

数量低

0x00000000

0x0006

0x01

0x03

0x00

0x6B

0x00

0x02

发送报文含义:读取服务器1号从站输出寄存器,起始地址为0x6B=107(相对地址),对应地址为40108,寄存器数量为0x02=2,即读取1号从站输出寄存器,地址从40108-40109,共两个寄存器的数值。

返回报文格式

事务/协议

长度

单元标识

功能码

字节计数

1高

1低

2高

2低

0x00000000

0x0007

0x01

0x03

0x04

0x02

0x2B

0x01

0x06

返回报文含义:返回服务器1号从站输出寄存器40108-40109,共2个寄存器的数值,返回字节数为4个,分别为02、2B、01、06,40108对应数值为0x022B,40109对应数值为0x0106

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值