Modbus协议数据采集系统设计

时间:2022-10-23 01:41:55

Modbus协议数据采集系统设计

1.ModbusRTU模式

Modbus协议的ASCII模式是对数据的ASCII字符进行传输,而RTU模式传输的是数据的每一个字节。比如RTU模式传输一个十六进制数0xA7,ASCII模式就需要传输字符“A”和字符“7”,对应的ASCII码为0x41和0x37两个字节。所以在相同通信速率下RTU模式比ASCII模式具有更大的数据流量。因此一般情况下,工业自动化控制领域较多地采用RTU模式进行通信。无论是ASCII模式还是RTU模式,Modbus信息以帧的方式传输,每帧有确定的起始点和结束点,使接收设备在信息的起点开始读地址,并确定要寻址的设备,以及信息传输的结束时间。RTU模式帧序列如图1所示,典型的RTU消息帧包括至少3.5个字符的开始域,1字节的地址域,0~252个字节的数据域,2个字节的CRC校验,以及至少3.5个字符的结束域。使用RTU模式,消息发送至少要以3.5个字符时间的停顿间隔开始。传输的第一个域是从机地址;每个从机不断侦测网络总线,当第一个域(地址域)接收到,每个从机都进行解码以判断是否与本机地址匹配,地址匹配的从机将继续接收后续字节,不匹配的则重新开始等待一个新消息帧的开始。整个消息帧必须作为一连续的字节流转输。如果在帧完成之前有超过1.5个字符时间的停顿时隔,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个字节在小于3.5个字符时间内接着前一个字节到达,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在最后的CRC-16校验都将失败。主机查询信息:查询中的功能代码为被寻址的从机设备应执行的动作类型。数据字节中包含从机须执行功能的附加信息,如功能代码02,将读取输入状态,取得一组开关输入的当前状态。该数据区必须含有告之从机读取寄存器的起始地址及数量,错误校验区的一些信息,为从机提供一种校验方法,以保证信息内容的完整性。从机响应信息:从机正常响应时,响应功能码是查询功能码的应答,数据字节包含从机采集的数据,如寄存器值或状态。如出现错误,则修改功能码,指明为错误响应,并在数据字节中含有一个代码,来说明错误,错误校验区有允许主机确认有效的信息内容。

2.硬件电路设计

系统中有一个主机和三个从机。从机的地址已由其控制器的P1口分别设置为1、2、3。主机能控制从机1和从机2的继电器,并且显示其工作状态。主机能读入从机3采集的电压数据,并实时显示。图3中还设置用于显示通信状态的若干个LED。图3中的液晶模块上显示从机1和从机2的继电器开关被主机分别控制成闭合和断开,从机3采集的两个电压数据分别为4.98V和0V。系统前端通信接口选用的芯片是MAX485。MAX485接口芯片是Maxim公司的一种RS-485芯片,采用单一电源+5V工作,额定电流为300μA,采用半双工通讯方式。它完成将TTL电平转换为RS-485电平的功能。MAX485的内部含有一个驱动器和接收器。它的RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可;/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工方式,所以只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。由于RS-485芯片的特性,接收器的检测灵敏度为±200mV,即差分输入端VA-VB≥+200mV,输出逻辑1,VA-VB≤-200mV,输出逻辑0;而A、B端电位差的绝对值小于200mV时,输出为不确定。如果接收器输入端(A、B)开路或总线浮空(总线上所有驱动器输出为高阻)时,若接收器输出低电平,则UART可能认为是通信帧的“起始信息”而引起工作不正常,克服此问题的方法是在A端接上拉电阻,在B端接下拉电阻,从而保证A、B开路或浮空时,输出处于确定状态(高电平)。本系统此处的上拉电阻和下拉电阻都为10KΩ。另外,在应用系统工程的现场施工中,由于通信载体是双绞线,它的特性阻抗为120Ω左右,所以线路设计时,在RS-485网络传输线的始端和末端各应接1只120Ω的匹配电阻,以减少线路上传输信号的反射。

3.系统程序设计

本系统的软件遵循模块化设计思想,包括主程序、初始化程序、串行通信程序和液晶显示程序等。系统的主机主程序流程图如图4所示。主机遵循Modbus协议,实现了发送串口命令和读取响应信息,以及数据处理和最终显示输出。Modbus协议是一个一主多从的通信协议,所以需要对每个从机分配不同的地址。从机主要实现数据帧的接收和存储,并且根据接收到的数据帧中的功能代码给出一应答消息作为对主机的回应。从机的程序设计流程图同图4类似。首先也需要对系统初始化,包括定时器初始化、串口初始化等,然后调用串口接收命令读取主机发送来的数据帧,并判断接收到的数据帧中的地址与本机是否相符,如果不符,直接结束,否则对数据帧进行CRC校验。当校验正确的时候就可以根据相应的功能代码调用对应的函数去执行功能操作,否则向主机返回一个错误信息的应答帧。下面给出主机和从机程序中几个重要的子程序设计的关键之处。

3.1定时器T0的初值

RTU模式中,信息开始时和结束时都至少应有3.5个字符的静止间隔时间,这个间隔时间可根据波特率用定时器T0中断来实现。当单片机每收到一个数据时立即检测与上一数据间隔是否大于3.5个字符时间,如大于则说明该帧发送结束,单片机准备接收下一帧。程序用定时器T0来控制和标识图1中1.5字符和3.5字符的时间时隔。对于系统所选择的波特率9600bit/s,则每位传输时间为1/9600s,在程序配置的串口模式1下,发送每字符信息时输出1个起始位、8个数据位及1个停止位,故每字符传输时间为1/9600*10s,又由于中断程序是在接收1个字符后再判断时间间隔,故主程序将1.5字符的帧内字节间隔时间定义为:1/9600*10*(1.5+1)≈2604.2us;3.5字符的帧间隔时间定义为:1/9600*10*(3.5+1)≈4687.5us。在11.0592MHz晶振的作用下,相应的定时器初值分别为2604和4688。

3.2CRC校验

RTU模式中每一消息帧最后2字节是CRC循环冗余校验字节。CRC校验是将整个字符串(不包括最后两个字节)按规定的方式进行位移并进行异或运算,计算结果存于字符串的最后两个字节内。当一帧消息结束后,需要对收到的地址码、功能码、数据段进行CRC校验。倘若校验结果与消息包含的CRC校验码吻合,则表示通信正常,否则直接返回,表示此帧通信存在错误,要求重发此帧。

4.结论

本文设计的数据采集系统,在RS-485串行链路上实现了Modbus协议,覆盖了Modbus协议应用开发中的关键问题,构建了完整的Modbus通信网络,并通过Proteus对整个系统进行仿真调试。调试结果表明,主机能正确地控制从机,并能成功地获取从机采集的设备参数,完全达到设计要求。系统具有可靠性强、传输速度快等特点,能为工业现场的远程测控提供积极参考。

作者:朱志伟 单位:长沙民政职业技术学院电子信息工程学院

上一篇:电力营销配网线损精细化管理探索 下一篇:综合业务管理平台精细化管理论文