协议简介
Modbus协议,首先从字面理解它包括Mod和Bus两部分,首先它是一种bus,即总线协议,总线就意味着有主机,有从机,这些设备在同一条总线上。
Modbus支持单主机,多个从机,最多支持247个从机设备。关于Mod,因为这种协议最早被用在PLC控制器中,准确的说是Modicon公司的PLC控制器,这也是Modbus名称的由来。后来Modicon被施耐德电器收购,Modbus协议广泛应用在工业控制器、HMI和传感器上,逐渐被其他厂商所接受,成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式。
-
每种设备(PLC、HMI、控制面板、驱动程序、动作控制、输入/输出设备)都能使用 Modbus协议来启动远程操作。
-
在基于串行链路和以太 TCP/IP 网络的 Modbus 上可以进行相互通信。
-
一些网关允许在几种使用 Modbus 协议的总线或网络之间进行通信
术语说明
HDLC 高级数据链路控制
HMI 人机界面
IETF 因特网工程工作组
I/O 输入/输出设备
IP 互连网协议
MAC 介质访问控制
MB Modbus 协议
MBAP Modbus 协议
关于总线补充说明
总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。总线是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。
Modbus被广泛使用主要原因
- 标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权
- Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。
- Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。
协议版本
Modbus 协议目前分别定义了基于串口()和以太网传输数据的协议,其中串口(RS232,RS485,RS422,光纤,无线等)数据传输协议分为 Modbus RTU 和 Modbus ASCII串行链路协议,以太网数据传输协议一种 Modbus TCP/IP协议。
其中,Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。
工作模式
Modbus 协议采用主从(Master/Salve)通信方式,TCP/IP传输模式下,主节点也叫客户机,从节点也叫服务器。连接到总线上的所有主机节点中有且只有一个 Master 节点(主节点),其余为 Slave 节点(从节点,可选地址为1~247,每个Slave节点的地址必须唯一)。
主从通信以 请求/应答 为主,每次通讯都是主节点先发送请求(采用广播模式、单播模式),从节点响应指令,并按要求应答,或者报告异常。当主节不发送请求时,从节不会自己发出数据,从节点之间不能相互通讯(也就是说从节点之间不能相互发送请求)。
无论主节点发送的是广播指令还是单播指令,实际上所有从节点都会完整接收指令。但发送单播指令时,只有地址和指令中中指定地址相同的从节点才会执行及回应指令,其它从节点将忽略收到的指令,而广播请求所有收到指令的设备都会执行指令,但不会给主机回应指令。
半双工通信
Modbus 由于请求/应答机制所以不能同步通信(同步通信需要收发双方以相同的节奏发送和接收数据),总线上每次只有一帧数据进行传输,属于半双工通信。
Modbus 没有支持繁忙机制处理,例如主机给从机发送命令, 如果从机正在处理其他任务,此时从机将无法响应主机,所以需要通过软件的方式来判断是否正常接收。
Modbus消息帧
Modbus 协议定义了一个与基础通信层无关的简单协议数据单元(PDU -> 功能码 + 数据 部分)。特定总线或网络上
的 MODBUS 协议映射能够在应用数据单元(ADU -> 地址域 + 功能码 + 数据 + 差错校验)上引入一些附加域
通用数据帧
地址域 | 功能码 | 数据 | 差错校验码 |
---|---|---|---|
1字节 | 1字节 | N字节 | CRC: 16字节 LRC: 1字节 |
说明:每个划分字段都用16进制表示
-
地址域
从机设备地址,通常1-247为有效地址,0为广播地址(用于接收主机的广播数据),每个从机在总线上地址必须唯一,只有与主机发送的地址码相符的从机才能响应返回数据。
主节点通过将要联络的从节点的地址放入消息中的地址域来选取需要通信的从设备。当从节点发送回应消息时,需要把自己的地址放入回应的地址域中,以便主节点知道是哪一个设备作出的回应。
-
功能码
表明主节点请求数据的类型。
当主节点向从设备发送消息时,功能码将告诉从设备需要执行哪些行为。例如去读取输入的开关状态,读一组寄存器的数据内容等。
-
数据
包含寄存器地址和寄存器数据等
-
差错校验
对数据进行冗余校验的结果,CRC、LRC
其中事务处理正常时,客户机向服务器发送请求,在功能码中填充功能码代号,说明服务器需要执行的动作,在数据码区填充具体的要求,比如读寄存器的地址和数量,通信正常时服务器会在返回的通信帧的功能码区中填充一个操作码,该操作码=功能码,在通讯帧的数据区填充返回的采样数据。
当出现事务处理异常时,服务器会在返回的通讯帧的功能码中填充一个差错码,该差错码 = 功能码 + 0x80,即将功能码的最高位置1代表出现错误。并在后面的数据段中填充错误码,用来指示本次通信的错误具体内容。
Modbus ASCII消息帧
起始位(
标签:总结,01,字节,hex,网络,Modbus,地址,寄存器 From: https://www.cnblogs.com/shouke/p/18315015