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