基于单片机对ModBusRTU协议的从设备进行映射

2023-06-17 08:39黎钦银
物联网技术 2023年6期
关键词:通信协议网络结构特征值

黎钦银,文 超

(1.壹倍科技(东莞)有限公司,广东 东莞 523077;2.广东力源工程技术有限公司,广东 东莞 523077)

0 引 言

Modbus 通信协议是当前工业领域常用的通信协议,工业现场设备的通信线路经常会采用双绞屏蔽线将设备的RS 485 接口并联起来,并通过ModBusRTU 协议进行主从设备间的通信[1-5],如图1所示。这种总线通信架构具有敷设简单、通信稳定和通信距离较远的优点。在标准ModBusRTU协议的链路中,仅有一个主设备能采集多个从设备的数据,但是随着工业物联网的发展,经常会出现多个主设备需要同时采集多个从设备的数据的情况[6-9]。针对这个问题,本文通过单片机的串口接入RS 485 总线,对主通信链路中从设备的数据进行复制、映射、转发,从而实现多个主设备同时采集一个从设备数据的目的。

图1 RS 485 总线通信网络

1 总体解决方案

1.1 网络结构

选用的单片机至少应带有两个硬件串口,为了描述方便,下面简称为串口1 和串口2。串口1 并入到主网络中,该串口只对主网络的数据进行收集而不返回。串口2 作为从设备,用于数据转发,提供给另一个主设备采集数据。从设备数据映射网络结构如图2所示。

图2 从设备数据映射网络结构

在原有RS 485 总线网络中,主设备1 对从设备1 进行数据采集时,由于RS 485 总线的特性,总线上的所有设备都能收到主设备1 的请求帧和从设备1 的应答帧,所以从设备1 的数据映射单片机的串口1,能监听RS 485 总线上从设备1 的应答帧。单片机将应答帧信息分析处理后保存到单片机中,并由单片机的串口2 进行数据转发,接入新增的RS 485 总线,供其他主设备采集。

1.2 主要算法

单片机利用串口1 识别出需要的数据,使用串口2 提供标准的ModBusRTU Server 功能。对于串口2 的功能,比较常规,具体参考ModBusRTU 标准通信协议进行编程即可实现。因此重点是串口1 如何准确识别出原有RS 485 总线中从设备的数据,再通过串口2 映射及转发数据。单片机运行主流程如图3所示。

图3 单片机运行主流程

为了准确识别数据,单片机需要利用ModBusRTU 协议中数据帧的特征值对串口1 收到的数据帧进行甄别。数据帧的特征值有:设备的ModBus 地址、数据的ModBus 功能区、数据的寄存器地址、数据的类型(整型、浮点型等)。通过这些特征值,就能判断从原有RS 485 总线接收的数据是否为主设备2 需要的正确数据。如图4所示为ModBusRTU 通信协议的数据格式[10]。

图4 ModBusRTU 通信协议的数据格式

因为RS 485 总线采用半双工工作方式,所以单片机的串口1 采集到的数据帧有可能是主机的请求帧,也有可能是从设备的应答帧。如何判断当前的数据帧是请求帧还是应答帧,可以先假设一种情况:串口1 收到一个数据帧,数据为“01 01 18 00 00 01 FB 6A”。对于该数据帧,会存在表1和表2中所列两种情况。

表1 主站请求帧的情况

表2 从站应答帧的情况

从表1和表2可以看到,单纯靠一个数据帧是无法辨别该数据帧是请求帧还是应答帧的。通过ModBusRTU 协议的通信过程可以知道,总是主机先发出请求帧,然后从机再发出应答帧,而请求帧和应答帧有对应关系,比如设备地址码相同、功能码相同、请求的寄存器数量和应答的数据字节数量吻合等,所以单片机需要缓存两个数据帧,如图5所示。

图5 数据帧处理

单片机内部的数据帧处理采用了线性队列的数据结构,新数据帧入列,内部缓存的数据帧进行移动,旧的数据帧出列并丢弃。从单片机的视角而言,数据帧缓存2 存放的是主机的请求帧,数据帧缓存1 存放的是从机的应答帧,请求帧和应答帧需要满足相同的设备地址码、相同的功能码、请求帧寄存器数量和应答帧数据字节数量能对应上、请求帧和应答帧的CRC(Cyclic Redundancy Check)校验码都能校验通过等条件,就可以认为该请求帧和应答帧是有效的。得到有效的请求帧和应答帧后,再根据用户设定的需求数据的特征值进一步判断该数据帧是否有需求的数据,程序判断流程如图6所示。

图6 用户需求数据特征判断流程

2 优势和存在问题分析

利用单片机的串口1 接入原有RS 485 总线中监听数据帧,获取从设备的数据,显著优势是对原来的总线网络和控制系统没有影响。在实际应用中,该设计方案可以在不动原有系统的前提下搭建新的系统。同时对该设计方案灵活运用可以衍生出多种架构,如除图2的总线方式连接外,还可以按图7的总线方式连接,对从设备1 进行了两次复制、映射和转发,实现多主设备采集同一从设备,并且各个系统可以做到相互独立、互不相关。

图7 多主设备采集同一从设备

当然该方法也存在不足,比如主设备1 不发送请求帧,单片机的串口1 将不会有数据帧,从而导致从设备的数据不能转发给其他主设备。另外,单片机的串口1 获取从设备的数据帧数跟主设备1 请求数据频率有关,如果主设备1 请求频率慢,那么单片机更新从设备的数据就慢。因此对数据的实时性要求比较高的场合,不适合采用该方法。

3 结 语

利用单片机的一个串口接入原有RS 485 总线,用于接收数据帧,然后对所需从设备的应答帧进行分析、处理并映射到单片机的内存中,最后通过单片机的另外一个串口,采用ModBusRTU 协议把数据转发出来,供其他主设备读取。该设计拓展性好、数据采集稳定、性价比高。对于从设备的RS 485 通信接口被占的情况,可参考该设计方案。

猜你喜欢
通信协议网络结构特征值
一类带强制位势的p-Laplace特征值问题
单圈图关联矩阵的特征值
基于Z-Stack通信协议栈的红外地温采集电路设计
基于DMX512通信协议的多路转发器设计与研究
基于NS-3的PLC多频通信协议仿真平台设计与实现
基于互信息的贝叶斯网络结构学习
知识网络结构维对于创新绩效的作用机制——远程创新搜寻的中介作用
沪港通下A+ H股票网络结构演化的实证分析
复杂网络结构比对算法研究进展
基于商奇异值分解的一类二次特征值反问题