声明
本文主要是用于自己的学习总结,作为一个善忘者,在此记录一下学习或者工作过的协议。文中会有大量网上搜索来的我认为比较好的图片和内容,由于引用的比较多很难一一列举。如有侵权请联系我,我会删除相关内容。
目录
TCP/IP协议簇
OSI七层协议示意图:
工业控制协议
modbus
modbus
简介
modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的modbus协议:modbusTCP。Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。
标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口
采用master/slave方式通信。
Modbus RTU
Modbus RTU协议通过将从站设备地址(或广播)、定义请求操作的功能码、要发送的数据和CRC校验放入主机查询中来建立查询报文;从站设备的响应消息也是使用Modbus RTU报文结构,包括从站设备地址、请求操作的功能码、要发送的数据和CRC校验;如果在接收消息时发生错误、或者从站设备无法执行请求的操作,从站设备将发送一个异常消息作为响应。Modbus RTU数据帧结构如下:
Modbus TCP
MBAP
ModbusTCP的数据帧可分为两部分:MBAP+PDU。
MBAP为报文头,长度为7字节,组成如下:
事务处理标识 | 协议标识 | 长度 | 单元标识符 |
2字节 | 2字节 | 2字节 | 1字节 |
报文的序列号(每次通讯+1) | 00 00表示ModbusTCP协议 | 数据长度 单位为字节 | 设备地址 |
事务处理标识 :可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。
协议标识符 :00 00表示ModbusTCP协议。
长度 :表示接下来的数据长度,单位为字节。
单元标识符 :可以理解为设备地址。
帧结构PDU
PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。
功能码
modbus的操作对象有四种:线圈、离散输入、输入寄存器、保持寄存器。
线圈:PLC的输出位,开关量,在MODBUS中可读可写
离散量:PLC的输入位,开关量,在MODBUS中只读
输入寄存器:PLC中只能从模拟量输入端改变的寄存器,在MODBUS中只读
保持寄存器:PLC中用于输出模拟量信号的寄存器,在MODBUS中可读可写
根据对象的不同,modbus的功能码有:
0x01:读线圈
0x05:写单个线圈
0x0F:写多个线圈
0x02:读离散量输入
0x04:读输入寄存器
0x03:读保持寄存器
0x06:写单个保持寄存器
0x10:写多个保持寄存器
硬件通讯协议
相关引用连接:
(10条消息) ISO七层协议模型架构、各层的解析及其协议_肥嘟嘟的左卫门-CSDN博客_osi七层模型