如果說硬件是設備的軀體,那么軟件則是設備的靈魂。上期文章中詳細介紹了基于XGate-DPS10的總線I/O設備硬件設計,至此,已構建了一個完整的設備軀體。但是,這個設備還不能正常運行,因為它還沒有靈魂,不知道自己該做什么,怎么做。本期文章將介紹如何使用XGate-DPS軟件庫設計設備軟件,通過下面的介紹,您可以快速地讓您的設備具有思想,最終成為一個功能完整的設備。
1 XGate-DPS軟件庫結構
XGate-DPS系列模塊都提供了軟件庫,用戶使用該軟件庫可以快速開發(fā)出設備軟件。圖 1是該軟件庫的結構圖,整個軟件架構將XGate-DPS的資源展示給用戶,這些資源包括輸入數(shù)據(jù)、輸出數(shù)據(jù)、用戶參數(shù)數(shù)據(jù)、配置數(shù)據(jù)、診斷數(shù)據(jù)等等。圖中,灰色背景部分表示需要用戶編程。軟件庫針對8051、ARM平臺做了硬件相關的接口驅動,一般不需要做任何更改,如果使用新的硬件平臺, 用戶需要修改UART驅動。
軟件庫自行完成UART數(shù)據(jù)傳輸控制、命令發(fā)送和接收及相關分析處理,即圖中的“XGate數(shù)據(jù)處理”部分;在“XGate數(shù)據(jù)處理”的上層,提供了用戶接口函數(shù)API,用戶使用這些函數(shù)完成對XGate-DPS的操作;一些基于事件的操作,如DP-V1的讀寫和數(shù)據(jù)傳輸請求,“XGate數(shù)據(jù)處理”將通過回調方式獲取應答和處理;用戶應用程序APP可以直接訪問XGate資源,但是,必須使用API來更新這些資源。
2 XGate-DPS軟件設計步驟
用戶使用該軟件庫對XGate-DPS10的操作其實就是完成回調函數(shù)、使用API更新資源、訪問資源數(shù)據(jù)。整個設計遵循圖2所示的5個步驟,每個步驟需要完成的工作在圖中作了注釋,其中,大多數(shù)場合不需要步驟3;在不使用DP-V1的情況下步驟4幾乎也是可以忽略的。
3 總線I/O設備的GSD文件
GSD文件是設備描述文件,當一個設備確定了其功能和參數(shù)后,GSD文件也就確定了。設備的GSD文件一般是通過修改示例GSD文件生成,示例GSD文件中的大部分關鍵字和參數(shù)已經(jīng)確定而不需要修改。本例中修改示例如下:
Vendor_Name="ZY Ltd. Co.";//公司名,用戶自行修改
Model_Name="總線I/O";//設備名稱,也是組態(tài)時該產品的名稱
OrderNumber="I/O20100801";//產品序列號,可按用戶名修改
Module= "DO8 LEDs" 0x20;//模塊描述,組態(tài)數(shù)據(jù)0x20
表示1個字節(jié)輸出,對應了8位輸出開關量
1
Ext_Module_Prm_Data_Len=1
Ext_User_Prm_Data_Ref(0)=2
EndModule
……
修改的內容一部分是設備的名稱、序列號等信息,另一部分是設備組態(tài)數(shù)據(jù)和用戶參數(shù)數(shù)據(jù)部分。設備組態(tài)數(shù)據(jù)指示了設備的輸入輸出大小,決定了通信數(shù)據(jù)結構,組態(tài)數(shù)據(jù)的設置可以查看XGate-DPS10數(shù)據(jù)手冊的附錄;用戶參數(shù)數(shù)據(jù)是為了限定或指示設備數(shù)據(jù)的范圍或意義的,更詳細的信息請參考《XGate-DPS10數(shù)據(jù)手冊》。
4 APP設計及回調函數(shù)
軟件庫提供了demo示例代碼,一個軟件庫基礎操作單元如圖3所示。
在使用軟件包前,首先要配置cfg.h頭文件的宏定義,這包括與硬件相關的寄存器、緩沖區(qū)大小、設備屬性等的定義。
使用軟件包,用戶沒有必要去考慮如何與模塊通信,也不必了解PROFIBUS技術細節(jié),只需要關心設備功能的實現(xiàn)及如何組織數(shù)據(jù)。一個典型的前后臺用戶程序框圖如圖4所示。
軟件包中有兩個非常重要的函數(shù)DataUpdate()和RecvProcess(),調用這兩個函數(shù)實現(xiàn)數(shù)據(jù)的交換。接收到的交換數(shù)據(jù)在sys.Out_data[]數(shù)組中,要發(fā)送的數(shù)據(jù)需要放到sys.In_data[]中。例如:
sys.In_data[0] = redDI();//將數(shù)字量輸入讀回放到
sys.In_data緩沖區(qū)中
DataUpdate();//上傳輸入數(shù)據(jù)
RecvProcess();//獲取輸出數(shù)據(jù)
DriveDO(sys.Out_data[0]);//將來自主站的輸出數(shù)據(jù)DO
輸出到開關輸出
放到sys數(shù)組中的數(shù)據(jù)順序與GSD文件描述的設備信息順序是一致的。在本例中,8位開關輸入量在sys.In_data[0]中,而16位(2 B)計數(shù)器占用sys.In_data[1…2];8位開關輸出在sys.Out_data[0]中。來自主站的用戶參數(shù)數(shù)據(jù)放在sys.User_para[]數(shù)組中,用戶可以根據(jù)這些數(shù)據(jù)的意義設置設備相關功能。
XGate-DPS10支持用戶診斷,用戶可以調用SetDiag_Channel()、SetDiag_Identifier()、SetDiag_Device()等函數(shù)來完成用戶診斷的發(fā)送,在發(fā)送這些診斷前,需要將診斷信息賦值到定義好的結構體中,例如:
STRUCT_Diag_Channel diag_channel;//通道相關診斷
diag_channel.Channel_ByteType=ChannelByte_In;//字節(jié)、
輸入通道
diag_channel.Channel_Number=2;//通道號
diag_channel.Channel_Type=ChannelTpye_byte;//類型為字節(jié)
diag_channel.EerrType=STATUS_OVERVOLTAGE;
//錯誤為過壓
diag_channel.Module_Number=2;//通道所屬模塊
SetDiag_Channel(0, &Diagbuf, &diag_channel);
//發(fā)送診斷數(shù)據(jù)
當XGate-DPS收到DP-V1讀寫請求,也將產生一個中斷,軟件庫將調用相應的回調函數(shù)。在這些回調函數(shù)中應首先判斷訪問的slot_num、index的合法性,基本格式如下:
switch(slot_num)
{
case允許的:
允許的處理;//在這里使用同樣格式進一步對
index的合法性判斷;完全合法則應答請求數(shù)據(jù)
break;
case不允許的:
返回訪問錯誤;
break;
}
PROFIBUS-DP從站應用廣泛,使用通信接口模塊來開發(fā)總線I/O設備可以有效地縮短開發(fā)周期、節(jié)省成本投入,并在可靠性上得到保障。XGate-DPS10符合大多數(shù)應用場合,其高可靠性、方便性、低成本性使其成為開發(fā)DP從站設備的首選。
廣州致遠電子有限公司致力于嵌入式系統(tǒng)、工業(yè)通信網(wǎng)絡的技術研發(fā)與應用推廣,自主研發(fā)了一系列PROFIBUS-DP網(wǎng)絡產品,包括嵌入式模塊、通訊卡、調試工具、PC軟件、OPC服務器等,并提供基于PROFIBUS總線的整套組網(wǎng)方案及應用集成。