modbus 协议
Modbus是 OSI 模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。包括了三种报文类型.Modbus协议使用串口传输时可以选择RTU或者ASCII模式,并规定了消息、数据结构、命令和应答方式,且需要对数据进行校验。ASCII模式采用LRC校验,RTU模式采用16位CRC校验。通过以太网传输时使用TCP,这种模式下不使用校验,因为TCP协议是一
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)