冗余PROFIBUS DP主站的设计与实现研究
2015-12-16刘国耀沈德明祖利辉丁茂实
刘国耀,沈德明,祖利辉,丁茂实
(1.南京科远自动化集团股份有限公司,南京 211102;2.江苏省热工过程智能控制重点实验室,南京 211102)
PRFIBUS DP广泛应用于过程自动化和设备自动化系统的快速数据交互,其通信速率范围从9.6kbps到12Mbps。在实际应用中,PROFIBUS DP使用量占到PROFIBUS使用量的90%以上[1-2]。随着PROFIBUS现场总线技术越来越多的应用到电厂过程自动化系统中,自主开发相应的PROFIBUS DPV0主站(1类)通信模件并将其集成到DCS系统中,使得DCS系统具备PROFIBUS现场总线功能,成为日益迫切的需求。
本文重点介绍了PROFIBUS DP技术的实现原理,以及协议栈在装有实时操作系统的通用处理器平台上的实现方法,以此为基础构建了PROFIBUS系统冗余型主站。
1 PROFIBUS主站研究现状及总体方案
由于PROFIBUS主站技术复杂、开发难度大,目前国内只有少数几家公司开展了相关的技术研究与开发工作,大部分产品由国外的几家公司垄断[1]。
目前国内对于PROFIBUS主站的实现主要有4种方案[1-2]。
(1)采用第三方嵌入式模块(方案1)。该方法技术难度小,开发测试周期短、成本低,但程序一般固化,用户无法修改代码,而且配置软件无法自行开发,必须要另外购买。
(2)采用专用ASIC芯片(方案2)。随着开发厂家的增多,目前市场上有ASPC2、NETX等芯片供用户开发设计选用。这种方式开发成本比方案1低,但有一定技术难度,需要用户进行软硬件开发工作,并且ASIC和协议栈价格仍然较高。
(3)采用可编程逻辑器件配合 MCU(方案3)。该方案与方案2类似,采用通用可编程逻辑器件替代专用ASIC、与MCU配合实现主站功能。但软硬件实现复杂,开发难度大。
(4)自行开发软件协议栈(方案4)。随着技术的进步,单片机性能和UART速度成倍提升,PROFIBUS主站可以采用软件实现。该方案具有硬件成本低的优点,但是软件开发难度大,对开发人员要求高,需要同步开发配置软件,开发和测试周期长。
目前,对于PROFIBUS DP系统冗余(SR)主站的研究还比较少。文献[4-6]中的方法实现了主站的设备级冗余,但是并未实现DP系统冗余规范所要求的系统冗余要求。
综合考虑四个方案的优缺点,采用方案4。基于实时操作系统软件方式实现DP-V0主站(1类)功能,硬件采用高性能的MCU芯片加上双路RS485标准外围电路平台。通过嵌入式软件实现PROFIBUS DP主站及系统冗余功能[3-5]。
2 PROFIBUS DP主站设计
2.1 硬件设计
软件协议栈方案简化了对硬件的要求,PROFIBUS DP主站硬件设计方案如图1所示。
图1 PROFIBUS DP主站硬件原理图
处理器选用工业级freescale K60系列MCU芯片,该MCU采用Cortex-M4作为核心,主频高达100MHz,外围设备丰富,自带的UART最高波特率支持6.25Mbps,使用两路UART和接口电路相连。接口电路采用ISO1176芯片+内置终端电阻+磁隔离的方式。接口芯片ISO1176是为PROFIBUS应用而设计的高性能收发器,最高波特率支持40Mbps。将K60的硬件流控引脚和ISO1176的相应引脚相连,实现硬件流控。通过高速总线和DCS系统相连,从而实现了DCS系统和外部PROFIBUS DP系统冗余从站的高速数据通道。
2.2 PROFIBUS DP主站协议栈设计与实现
2.2.1 总体功能
PROFIBUS DP主站协议栈实现1类主站与从站周期性数据交互的功能,总体结构图如图2所示。
图2 协议栈总体功能
FDL层又可分为FDL层及设备驱动层。设备驱动层负责硬件相关的操作,实现对硬件的配置和基本操作,产生驱动事件。通过驱动事件触发FDL层状态机的运行。FDL层负责实现协议规定的11个状态机,实现报文校验,令牌轮转等功能。FDL层通过其接口函数接受DDLM层的请求报文,接口函数通过链表的方式在FDL层和DDLM层之间传递数据。
DDLM层实现协议对规定强制性数据传输功能:从站诊断、参数、配置、数据交互、全局控制等。
用户调度层主要负责从站的管理,周期性地访问从站结构体,刷新从站状态,实现从站几个状态的轮转。
API层负责对从站的配置和缓存区管理,提供的功能有:配置、IO缓存区读写、诊断缓存区读取。用户可以通过API层函数提供的配置接口对从站进行配置。
2.2.2 软件实现方法
根据总体功能将主站协议栈分为两个模块:FDL模块和应用模块。FDL模块负责FDL层的实现,其余部分由应用模块负责。两个模块之间通过信号量和缓存区交互数据。设备驱动层功能简单,只负责发送和接收原始报文操作。在系统上电后,系统初始化任务首先初始化硬件,然后发起其他任务。为了提高响应速度,实时操作系统采用基于优先级的调度策略,任务切换时间小于10μs。
(1)FDL模块采用一个高优先级任务实现,根据协议规范进行状态轮转。上层软件通过收发接口对其进行调用。执行流程如图3所示。任务中状态机的执行流程与协议一致,在Use_Token状态中读取高优先级报文缓存区,如果为空,则读取低优先级报文缓存区,读成功后进行发送,然后再按照协议进入相应的状态。Await_Data_Renponse状态中收到报文后将报文写入应答缓存区并发送相应的信号量。
图3 FDL任务流程图
(2)应用模块主要通过appreq(请求)、appcon(应答)两个任务和配置,IO刷新函数等实现,为保证FDL任务发送报文的实时性,其优先级低于FDL任务。流程图如图4所示。
图4 应用任务流程图
按照请求和应答的类型将DDLM层中功能分成请求和应答两组类型分别实现。对DDLM层接口进行封装,实现从站诊断、参数化、配置、二次诊断、数据交互等状态函数,并将这几个函数地址赋值给指向函数的指针数组slave_handler_req和slave_handler_con;再通过从站结构体中从站状态和相应的函数指针配合使用,实现状态轮转。
先由Appreq任务等待con完成信号量(初始化时由初始化任务释放),收到信号量后检查配置状态,如果当前需要配置或正在配置则进入临界状态等待配置完成。如果当前scheduler状态为operate,则依次调用每个从站的函数结构体及相应的slave_handler_req函数指针,所有从站处理完成后等待应答任务完成对周期报文的处理,然后开始下一轮循环。
3 系统冗余(SR)模块的设计与实现
3.1 软件设计
国际PI组织并未提供DP主站冗余功能的相关规范,但是对于冗余从站是有相关冗余规范的[1]。冗余规范中提到系统冗余(System Redundancy,SR)和飞跃型冗余(Flying Redundancy,FR)两种冗余方式。系统冗余(SR)是目前主流的从站冗余方式,因此也是本主站支持的冗余方式。
根据规约可知,主站通过参数化(PrmCommand)命令通知从站,从站在发现满足切换条件时,自己决定是否进行主备端口的切换,从站每次冗余状态的改变均通过冗余状态(Red_state)诊断来通知主站。主站通过TMTO时间监视从站数据的有效性,从站通过TOH时间监视主站活动。根据规约中描述设计主站系统冗余模块如图5所示。
图5 主站系统冗余模块
3.2 软件流程
在正常建立连接后,冗余模块首先通过两个DP协议栈扫描冗余从站主用端口和备用端口的通信状态。如果从站主用端口通信失败并且备用端口通信正常,此时冗余模块调用接口函数切换备用端口状态到参数化,并向备用端口发送参数化(PrmCommand)命令。之后冗余模块等待参数命令应答报文(PrmCommandAck),如果在TMTO时间内收到并且报文指示从站端口已经成功切换到主用状态,则将备用端口标记为主用,并将其该端口IO数据标志置为有效,本次切换完成。
如果TMTO时间内没有收到或从站回复报文指示该端口仍然是备用状态,则检查切换前主用端口的状态,如果该端口重新建立正常连接则将其数据标记为有效并退出处理过程;如果之前的主用端口仍然故障则等待TOH时间后再次切换备用端口状态到参数化,并向备用端口发送参数化命令,如果等待TOH的过程中收到从站状态切换为主用的诊断(Red_State)则标记备用端口为主用,数据区位有效,此次处理完成。
4 结束
本文在研究PROFIBUS DPV0协议和PROFIBUS从站冗余协议的基础上,采用高性能K60芯片和实时操作系统,提出了冗余主站设计方案并进行了相应实现。测试结果表明其能够在9.6 kbps~6Mbps波特率下稳定工作,满足工业现场应用要求。
[1] 满庆丰,陈宇翔,夏继强.Linux和S3C2410的PROFIBUS-DP主站平台设计[J].单片机与嵌入式系统应用,2011(5):14-17.MAN Qing-feng,CHEN Yu-xiang,XIA Ju-qiang.PROFIBUS-DP host station based on Linux and S3C2410[J].Microcontrollers & Embedded Systems,2011(5):14-17.
[2] 许英杰.PROFIBUS-DP主站开发与应用研究[D].南京:南京理工大学,2010.
[3] 李哲毓,崔逸群.冗余Profibus-DP通信协议主站卡的设计与实现[J].自动化与仪表,2011(3):34-37.LI Zhe-yu,CUI Yi-qun.Design and implementation of redundant Profibus-DP communication master card[J].Automation &Instrumentation,2011(3):34-37.
[4] 胡明华,蒋济友,夏继强,等.基于VxWorks+ARM9的PROFIBUS-DP冗余主站的设计[J].自动化与仪器仪表,2012(4):44-45,48.HU Ming-hua,JIANG Ji-you,XIA Ju-qiang,et al.Design of PROFIBUS-DP redundant master station based on VxWorks+ARM9[J].Automation &Instrumentation,2012(4):44-45,48.
[5] 李乐义,史洪源,杜军钊.基于CPLD的Profibus-DP冗余双网切换逻辑的设计[J].测控技术,2011(2):83-85.LI Yue-yi,SHI Hong-yuan,DU Jun-zhao.Design of Profibus-DP Dual redundant network switch based on CPLD[J].Measurement & Control Technology,2011(2):83-85.