PROFIBUS是工業(yè)自動(dòng)化領(lǐng)域內(nèi)市場占有率最高的一種現(xiàn)場總線技術(shù),,它包括用于制造業(yè)自動(dòng)化的PROFIBUS-DP和用于流程工業(yè)領(lǐng)域的PROFIBUS-PA,它是目前我國惟一的現(xiàn)場總線國家標(biāo)準(zhǔn),。隨著越來越多工業(yè)控制系統(tǒng)采用了PROFIBUS現(xiàn)場總線技術(shù),對這些控制系統(tǒng)進(jìn)行具體的,、直觀的和實(shí)時(shí)的在線分析與診斷成為了最基本的要求,,要想完成這樣的任務(wù),就需要有相應(yīng)的工程分析診斷工具,。國內(nèi)外目前所研究的這些總線性能分析診斷工程工具存在著功能不夠全面,、界面不夠完善、價(jià)格昂貴,、不適合中國國情等問題,。開發(fā)一款能夠?qū)偩€系統(tǒng)進(jìn)行分析和診斷,方便的、性能價(jià)格比高的分析診斷工程工具必將成為急需的產(chǎn)品,。
由于在PRIFBUS傳輸報(bào)文可以反映出總線性能的很多參數(shù),,包括各種故障狀態(tài)。比如:從參數(shù)化報(bào)文可以看出主站和從站的關(guān)系,,從站的操作方式,,包括通道參數(shù)、功能設(shè)定,、裝置參數(shù)和ID號等,。從組態(tài)報(bào)文可以看出從站I/0類型及性質(zhì),以及模塊的I/O性質(zhì)及數(shù)據(jù)類型等,。從診斷報(bào)文可以看出從站各種參數(shù)設(shè)置錯(cuò)誤,,各種組態(tài)錯(cuò)誤,以及裝置模塊錯(cuò)誤類型,。所以,,本文作者就是在對PROFIBUS-DP報(bào)文進(jìn)行詳盡分析的基礎(chǔ)上,采用VC++ 6.0開發(fā)了一款基于串口通訊的PROFIBUS性能分析診斷軟件,。
1 PROFIBUS工作機(jī)理
1.1 PROFIBUS-DP編碼技術(shù)
PROFIBUS-DP交換數(shù)據(jù)使用異步傳輸技術(shù)和NRZ編碼,。NRZ編碼的二進(jìn)制信號“0”或“1”的信號電平在信號持續(xù)期間維持不變。圖1所示為NRZ碼信號圖,。
圖1 非歸零碼信號
每個(gè)數(shù)據(jù)鏈路層協(xié)議數(shù)據(jù)單元應(yīng)由一定數(shù)量的字符組成,,每個(gè)字符都是一個(gè)用于異步傳輸?shù)钠?mdash;—停字符。
每個(gè)字符由11個(gè)比特組成,,包括1個(gè)總是為二進(jìn)制“0”的起始比特(ST),,8個(gè)可以是二進(jìn)制數(shù)“0”亦可以是二進(jìn)制數(shù)“1”的信息比特,1個(gè)可以是二進(jìn)制“1”也可以是二進(jìn)制數(shù)“0”的偶校驗(yàn)比特(P),,1個(gè)總是為二進(jìn)制數(shù)“1”的停止比特,,如圖2所示。
圖2 單個(gè)字符格式
接收器的比特同步總是從起始比特的下降沿開始,,也就是說,,在從二進(jìn)制“1”轉(zhuǎn)換到二進(jìn)制數(shù)“0”時(shí)開始。在比特時(shí)間的中間應(yīng)掃描起始比特和所有后繼的比特,。在比特時(shí)間的中間,,起始比特應(yīng)是二進(jìn)制數(shù)“0”,否則認(rèn)為同步失敗并停止同步過程,。以二進(jìn)制“1”的停止比特來結(jié)束字符的同步,,如果此時(shí)出現(xiàn)二進(jìn)制數(shù)“0”來代替此停止比特,則應(yīng)認(rèn)為并報(bào)告一個(gè)同步差錯(cuò)或字符差錯(cuò),,并應(yīng)等待下一個(gè)起始比特的前導(dǎo)沿,。
1.2 報(bào)文格式
如圖3所示,,PRFIBUS-DP有以下5種報(bào)文格式。其中,,SYN為同步周期,,它是一個(gè)最小的時(shí)間間隔,在此時(shí)間間隔內(nèi),,每個(gè)站在它可以接收發(fā)送/請求報(bào)文幀或令牌起始部分之前,,應(yīng)從傳輸介質(zhì)接收空閑狀態(tài)(idle state)(idle=二進(jìn)制“1”)。同步周期最小為33個(gè)線空閑比特,;SD為起始定界符,,DA是目的地址,SA是源地址,,F(xiàn)C是控制幀,;FCS是幀校驗(yàn)和,ED為結(jié)束定界符,,值為16h,,L是信息字段長度,其中SD1= 10h,,用于請求FDL狀態(tài),,尋找一個(gè)新的活動(dòng)的站點(diǎn),報(bào)文長度固定,,沒有數(shù)據(jù)單元,;SD2= 68h,用于SRD服務(wù),,報(bào)文的數(shù)據(jù)長度可變,;SD3 = A2h,數(shù)據(jù)單元長度固定(L總為8字節(jié)),;SD4 = DCh,,表示該報(bào)文為令牌報(bào)文;SC =E5h, 短確認(rèn)報(bào)文,。
圖3 PROFIBUS—DP鏈路層報(bào)文格式
2 報(bào)文診斷軟件的實(shí)現(xiàn)
2.1 實(shí)驗(yàn)平臺
圖4為作者組建的PROFIBUS-DP網(wǎng)絡(luò)實(shí)驗(yàn)系統(tǒng)結(jié)構(gòu)圖,。在網(wǎng)絡(luò)系統(tǒng)中,1類主站為SIEMENS公司的CPU315-2DP PLC,,PC工控機(jī)作為2 類主站,,通過現(xiàn)場總線接口卡CP5611與DP 總線相連, WAGO公司的750-333,、BECKHOFF公司的BK3120、SIEMENS公司的ET200-L及和利時(shí)公司的LM3107 PLC等PLC設(shè)備作為從站連接到DP網(wǎng)絡(luò)中,。
圖4 PROFIBUS-DP網(wǎng)絡(luò)實(shí)驗(yàn)系統(tǒng)結(jié)構(gòu)圖
2.2 軟件開發(fā)環(huán)境
軟件開發(fā)工具為VC++6.0,,通過計(jì)算機(jī)標(biāo)準(zhǔn)串口通信,將PROFIBUS—DP報(bào)文采集到上位機(jī)進(jìn)行處理。PROFIBUS-DP系統(tǒng)作為實(shí)驗(yàn)平臺,,采用RS485/RS232通信電纜將其RS485的一端接入PROFIBUS-DP網(wǎng)絡(luò)連接器的背插接口,,RS232一端直接接入到PC機(jī)的串口。
2.3 軟件系統(tǒng)基本程序框圖
軟件系統(tǒng)的程序基本架構(gòu)流程圖如圖5所示,。
圖5基本程序框架流程圖
整個(gè)系統(tǒng)軟件包括如下幾個(gè)模塊:
1)程序主控模塊:負(fù)責(zé)實(shí)現(xiàn)程序邏輯與主界面,,調(diào)用串口通信模塊和接收顯示模塊。
2)串口通信模塊:負(fù)責(zé)實(shí)現(xiàn)串口通信任務(wù),,PROFIBUS-DP報(bào)文數(shù)據(jù)采集及串口參數(shù)設(shè)置,。
3)數(shù)據(jù)處理模塊:根據(jù)PROFIBUS-DP協(xié)議報(bào)文格式,將采集上來的數(shù)據(jù)按報(bào)文格式進(jìn)行處理,,并存入臨時(shí)緩沖區(qū),。
4)接收顯示模塊:負(fù)責(zé)實(shí)現(xiàn)接收數(shù)據(jù)的處理與顯示。
5)數(shù)據(jù)庫模塊及數(shù)據(jù)查詢模塊,,用來實(shí)現(xiàn)對采集到報(bào)文的歷史數(shù)據(jù)的分析和查詢,。
2.4 關(guān)鍵技術(shù)
該軟件主要是實(shí)現(xiàn)對PROFIBUS報(bào)文進(jìn)行提取,實(shí)現(xiàn)在線采集PROFIBUS-DP報(bào)文數(shù)據(jù),,從數(shù)據(jù)鏈路層角度對各種報(bào)文進(jìn)行分析,,完成各種類型報(bào)文的顯示,完成對報(bào)文種類,、服務(wù)類型,、地址、數(shù)據(jù)長度及數(shù)據(jù)單元等信息的提取顯示,,并對診斷報(bào)文,、參數(shù)化報(bào)文及組態(tài)報(bào)文等的數(shù)據(jù)單元進(jìn)行詳細(xì)的分析,得出總線性能的各種參數(shù)及故障原因,,將分析過的數(shù)據(jù)存儲進(jìn)數(shù)據(jù)庫,,存入臨時(shí)緩沖區(qū),根據(jù)需要將分析過的報(bào)文信息存入數(shù)據(jù)庫,,實(shí)現(xiàn)歷史查詢,。
如何實(shí)現(xiàn)報(bào)文幀的提取是本軟件設(shè)計(jì)的一個(gè)關(guān)鍵問題。由于PROFIBUS報(bào)文格式有很多種,,而且包括數(shù)據(jù)長度不固定的可變報(bào)文,。雖然各種報(bào)文都具有固定的報(bào)頭、報(bào)尾,,但是存在的問題是報(bào)頭報(bào)尾并不是特定的字符,,有可能和報(bào)文中數(shù)據(jù)單元內(nèi)容一樣,所以這里利用報(bào)頭報(bào)尾進(jìn)行報(bào)文的提取是不可行的,。作者在這里利用各種報(bào)文幀前的同步字符進(jìn)行報(bào)文提取,,也就是說,,在每個(gè)完整報(bào)文幀傳輸之前,其前面都有一個(gè)不小于33bit的同步時(shí)間,,在報(bào)文幀中間是沒有任何間隔的,,利用這一同步時(shí)間,在VC++中利用超時(shí)函數(shù),,對報(bào)文幀進(jìn)行了完整地提取,。
另外,由于通信數(shù)據(jù)量很大,,速度較快,,這里采用了WINDOWS多線程技術(shù)。一個(gè)線程為監(jiān)視線程,,監(jiān)視串口通訊,,一個(gè)為數(shù)據(jù)處理主線程,另外一個(gè)為定時(shí)刷新數(shù)據(jù)庫線程,。當(dāng)監(jiān)視線程監(jiān)視到串口中有數(shù)據(jù)到達(dá)時(shí),,就觸發(fā)一個(gè)消息通知數(shù)據(jù)處理主線程,數(shù)據(jù)處理主線程就去串口緩沖區(qū)中取出數(shù)據(jù),,并進(jìn)行數(shù)據(jù)處理,。定時(shí)器線程定時(shí)刷新數(shù)據(jù)庫顯示,以實(shí)現(xiàn)實(shí)時(shí)顯示功能,。
作者在程序編寫的過程中,,出現(xiàn)數(shù)據(jù)庫不能實(shí)時(shí)刷新的情況,后來發(fā)現(xiàn)問題出在WINDOWS的WM_TIMER定時(shí)器上,,由于該定時(shí)器消息優(yōu)先級較低,,可能造成WM_TIMER消息的丟失,所以不能實(shí)現(xiàn)數(shù)據(jù)庫的實(shí)時(shí)刷新,。解決的方法是采用WINDOWS的多媒體定時(shí)器,。在使用多媒體定時(shí)器的過程中,定時(shí)間隔的選取又是一個(gè)關(guān)鍵的問題,,定時(shí)間隔選取太小,,將會耗費(fèi)大量的CPU內(nèi)存,造成系統(tǒng)“死機(jī)”, 定時(shí)間隔選取太大,,又不能完成“實(shí)時(shí)”顯示功能,。這里又涉及到PROFIBUS總線信息循環(huán)時(shí)間的問題,總線信息循環(huán)時(shí)間與總線傳輸?shù)牟ㄌ芈?、從站的?shù)量,、I/O數(shù)據(jù)的數(shù)量、從站需要的延遲時(shí)間以及主站的空閑時(shí)間等有關(guān),。作者通過了大量的計(jì)算和多次實(shí)驗(yàn)調(diào)試,,尋找到一個(gè)合適的定時(shí)器間隔,。
2.5 顯示界面
該P(yáng)ROFIBUS-DP報(bào)文分析軟件的程序界面包括主界面、串口配置界面,、報(bào)文過濾界面、報(bào)文查詢界面,、數(shù)據(jù)庫存儲界面以及歷史查詢界面等,。
PROFIBUS-DP分析診斷軟件的運(yùn)行主界面如圖6,窗口左上部分“當(dāng)前profibus報(bào)文”組框內(nèi)存放最近采集到的PROFIBUS-DP報(bào)文信息,,并可通過工具欄上的記錄移動(dòng)按鈕滾動(dòng)察看記錄,;右上方“信息面板”是用來顯示所有查看報(bào)文的詳細(xì)信息。窗口下半部分以網(wǎng)格形式顯示PROFIBUS-DP歷史信息,。
若需要打開串口,,開始接收PROFIBUS報(bào)文信息,則可選擇“命令”菜單下的“開始接收”項(xiàng),;若需停止接收PROFIBUS報(bào)文信息,,則可選擇“命令”菜單下的“停止接收”項(xiàng);若需要配置串口參數(shù),,則可選擇“命令”菜單下的“串口配置”項(xiàng),,此時(shí)將彈出“串口配置對話框”,若需清除當(dāng)前所有記錄,,可選擇“記錄”菜單下的“清除所有記錄項(xiàng)”命令,,如果需要分類查看各種報(bào)文,可以選擇“查看”命令菜單下的“報(bào)文查詢”,,此時(shí)將彈出“報(bào)文查詢對話框”,,可根據(jù)需要進(jìn)行報(bào)文分類查看。
圖6 軟件運(yùn)行主界面
3 結(jié)束語
該軟件經(jīng)過作者在PROFIBUS網(wǎng)絡(luò)實(shí)驗(yàn)系統(tǒng)上的反復(fù)運(yùn)行調(diào)試,,結(jié)果表明該軟件能夠?qū)崿F(xiàn)對幾種PROFIBUS報(bào)文進(jìn)行分析,,能夠完成采集、顯示,、分析,、存儲和查詢等功能,為以后的研究開發(fā)奠定了基礎(chǔ),,同時(shí)具有一定的實(shí)用價(jià)值,。