中国工控培训网·PLC通讯-MODBUS协议描述
发布时间:2018-06-23 09:57:18
MODBUS 协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上
的MODBUS 协议映射能够在应用数据单元(ADU)上引入一些附加域。
GB/T ××××—××××
地址域功能码数据差错校验
ADU
PDU
图3:通用MODBUS帧
启动MODBUS 事务处理的客户机创建MODBUS应用数据单元。功能码向服务器指示将执行哪
种操作。
MODBUS 协议建立了客户机启动的请求格式。
用一个字节编码MODBUS 数据单元的功能码域。有效的码字范围是十进制1-255(128-255 为
异常响应保留)。当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作。
向一些功能码加入子功能码来定义多项操作。
从客户机向服务器设备发送的报文数据域包括附加信息,服务器使用这个信息执行功能码定义
的操作。这个域还包括离散项目和寄存器地址、处理的项目数量以及域中的实际数据字节数。
在某种请求中,数据域可以是不存在的(0长度),在此情况下服务器不需要任何附加信息。功
能码仅说明操作。
如果在一个正确接收的MODBUS ADU 中,不出现与请求MODBUS 功能有关的差错,那么服
务器至客户机的响应数据域包括请求数据。如果出现与请求MODBUS 功能有关的差错,那么域包
括一个异常码,服务器应用能够使用这个域确定下一个执行的操作。
例如,客户机能够读一组离散量输出或输入的开/关状态,或者客户机能够读/写一组寄存器的数
据内容。
当服务器对客户机响应时,它使用功能码域来指示正常(无差错)响应或者出现某种差错(称
为异常响应)。对于一个正常响应来说,服务器仅对原始功能码响应。
启动请求
功能码 数据请求
操作码
接收响应
数据响应
执行操作
启动响应
客户机服务器
图4:MODBUS事务处理(无差错)
对于异常响应,服务器返回一个与原始功能码等同的码,设置该原始功能码的最高有效位为逻
辑1。
GB/T ××××—××××
5
启动请求
功能码数据请求
差错码
接收响应
异常码
在操作中检测的差错
启动差错
客户机服务器
图5 MODBUS事务处理(异常响应)
F 注释:需要管理超时,以便明确地等待可能不会出现的应答。
串行链路上第一个MODBUS执行的长度约束限制了MODBUS PDU大小(最大RS485ADU=256
字节)。
因此,对串行链路通信来说,MODBUS PDU=256-服务器地址(1字节)-CRC(2 字节)=253
字节。山西太原高级电工培训
从而:
RS232 / RS485 ADU = 253 字节+服务器地址(1 byte) + CRC (2 字节) = 256 字节。
TCP MODBUS ADU = 249 字节+ MBAP (7 字节) = 256 字节。
MODBUS 协议定义了三种PDU。它们是:
l MODBUS请求PDU,mb_req_pdu
l MODBUS响应PDU,mb_rsp_pdu
l MODBUS异常响应PDU,mb_excep_rsp_pdu
定义mb_req_pdu 为:
mb_req_pdu = { function_code, request_data},其中
function_code - [1个字节] MODBUS 功能码
request_data - [n个字节],这个域与功能码有关,并且通常包括诸如可变参考、变量、数据偏移
量、子功能码等信息。
定义mb_rsp_pdu 为:
mb_rsp_pdu = { function_code, response_ data},其中
function_code - [1个字节] MODBUS 功能码
response_data - [n个字节],这个域与功能码有关,并且通常包括诸如可变参考、变量、数据偏
移量、子功能码等信息。
定义mb_excep_rsp_pdu 为:
mb_excep_rsp_pdu = { function_code, request_data},其中
function_code - [1个字节] MODBUS 功能码+ 0x80台达变频器维修培训
exception_code - [1个字节],在下表中定义了MODBUS 异常码。