如何快速入门Modbus协议(是概述也是总结)

Modbus上位机:摩尔信使MThings,可接入管理PLC、电表、各类传感器等设备,全功能调试、运维、组态、告警、历史数据、数据网关。

摩尔信使MThings下载链接icon-default.png?t=N7T8https://blog.csdn.net/zhoutanliang/article/details/106459315

先干了这碗鸡汤

第一句,Modbus协议是一种简单的应用层协议。

但是,各行如隔山,入门者遇见Modbus协议犹觉面至绝壁。

本文以自身多年从业经验分享MODBUS的学习经验。

对协议的陌生感主要还是不熟悉设计协议人的惯常套路,在此先要洗个脑。大部分协议大致包含3个部分:交互流程、报文格式、数据定义

交互流程中不仅介绍通信过程中有哪些角色,同时定义了角色之间可完成哪些功能及其实现步骤。

通常协议中将交互流程和报文格式放在一起定义,建议阅读者先从流程入手,不要直接去关注报文格式的具体定义。

数据定义看似是一份协议的延伸,但却是实际开发调试过程中的重点,大部分问题往往出现在双方对数据定义的理解偏差。

Modbus协议簇概览

常说的MODBUS实际上包含多种协议,包括:MODBUS-RTU、MODBUS-ASCII、MODBUS-TCP。拿工控行业通常的设备组网看,三兄弟应用的范围如下:

而实际应用时,由于改造需求,存在将MODBUS-RTU/ASCII应用在以太网中。

RTU相比较ASCII具备更紧凑的报文流,传输效率更高,目前MODBUS-ASCII已经应用较少。

三种协议的交互流程的定义基本一致,但是报文格式定义存在明显区分:

交互流程

现行MODBUS标准中定义了19中交互流程,分别对应一种功能码,其中常用流程所对应功能码是01~06、15、16,主要完成4种数据的读写。交互流程都遵循主从交互模式,一句话总结:主机发送请求后,从机响应相应数据。

由于MODBUS-RTU/ASCII协议常用于非平衡传输总线(例如RS485),协议要求严格遵循同步请求模式,即主机发送请求后直至接收从机回复数据或超时无响应,主机才能发送其它请求,同时总线上只能有一个主机。

即使MODBUS-RTU/ASCII协议应用于以太网,由于应用协议没有设计请求响应帧之间的匹配机制,在同一链接中依旧要遵循上述要求。

而MODBUS-TCP协议专为以太网这种平衡式传输网络而设计,提供了简单的帧序号机制,进而支持主机异步方式发送请求,可充分利用网络带宽。在异步模式下,主机性能一般高于从设备性能,主机应能够限制异步请求规模,防止从机资源溢出。

报文格式

参考《Modbus_Application_Protocol_V1_1b3.pdf》

数据定义

交互流程和报文格式在MODBUS协议标准中被定义的非常清晰,而对数据定义的处理却在不同的厂家产生了很大的差异。

首先,说到MODBUS数据,就直接讲寄存器是不对的。MODBUS标准中定义4种数据块

数据块

单位长度

访问类型

前导数

读功能码

线圈状态

1 Bit

RW

0

0X01

离散输入

1 Bit

RO

1

0X02

保持寄存器

2 Bytes

RW

4

0X03

输入寄存器

2 Bytes

RO

3

0X04

基于数据块的单位长度,可将4种数据块分为两类:位(BIT)数据和寄存器(REG)数据,结合读写属性,数据块之间的关系如下图:

数据是数据块中的具体定义,不同数据块中的数据定义是相互独立的。如何理解这个独立?比如说地址为100的输入寄存器和地址为100的保持寄存器可以是完全不同的数据。

如何去描述一条MODBUS数据定义?

定义一条数据应该包括:隶属数据块、数据名称、数据地址、数据量、数据类型(协议类型)、数据系数(浮点数据被整形传输时涉及)、字节序(寄存器数据量为1、2、4时涉及)、字序(寄存器数据量为2、4时涉及)。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值