网络/协议
摘要:该文详细论述了基于Modbus协议的RS485总线通讯机设计原理及应用。物理结构上包括上位机、主站、和多个从站节点。在上位机与各从站节点间增加主站,承担上位机的轮询工作,使上位机从繁忙的通信工作中解放出来,并能够提高系统独立性,加快系统从故障中恢复的速度。软件方面基于Modbus协议,并且添加CRC校验,从而有效地提高了系统的可靠性、安全性。本设计已成功应用于某监狱门禁控制系统。
现场总线被誉为自动化领域的计算机局域网。在总线种类多样化的今天,Modbus技术以其先进性、开放性、成熟性使得基于Modbus串行链路通信的设备得到了广泛的使用,Modbus通信有3种方式:串行链路、TCP/IP和ModbusPLUS。本文的研究对象是基于串行链路主从式通信结构的设备。在这种总线网络中,系统间的通信一般采取上位机轮询各节点的方式,即上位机对各节点不间断地进行轮询,当轮询到某节点时,上位机与此节点在一定时间间隔内互相交换信息。但是当节点数目众多时,出于系统响应及时性的要求,上位机对各节点轮询的时间间隔需要尽可能短,而这样,轮询工作将会给上位机造成沉重的负担,占用其较多的CPU资源,使得上位机不能专注于完成数据处理,同时导致系统的可靠性与安全性降低。
基于此原因,本文提出一种针对串行链路的新方法,在上位机与各节点之间增加一个通讯机(为不至于和各节点混淆,本文称其为主站),并给出了基于此主站的上位PC机与各节点(该系统称各节点为从站)的通信流程以及此主站的主程序流程。
系统硬件环境主要包括以下几个模块:上位机、主站、从站。对于串行链路的Modbus系统,其物理接口可以选用RS232或RS485。最常用的接口是RS485两线制接口。本系统中的上位机采用PC机,其物理接口为RS232接口,而主站的物理接口为RS485接口。所以PC机不能直接连接RS485接口,必须在主站与PC机间进行RS232与RS485转换。通过RS232/RS485转换电路将PC机串口RS232信号转换成RS485信号。
图1硬件框图
综上所述,主站和从站硬件的总体设计如图1所示,主站与上位机的通信采用RS232的方式,主站与各节点间的通信采用RS485的方式。从站把来不及传到PC机的数据暂时放到FLASN存储区中。从站和FLASH存储器间通过SPI通讯。
Modbus串行链路协议是一个主站-从站协议,Modbus应用层报文传输协议提供了总线或网络上连接的设备之间的客户机/服务器通信。在Modbus串行链路上,主节点提供客户机的功能,而子节点则作为服务器。由于Modbus协议具有帧格式结构、传输方式、功能及内容简单、传输效率高等优点,近年来在控制系统中得到了广泛的应用。本论文所涉及的Modbus协议,是在采用串行链路的RTU模式标准协议的基础上,结合实际应用,扩展了其帧格式结构和范围。
主机传输的命令报文如下:
ADOD0D1…DXCRC1CRC2
说明:
ADO:目标地址,即站点地址(或称网络设备地址)。
D0-DX:报文内容,X最大为255,(不含CRC1,CRC2)
CRC1,CRC2:CRC校验结果。Modbus-RTU协议采用CRC-16(16位循环冗余校验码)校验方法,包含16位二进制。CRC校验码由发送端计算,放置于发送信息的尾部。接收端重新计算接收到的信息的校验码,并与接收到的校验码相比较,如果二者不相符,则表明通讯出错。
首先PC机每隔一段时间扫描主站一次,若通讯无异常主站向PC机发送应答码;同理主站空闲时,也是每隔一段时间依次扫描从站,若通讯无异常从站向主站发送应答码。而且主站通过优先级优先接收PC机发送的报文,这样可以防止PC机和从站数据包的混乱。主站传递PC机发向站点的通讯命令报文或者主站发送扫描报文,站点接收到命令报文信息后,首先判断目标地址代码,若目标地址与本站点地址不一致则站点回到中断以前状态,若地址一致则继续判断命令代码,根据命令代码进行相应的操作。通讯过程详细介绍如下。
2.2.1主站扫描从站
主站首先向目标从站发送扫描码,从站接收到扫描码后向主站回发应答码,主站接收到从站的应答码后即完成对一目标从站的扫描。主站通过依次扫描所有目标从站来维持整个通讯系统的正常运行。
主站-->从站扫描码
从站-->主站应答码
注:PC机扫描主站于此相同。
2.2.2主站向目标从站下传数据
主站在扫描任一目标从站前会检查数据下传缓冲区。若有待传送数据报,则会将前一条报文发送出去,从站接收到报文后向主站发送应答码,主站接收到应答码后完成数据报文的传送。
主站-->从站数据
从站-->主站应答码
2.2.3从站向主站上传数据
从站向主站的数据传送是被动的。从站在接收到主站的扫描码后会检查上传缓冲区,若有数据报要发送,则会将数据报上传给主站,主站在接收到数据报后继续发送确认码给该从站。
主站-->从站扫描
从站-->主站数据
主站-->从站确认码
从站-->主站应答码
2.2.4通讯异常检测
主站向某一从站发送报文(扫描码或数据报文)后会侦听从站的响应,若在规定的时间内接收到了从站的报文(应答码或数据报文),则认为对该站的通讯是正常的;若在规定的时间段内没有接收到该从站到正常响应报文,主站会重新发送同一条报文,若连续3次发送都没有接收到从站的正常响应报文,就认为主站同该从站的通讯发生了异常。
2.2.5广播报文
主站可以向所有从站发送广播报文,广播报文的目的地址为0xf5。从站接收到广播报文后不能向主站发送应答码或数据报。
2.2.6获取从站状态信息
从站在检测到状态改变时会记录状态改变信息,在主站扫描到从站时将状态改变信息上传到主站,主战将报文添加到转发报文缓冲区等待传送到上位机,上位机接收后向主站发送确认码,主站收到确认码后转发到从站。
主站在系统启动时会向所有从站发送状态请求广播报文,从站收到状态请求广播报文后准备状态信息报文,在主站扫描到从站时将状态信息报文上传到主站。
2.2.7时间同步
主站在系统启动时会向所有从站发送时间同步广播报文,从站在收到时间同步广播报文后根据设置报文内容调整时钟。
从站在上电运行后准备请求时间同步报文,在主站扫描到从站时将报文上传到主站,主站接收到请求时间同步报文后,即刻将本地时间以时间同步报文的形式发送到请求从站,从站接收到时间同步报文后,根据报文内容调整时钟。
2.2.8上位机发送数据到从站
PC-->主站数据包
若主站扫描状态恰好为等待数据回应,则将数据暂时放到扫描发送缓存区,并等待数据发送完毕;否则向PC回应主站忙。
主站-->从站数据包
从站-->主站确认码
若收到应答码,向PC回应发送成功,否则回应发送失败
主站-->PC确认码
下一PC数据
下一数据-->主站
或完成码-->主站
完成码-->从站
2.2.9从站提交数据到上位机
主站扫描子站时,子站将数据包发送到主站,主站转发到上位机,上位机收到后发送数据收到确认包到主站,主站收到确认包后转发到从站。从站未收到确认包,不会进行其他数据的上传。在规定时间内未收到确认包认为数据传送失败。
主站-->从站扫描码
从站-->主站数据
主站-->PCFLASH存储器中数据
PC-->主站确认码(放入FLASH存储器)
主站-->从站确认码
从站-->主站应答码
主站主要完成2个功能:对各节点进行扫描以获取并保存各节点的通信状态;对上位机与各从站之间的报文进行可靠转发。软件流程如图2所示,系统上电后,首先进行初始化操作,主要包括设置串口、定时器,开启开门狗,配置芯片引脚等内容。
系统初始化成功后,主站向上位机请求从站配置信息,主要包括从站数量、各从站的地址、各从站配置情况即从站为启用还是闲置状态。
从站配置信息请求成功后,主站开始对各从站进行扫描,并对扫描中产生的从站报文进行处理。每扫描完一个从站,主站都会去查看有无来自上位机的报文,并对报文进行适当处理。当经过一定时间间隔后主站再去扫描下一个从站。
其中,在来自上位机的报文中,有的报文是需要转发给某个从站的,在扫描期间来自从站的报文中,有的也是需要转发给上位机的。只有合理设计转发协议,才能既保证报文的可靠传输,又不致于使系统实时性明显变差或产生网络堵塞。本系统将来自上位机的报文分为3类:第1类是上位机直接传给主站的,主站收到这类报文,进行简单回复,这次通信完成;第2类是上位机发给某个从站并且需要得到从站回复信息的,这时候需要主站将报文转发给此从站,并将此从站的回复信息再转发给上位机;第3类是上位机发给某从站但不需要回复的,这时主站将报文传给此从站,但不需要等待从站的回复信息,这次通信完成。同理,在扫描过程中,对从站产生的报文的处理也分为类似3种,具体处理过程如图2所示。
图2主程序流程图
本控制系统的设计中,由于主站的使用,一方面,上位机不再承担对众多从站的轮询工作,使其拥有了更多的CPU资源进行快速响应、处理人机交互与日志存储等事件,顺畅完成众多动画的播放,提高了系统的事件处理与响应能力;另一方面,在传统的主从式RS485通信网络中,当某根通信线由于意外或者人为原因造成短接或断路后,可能导致整个通信网络瘫痪,主站的使用,使得原本连接在同一网络上的上百个从站分成几个相对独立的网络,当某一网络发生故障时,将不会对其他网络的通信造成影响。同时,由于主站可以脱离上位机单独对各从站进行扫描并实时获取各从站的当前状态,如果上位机需要从某种故障中恢复并进行重新启动,它可以直接从主站中快速获取整个系统中所有从站的当前状态,主站还可以根据扫描从站数的多少,自动调整扫描时间间隔,在保证系统响应的前提下降低通信故障率,提高系统可靠性与安全性。
本文详细论述了基于Modbus协议的RS485总线通讯机设计原理。虽然此主站的增加会使系统成本稍有上升,但它不仅可以使上位机从繁忙的通信工作中解放出来,更好地完成人机交互、数据处理、动画播放等任务,而且还能够提高系统独立性,加快系统从故障中恢复的速度,有效地提高系统的可靠性、安全性。本设计已成功应用于某监狱门禁控制系统,实践证明该系统运行稳定、故障率低、操作方便、安全可靠
全部0条评论
快来发表一下你的评论吧 !