時(shí)間:2007-07-13 10:59:00來源:shixiang
圖1 Profibus-DP中斷機(jī)制[/align]
2.2 中斷相應(yīng)
雖然在開發(fā)DP產(chǎn)品時(shí)無(wú)需對(duì)Profibus-DP的中斷機(jī)制進(jìn)行修改,但深入了解該中斷機(jī)制對(duì)于剖析SPC3的固態(tài)程序具有重要的意義,因?yàn)樵摴虘B(tài)程序的框架就是基于Profibus-DP協(xié)議所定義的中斷機(jī)制。在實(shí)際運(yùn)行過程中,DP從站內(nèi)的微處理器主要對(duì)協(xié)議芯片SPC3的以下幾類中斷事件做出響應(yīng)。
(1) Diag_Fetched:診斷數(shù)據(jù)被主站取走,此時(shí)MCU應(yīng)發(fā)出一個(gè)User_Diag_Read_Cmd命令(通過讀RAM中的User_Diag_Read_Cmd單元實(shí)現(xiàn)),將用戶診斷緩沖器與MAC緩沖器互換,以將更新的用戶診斷數(shù)據(jù)提供給MAC層,供主站在必要時(shí)取用;
(2) IndQ_Entry:新的事件信息進(jìn)入指示隊(duì)列,在中斷處理時(shí)MCU應(yīng)從指示隊(duì)列中讀出事件信息代碼,根據(jù)不同的事件做出反應(yīng)。比如發(fā)生監(jiān)視定時(shí)器到時(shí)事件,就將程序從數(shù)據(jù)交換狀態(tài)跳出,停止輸入數(shù)據(jù)的發(fā)送;
(3) Go/Leave_Data_Exchange:進(jìn)入或離開數(shù)據(jù)交換狀態(tài)。此時(shí)MCU應(yīng)讀取SPC3的狀態(tài)寄存器,得知具體是進(jìn)入還是離開。若是進(jìn)入數(shù)據(jù)交換狀態(tài),應(yīng)當(dāng)準(zhǔn)備輸入數(shù)據(jù)以便向主站發(fā)送;若是離開則停止輸入數(shù)據(jù)的發(fā)送;
(4) New_Prm_Data:新的參數(shù)報(bào)文。MCU從用戶參數(shù)緩沖器中讀出參數(shù)數(shù)據(jù), 然后對(duì)從站需要設(shè)置的參數(shù)進(jìn)行設(shè)置,根據(jù)設(shè)置的結(jié)果是否正確向SPC3發(fā)出一個(gè)肯定的User_Prm_OK_Cmd或一個(gè)否定的User_Prm_Not_OK_Cmd命令,SPC3便會(huì)對(duì)此參數(shù)報(bào)文向主站作出肯定或否定的應(yīng)答;
(5) New_Cfg_Data:新的組態(tài)報(bào)文。MCU從用戶組態(tài)緩沖器中讀出組態(tài)數(shù)據(jù),然后根據(jù)組態(tài)信息設(shè)置從站,根據(jù)組態(tài)的結(jié)果是否正確向SPC3發(fā)出一個(gè)肯定的User_Cfg_OK_Cmd或一個(gè)否定的User_Cfg_ Not_OK_Cmd命令,SPC3便會(huì)對(duì)此組態(tài)報(bào)文向主站作出肯定或否定的應(yīng)答;
(6) Get_Cfg_Buffer_Change:讀組態(tài)緩沖器改變,即用戶讀組態(tài)緩沖器與MAC讀緩沖器互換。在中斷處理時(shí)MCU應(yīng)通過讀User_Cfg_Buffer_Ptr得到新的用戶讀組態(tài)緩沖器的指針,以將從站的組態(tài)信息寫入新的用戶讀組態(tài)緩沖器中。此中斷由User_Get_Cfg_Read_Cmd命令對(duì)主站組態(tài)報(bào)文的User_Cfg_OK_Cmd肯定引起;
(7) Diag_Buffer_Changed:診斷緩沖器改變,即用戶診斷緩沖器與MAC診斷緩沖器互換。在中斷處理中MCU應(yīng)通過讀User_Diag_Buffer_Ptr得到新的用戶診斷緩沖器的指針,以將從站的診斷信息寫入新的用戶診斷緩沖器中,此中斷由User_Diag_Read_Cmd命令引起;
(8) DX_OUT:新的輸出數(shù)據(jù)。此時(shí)應(yīng)發(fā)出一個(gè)User_New_Dout_Cmd命令,并得到新的U緩沖器的指針,從而用戶可以根據(jù)這個(gè)指針得到存入其中的新的輸出數(shù)據(jù),同時(shí)MCU應(yīng)發(fā)出一個(gè)User_New_Din_Cmd,將U輸入數(shù)據(jù)緩沖器變?yōu)镹輸入數(shù)據(jù)緩沖器,同時(shí)得到新的U緩沖器的指針,這樣便將用戶的輸入數(shù)據(jù)發(fā)送給主站,并得到新的U緩沖器以準(zhǔn)備新的輸入數(shù)據(jù)。
所有的中斷事件協(xié)調(diào)組合在一起,就構(gòu)成了Profibus-DP的狀態(tài)機(jī),該狀態(tài)機(jī)模型如圖2:
[align=center]
圖2 Profibus-DP狀態(tài)機(jī)模型[/align]
3 SPC3固態(tài)程序的剖析
使用西門子公司提供的協(xié)議芯片SPC3可以較容易地設(shè)計(jì)Profibus-DP從站的硬件電路,相對(duì)而言從站的軟件設(shè)計(jì)要相對(duì)復(fù)雜,而軟件設(shè)計(jì)的關(guān)鍵是利用開發(fā)包中提供的SPC3協(xié)議芯片固態(tài)程序,因此解析該固態(tài)程序是另一個(gè)需要關(guān)注的問題。
3.1 SPC3固態(tài)程序流程
由于SPC3芯片內(nèi)的寄存器是完全格式化的,固態(tài)程序可實(shí)現(xiàn)在SPC3內(nèi)部寄存器與應(yīng)用接口之間的連接,為用戶提供了宏接口,使用固態(tài)程序可大大節(jié)省用戶的開發(fā)的時(shí)間。SPC3固態(tài)程序包使得用戶無(wú)須直接操作寄存器和計(jì)算存儲(chǔ)空間。固態(tài)程序中包含的各程序模塊有:
(1) 主程序SERSPC3.C,主要完成SPC3初始化,啟動(dòng),外部信號(hào)處理,發(fā)送和接收數(shù)據(jù)和診斷;
(2) 中斷模塊INTSPC3.C,主要處理分配從站參數(shù)、組態(tài)數(shù)據(jù)檢查和從站地址設(shè)定;
(3) 函數(shù)DPS2SPC3.C,這些函數(shù)根據(jù)組態(tài)數(shù)據(jù)計(jì)算輸入輸出數(shù)據(jù)長(zhǎng)度,輔助緩沖區(qū)分配,緩沖區(qū)初始化,設(shè)置IO數(shù)據(jù)長(zhǎng)度,各緩沖區(qū)更新函數(shù)等;
(4) 變量定義和宏接口DPS2USER.h,宏接口使用戶能夠方便地訪問SPC3的各個(gè)寄存器。
SPC3在接收到由Profibus-DP主站傳送的不同輸出數(shù)據(jù)時(shí),會(huì)產(chǎn)生輸出標(biāo)志位(位于中斷請(qǐng)求字單元),CPU通過在應(yīng)用循環(huán)中查詢標(biāo)志位來接收主站數(shù)據(jù),對(duì)于實(shí)時(shí)性要求嚴(yán)格的系統(tǒng),則應(yīng)采用中斷方式進(jìn)行輸出數(shù)據(jù)的處理。主程序首先利用開發(fā)包中的DPS2對(duì)SPC3進(jìn)行初始化,允許外部中斷INT0,設(shè)置INT0為高優(yōu)先級(jí)及開中斷,然后啟動(dòng)SPC3,通過SPC3進(jìn)行主站和從站的數(shù)據(jù)交換以及處理診斷。SPC3固態(tài)程序的流程示意如圖3:
[align=center]
圖3 SPC3固態(tài)程序流程圖[/align]
3.2 SPC3初始化子程序
在SPC3正常工作之前,首先需要進(jìn)行初始化,以配置需要的寄存器,包括設(shè)置協(xié)議芯片的中斷允許,寫入從站識(shí)別號(hào)和地址,設(shè)置SPC3方式寄存器,設(shè)置診斷緩沖區(qū),參數(shù)緩沖區(qū),配置緩沖區(qū),地址緩沖區(qū),初始化長(zhǎng)度,并根據(jù)以上初始值得出各個(gè)緩沖區(qū)的指針和輔助緩沖區(qū)的指針。根據(jù)傳輸?shù)臄?shù)據(jù)長(zhǎng)度,確定輸出緩沖區(qū),輸入緩沖區(qū)及指針。
初始化程序用以實(shí)現(xiàn)以下各項(xiàng)功能:
(1) SPC3硬件復(fù)位:應(yīng)用程序用RESET復(fù)位SPC3,初始化內(nèi)部RAM及復(fù)位微處理器;
(2) 編譯器設(shè)置:針對(duì)選用的微處理器選用合適的編譯器,用#define DPS2_SPC3激活DPS2接口;
(3) 設(shè)置SPC3中斷屏蔽寄存器:宏DPS2_SET_IND( )激活SPC3中斷觸發(fā),包括從站地址改變,組態(tài)數(shù)據(jù)檢查,參數(shù)檢查中斷;
(4) SPC3內(nèi)部看門狗設(shè)置:用戶看門狗用于確保在微處理器出現(xiàn)故障時(shí),SPC3能在DPS2_SET_USER_WD_VALUE(X)設(shè)定的時(shí)間內(nèi)進(jìn)行數(shù)據(jù)通信后,時(shí)間完后則離開數(shù)據(jù)交換通信狀態(tài),只要微處理器沒有問題,則需不斷地用DPS2_RESET_USER_WD重新觸發(fā)看門狗電路;
(5) 設(shè)備標(biāo)識(shí)碼設(shè)置:在啟動(dòng)過程中,應(yīng)用程序讀取標(biāo)識(shí)碼,并將其傳送到SPC3芯片中;
(6) 設(shè)置響應(yīng)時(shí)間:如果某些應(yīng)用需要,用戶可以通過DPS2_SET_MINTSDR(X)為SPC3設(shè)置最小的從站響應(yīng)時(shí)間;
(7) 緩沖區(qū)初始化設(shè)置:用戶必須確定DPS2_BUFINIT結(jié)構(gòu)體中定義的各個(gè)用于信息交換的緩沖區(qū)的長(zhǎng)度,這些緩沖區(qū)長(zhǎng)度決定了SPC3中各個(gè)數(shù)據(jù)緩沖區(qū)的長(zhǎng)度,這些緩沖區(qū)占用SPC3雙口RAM的空間,因此不能超過緩沖區(qū)總長(zhǎng)度。用宏SPC3_INIT( )或Dps2_buf_init( )函數(shù)將DPS2_BUFINIT初始化后的結(jié)構(gòu)體指針作為參數(shù),根據(jù)結(jié)構(gòu)體中的數(shù)據(jù)在SPC3的RAM中分配各緩沖區(qū),檢查各個(gè)緩沖區(qū)的最大長(zhǎng)度,并返回緩沖區(qū)初始化后的測(cè)試信息;
(8) 波特率控制設(shè)置:用DPS2_SET_BAUD_CNTRL( )宏,可以設(shè)置波特率控制模式。在此監(jiān)視定時(shí)值過后,如果沒有有效的信息被接收,SPC3將啟動(dòng)波特率搜索BAUT RATE RESEARCH功能。如果定時(shí)監(jiān)視器被啟用,且DP從站檢查到DP主站有故障,則本地輸出數(shù)據(jù)被刪除或進(jìn)入規(guī)定的安全狀態(tài)。監(jiān)視定時(shí)器的時(shí)基為10ms,其時(shí)間范圍為10ms~650s。
3.3 接收主站輸出數(shù)據(jù)子程序
Profibus-DP主站和SPC3通過默認(rèn)的服務(wù)訪問點(diǎn)交換數(shù)據(jù),在此過程中SPC3需要完成的任務(wù)主要包括以下3步:
(1) SPC3將輸出數(shù)據(jù)寫入D緩沖區(qū)中,且交換D和N緩沖區(qū)中的數(shù)據(jù);
(2) 產(chǎn)生DX-Out中斷;
(3) 用戶通過交換N和U緩沖區(qū)中的數(shù)據(jù),從U緩沖區(qū)中獲取輸出數(shù)據(jù)。
第1步由SPC3自動(dòng)完成,用DPS2_POLL_IND_ DX_OUT( )讀SPC3的中斷請(qǐng)求寄存器查詢中斷事件。當(dāng)為真時(shí),表示SPC3接收到Write_Read_Data報(bào)文,并使N緩沖區(qū)中的輸出數(shù)據(jù)有效。用宏DPS2_OUTPUT_UPDATE( )更新輸出緩沖區(qū),即將N緩沖區(qū)中的數(shù)據(jù)送到U緩沖區(qū)中。輸出數(shù)據(jù)中并不包括輸出數(shù)據(jù)的長(zhǎng)度,但必須和DPS2_SET_IO_DATA_LEN( )定義的數(shù)據(jù)長(zhǎng)度一致,當(dāng)長(zhǎng)度不一致時(shí),從站將會(huì)返回到等待參數(shù)賦值狀態(tài),輸出數(shù)據(jù)緩沖區(qū)的長(zhǎng)度在初始化部分程序中。
該部分程序核心代碼如下:
if (DPS2_POLL_IND_DX_OUT( ))
{ DPS2_CON_IND_DX_OUT( );
user_output_buffer_ptr = DPS2_OUTPUT_UPDATE( );
for (i=0; i
[/align]
5.2 組建Profibus-DP網(wǎng)絡(luò)
利用STEP7軟件來建立Profibus-DP網(wǎng)絡(luò)也十分方便,主要包括以下步驟:
(1) 進(jìn)入Hardware組態(tài)環(huán)境,將使用的各個(gè)模塊用鼠標(biāo)拖拉的方式添加到機(jī)架相應(yīng)的位置處;
(2) 建立Profibus-DP網(wǎng)絡(luò),設(shè)定主站,并將各從站掛接到網(wǎng)絡(luò)上;
(3) 設(shè)置各主從站的地址;
(4) 若一個(gè)機(jī)架容納不了所有的模塊,應(yīng)相應(yīng)地增加機(jī)架數(shù)目;
(5) 選擇Station菜單下的Save and Compile命令,若無(wú)錯(cuò)誤,就可以利用Download命令將硬件組態(tài)下載到PLC中。
利用CPU314、PS307/10A、IM365(SEND/RECEIVE)和CP342-2組態(tài)得到的Profibus-DP網(wǎng)絡(luò)示意如圖4。
[align=center]
圖4 Profibus-DP網(wǎng)絡(luò)組態(tài)示意[/align]
在設(shè)定各站地址時(shí)應(yīng)注意有些類型的DP從站不提供用于設(shè)置Profibus地址的硬件開關(guān),它們的總線地址是用2類DP主站功能Set_Slave_Add來指定的。由于它是集成的MPI在線接口,故STEP7組態(tài)軟件能夠處理此編址功能,這種地址分配的方法僅適用于支持Set_Slave_Add功能的DP從站設(shè)備。此外,從站設(shè)備的缺省地址由制造商設(shè)定為126。在歐洲標(biāo)準(zhǔn)EN 50170中,此地址已經(jīng)被保留而不能由Profibus-DP用戶使用,但如果此從站是新的從制造商那里直接得來的設(shè)備,仍然可以見到此缺省值。
6 結(jié)束語(yǔ)
開發(fā)Profibus-DP從站的硬件設(shè)計(jì)比較簡(jiǎn)單,相對(duì)復(fù)雜的是其軟件設(shè)計(jì)和聯(lián)機(jī)調(diào)試。筆者在DP從站開發(fā)過程中發(fā)現(xiàn),很多情況下從站未能正常工作均是由于GSD文件編寫有問題或網(wǎng)絡(luò)組態(tài)錯(cuò)誤造成的。本文針對(duì)這些問題進(jìn)行了探討,并結(jié)合實(shí)例給出了解決方案,具有一定的參考價(jià)值。在開發(fā)DP從站產(chǎn)品的過程中,必須對(duì)這些問題給予十分關(guān)注。標(biāo)簽:
傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為傳動(dòng)網(wǎng)(www.surachana.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
相關(guān)資訊
產(chǎn)品新聞
更多>500kN.m聯(lián)軸器扭矩剛度疲勞試驗(yàn)系統(tǒng)
2025-11-10
2025-11-10
多項(xiàng)行業(yè)首發(fā)!免畫圖拆單七大升級(jí)功能...
2025-11-07
2025-10-31
勇梅機(jī)械液壓閘門給煤機(jī)的優(yōu)點(diǎn)
2025-10-22
2025-10-17