劉國耀,沈德明,祖利輝,丁茂實
(1.南京科遠自動化集團股份有限公司,南京 211102;2.江蘇省熱工過程智能控制重點實驗室,南京 211102)
PRFIBUS DP廣泛應(yīng)用于過程自動化和設(shè)備自動化系統(tǒng)的快速數(shù)據(jù)交互,其通信速率范圍從9.6kbps到12Mbps。在實際應(yīng)用中,PROFIBUS DP使用量占到PROFIBUS使用量的90%以上[1-2]。隨著PROFIBUS現(xiàn)場總線技術(shù)越來越多的應(yīng)用到電廠過程自動化系統(tǒng)中,自主開發(fā)相應(yīng)的PROFIBUS DPV0主站(1類)通信模件并將其集成到DCS系統(tǒng)中,使得DCS系統(tǒng)具備PROFIBUS現(xiàn)場總線功能,成為日益迫切的需求。
本文重點介紹了PROFIBUS DP技術(shù)的實現(xiàn)原理,以及協(xié)議棧在裝有實時操作系統(tǒng)的通用處理器平臺上的實現(xiàn)方法,以此為基礎(chǔ)構(gòu)建了PROFIBUS系統(tǒng)冗余型主站。
由于PROFIBUS主站技術(shù)復(fù)雜、開發(fā)難度大,目前國內(nèi)只有少數(shù)幾家公司開展了相關(guān)的技術(shù)研究與開發(fā)工作,大部分產(chǎn)品由國外的幾家公司壟斷[1]。
目前國內(nèi)對于PROFIBUS主站的實現(xiàn)主要有4種方案[1-2]。
(1)采用第三方嵌入式模塊(方案1)。該方法技術(shù)難度小,開發(fā)測試周期短、成本低,但程序一般固化,用戶無法修改代碼,而且配置軟件無法自行開發(fā),必須要另外購買。
(2)采用專用ASIC芯片(方案2)。隨著開發(fā)廠家的增多,目前市場上有ASPC2、NETX等芯片供用戶開發(fā)設(shè)計選用。這種方式開發(fā)成本比方案1低,但有一定技術(shù)難度,需要用戶進行軟硬件開發(fā)工作,并且ASIC和協(xié)議棧價格仍然較高。
(3)采用可編程邏輯器件配合 MCU(方案3)。該方案與方案2類似,采用通用可編程邏輯器件替代專用ASIC、與MCU配合實現(xiàn)主站功能。但軟硬件實現(xiàn)復(fù)雜,開發(fā)難度大。
(4)自行開發(fā)軟件協(xié)議棧(方案4)。隨著技術(shù)的進步,單片機性能和UART速度成倍提升,PROFIBUS主站可以采用軟件實現(xiàn)。該方案具有硬件成本低的優(yōu)點,但是軟件開發(fā)難度大,對開發(fā)人員要求高,需要同步開發(fā)配置軟件,開發(fā)和測試周期長。
目前,對于PROFIBUS DP系統(tǒng)冗余(SR)主站的研究還比較少。文獻[4-6]中的方法實現(xiàn)了主站的設(shè)備級冗余,但是并未實現(xiàn)DP系統(tǒng)冗余規(guī)范所要求的系統(tǒng)冗余要求。
綜合考慮四個方案的優(yōu)缺點,采用方案4?;趯崟r操作系統(tǒng)軟件方式實現(xiàn)DP-V0主站(1類)功能,硬件采用高性能的MCU芯片加上雙路RS485標(biāo)準(zhǔn)外圍電路平臺。通過嵌入式軟件實現(xiàn)PROFIBUS DP主站及系統(tǒng)冗余功能[3-5]。
軟件協(xié)議棧方案簡化了對硬件的要求,PROFIBUS DP主站硬件設(shè)計方案如圖1所示。
圖1 PROFIBUS DP主站硬件原理圖
處理器選用工業(yè)級freescale K60系列MCU芯片,該MCU采用Cortex-M4作為核心,主頻高達100MHz,外圍設(shè)備豐富,自帶的UART最高波特率支持6.25Mbps,使用兩路UART和接口電路相連。接口電路采用ISO1176芯片+內(nèi)置終端電阻+磁隔離的方式。接口芯片ISO1176是為PROFIBUS應(yīng)用而設(shè)計的高性能收發(fā)器,最高波特率支持40Mbps。將K60的硬件流控引腳和ISO1176的相應(yīng)引腳相連,實現(xiàn)硬件流控。通過高速總線和DCS系統(tǒng)相連,從而實現(xiàn)了DCS系統(tǒng)和外部PROFIBUS DP系統(tǒng)冗余從站的高速數(shù)據(jù)通道。
2.2.1 總體功能
PROFIBUS DP主站協(xié)議棧實現(xiàn)1類主站與從站周期性數(shù)據(jù)交互的功能,總體結(jié)構(gòu)圖如圖2所示。
圖2 協(xié)議棧總體功能
FDL層又可分為FDL層及設(shè)備驅(qū)動層。設(shè)備驅(qū)動層負責(zé)硬件相關(guān)的操作,實現(xiàn)對硬件的配置和基本操作,產(chǎn)生驅(qū)動事件。通過驅(qū)動事件觸發(fā)FDL層狀態(tài)機的運行。FDL層負責(zé)實現(xiàn)協(xié)議規(guī)定的11個狀態(tài)機,實現(xiàn)報文校驗,令牌輪轉(zhuǎn)等功能。FDL層通過其接口函數(shù)接受DDLM層的請求報文,接口函數(shù)通過鏈表的方式在FDL層和DDLM層之間傳遞數(shù)據(jù)。
DDLM層實現(xiàn)協(xié)議對規(guī)定強制性數(shù)據(jù)傳輸功能:從站診斷、參數(shù)、配置、數(shù)據(jù)交互、全局控制等。
用戶調(diào)度層主要負責(zé)從站的管理,周期性地訪問從站結(jié)構(gòu)體,刷新從站狀態(tài),實現(xiàn)從站幾個狀態(tài)的輪轉(zhuǎn)。
API層負責(zé)對從站的配置和緩存區(qū)管理,提供的功能有:配置、IO緩存區(qū)讀寫、診斷緩存區(qū)讀取。用戶可以通過API層函數(shù)提供的配置接口對從站進行配置。
2.2.2 軟件實現(xiàn)方法
根據(jù)總體功能將主站協(xié)議棧分為兩個模塊:FDL模塊和應(yīng)用模塊。FDL模塊負責(zé)FDL層的實現(xiàn),其余部分由應(yīng)用模塊負責(zé)。兩個模塊之間通過信號量和緩存區(qū)交互數(shù)據(jù)。設(shè)備驅(qū)動層功能簡單,只負責(zé)發(fā)送和接收原始報文操作。在系統(tǒng)上電后,系統(tǒng)初始化任務(wù)首先初始化硬件,然后發(fā)起其他任務(wù)。為了提高響應(yīng)速度,實時操作系統(tǒng)采用基于優(yōu)先級的調(diào)度策略,任務(wù)切換時間小于10μs。
(1)FDL模塊采用一個高優(yōu)先級任務(wù)實現(xiàn),根據(jù)協(xié)議規(guī)范進行狀態(tài)輪轉(zhuǎn)。上層軟件通過收發(fā)接口對其進行調(diào)用。執(zhí)行流程如圖3所示。任務(wù)中狀態(tài)機的執(zhí)行流程與協(xié)議一致,在Use_Token狀態(tài)中讀取高優(yōu)先級報文緩存區(qū),如果為空,則讀取低優(yōu)先級報文緩存區(qū),讀成功后進行發(fā)送,然后再按照協(xié)議進入相應(yīng)的狀態(tài)。Await_Data_Renponse狀態(tài)中收到報文后將報文寫入應(yīng)答緩存區(qū)并發(fā)送相應(yīng)的信號量。
圖3 FDL任務(wù)流程圖
(2)應(yīng)用模塊主要通過appreq(請求)、appcon(應(yīng)答)兩個任務(wù)和配置,IO刷新函數(shù)等實現(xiàn),為保證FDL任務(wù)發(fā)送報文的實時性,其優(yōu)先級低于FDL任務(wù)。流程圖如圖4所示。
圖4 應(yīng)用任務(wù)流程圖
按照請求和應(yīng)答的類型將DDLM層中功能分成請求和應(yīng)答兩組類型分別實現(xiàn)。對DDLM層接口進行封裝,實現(xiàn)從站診斷、參數(shù)化、配置、二次診斷、數(shù)據(jù)交互等狀態(tài)函數(shù),并將這幾個函數(shù)地址賦值給指向函數(shù)的指針數(shù)組slave_handler_req和slave_handler_con;再通過從站結(jié)構(gòu)體中從站狀態(tài)和相應(yīng)的函數(shù)指針配合使用,實現(xiàn)狀態(tài)輪轉(zhuǎn)。
先由Appreq任務(wù)等待con完成信號量(初始化時由初始化任務(wù)釋放),收到信號量后檢查配置狀態(tài),如果當(dāng)前需要配置或正在配置則進入臨界狀態(tài)等待配置完成。如果當(dāng)前scheduler狀態(tài)為operate,則依次調(diào)用每個從站的函數(shù)結(jié)構(gòu)體及相應(yīng)的slave_handler_req函數(shù)指針,所有從站處理完成后等待應(yīng)答任務(wù)完成對周期報文的處理,然后開始下一輪循環(huán)。
國際PI組織并未提供DP主站冗余功能的相關(guān)規(guī)范,但是對于冗余從站是有相關(guān)冗余規(guī)范的[1]。冗余規(guī)范中提到系統(tǒng)冗余(System Redundancy,SR)和飛躍型冗余(Flying Redundancy,F(xiàn)R)兩種冗余方式。系統(tǒng)冗余(SR)是目前主流的從站冗余方式,因此也是本主站支持的冗余方式。
根據(jù)規(guī)約可知,主站通過參數(shù)化(PrmCommand)命令通知從站,從站在發(fā)現(xiàn)滿足切換條件時,自己決定是否進行主備端口的切換,從站每次冗余狀態(tài)的改變均通過冗余狀態(tài)(Red_state)診斷來通知主站。主站通過TMTO時間監(jiān)視從站數(shù)據(jù)的有效性,從站通過TOH時間監(jiān)視主站活動。根據(jù)規(guī)約中描述設(shè)計主站系統(tǒng)冗余模塊如圖5所示。
圖5 主站系統(tǒng)冗余模塊
在正常建立連接后,冗余模塊首先通過兩個DP協(xié)議棧掃描冗余從站主用端口和備用端口的通信狀態(tài)。如果從站主用端口通信失敗并且備用端口通信正常,此時冗余模塊調(diào)用接口函數(shù)切換備用端口狀態(tài)到參數(shù)化,并向備用端口發(fā)送參數(shù)化(PrmCommand)命令。之后冗余模塊等待參數(shù)命令應(yīng)答報文(PrmCommandAck),如果在TMTO時間內(nèi)收到并且報文指示從站端口已經(jīng)成功切換到主用狀態(tài),則將備用端口標(biāo)記為主用,并將其該端口IO數(shù)據(jù)標(biāo)志置為有效,本次切換完成。
如果TMTO時間內(nèi)沒有收到或從站回復(fù)報文指示該端口仍然是備用狀態(tài),則檢查切換前主用端口的狀態(tài),如果該端口重新建立正常連接則將其數(shù)據(jù)標(biāo)記為有效并退出處理過程;如果之前的主用端口仍然故障則等待TOH時間后再次切換備用端口狀態(tài)到參數(shù)化,并向備用端口發(fā)送參數(shù)化命令,如果等待TOH的過程中收到從站狀態(tài)切換為主用的診斷(Red_State)則標(biāo)記備用端口為主用,數(shù)據(jù)區(qū)位有效,此次處理完成。
本文在研究PROFIBUS DPV0協(xié)議和PROFIBUS從站冗余協(xié)議的基礎(chǔ)上,采用高性能K60芯片和實時操作系統(tǒng),提出了冗余主站設(shè)計方案并進行了相應(yīng)實現(xiàn)。測試結(jié)果表明其能夠在9.6 kbps~6Mbps波特率下穩(wěn)定工作,滿足工業(yè)現(xiàn)場應(yīng)用要求。
[1] 滿慶豐,陳宇翔,夏繼強.Linux和S3C2410的PROFIBUS-DP主站平臺設(shè)計[J].單片機與嵌入式系統(tǒng)應(yīng)用,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主站開發(fā)與應(yīng)用研究[D].南京:南京理工大學(xué),2010.
[3] 李哲毓,崔逸群.冗余Profibus-DP通信協(xié)議主站卡的設(shè)計與實現(xiàn)[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冗余主站的設(shè)計[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冗余雙網(wǎng)切換邏輯的設(shè)計[J].測控技術(shù),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.