劉國耀,沈德明,祖利輝,丁茂實
(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系統冗余型主站。
由于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]。
軟件協議棧方案簡化了對硬件的要求,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.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函數指針,所有從站處理完成后等待應答任務完成對周期報文的處理,然后開始下一輪循環。
國際PI組織并未提供DP主站冗余功能的相關規范,但是對于冗余從站是有相關冗余規范的[1]。冗余規范中提到系統冗余(System Redundancy,SR)和飛躍型冗余(Flying Redundancy,FR)兩種冗余方式。系統冗余(SR)是目前主流的從站冗余方式,因此也是本主站支持的冗余方式。
根據規約可知,主站通過參數化(PrmCommand)命令通知從站,從站在發現滿足切換條件時,自己決定是否進行主備端口的切換,從站每次冗余狀態的改變均通過冗余狀態(Red_state)診斷來通知主站。主站通過TMTO時間監視從站數據的有效性,從站通過TOH時間監視主站活動。根據規約中描述設計主站系統冗余模塊如圖5所示。

圖5 主站系統冗余模塊
在正常建立連接后,冗余模塊首先通過兩個DP協議棧掃描冗余從站主用端口和備用端口的通信狀態。如果從站主用端口通信失敗并且備用端口通信正常,此時冗余模塊調用接口函數切換備用端口狀態到參數化,并向備用端口發送參數化(PrmCommand)命令。之后冗余模塊等待參數命令應答報文(PrmCommandAck),如果在TMTO時間內收到并且報文指示從站端口已經成功切換到主用狀態,則將備用端口標記為主用,并將其該端口IO數據標志置為有效,本次切換完成。
如果TMTO時間內沒有收到或從站回復報文指示該端口仍然是備用狀態,則檢查切換前主用端口的狀態,如果該端口重新建立正常連接則將其數據標記為有效并退出處理過程;如果之前的主用端口仍然故障則等待TOH時間后再次切換備用端口狀態到參數化,并向備用端口發送參數化命令,如果等待TOH的過程中收到從站狀態切換為主用的診斷(Red_State)則標記備用端口為主用,數據區位有效,此次處理完成。
本文在研究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.