整個系統(tǒng)軟件包括如下幾個模塊:
1)程序主控模塊:負責實現(xiàn)程序邏輯與主界面,調用串口通信模塊和接收顯示模塊。
2)串口通信模塊:負責實現(xiàn)串口通信任務,PROFIBUS-DP報文數(shù)據(jù)采集及串口參數(shù)設置。
3)數(shù)據(jù)處理模塊:根據(jù)PROFIBUS-DP協(xié)議報文格式,將采集上來的數(shù)據(jù)按報文格式進行處理,并存入臨時緩沖區(qū)。
4)接收顯示模塊:負責實現(xiàn)接收數(shù)據(jù)的處理與顯示。
5)數(shù)據(jù)庫模塊及數(shù)據(jù)查詢模塊,用來實現(xiàn)對采集到報文的歷史數(shù)據(jù)的分析和查詢。
2.4 關鍵技術
該軟件主要是實現(xiàn)對PROFIBUS報文進行提取,實現(xiàn)在線采PROFIBUS-DP報文數(shù)據(jù),從數(shù)據(jù)鏈路層角度對各種報文進行分析,完成各種類型報文的顯示,完成對報文種類、服務類型、地址、數(shù)據(jù)長度及數(shù)據(jù)單元等信息的提取顯示,并對診斷報文、參數(shù)化報文及組態(tài)報文等的數(shù)據(jù)單元進行詳細的分析,得出總線性能的各種參數(shù)及故障原因,將分析過的數(shù)據(jù)存儲進數(shù)據(jù)庫,存入臨時緩沖區(qū),根據(jù)需要將分析過的報文信息存入數(shù)據(jù)庫,實現(xiàn)歷史查詢。
如何實現(xiàn)報文幀的提取是本軟件設計的一個關鍵問題。由于PROFIBUS報文格式有很多種,而且包括數(shù)據(jù)長度不固定的可變報文。雖然各種報文都具有固定的報頭、報尾,但是存在的問題是報頭報尾并不是特定的字符,有可能和報文中數(shù)據(jù)單元內容一樣,所以這里利用報頭報尾進行報文的提取是不可行的。作者在這里利用各種報文幀前的同步字符進行報文提取,也就是說,在每個完整報文幀傳輸之前,其前面都有一個不小于33bit的同步時間,在報文幀中間是沒有任何間隔的,利用這一同步時間,在VC++中利用超時函數(shù),對報文幀進行了完整地提取。
另外,由于通信數(shù)據(jù)量很大,速度較快,這里采用了WINDOWS多線程技術。一個線程為監(jiān)視線程,監(jiān)視串口通訊,一個為數(shù)據(jù)處理主線程,另外一個為定時刷新數(shù)據(jù)庫線程。當監(jiān)視線程監(jiān)視到串口中有數(shù)據(jù)到達時,就觸發(fā)一個消息通知數(shù)據(jù)處理主線程,數(shù)據(jù)處理主線程就去串口緩沖區(qū)中取出數(shù)據(jù),并進行數(shù)據(jù)處理。定時器線程定時刷新數(shù)據(jù)庫顯示,以實現(xiàn)實時顯示功能。
作者在程序編寫的過程中,出現(xiàn)數(shù)據(jù)庫不能實時刷新的情況,后來發(fā)現(xiàn)問題出在WINDOWS的WM_TIMER定時器上,由于該定時器消息優(yōu)先級較低,可能造成WM_TIMER消息的丟失,所以不能實現(xiàn)數(shù)據(jù)庫的實時刷新。解決的方法是采用WINDOWS的多媒體定時器。在使用多媒體定時器的過程中,定時間隔的選取又是一個關鍵的問題,定時間隔選取太小,將會耗費大量的CPU內存,造成系統(tǒng)“死機”, 定時間隔選取太大,又不能完成“實時”顯示功能。這里又涉及到PROFIBUS總線信息循環(huán)時間的問題,總線信息循環(huán)時間與總線傳輸?shù)牟ㄌ芈?、從站的?shù)量、I/O數(shù)據(jù)的數(shù)量、從站需要的延遲時間以及主站的空閑時間等有關。作者通過了大量的計算和多次實驗調試,尋找到一個合適的定時器間隔。
2.5 顯示界面
該PROFIBUS-DP報文分析軟件的程序界面包括主界面、串口配置界面、報文過濾界面、報文查詢界面、數(shù)據(jù)庫存儲界面以及歷史查詢界面等。
PROFIBUS-DP分析診斷軟件的運行主界面如圖6,窗口左上部分“當前profibus報文”組框內存放最近采集到的PROFIBUS-DP報文信息,并可通過工具欄上的記錄移動按鈕滾動察看記錄;右上方“信息面板”是用來顯示所有查看報文的詳細信息。窗口下半部分以網(wǎng)格形式顯示PROFIBUS-DP歷史信息。
若需要打開串口,開始接收PROFIBUS報文信息,則可選擇“命令”菜單下的“開始接收”項;若需停止接收PROFIBUS報文信息,則可選擇“命令”菜單下的“停止接收”項;若需要配置串口參數(shù),則可選擇“命令”菜單下的“串口配置”項,此時將彈出“串口配置對話框”,若需清除當前所有記錄,可選擇“記錄”菜單下的“清除所有記錄項”命令,如果需要分類查看各種報文,可以選擇“查看”命令菜單下的“報文查詢”,此時將彈出“報文查詢對話框”,可根據(jù)需要進行報文分類查看。
3 結束語
該軟件經(jīng)過作者在PROFIBUS網(wǎng)絡實驗系統(tǒng)上的反復運行調試,結果表明該軟件能夠實現(xiàn)對幾種PROFIBUS報文進行分析,能夠完成采集、顯示、分析、存儲和查詢等功能,為以后的研究開發(fā)奠定了基礎,同時具有一定的實用價值。
參考文獻
1. 中華人民共和國機械行業(yè)標準.測量和控制數(shù)字數(shù)據(jù)通信工業(yè)控制系統(tǒng)用現(xiàn)場總線類型3:PROFIBUS規(guī)范[M].北京,機械工業(yè)出版社,2006.
2. 王永華,Andy Verwer. 現(xiàn)場總線技術及應有教程[M]——從PROFIBUS到AS-i.北京:機械工業(yè)出版社,2006.
3. IEC. Digital data communications for measurment and control-Fieldbus for use in industrial control systems-Part 3: Data Link Layer service definition[M]. Third edition. 1999.10
4. IEC. Digital data communications for measurment and control-Fieldbus for use in industrial control systems-Part 4: Data Link Layer protocol specification[M]. Third edition. 1999.10
5. 陳幼平,周硯,陳冰等.基于CPLD的Profibus-DP報文接收器的設計[J].測控技術,2005,24(6).
6. 吳方余,周勇.一種基于數(shù)據(jù)庫的串口數(shù)據(jù)采集保存方案[J].計算機與現(xiàn)代化,2005,10.
7. 龔建偉,雄光明.Visual C++/TurboC 串口通信編程實踐[M].電子工業(yè)出版社,2004.