MODBUS技术的基础知识 演讲者:北京交通大学 孙昕 1
主要内容 概述 Modbus应用协议规范 Modbus协议在串行链路上的实现 Modbus协议在TCP/IP上的实现
概 述 1979年Modicon公司(现Schneider 的一部分)提出的Modbus Modbus最初作为工业串行链路的事实标准 概 述 1979年Modicon公司(现Schneider 的一部分)提出的Modbus Modbus最初作为工业串行链路的事实标准 1997年Schneider电气在TCP/IP上实现Modbus协议 2004年Modbus作为我国国家标准
Modbus技术规范组成 Modbus应用协议规范 Modbus协议在串行链路上的实现指南 Modbus协议在TCP/IP上的实现指南
Modbus技术规范的关系
Modbus应用协议规范
Modbus通信栈
Modbus应用协议 Modbus是一种简单客户机/服务器应用协议 客户机能够向服务器发送请求 服务器分析请求,处理请求,向客户机发送应答
通用Modbus帧结构--协议数据单元 (PDU) 读/写寄存器列表,读/写比特列表 诊断,标识
Modbus事务处理(无差错) 当服务器对客户机响应时,它使用功能码域来指示正常(无差错) 响应或者出现某种差错(称为异常响应) 对于一个正常响应来说,服务器仅复制原始功能码
Modbus事务处理(异常响应) SM6 对于异常响应,服务器将原始功能码的最高有效位设置逻辑1后返回 异常码指示差错类型
Modbus PDU长度 Modbus最初在串行链路上的实现(最大RS485ADU=256字节) 限制了Modbus PD的长度。 因此,对串行链路通信来说,Modbus PDU=256-服务器地址(1字节)-CRC(2字节)=253字节。 从而: RS232 / RS485 ADU = 253字节+服务器地址(1字节) + CRC (2字节)= 256字节。 TCP Modbus ADU = 253字节+ MBAP (7字节) = 260字节。
Modbus PDU结构 Modbus请求PDU mb_req_pdu = { function_code, request_data} , function_code - [1字节] Modbus功能码 request_data - [n字节] Modbus响应PDU mb_rsp_pdu = { function_code, response_ data }, function_code - [1字节] Modbus功能码 response_data - [n字节] Modbus异常响应PDU mb_excep_rsp_pdu = { function_code, exception_code }, function_code - [1字节] Modbus功能码 + 0x80 exception_code – [1字节]
Modbus 数据模型 Modbus的数据模型是以一组具有不同特征的表为基础建立的 四个基本表为: 基本表 对象类型 访问类型 注释 离散量输入 单个位 只读 I/O系统可提供这种类型数据 线圈 读写 通过应用程序可改变这种类型数据 输入寄存器 16位字 保持寄存器
Modbus公共功能码的定义 功能码 码 子码 (十六进制) 数 据 访 问 位 物理离散量输入 读离散量输入 02 内部位或 物理线圈 功能码 码 子码 (十六进制) 数 据 访 问 位 物理离散量输入 读离散量输入 02 内部位或 物理线圈 读线圈 01 写单个线圈 05 写多线圈 15 0F 16 输入寄存器 读输入寄存器 04 内部寄存器或物理输出寄存器 读保持寄存器 03 写单寄存器 06 写多寄存器 10 读/写多寄存器 23 17 屏蔽写寄存器 22 读FIFO队列 24 18 文件记录访问 读文件记录 20 6 14 写文件记录 21 诊 断 读异常状态 07 诊断 08 00-18 获得通信事件计数器 11 OB 获得通信事件记录 12 0C 报告从站ID 读设备识别码 43 2B 其它 封装接口传输
Modbus功能码应用实例(1) 读线圈01 (0x01) 请求 功能码 1字节 0x01 起始地址 2字节 0x0000 至0xFFFF 线圈数量 1至2000(0x7D0) 响应 功能码 1字节 0x01 字节计数 N* 线圈状态 n字节 n=N或N+1 *N=寄存器的数量/8,如果余数不等于0,那么 N = N+1 错误 功能码 1字节 功能码+0x80 异常码 01或02或03或04
写多个寄存器16(0x10) 请求 响应 错误 功能码 1字节 0x03 起始地址 2字节 0x0000至0xFFFF 寄存器数量 1至125(0x7D) 响应 功能码 1字节 0x03 字节数 2×N* 寄存器值 N*×2字节 *N=寄存器数量 错误 差错码 1字节 0x83 异常码 01或02或03或04
Modbus功能码应用实例(3) 写多个寄存器16(0x10) 请求 功能码 1字节 0x10 起始地址 2字节 0x0000至0xFFFF 寄存器数量 0x0001至0x0078 字节计数 2×N* 寄存器值 N*×2字节 值 *N=寄存器数量 响应 功能码 1字节 0x10 起始地址 2字节 0x0000至0xFFFF 寄存器数量 1至123(0x7B) 错误 差错码 1字节 0x90 异常码 01或02或03或04
Modbus协议在串行链路上的实现
Modbus协议在串行链路上的实现模型 主要在RS-485和RS-232等物理接口上实现Modbus协议 层 ISO/OSI 模型 7 7 应用层 Modbus应用协议 6 表示层 空 5 会话层 4 传输层 3 网络层 2 数据链路层 Modbus串行链路协议 1 物理层 EIA/TIA-485 (或 EIA/TIA232)
串行链路上的Modbus帧结构 Modbus串行链路协议是一个主/从协议 网络上的每个从站必须有唯一的地址(从1到247) 从站地址用于寻址从站设备,由主站发起 地址0用于广播模式,不需要响应 RS-485和RS-232 定义了标准的物理端口,提高互可操作性
Modbus串行传输模式 – RTU模式 RTU Modbus串行传输模式的报文格式, CRC-16差错校验 报文帧的标识 字符之间的要求
Modbus串行传输模式 – ASCII模式 报文必须以“:”开始 报文必须以“LF-CR”结束 数据用十六进制ASCII码值表示 使用LRC进行差错校验
Modbus协议在TCP/IP上的实现
基于开放TCP/IP 的Modbus协议 Modbus协议是一个开发性协议 IANA已为 Modbus协议指配TCP / UDP 知名端口502 Modbus协议是一个标准协议 IETF组织提议将Modbus协议作为因特网标准 Modbus协议是自动化领域中广泛使用“实事”标准 以太网 (快速以太网) 使用目前最流行的LAN技术 IEEE 802.3中定义的以太网和以太网II TCP/IP模型 描述因特网协议的组合
Modbus TCP/IP通信结构 Modbus TCP/IP的通信设备: 路由器或网关等设备
TCP/IP 上的Modbus 数据帧 通过TCP/IP栈传输 支持以太网II和IEEE 802.3帧,默认帧为以太网II帧 以太网II是默认的 TCP/IP 网络帧格式
MBAP 报文头 域 长度 描述 客户机 服务器 事务处理标识符 2字节 Modbus请求/响应事务处理的识别 客户机启动 服务器从接收的请求中重新复制 协议标识符 0=Modbus协议 随后字节的数量 客户机启动(请求) 服务器(响应)启动 单元标识符 1字节 串行链路或其它总线上连接的远程从站的识别
Modbus报文传输服务结构 用户应用 通讯 资 源 管 理 与 流 量 管理层 控 制 应用层 TCP TCP/IP栈 MODBUS 客户接口 MODBUS客户机 MODBUS服务器 TCP 管理层 栈参数化 连接管理 访问控制 TCP/IP栈 资 源 管 理 与 流 量 控 制
通信应用层 Modbus客户机 允许用户应用显性地控制与远程设备的信息交换。Modbus客户机根据用户应用向Modbus客户机接口发送的要求中所包含的参数来建立一个Modbus请求。 Modbus客户机接口 Modbus客户机接口提供一个接口,使得用户应用能够生成各类Modbus服务的请求,该服务包括对Modbus应用对象的访问 Modbus服务器 在收到一个Modbus请求以后,模块激活一个本地操作进行读、写、或完成其他操作。
TCP管理层 管理通信的建立和结束以及管理在所建立的TCP连接上的数据流 。 连接管理 在客户机和服务器的Modbus模块之间的通信需要使用TCP连接管理模块,负责全面管理报文传输TCP连接 访问控制 在某些至关重要的场合,必须禁止无关的主机对设备内部数据的访问。这既是需要的安全模式,也是在需要时实现安全处理的原因
TCP/IP栈层 可以对TCP/IP的栈进行参数配置,以适用对产品或系统的不同的特定 约束进行数据流控制、地址管理和连接管理。使用BSD套接字接口来管 理TCP连接
Modbus TCP/IP连接建立 Modbus报文传输服务必须在502端口上提供一个监听套接字,允 许接收新的连接和与其他设备交换数据 当报文传输服务需要与远程服务器交换数据时,它必须与远程502端口建立一个新的客户机连接,以便于远距离地交换数据。本地端口必须高于1024,并且对每个客户机的连接各不相同
Modbus TCP/IP通信栈 TCP/IP栈提供了一个接口,用来管理连接、发送和接收数据,还可以进行某些参数配置,以使得栈的特性适应于设备或系统的限制
谢谢! sunxincn@263.net