1 引言
隨著Profibus總線技術(shù)在我國的進(jìn)一步普及,基于Profibus-DP協(xié)議的總線產(chǎn)品在市場上占據(jù)了越來越多的份額。自行開發(fā)含DP接口的從站產(chǎn)品具有重要的現(xiàn)實意義,國內(nèi)參與DP總線產(chǎn)品研究與開發(fā)的單位很多,然而能夠自成體系的卻鮮見報道。究其原因,主要是在開發(fā)過程中幾個核心問題沒有很好地解決。這些問題主要集中在對Profibus-DP中斷機制的理解、SPC3固態(tài)程序的剖析、GSD文件的編制以及Profibus-DP網(wǎng)絡(luò)的組態(tài)幾個方面,本文將就這幾個問題逐一進(jìn)行討論。
2 Profibus-DP的中斷機制
2.1 中斷機制
Profibus-DP協(xié)議中的中斷控制是通過協(xié)議芯片SPC3內(nèi)的中斷控制器來實現(xiàn)的,當(dāng)有指令報文到來或各種錯誤事件發(fā)生時,CPU會得到通知并進(jìn)行相應(yīng)的處理。該中斷控制器可以管理預(yù)定義的16種中斷事件,這些事件通過一個中斷輸出進(jìn)行統(tǒng)一管理。該中斷控制器不具備中斷優(yōu)先級,也不提供中斷矢量。中斷控制器內(nèi)主要有4個寄存器:中斷請求寄存器IRR(Interrupt Request Register),中斷屏蔽寄存器IMR(Interrupt Mask Register),中斷寄存器IR(Interrupt Register)和中斷確認(rèn)寄存器IAR(Interrupt Acknowledge Register)。該中斷控制器內(nèi)部的工作原理示意如圖1。
所有等待處理的中斷都存儲在IRR寄存器內(nèi),個別的中斷可以通過設(shè)置IMR寄存器來禁止。IRR寄存器的輸入不受中斷屏蔽的影響,未屏蔽的中斷信號經(jīng)過求和運算來觸發(fā)X/INT中斷。在調(diào)試DP從站時,可以在IRR寄存器種設(shè)置各種中斷信號來進(jìn)行調(diào)試。所有經(jīng)微處理器處理的中斷只能通過IAR寄存器刪除,相應(yīng)地,需要將相應(yīng)的位置“1”。如果一個新的中斷事件與先前的一個中斷事件同時加在IRR寄存器的輸入端,該新事件將被保持。如果處理器隨后使能一個屏蔽的中斷,它必須保證之前沒有中斷信號加在IRR寄存器的輸入端。為了安全起見,在使能中斷屏蔽前必須刪除IRR寄存器中的相應(yīng)位。
[align=center]
圖1 Profibus-DP中斷機制[/align]
2.2 中斷相應(yīng)
雖然在開發(fā)DP產(chǎn)品時無需對Profibus-DP的中斷機制進(jìn)行修改,但深入了解該中斷機制對于剖析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:新的事件信息進(jìn)入指示隊列,在中斷處理時MCU應(yīng)從指示隊列中讀出事件信息代碼,根據(jù)不同的事件做出反應(yīng)。比如發(fā)生監(jiān)視定時器到時事件,就將程序從數(shù)據(jù)交換狀態(tài)跳出,停止輸入數(shù)據(jù)的發(fā)送;
(3) Go/Leave_Data_Exchange:進(jìn)入或離開數(shù)據(jù)交換狀態(tài)。此時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ù)報文。MCU從用戶參數(shù)緩沖器中讀出參數(shù)數(shù)據(jù), 然后對從站需要設(shè)置的參數(shù)進(jìn)行設(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ù),對于實時性要求嚴(yán)格的系統(tǒng),則應(yīng)采用中斷方式進(jìn)行輸出數(shù)據(jù)的處理。主程序首先利用開發(fā)包中的DPS2對SPC3進(jìn)行初始化,允許外部中斷INT0,設(shè)置INT0為高優(yōu)先級及開中斷,然后啟動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è)置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)進(jìn)行數(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ù)被刪除或進(jìn)入規(guī)定的安全狀態(tài)。監(jiān)視定時器的時基為10ms,其時間范圍為10ms~650s。
3.3 接收主站輸出數(shù)據(jù)子程序
Profibus-DP主站和SPC3通過默認(rèn)的服務(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
outp_data_len; i++)
{
(*((io_byte_ptr)+i))=(*(((UBYTE SPC3_PTR_ATTR*) user_output_buffer_ptr) + i)); } }
3.4 發(fā)送從站輸入數(shù)據(jù)子程序
在輸入數(shù)據(jù)發(fā)送前,用戶主程序首先要宏DPS2_GET_DIN_BUF_PTR( )取得輸入緩沖區(qū)的指針,用宏DPS2_INPUT_UPDATE( )用戶可以重復(fù)地將輸入數(shù)據(jù)從用戶端傳送到DPS2,并取得可用的輸入緩沖區(qū)指針,用于接收新的輸入數(shù)據(jù)。輸入數(shù)據(jù)中并不包括輸入數(shù)據(jù)的長度,但輸入數(shù)據(jù)必須和DPS2_SET_IO_DATA_LEN( )定義的長度一致。
處理輸入數(shù)據(jù),將輸入數(shù)據(jù)從外設(shè)寫入緩沖區(qū)核心程序段如下:
for (i=0; iinp_data_len; i++)
{
*(((UBYTE SPC3_PTR_ATTR*) user_input_buffer_ptr) + i) = *((io_byte_ptr) + i);
}
user_input_buffer_ptr = DPS2_INPUT_UPDATE( );
3.5 診斷數(shù)據(jù)發(fā)送子程序
主站和SPC3通過服務(wù)訪問點SAP60處理診斷數(shù)據(jù),SPC3需要完成的任務(wù)主要包括以下幾點:
(1) 用戶將外部診斷數(shù)據(jù)保存在diag_buffer中;
(2) 由NEW_DIAG_CMD啟動診斷數(shù)據(jù)的傳送;
(3) 用"Diag_buffer_changed"確認(rèn)診斷數(shù)據(jù)已傳送;
(4) 設(shè)置Diag_Flag,下一個讀寫周期將由高優(yōu)先權(quán)響應(yīng)新的診斷請求。
診斷用戶在外部診斷數(shù)據(jù)輸入之前,需要用宏DPS2_GET_DIAG_BUF_PTR( )取得可用的用戶診斷數(shù)據(jù)緩沖區(qū)指針,可將用戶診斷信息和狀態(tài)信息寫入到此緩沖區(qū)中從第7個字節(jié)開始的存儲空間中,前6個字節(jié)為總線標(biāo)準(zhǔn)指定的的診斷頭。用DPS2_SET_DIAG_LEN( )宏指定診斷數(shù)據(jù)的長度,診斷緩沖區(qū)長度范圍為6~244字節(jié),此診斷數(shù)據(jù)長度包括6個字節(jié)固定診斷數(shù)據(jù)和從第7個字節(jié)開始的外部用戶診斷數(shù)據(jù)。設(shè)定診斷數(shù)據(jù)長度宏必須在接收到可用的診斷緩沖區(qū)指針以后,才能被調(diào)用。
用宏DPS2_DIAG_UPDATE( ),可以將新的外部診斷數(shù)據(jù)傳給SPC3中的用戶診斷緩沖區(qū),并返回一個新的診斷數(shù)據(jù)緩沖區(qū)指針。SPC3接收到New_Diag_Cmd診斷發(fā)送請求后,SPC3將用戶診斷緩沖區(qū)的數(shù)據(jù)送到診斷發(fā)送緩沖區(qū),并使原用戶診斷緩沖區(qū)為可用狀態(tài)。由于SPC3的發(fā)送診斷緩沖區(qū)在數(shù)據(jù)發(fā)送完成后,不會自動變成有效狀態(tài),用DPS2_POLL_IND_DIAG_BUFFER_CHANGED( )查詢到診斷緩沖區(qū)的數(shù)據(jù)發(fā)送完成后,用戶需要置診斷緩沖區(qū)可用標(biāo)志位。如果沒有外部診斷數(shù)據(jù)傳送, 或在診斷數(shù)據(jù)被傳出前被刪除,SPC3用6字節(jié)的從站診斷數(shù)據(jù)響應(yīng)來自Profibus-DP主站的診斷請求, 這6字節(jié)的診斷數(shù)據(jù)包括3個字節(jié)的從站狀態(tài)數(shù)據(jù),發(fā)診斷請求的主站地址,從站設(shè)備標(biāo)識號。
診斷處理程序核心程序段如下:
if (DPS2_POLL_IND_DIAG_BUFFER_CHANGED( ) )
{ DPS2_CON_IND_DIAG_BUFFER_CHANGED( );
user_diag_buffer_ptr = DPS2_GET_DIAG_BUF_PTR( );
user_diag_flag = TRUE; }
4 現(xiàn)場設(shè)備GSD文件的編制
為了實現(xiàn)Profibus-DP現(xiàn)場設(shè)備的快速組態(tài),必須提供該產(chǎn)品可靠的電子設(shè)備數(shù)據(jù)單。Profibus-DP設(shè)備的特性均在電子設(shè)備數(shù)據(jù)單中具體說明,電子設(shè)備數(shù)據(jù)單也稱為電子設(shè)備數(shù)據(jù)庫文件GSD。標(biāo)準(zhǔn)化的GSD數(shù)據(jù)將通信擴大到操作員控制級,使用基于GSD的組態(tài)工具可將不同廠商生產(chǎn)的設(shè)備集成在同一總線系統(tǒng)中,即簡便又可靠。GSD文件大體上可以分為三部分:
4.1 一般規(guī)范
該部分包括生產(chǎn)廠商和設(shè)備的名稱,硬件和軟件的版本狀況,支持的波特率,可能的監(jiān)視時間間隔以及總線插頭的信號分配;
4.2 DP主站有關(guān)的規(guī)范
該部分包括只適用于DP主站的各項參數(shù)(如連接從站的最多臺數(shù)或上裝和下裝能力),該部分對從站沒有規(guī)定;
4.3 DP從站有關(guān)的規(guī)范
該部分包括與從站有關(guān)的一切規(guī)范(如輸入/輸出通道的數(shù)量和類型、中斷測試的規(guī)范以及輸入/輸出數(shù)據(jù)一致性的信息)。
GSD文件是由若干個行組成,每行都用一個關(guān)鍵字開頭,包括關(guān)鍵字及參數(shù)(無符號數(shù)或字符串)兩部分。GSD文件中的關(guān)鍵字可以是標(biāo)準(zhǔn)關(guān)鍵字(在PROFIBUS標(biāo)準(zhǔn)中定義)或自定義關(guān)鍵字,標(biāo)準(zhǔn)關(guān)鍵字可以被PROFIBUS的任何組態(tài)工具所識別,而自定義的關(guān)鍵字只能被特定的組態(tài)工具識別。GSD文件主要用于向組態(tài)工具提供從站的組態(tài)數(shù)據(jù)。
GSD文件標(biāo)準(zhǔn)規(guī)定中定義了標(biāo)識不同功能的關(guān)鍵字以供組態(tài)軟件識別,一個實現(xiàn)16路開關(guān)量輸出的DP從站模塊的GSD文件示意如下(僅列舉了最重要的參數(shù),其它一些參數(shù)的定義可依參考文獻(xiàn)2定義):
#Profibus-DP
;支持Profibus-DP協(xié)議
Model_Name=“16_DO” ;從站設(shè)備名稱
Ident_Number=0x18
;從站設(shè)備識別號(認(rèn)證時得到)
Protocol_Ident=0 ;僅支持DP協(xié)議
12M_Supp=1 ;支持12M的波特率
Max_Tsdr_12M=800
;12M波特率時最長響應(yīng)時間為800μs
Max_Diag_Data_Len=8
;最大用戶診斷數(shù)據(jù)長度
Unit_Diag_Bit(0)=“external device not present”
;診斷位0表示的診斷信息
Unit_Diag_Bit(1)= “external device detects fault”
;診斷位1表示的診斷信息
Module=“Module1”0x23
;定義16路開關(guān)量輸出模塊
EndModule ;模塊定義結(jié)束符
類似地,用戶可以根據(jù)設(shè)備廠商提供的設(shè)備相關(guān)參數(shù)編制GSD文件。GSD文件將數(shù)據(jù)通信網(wǎng)絡(luò)擴大到操作員控制級,基于GSD文件的組態(tài)軟件提供了友好的用戶界面。
5 Profibus-DP網(wǎng)絡(luò)組態(tài)
調(diào)試與檢驗Profibus-DP產(chǎn)品前必須組建總線網(wǎng)絡(luò),并進(jìn)行網(wǎng)絡(luò)組態(tài)。通常的組態(tài)方法有兩種:一種是使用COMPROFIBUS組態(tài)軟件組態(tài),該方法較為簡便但只能實現(xiàn)簡單的應(yīng)用,適用于初級用戶或開發(fā)從站產(chǎn)品時使用;另一種是使用STEP7軟件進(jìn)行組態(tài),組態(tài)過程較為復(fù)雜但能夠?qū)崿F(xiàn)較為復(fù)雜的應(yīng)用,組態(tài)本身也成為用戶程序中的一部分。在實際應(yīng)用中,應(yīng)針對不同的需求選擇合適的組態(tài)方法。鑒于篇幅限制,本文只討論常用的STEP7組態(tài)方法。
5.1 網(wǎng)絡(luò)硬件組態(tài)
組態(tài)一個基本的Profibus-DP網(wǎng)絡(luò)所需的模塊包括:電源(PS307/10A),CPU(S7-300系列),CP342-5(Profibus-DP主/從站接口模塊),IM365(數(shù)據(jù)輸入/輸出模塊,供多機架系統(tǒng)使用),中央機架(供安裝各模塊用)。硬件連接完成后需要安裝自行編制的GSD文件,在菜單條中,選擇OPTIONS→INSTALL NEW*.GSE FILES即可。
在組態(tài)硬件前必須首選建立一個STEP7項目,為了建立一個新的STEP7項目,首選應(yīng)打開SIMATIC Manager,然后執(zhí)行如下步驟:
(1) 在菜單條中,選擇FILE-New…打開對話框以便建立一個新的項目;
(2) 選擇“New Projet”按鈕,為這個新的項目設(shè)定“存儲位置(路徑)”;
(3) 登錄新項目的名稱(如,S7-Profibus-DP),用“OK”確認(rèn)并退出。
回到SIMATIC Manager的主菜單。S7-Profibus-DP對象文件夾的建立已經(jīng)自動地生成了MPI對象。在項目屏幕的右半邊可以看到此MPI(多點接口)對象。每次建立一個新項目,STEP7就自動地生成一個MPI對象。MPI是CPU標(biāo)準(zhǔn)的編程和通信接口。
返回到名稱為S7-Profibus-DP項目的屏幕主菜單,選擇對象Profibus并右擊打開快捷菜單。選擇OPEN OBJECT調(diào)用圖形組態(tài)工具Net Pro。在屏幕的上部選擇Profibus子網(wǎng)絡(luò),右擊打開快捷菜單,選擇命令OBJECT PROPERTIES…在“Properties-Profibus”對話框中打開“Network Settings”標(biāo)簽。此時可以為Profibus子網(wǎng)絡(luò)設(shè)置所有有關(guān)的網(wǎng)絡(luò)參數(shù)。
此時需要設(shè)置的參數(shù)主要有:傳輸速率(transmission rate),總線行規(guī)(profile)和總線參數(shù)(bus parameters),其余的參數(shù)采用默認(rèn)設(shè)置即可。所選用的傳輸速率將適用于整個Profibus子網(wǎng)絡(luò),因此在Profibus子網(wǎng)絡(luò)上使用的所有站都必須支持所選用的波特率, 波特率可以在9.6kbit/s~ 12,000kbit/s之間選擇。波特率1500k bit/s推薦作為缺省設(shè)置;總線行規(guī)為不同的Profibus應(yīng)用提供基準(zhǔn)(缺省設(shè)定)。每個總線行規(guī)包含一個Profibus總線參數(shù)集, 這些參數(shù)由STEP7程序計算和設(shè)定,并考慮到特殊的配置、行規(guī)和波特率,這些總線參數(shù)對整個總線和連接在此Profibus子網(wǎng)絡(luò)中的所有節(jié)點都適用;所有總線參數(shù)值均以tBIT(位運行時間)表示,tBIT與波特率有關(guān),二者間的關(guān)系可以列于附表:
[align=center]附表 位運行時間與波特率關(guān)系
[/align]
5.2 組建Profibus-DP網(wǎng)絡(luò)
利用STEP7軟件來建立Profibus-DP網(wǎng)絡(luò)也十分方便,主要包括以下步驟:
(1) 進(jìn)入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)錯誤造成的。本文針對這些問題進(jìn)行了探討,并結(jié)合實例給出了解決方案,具有一定的參考價值。在開發(fā)DP從站產(chǎn)品的過程中,必須對這些問題給予十分關(guān)注。