PROFIBUS DP總線I/O設(shè)備的開(kāi)發(fā)研究
總線I/O是"現(xiàn)場(chǎng)總線遠(yuǎn)程I/O"的簡(jiǎn)稱(chēng),是基于現(xiàn)場(chǎng)總線控制系統(tǒng)FCS中的主要設(shè)備,PROFIBUS-DP是總線I/O的主流通信協(xié)議。一個(gè)總線I/O設(shè)備可能需要多種總線接口,對(duì)于設(shè)備的開(kāi)發(fā)人員來(lái)講,他們專(zhuān)注于設(shè)備功能單元的核心技術(shù),如果讓他們從頭開(kāi)發(fā)各種通信接口,勢(shì)必會(huì)分散設(shè)備開(kāi)發(fā)人員的精力,增加開(kāi)發(fā)成本和開(kāi)發(fā)周期。
總線I/O的主要功能分為輸入、輸出兩部分。輸入是采集現(xiàn)場(chǎng)模擬信號(hào)(如4~20 mA)和開(kāi)關(guān)量信號(hào)(如24 V DC)轉(zhuǎn)換成為數(shù)字量并按照通信協(xié)議傳送到現(xiàn)場(chǎng)總線。輸出是將現(xiàn)場(chǎng)總線通信數(shù)據(jù)轉(zhuǎn)換成模擬輸出和開(kāi)關(guān)量輸出。PROFIBUS-DP總線I/O設(shè)備以從站的形式存在。
本文介紹如何使用XGate-DPS軟件庫(kù)設(shè)計(jì)設(shè)備軟件。通過(guò)下面的介紹,您可以快速地讓您的設(shè)備具有思想,最終成為一個(gè)功能完整的設(shè)備。
1 XGate-DPS軟件庫(kù)結(jié)構(gòu)
XGate-DPS系列模塊都提供了軟件庫(kù),用戶(hù)使用該軟件庫(kù)可以快速開(kāi)發(fā)出設(shè)備軟件。圖1是該軟件庫(kù)的結(jié)構(gòu)圖,整個(gè)軟件架構(gòu)將XGate-DPS的資源展示給用戶(hù),這些資源包括輸入數(shù)據(jù)、輸出數(shù)據(jù)、用戶(hù)參數(shù)數(shù)據(jù)、配置數(shù)據(jù)、診斷數(shù)據(jù)等等。圖中,灰色背景部分表示需要用戶(hù)編程。軟件庫(kù)針對(duì)8051、ARM平臺(tái)做了硬件相關(guān)的接口驅(qū)動(dòng),一般不需要做任何更改,如果使用新的硬件平臺(tái), 用戶(hù)需要修改UART驅(qū)動(dòng)。
軟件庫(kù)自行完成UART數(shù)據(jù)傳輸控制、命令發(fā)送和接收及相關(guān)分析處理,即圖中的"XGate數(shù)據(jù)處理"部分;在"XGate數(shù)據(jù)處理"的上層,提供了用戶(hù)接口函數(shù)API,用戶(hù)使用這些函數(shù)完成對(duì)XGate-DPS的操作;一些基于事件的操作,如DP-V1的讀寫(xiě)和數(shù)據(jù)傳輸請(qǐng)求,"XGate數(shù)據(jù)處理"將通過(guò)回調(diào)方式獲取應(yīng)答和處理;用戶(hù)應(yīng)用程序APP可以直接訪問(wèn)XGate資源,但是,必須使用API來(lái)更新這些資源。
2 XGate-DPS軟件設(shè)計(jì)步驟
用戶(hù)使用該軟件庫(kù)對(duì)XGate-DPS10的操作其實(shí)就是完成回調(diào)函數(shù)、使用API更新資源、訪問(wèn)資源數(shù)據(jù)。整個(gè)設(shè)計(jì)遵循圖2所示的5個(gè)步驟,每個(gè)步驟需要完成的工作在圖中作了注釋?zhuān)渲?,大多?shù)場(chǎng)合不需要步驟3;在不使用DP-V1的情況下步驟4幾乎也是可以忽略的。
3 總線I/O設(shè)備的GSD文件
GSD文件是設(shè)備描述文件,當(dāng)一個(gè)設(shè)備確定了其功能和參數(shù)后,GSD文件也就確定了。設(shè)備的GSD文件一般是通過(guò)修改示例GSD文件生成,示例GSD文件中的大部分關(guān)鍵字和參數(shù)已經(jīng)確定而不需要修改。本例中修改示例如下:
修改的內(nèi)容一部分是設(shè)備的名稱(chēng)、序列號(hào)等信息,另一部分是設(shè)備組態(tài)數(shù)據(jù)和用戶(hù)參數(shù)數(shù)據(jù)部分。設(shè)備組態(tài)數(shù)據(jù)指示了設(shè)備的輸入輸出大小,決定了通信數(shù)據(jù)結(jié)構(gòu),組態(tài)數(shù)據(jù)的設(shè)置可以查看XGate-DPS10數(shù)據(jù)手冊(cè)的附錄;用戶(hù)參數(shù)數(shù)據(jù)是為了限定或指示設(shè)備數(shù)據(jù)的范圍或意義的,更詳細(xì)的信息請(qǐng)參考《XGate-DPS10數(shù)據(jù)手冊(cè)》。
4 APP設(shè)計(jì)及回調(diào)函數(shù)
軟件庫(kù)提供了demo示例代碼,一個(gè)軟件庫(kù)基礎(chǔ)操作單元如圖3所示。
在使用軟件包前,首先要配置cfg.h頭文件的宏定義,這包括與硬件相關(guān)的寄存器、緩沖區(qū)大小、設(shè)備屬性等的定義。
使用軟件包,用戶(hù)沒(méi)有必要去考慮如何與模塊通信,也不必了解PROFIBUS技術(shù)細(xì)節(jié),只需要關(guān)心設(shè)備功能的實(shí)現(xiàn)及如何組織數(shù)據(jù)。一個(gè)典型的前后臺(tái)用戶(hù)程序框圖如圖4所示。
軟件包中有兩個(gè)非常重要的函數(shù)DataUpdate()和RecvProcess(),調(diào)用這兩個(gè)函數(shù)實(shí)現(xiàn)數(shù)據(jù)的交換。接收到的交換數(shù)據(jù)在sys.Out_data[]數(shù)組中,要發(fā)送的數(shù)據(jù)需要放到sys.In_data[]中。例如:
放到sys數(shù)組中的數(shù)據(jù)順序與GSD文件描述的設(shè)備信息順序是一致的。在本例中,8位開(kāi)關(guān)輸入量在sys.In_data[0]中,而16位(2 B)計(jì)數(shù)器占用sys.In_data[1…2];8位開(kāi)關(guān)輸出在sys.Out_data[0]中。來(lái)自主站的用戶(hù)參數(shù)數(shù)據(jù)放在sys.User_para[]數(shù)組中,用戶(hù)可以根據(jù)這些數(shù)據(jù)的意義設(shè)置設(shè)備相關(guān)功能。
XGate-DPS10支持用戶(hù)診斷,用戶(hù)可以調(diào)用SetDiag_Channel()、SetDiag_Identifier()、SetDiag_Device()等函數(shù)來(lái)完成用戶(hù)診斷的發(fā)送,在發(fā)送這些診斷前,需要將診斷信息賦值到定義好的結(jié)構(gòu)體中,例如:
當(dāng)XGate-DPS收到DP-V1讀寫(xiě)請(qǐng)求,也將產(chǎn)生一個(gè)中斷,軟件庫(kù)將調(diào)用相應(yīng)的回調(diào)函數(shù)。在這些回調(diào)函數(shù)中應(yīng)首先判斷訪問(wèn)的slot_num、index的合法性,基本格式如下:
PROFIBUS-DP從站應(yīng)用廣泛,使用通信接口模塊來(lái)開(kāi)發(fā)總線I/O設(shè)備可以有效地縮短開(kāi)發(fā)周期、節(jié)省成本投入,并在可靠性上得到保障。XGate-DPS10符合大多數(shù)應(yīng)用場(chǎng)合,其高可靠性、方便性、低成本性使其成為開(kāi)發(fā)DP從站設(shè)備的首選。