1 引言
隨著Profibusç¸½ç·šæŠ€è¡“åœ¨æˆ‘åœ‹çš„é€²ä¸€æ¥æ™®åŠï¼ŒåŸºäºŽProfibus-DPå”è°çš„總線產å“åœ¨å¸‚å ´ä¸Šå æ“šäº†è¶Šä¾†è¶Šå¤šçš„份é¡ã€‚自行開發å«DP接å£çš„從站產å“具有é‡è¦çš„ç¾å¯¦æ„義,國內åƒèˆ‡DP總線產å“ç ”ç©¶èˆ‡é–‹ç™¼çš„å–®ä½å¾ˆå¤šï¼Œç„¶è€Œèƒ½å¤ 自æˆé«”系的å»é®®è¦‹å ±é“ã€‚ç©¶å…¶åŽŸå› ï¼Œä¸»è¦æ˜¯åœ¨é–‹ç™¼éŽç¨‹ä¸å¹¾å€‹æ ¸å¿ƒå•題沒有很好地解決。這些å•題主è¦é›†ä¸åœ¨å°Profibus-DP䏿–·æ©Ÿåˆ¶çš„ç†è§£ã€SPC3固態程åºçš„剖æžã€GSD文件的編制以åŠProfibus-DP網絡的組態幾個方é¢ï¼Œæœ¬æ–‡å°‡å°±é€™å¹¾å€‹å•題é€ä¸€é€²è¡Œè¨Žè«–。
2 Profibus-DPçš„ä¸æ–·æ©Ÿåˆ¶
2.1 䏿–·æ©Ÿåˆ¶
Profibus-DPå”è°ä¸çš„䏿–·æŽ§åˆ¶æ˜¯é€šéŽå”è°èŠ¯ç‰‡SPC3å…§çš„ä¸æ–·æŽ§åˆ¶å™¨ä¾†å¯¦ç¾çš„ï¼Œç•¶æœ‰æŒ‡ä»¤å ±æ–‡åˆ°ä¾†æˆ–å„種錯誤事件發生時,CPU會得到通知并進行相應的處ç†ã€‚è©²ä¸æ–·æŽ§åˆ¶å™¨å¯ä»¥ç®¡ç†é 定義的16ç¨®ä¸æ–·äº‹ä»¶ï¼Œé€™äº›äº‹ä»¶é€šéŽä¸€å€‹ä¸æ–·è¼¸å‡ºé€²è¡Œçµ±ä¸€ç®¡ç†ã€‚è©²ä¸æ–·æŽ§åˆ¶å™¨ä¸å…·å‚™ä¸æ–·å„ªå…ˆç´šï¼Œä¹Ÿä¸æä¾›ä¸æ–·çŸ¢é‡ã€‚䏿–·æŽ§åˆ¶å™¨å…§ä¸»è¦æœ‰4個寄å˜å™¨:䏿–·è«‹æ±‚寄å˜å™¨IRR(Interrupt Request Registerï¼‰ï¼Œä¸æ–·å±è”½å¯„å˜å™¨IMR(Interrupt Mask Registerï¼‰ï¼Œä¸æ–·å¯„å˜å™¨IR(Interrupt Registerï¼‰å’Œä¸æ–·ç¢ºèªå¯„å˜å™¨IAR(Interrupt Acknowledge Registerï¼‰ã€‚è©²ä¸æ–·æŽ§åˆ¶å™¨å…§éƒ¨çš„工作原ç†ç¤ºæ„如圖1。
所有ç‰å¾…處ç†çš„䏿–·éƒ½å˜å„²åœ¨IRR寄å˜å™¨å…§ï¼Œå€‹åˆ¥çš„䏿–·å¯ä»¥é€šéŽè¨ç½®IMR寄å˜å™¨ä¾†ç¦æ¢ã€‚IRR寄å˜å™¨çš„輸入ä¸å—䏿–·å±è”½çš„影響,未å±è”½çš„䏿–·ä¿¡è™Ÿç¶“éŽæ±‚å’Œé‹ç®—來觸發X/INT䏿–·ã€‚在調試DP從站時,å¯ä»¥åœ¨IRR寄å˜å™¨ç¨®è¨ç½®å„ç¨®ä¸æ–·ä¿¡è™Ÿä¾†é€²è¡Œèª¿è©¦ã€‚所有經微處ç†å™¨è™•ç†çš„䏿–·åªèƒ½é€šéŽIAR寄å˜å™¨åˆªé™¤ï¼Œç›¸æ‡‰åœ°ï¼Œéœ€è¦å°‡ç›¸æ‡‰çš„ä½ç½®â€œ1â€ã€‚å¦‚æžœä¸€å€‹æ–°çš„ä¸æ–·äº‹ä»¶èˆ‡å…ˆå‰çš„䏀個䏿–·äº‹ä»¶åŒæ™‚åŠ åœ¨IRR寄å˜å™¨çš„è¼¸å…¥ç«¯ï¼Œè©²æ–°äº‹ä»¶å°‡è¢«ä¿æŒã€‚如果處ç†å™¨éš¨åŽä½¿èƒ½ä¸€å€‹å±è”½çš„䏿–·ï¼Œå®ƒå¿…é ˆä¿è‰ä¹‹å‰æ²’æœ‰ä¸æ–·ä¿¡è™ŸåŠ åœ¨IRR寄å˜å™¨çš„è¼¸å…¥ç«¯ã€‚ç‚ºäº†å®‰å…¨èµ·è¦‹ï¼Œåœ¨ä½¿èƒ½ä¸æ–·å±è”½å‰å¿…é ˆåˆªé™¤IRR寄å˜å™¨ä¸çš„相應ä½ã€‚
[align=center]

圖1 Profibus-DP䏿–·æ©Ÿåˆ¶[/align]
2.2 䏿–·ç›¸æ‡‰
雖然在開發DPç”¢å“æ™‚無需å°Profibus-DPçš„ä¸æ–·æ©Ÿåˆ¶é€²è¡Œä¿®æ”¹ï¼Œä½†æ·±å…¥äº†è§£è©²ä¸æ–·æ©Ÿåˆ¶å°äºŽå‰–æžSPC3的固態程åºå…·æœ‰é‡è¦çš„æ„ç¾©ï¼Œå› ç‚ºè©²å›ºæ…‹ç¨‹åºçš„æ¡†æž¶å°±æ˜¯åŸºäºŽProfibus-DPå”è°æ‰€å®šç¾©çš„䏿–·æ©Ÿåˆ¶ã€‚在實際é‹è¡ŒéŽç¨‹ä¸ï¼ŒDP從站內的微處ç†å™¨ä¸»è¦å°å”è°èŠ¯ç‰‡SPC3çš„ä»¥ä¸‹å¹¾é¡žä¸æ–·äº‹ä»¶åšå‡ºéŸ¿æ‡‰ã€‚
(1) Diag_Fetched:診斷數據被主站å–èµ°ï¼Œæ¤æ™‚MCU應發出一個User_Diag_Read_Cmd命令(通éŽè®€RAMä¸çš„User_Diag_Read_Cmd單元實ç¾ï¼‰ï¼Œå°‡ç”¨æˆ¶è¨ºæ–·ç·©æ²–器與MAC緩沖器互æ›ï¼Œä»¥å°‡æ›´æ–°çš„用戶診斷數據æä¾›çµ¦MACå±¤ï¼Œä¾›ä¸»ç«™åœ¨å¿…è¦æ™‚å–用;
(2) IndQ_Entry:新的事件信æ¯é€²å…¥æŒ‡ç¤ºéšŠåˆ—ï¼Œåœ¨ä¸æ–·è™•ç†æ™‚MCU應從指示隊列ä¸è®€å‡ºäº‹ä»¶ä¿¡æ¯ä»£ç¢¼ï¼Œæ ¹æ“šä¸åŒçš„事件åšå‡ºå應。比如發生監視定時器到時事件,就將程åºå¾žæ•¸æ“šäº¤æ›ç‹€æ…‹è·³å‡ºï¼Œåœæ¢è¼¸å…¥æ•¸æ“šçš„發é€;
(3) Go/Leave_Data_Exchange:進入或離開數據交æ›ç‹€æ…‹ã€‚æ¤æ™‚MCU應讀å–SPC3的狀態寄å˜å™¨ï¼Œå¾—知具體是進入還是離開。若是進入數據交æ›ç‹€æ…‹ï¼Œæ‡‰ç•¶æº–備輸入數據以便å‘主站發é€;è‹¥æ˜¯é›¢é–‹å‰‡åœæ¢è¼¸å…¥æ•¸æ“šçš„發é€;
(4) New_Prm_Data:æ–°çš„åƒæ•¸å ±æ–‡ã€‚MCUå¾žç”¨æˆ¶åƒæ•¸ç·©æ²–器ä¸è®€å‡ºåƒæ•¸æ•¸æ“š, ç„¶åŽå°å¾žç«™éœ€è¦è¨ç½®çš„åƒæ•¸é€²è¡Œè¨ç½®ï¼Œæ ¹æ“šè¨ç½®çš„çµæžœæ˜¯å¦æ£ç¢ºå‘SPC3發出一個肯定的User_Prm_OK_Cmd或一個å¦å®šçš„User_Prm_Not_OK_Cmd命令,SPC3ä¾¿æœƒå°æ¤åƒæ•¸å ±æ–‡å‘主站作出肯定或å¦å®šçš„æ‡‰ç”;
(5) New_Cfg_Data:æ–°çš„çµ„æ…‹å ±æ–‡ã€‚MCU從用戶組態緩沖器ä¸è®€å‡ºçµ„æ…‹æ•¸æ“šï¼Œç„¶åŽæ ¹æ“šçµ„æ…‹ä¿¡æ¯è¨ç½®å¾žç«™ï¼Œæ ¹æ“šçµ„æ…‹çš„çµæžœæ˜¯å¦æ£ç¢ºå‘SPC3發出一個肯定的User_Cfg_OK_Cmd或一個å¦å®šçš„User_Cfg_ Not_OK_Cmd命令,SPC3ä¾¿æœƒå°æ¤çµ„æ…‹å ±æ–‡å‘主站作出肯定或å¦å®šçš„æ‡‰ç”;
(6) Get_Cfg_Buffer_Change:讀組態緩沖器改變,å³ç”¨æˆ¶è®€çµ„態緩沖器與MAC讀緩沖器互æ›ã€‚åœ¨ä¸æ–·è™•ç†æ™‚MCU應通éŽè®€User_Cfg_Buffer_Ptr得到新的用戶讀組態緩沖器的指é‡ï¼Œä»¥å°‡å¾žç«™çš„組態信æ¯å¯«å…¥æ–°çš„用戶讀組態緩沖器ä¸ã€‚æ¤ä¸æ–·ç”±User_Get_Cfg_Read_Cmd命令å°ä¸»ç«™çµ„æ…‹å ±æ–‡çš„User_Cfg_OK_Cmd肯定引起;
(7) Diag_Buffer_Changed:診斷緩沖器改變,å³ç”¨æˆ¶è¨ºæ–·ç·©æ²–器與MAC診斷緩沖器互æ›ã€‚åœ¨ä¸æ–·è™•ç†ä¸MCU應通éŽè®€User_Diag_Buffer_Ptr得到新的用戶診斷緩沖器的指é‡ï¼Œä»¥å°‡å¾žç«™çš„診斷信æ¯å¯«å…¥æ–°çš„用戶診斷緩沖器ä¸ï¼Œæ¤ä¸æ–·ç”±User_Diag_Read_Cmd命令引起;
(8) DX_OUT:æ–°çš„è¼¸å‡ºæ•¸æ“šã€‚æ¤æ™‚應發出一個User_New_Dout_Cmd命令,并得到新的U緩沖器的指é‡ï¼Œå¾žè€Œç”¨æˆ¶å¯ä»¥æ ¹æ“šé€™å€‹æŒ‡é‡å¾—到å˜å…¥å…¶ä¸çš„æ–°çš„è¼¸å‡ºæ•¸æ“šï¼ŒåŒæ™‚MCU應發出一個User_New_Din_Cmd,將U輸入數據緩沖器變為Nè¼¸å…¥æ•¸æ“šç·©æ²–å™¨ï¼ŒåŒæ™‚得到新的U緩沖器的指é‡ï¼Œé€™æ¨£ä¾¿å°‡ç”¨æˆ¶çš„輸入數據發é€çµ¦ä¸»ç«™ï¼Œå¹¶å¾—到新的U緩沖器以準備新的輸入數據。
æ‰€æœ‰çš„ä¸æ–·äº‹ä»¶å”調組åˆåœ¨ä¸€èµ·ï¼Œå°±æ§‹æˆäº†Profibus-DP的狀態機,該狀態機模型如圖2:
[align=center]

圖2 Profibus-DP狀態機模型[/align]
3 SPC3固態程åºçš„剖æž
使用西門åå…¬å¸æä¾›çš„å”è°èŠ¯ç‰‡SPC3å¯ä»¥è¼ƒå®¹æ˜“地è¨è¨ˆProfibus-DP從站的硬件電路,相å°è€Œè¨€å¾žç«™çš„軟件è¨è¨ˆè¦ç›¸å°å¾©é›œï¼Œè€Œè»Ÿä»¶è¨è¨ˆçš„é—œéµæ˜¯åˆ©ç”¨é–‹ç™¼åŒ…ä¸æä¾›çš„SPC3å”è°èŠ¯ç‰‡å›ºæ…‹ç¨‹åºï¼Œå› æ¤è§£æžè©²å›ºæ…‹ç¨‹åºæ˜¯å¦ä¸€å€‹éœ€è¦é—œæ³¨çš„å•題。
3.1 SPC3å›ºæ…‹ç¨‹åºæµç¨‹
由于SPC3芯片內的寄å˜å™¨æ˜¯å®Œå…¨æ ¼å¼åŒ–的,固態程åºå¯å¯¦ç¾åœ¨SPC3內部寄å˜å™¨èˆ‡æ‡‰ç”¨æŽ¥å£ä¹‹é–“的連接,為用戶æä¾›äº†å®æŽ¥å£ï¼Œä½¿ç”¨å›ºæ…‹ç¨‹åºå¯å¤§å¤§ç¯€çœç”¨æˆ¶çš„開發的時間。SPC3固態程åºåŒ…ä½¿å¾—ç”¨æˆ¶ç„¡é ˆç›´æŽ¥æ“作寄å˜å™¨å’Œè¨ˆç®—å˜å„²ç©ºé–“。固態程åºä¸åŒ…å«çš„å„ç¨‹åºæ¨¡å¡Šæœ‰:
(1) 主程åºSERSPC3.C,主è¦å®ŒæˆSPC3åˆå§‹åŒ–,啟動,外部信號處ç†ï¼Œç™¼é€å’ŒæŽ¥æ”¶æ•¸æ“šå’Œè¨ºæ–·;
(2) 䏿–·æ¨¡å¡ŠINTSPC3.C,主è¦è™•ç†åˆ†é…å¾žç«™åƒæ•¸ã€çµ„態數據檢查和從站地å€è¨å®š;
(3) 函數DPS2SPC3.Cï¼Œé€™äº›å‡½æ•¸æ ¹æ“šçµ„æ…‹æ•¸æ“šè¨ˆç®—è¼¸å…¥è¼¸å‡ºæ•¸æ“šé•·åº¦ï¼Œè¼”åŠ©ç·©æ²–å€åˆ†é…,緩沖å€åˆå§‹åŒ–,è¨ç½®IO數據長度,å„ç·©æ²–å€æ›´æ–°å‡½æ•¸ç‰;
(4) 變é‡å®šç¾©å’Œå®æŽ¥å£DPS2USER.hï¼Œå®æŽ¥å£ä½¿ç”¨æˆ¶èƒ½å¤ 方便地訪å•SPC3çš„å„個寄å˜å™¨ã€‚
SPC3在接收到由Profibus-DP主站傳é€çš„ä¸åŒè¼¸å‡ºæ•¸æ“šæ™‚ï¼Œæœƒç”¢ç”Ÿè¼¸å‡ºæ¨™å¿—ä½ï¼ˆä½äºŽä¸æ–·è«‹æ±‚å—單元),CPU通éŽåœ¨æ‡‰ç”¨å¾ªç’°ä¸æŸ¥è©¢æ¨™å¿—ä½ä¾†æŽ¥æ”¶ä¸»ç«™æ•¸æ“šï¼Œå°äºŽå¯¦æ™‚æ€§è¦æ±‚åš´æ ¼çš„ç³»çµ±ï¼Œå‰‡æ‡‰é‡‡ç”¨ä¸æ–·æ–¹å¼é€²è¡Œè¼¸å‡ºæ•¸æ“šçš„處ç†ã€‚主程åºé¦–先利用開發包ä¸çš„DPS2å°SPC3進行åˆå§‹åŒ–,å…è¨±å¤–éƒ¨ä¸æ–·INT0,è¨ç½®INT0為高優先級åŠé–‹ä¸æ–·ï¼Œç„¶åŽå•Ÿå‹•SPC3,通éŽSPC3進行主站和從站的數據交æ›ä»¥åŠè™•ç†è¨ºæ–·ã€‚SPC3固態程åºçš„æµç¨‹ç¤ºæ„如圖3:
[align=center]

圖3 SPC3å›ºæ…‹ç¨‹åºæµç¨‹åœ–[/align]
3.2 SPC3åˆå§‹åŒ–å程åº
在SPC3æ£å¸¸å·¥ä½œä¹‹å‰ï¼Œé¦–先需è¦é€²è¡Œåˆå§‹åŒ–,以é…置需è¦çš„寄å˜å™¨ï¼ŒåŒ…括è¨ç½®å”è°èŠ¯ç‰‡çš„ä¸æ–·å…許,寫入從站è˜åˆ¥è™Ÿå’Œåœ°å€ï¼Œè¨ç½®SPC3æ–¹å¼å¯„å˜å™¨ï¼Œè¨ç½®è¨ºæ–·ç·©æ²–å€ï¼Œåƒæ•¸ç·©æ²–å€ï¼Œé…置緩沖å€ï¼Œåœ°å€ç·©æ²–å€ï¼Œåˆå§‹åŒ–é•·åº¦ï¼Œå¹¶æ ¹æ“šä»¥ä¸Šåˆå§‹å€¼å¾—出å„個緩沖å€çš„æŒ‡é‡å’Œè¼”助緩沖å€çš„æŒ‡é‡ã€‚æ ¹æ“šå‚³è¼¸çš„æ•¸æ“šé•·åº¦ï¼Œç¢ºå®šè¼¸å‡ºç·©æ²–å€ï¼Œè¼¸å…¥ç·©æ²–å€åŠæŒ‡é‡ã€‚
åˆå§‹åŒ–程åºç”¨ä»¥å¯¦ç¾ä»¥ä¸‹å„é …åŠŸèƒ½:
(1) SPC3硬件復ä½:應用程åºç”¨RESET復ä½SPC3,åˆå§‹åŒ–內部RAMåŠå¾©ä½å¾®è™•ç†å™¨;
(2) ç·¨è¯å™¨è¨ç½®:é‡å°é¸ç”¨çš„微處ç†å™¨é¸ç”¨åˆé©çš„ç·¨è¯å™¨ï¼Œç”¨#define DPS2_SPC3激活DPS2接å£;
(3) è¨ç½®SPC3䏿–·å±è”½å¯„å˜å™¨:å®DPS2_SET_IND( )激活SPC3䏿–·è§¸ç™¼ï¼ŒåŒ…æ‹¬å¾žç«™åœ°å€æ”¹è®Šï¼Œçµ„æ…‹æ•¸æ“šæª¢æŸ¥ï¼Œåƒæ•¸æª¢æŸ¥ä¸æ–·;
(4) SPC3內部看門狗è¨ç½®:用戶看門狗用于確ä¿åœ¨å¾®è™•ç†å™¨å‡ºç¾æ•…障時,SPC3能在DPS2_SET_USER_WD_VALUE(X)è¨å®šçš„æ™‚間內進行數據通信åŽï¼Œæ™‚間完åŽå‰‡é›¢é–‹æ•¸æ“šäº¤æ›é€šä¿¡ç‹€æ…‹ï¼Œåªè¦å¾®è™•ç†å™¨æ²’有å•é¡Œï¼Œå‰‡éœ€ä¸æ–·åœ°ç”¨DPS2_RESET_USER_WD釿–°è§¸ç™¼çœ‹é–€ç‹—電路;
(5) è¨å‚™æ¨™è˜ç¢¼è¨ç½®:在啟動éŽç¨‹ä¸ï¼Œæ‡‰ç”¨ç¨‹åºè®€å–標è˜ç¢¼ï¼Œå¹¶å°‡å…¶å‚³é€åˆ°SPC3芯片ä¸;
(6) è¨ç½®éŸ¿æ‡‰æ™‚é–“:如果æŸäº›æ‡‰ç”¨éœ€è¦ï¼Œç”¨æˆ¶å¯ä»¥é€šéŽDPS2_SET_MINTSDR(X)為SPC3è¨ç½®æœ€å°çš„從站響應時間;
(7) ç·©æ²–å€åˆå§‹åŒ–è¨ç½®:ç”¨æˆ¶å¿…é ˆç¢ºå®šDPS2_BUFINITçµæ§‹é«”ä¸å®šç¾©çš„å„個用于信æ¯äº¤æ›çš„ç·©æ²–å€çš„長度,這些緩沖å€é•·åº¦æ±ºå®šäº†SPC3ä¸å„個數據緩沖å€çš„長度,這些緩沖å€å 用SPC3é›™å£RAMçš„ç©ºé–“ï¼Œå› æ¤ä¸èƒ½è¶…éŽç·©æ²–å€ç¸½é•·åº¦ã€‚用å®SPC3_INIT( )或Dps2_buf_init( )函數將DPS2_BUFINITåˆå§‹åŒ–åŽçš„çµæ§‹é«”指é‡ä½œç‚ºåƒæ•¸ï¼Œæ ¹æ“šçµæ§‹é«”ä¸çš„æ•¸æ“šåœ¨SPC3çš„RAMä¸åˆ†é…å„ç·©æ²–å€ï¼Œæª¢æŸ¥å„個緩沖å€çš„æœ€å¤§é•·åº¦ï¼Œå¹¶è¿”回緩沖å€åˆå§‹åŒ–åŽçš„æ¸¬è©¦ä¿¡æ¯;
(8) 波特率控制è¨ç½®:用DPS2_SET_BAUD_CNTRL( )å®ï¼Œå¯ä»¥è¨ç½®æ³¢ç‰¹çŽ‡æŽ§åˆ¶æ¨¡å¼ã€‚在æ¤ç›£è¦–定時值éŽåŽï¼Œå¦‚果沒有有效的信æ¯è¢«æŽ¥æ”¶ï¼ŒSPC3將啟動波特率æœç´¢BAUT RATE RESEARCH功能。如果定時監視器被啟用,且DP從站檢查到DP主站有故障,則本地輸出數據被刪除或進入è¦å®šçš„安全狀態。監視定時器的時基為10ms,其時間范åœç‚º10ms~650s。
3.3 接收主站輸出數據å程åº
Profibus-DP主站和SPC3通éŽé»˜èªçš„æœå‹™è¨ªå•é»žäº¤æ›æ•¸æ“šï¼Œåœ¨æ¤éŽç¨‹ä¸SPC3需è¦å®Œæˆçš„任務主è¦åŒ…括以下3æ¥:
(1) SPC3將輸出數據寫入Dç·©æ²–å€ä¸ï¼Œä¸”交æ›Då’ŒNç·©æ²–å€ä¸çš„æ•¸æ“š;
(2) 產生DX-Out䏿–·;
(3) 用戶通éŽäº¤æ›Nå’ŒUç·©æ²–å€ä¸çš„æ•¸æ“šï¼Œå¾žUç·©æ²–å€ä¸ç²å–輸出數據。
第1æ¥ç”±SPC3自動完æˆï¼Œç”¨DPS2_POLL_IND_ DX_OUT( )讀SPC3çš„ä¸æ–·è«‹æ±‚寄å˜å™¨æŸ¥è©¢ä¸æ–·äº‹ä»¶ã€‚當為真時,表示SPC3接收到Write_Read_Dataå ±æ–‡ï¼Œå¹¶ä½¿Nç·©æ²–å€ä¸çš„輸出數據有效。用å®DPS2_OUTPUT_UPDATE( )更新輸出緩沖å€ï¼Œå³å°‡Nç·©æ²–å€ä¸çš„æ•¸æ“šé€åˆ°Uç·©æ²–å€ä¸ã€‚輸出數據ä¸å¹¶ä¸åŒ…æ‹¬è¼¸å‡ºæ•¸æ“šçš„é•·åº¦ï¼Œä½†å¿…é ˆå’ŒDPS2_SET_IO_DATA_LEN( )定義的數據長度一致,當長度ä¸ä¸€è‡´æ™‚,從站將會返回到ç‰å¾…åƒæ•¸è³¦å€¼ç‹€æ…‹ï¼Œè¼¸å‡ºæ•¸æ“šç·©æ²–å€çš„長度在åˆå§‹åŒ–部分程åºä¸ã€‚
è©²éƒ¨åˆ†ç¨‹åºæ ¸å¿ƒä»£ç¢¼å¦‚下:
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 發é€å¾žç«™è¼¸å…¥æ•¸æ“šå程åº
在輸入數據發é€å‰ï¼Œç”¨æˆ¶ä¸»ç¨‹åºé¦–å…ˆè¦å®DPS2_GET_DIN_BUF_PTR( )å–得輸入緩沖å€çš„æŒ‡é‡ï¼Œç”¨å®DPS2_INPUT_UPDATE( )用戶å¯ä»¥é‡å¾©åœ°å°‡è¼¸å…¥æ•¸æ“šå¾žç”¨æˆ¶ç«¯å‚³é€åˆ°DPS2,并å–å¾—å¯ç”¨çš„è¼¸å…¥ç·©æ²–å€æŒ‡é‡ï¼Œç”¨äºŽæŽ¥æ”¶æ–°çš„輸入數據。輸入數據ä¸å¹¶ä¸åŒ…æ‹¬è¼¸å…¥æ•¸æ“šçš„é•·åº¦ï¼Œä½†è¼¸å…¥æ•¸æ“šå¿…é ˆå’ŒDPS2_SET_IO_DATA_LEN( )定義的長度一致。
處ç†è¼¸å…¥æ•¸æ“šï¼Œå°‡è¼¸å…¥æ•¸æ“šå¾žå¤–è¨å¯«å…¥ç·©æ²–倿 ¸å¿ƒç¨‹åºæ®µå¦‚下:
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 診斷數據發é€å程åº
主站和SPC3é€šéŽæœå‹™è¨ªå•點SAP60處ç†è¨ºæ–·æ•¸æ“šï¼ŒSPC3需è¦å®Œæˆçš„任務主è¦åŒ…括以下幾點:
(1) 用戶將外部診斷數據ä¿å˜åœ¨diag_bufferä¸;
(2) ç”±NEW_DIAG_CMD啟動診斷數據的傳é€;
(3) 用"Diag_buffer_changed"確èªè¨ºæ–·æ•¸æ“šå·²å‚³é€;
(4) è¨ç½®Diag_Flag,下一個讀寫周期將由高優先權響應新的診斷請求。
診斷用戶在外部診斷數據輸入之å‰ï¼Œéœ€è¦ç”¨å®DPS2_GET_DIAG_BUF_PTR( )å–å¾—å¯ç”¨çš„ç”¨æˆ¶è¨ºæ–·æ•¸æ“šç·©æ²–å€æŒ‡é‡ï¼Œå¯å°‡ç”¨æˆ¶è¨ºæ–·ä¿¡æ¯å’Œç‹€æ…‹ä¿¡æ¯å¯«å…¥åˆ°æ¤ç·©æ²–å€ä¸å¾žç¬¬7個å—節開始的å˜å„²ç©ºé–“ä¸ï¼Œå‰6個å—節為總線標準指定的的診斷é 。用DPS2_SET_DIAG_LEN( ï¼‰å®æŒ‡å®šè¨ºæ–·æ•¸æ“šçš„長度,診斷緩沖å€é•·åº¦èŒƒåœç‚º6~244å—節,æ¤è¨ºæ–·æ•¸æ“šé•·åº¦åŒ…括6個å—節固定診斷數據和從第7個å—節開始的外部用戶診斷數據。è¨å®šè¨ºæ–·æ•¸æ“šé•·åº¦å®å¿…é ˆåœ¨æŽ¥æ”¶åˆ°å¯ç”¨çš„è¨ºæ–·ç·©æ²–å€æŒ‡é‡ä»¥åŽï¼Œæ‰èƒ½è¢«èª¿ç”¨ã€‚
用å®DPS2_DIAG_UPDATE( ),å¯ä»¥å°‡æ–°çš„外部診斷數據傳給SPC3ä¸çš„用戶診斷緩沖å€ï¼Œå¹¶è¿”å›žä¸€å€‹æ–°çš„è¨ºæ–·æ•¸æ“šç·©æ²–å€æŒ‡é‡ã€‚SPC3接收到New_Diag_Cmd診斷發é€è«‹æ±‚åŽï¼ŒSPC3將用戶診斷緩沖å€çš„æ•¸æ“šé€åˆ°è¨ºæ–·ç™¼é€ç·©æ²–å€ï¼Œå¹¶ä½¿åŽŸç”¨æˆ¶è¨ºæ–·ç·©æ²–å€ç‚ºå¯ç”¨ç‹€æ…‹ã€‚由于SPC3的發é€è¨ºæ–·ç·©æ²–å€åœ¨æ•¸æ“šç™¼é€å®ŒæˆåŽï¼Œä¸æœƒè‡ªå‹•è®Šæˆæœ‰æ•ˆç‹€æ…‹ï¼Œç”¨DPS2_POLL_IND_DIAG_BUFFER_CHANGED( )查詢到診斷緩沖å€çš„æ•¸æ“šç™¼é€å®ŒæˆåŽï¼Œç”¨æˆ¶éœ€è¦ç½®è¨ºæ–·ç·©æ²–å€å¯ç”¨æ¨™å¿—ä½ã€‚如果沒有外部診斷數據傳é€, 或在診斷數據被傳出å‰è¢«åˆªé™¤ï¼ŒSPC3用6å—節的從站診斷數據響應來自Profibus-DP主站的診斷請求, 這6å—節的診斷數據包括3個å—節的從站狀態數據,發診斷請求的主站地å€ï¼Œå¾žç«™è¨å‚™æ¨™è˜è™Ÿã€‚
診斷處ç†ç¨‹åºæ ¸å¿ƒç¨‹åºæ®µå¦‚下:
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 ç¾å ´è¨å‚™GSD文件的編制
為了實ç¾Profibus-DPç¾å ´è¨å‚™çš„å¿«é€Ÿçµ„æ…‹ï¼Œå¿…é ˆæä¾›è©²ç”¢å“å¯é 的電åè¨å‚™æ•¸æ“šå–®ã€‚Profibus-DPè¨å‚™çš„特性å‡åœ¨é›»åè¨å‚™æ•¸æ“šå–®ä¸å…·é«”說明,電åè¨å‚™æ•¸æ“šå–®ä¹Ÿç¨±ç‚ºé›»åè¨å‚™æ•¸æ“šåº«æ–‡ä»¶GSD。標準化的GSD數據將通信擴大到æ“作員控制級,使用基于GSD的組態工具å¯å°‡ä¸åŒå» 商生產的è¨å‚™é›†æˆåœ¨åŒä¸€ç¸½ç·šç³»çµ±ä¸ï¼Œå³ç°¡ä¾¿åˆå¯é 。GSD文件大體上å¯ä»¥åˆ†ç‚ºä¸‰éƒ¨åˆ†:
4.1 一般è¦èŒƒ
è©²éƒ¨åˆ†åŒ…æ‹¬ç”Ÿç”¢å» å•†å’Œè¨å‚™çš„å稱,硬件和軟件的版本狀æ³ï¼Œæ”¯æŒçš„æ³¢ç‰¹çŽ‡ï¼Œå¯èƒ½çš„監視時間間隔以åŠç¸½ç·šæ’é 的信號分é…;
4.2 DP主站有關的è¦èŒƒ
該部分包括åªé©ç”¨äºŽDP主站的å„é …åƒæ•¸ï¼ˆå¦‚連接從站的最多臺數或上è£å’Œä¸‹è£èƒ½åŠ›ï¼‰ï¼Œè©²éƒ¨åˆ†å°å¾žç«™æ²’有è¦å®š;
4.3 DP從站有關的è¦èŒƒ
該部分包括與從站有關的一切è¦èŒƒï¼ˆå¦‚輸入/輸出通é“的數é‡å’Œé¡žåž‹ã€ä¸æ–·æ¸¬è©¦çš„è¦èŒƒä»¥åŠè¼¸å…¥/輸出數據一致性的信æ¯ï¼‰ã€‚
GSD文件是由若干個行組æˆï¼Œæ¯è¡Œéƒ½ç”¨ä¸€å€‹é—œéµå—é–‹é ,包括關éµå—åŠåƒæ•¸ï¼ˆç„¡ç¬¦è™Ÿæ•¸æˆ–å—符串)兩部分。GSD文件ä¸çš„é—œéµå—å¯ä»¥æ˜¯æ¨™æº–é—œéµå—(在PROFIBUS標準ä¸å®šç¾©ï¼‰æˆ–自定義關éµå—,標準關éµå—å¯ä»¥è¢«PROFIBUS的任何組態工具所è˜åˆ¥ï¼Œè€Œè‡ªå®šç¾©çš„é—œéµå—åªèƒ½è¢«ç‰¹å®šçš„組態工具è˜åˆ¥ã€‚GSD文件主è¦ç”¨äºŽå‘組態工具æä¾›å¾žç«™çš„組態數據。
GSD文件標準è¦å®šä¸å®šç¾©äº†æ¨™è˜ä¸åŒåŠŸèƒ½çš„é—œéµå—以供組態軟件è˜åˆ¥ï¼Œä¸€å€‹å¯¦ç¾16路開關é‡è¼¸å‡ºçš„DP從站模塊的GSD文件示æ„如下(僅列舉了最é‡è¦çš„åƒæ•¸ï¼Œå…¶å®ƒä¸€äº›åƒæ•¸çš„定義å¯ä¾åƒè€ƒæ–‡ç»2定義):
#Profibus-DP
;支æŒProfibus-DPå”è°
Model_Name=“16_DO†;從站è¨å‚™å稱
Ident_Number=0x18
;從站è¨å‚™è˜åˆ¥è™Ÿï¼ˆèªè‰æ™‚得到)
Protocol_Ident=0 ;僅支æŒDPå”è°
12M_Supp=1 ;支æŒ12M的波特率
Max_Tsdr_12M=800
;12M波特率時最長響應時間為800μs
Max_Diag_Data_Len=8
;最大用戶診斷數據長度
Unit_Diag_Bit(0)=“external device not presentâ€
;診斷ä½0表示的診斷信æ¯
Unit_Diag_Bit(1)= “external device detects faultâ€
;診斷ä½1表示的診斷信æ¯
Module=“Module1â€0x23
;定義16路開關é‡è¼¸å‡ºæ¨¡å¡Š
EndModule ;æ¨¡å¡Šå®šç¾©çµæŸç¬¦
類似地,用戶å¯ä»¥æ ¹æ“šè¨å‚™å» 商æä¾›çš„è¨å‚™ç›¸é—œåƒæ•¸ç·¨åˆ¶GSD文件。GSD文件將數據通信網絡擴大到æ“作員控制級,基于GSD文件的組態軟件æä¾›äº†å‹å¥½çš„用戶界é¢ã€‚
5 Profibus-DP網絡組態
調試與檢驗Profibus-DP產å“å‰å¿…é ˆçµ„å»ºç¸½ç·šç¶²çµ¡ï¼Œå¹¶é€²è¡Œç¶²çµ¡çµ„æ…‹ã€‚é€šå¸¸çš„çµ„æ…‹æ–¹æ³•æœ‰å…©ç¨®:一種是使用COMPROFIBUS組態軟件組態,該方法較為簡便但åªèƒ½å¯¦ç¾ç°¡å–®çš„æ‡‰ç”¨ï¼Œé©ç”¨äºŽåˆç´šç”¨æˆ¶æˆ–é–‹ç™¼å¾žç«™ç”¢å“æ™‚使用;å¦ä¸€ç¨®æ˜¯ä½¿ç”¨STEP7軟件進行組態,組態éŽç¨‹è¼ƒç‚ºå¾©é›œä½†èƒ½å¤ 實ç¾è¼ƒç‚ºå¾©é›œçš„æ‡‰ç”¨ï¼Œçµ„態本身也æˆç‚ºç”¨æˆ¶ç¨‹åºä¸çš„一部分。在實際應用ä¸ï¼Œæ‡‰é‡å°ä¸åŒçš„éœ€æ±‚é¸æ“‡åˆé©çš„組態方法。鑒于篇幅é™åˆ¶ï¼Œæœ¬æ–‡åªè¨Žè«–常用的STEP7組態方法。
5.1 網絡硬件組態
組態一個基本的Profibus-DP網絡所需的模塊包括:é›»æºï¼ˆPS307/10A),CPU(S7-300系列),CP342-5(Profibus-DP主/å¾žç«™æŽ¥å£æ¨¡å¡Šï¼‰ï¼ŒIM365(數據輸入/輸出模塊,供多機架系統使用),ä¸å¤®æ©Ÿæž¶ï¼ˆä¾›å®‰è£å„模塊用)。硬件連接完æˆåŽéœ€è¦å®‰è£è‡ªè¡Œç·¨åˆ¶çš„GSD文件,在èœå–®æ¢ä¸ï¼Œé¸æ“‡OPTIONS→INSTALL NEW*.GSE FILESå³å¯ã€‚
在組態硬件å‰å¿…é ˆé¦–é¸å»ºç«‹ä¸€å€‹STEP7é …ç›®ï¼Œç‚ºäº†å»ºç«‹ä¸€å€‹æ–°çš„STEP7é …ç›®ï¼Œé¦–é¸æ‡‰æ‰“é–‹SIMATIC Manager,然åŽåŸ·è¡Œå¦‚下æ¥é©Ÿ:
(1) 在èœå–®æ¢ä¸ï¼Œé¸æ“‡FILE-New…打開å°è©±æ¡†ä»¥ä¾¿å»ºç«‹ä¸€å€‹æ–°çš„é …ç›®;
(2) 鏿“‡â€œNew Projetâ€æŒ‰éˆ•ï¼Œç‚ºé€™å€‹æ–°çš„é …ç›®è¨å®šâ€œå˜å„²ä½ç½®ï¼ˆè·¯å¾‘)â€;
(3) ç™»éŒ„æ–°é …ç›®çš„å稱(如,S7-Profibus-DP),用“OKâ€ç¢ºèªå¹¶é€€å‡ºã€‚
回到SIMATIC Manager的主èœå–®ã€‚S7-Profibus-DPå°è±¡æ–‡ä»¶å¤¾çš„建立已經自動地生æˆäº†MPIå°è±¡ã€‚åœ¨é …ç›®å±å¹•çš„å³åŠé‚Šå¯ä»¥çœ‹åˆ°æ¤MPI(多點接å£ï¼‰å°è±¡ã€‚æ¯æ¬¡å»ºç«‹ä¸€å€‹æ–°é …目,STEP7就自動地生æˆä¸€å€‹MPIå°è±¡ã€‚MPI是CPU標準的編程和通信接å£ã€‚
返回到å稱為S7-Profibus-DPé …ç›®çš„å±å¹•主èœå–®ï¼Œé¸æ“‡å°è±¡Profibus并峿“Šæ‰“é–‹å¿«æ·èœå–®ã€‚鏿“‡OPEN OBJECT調用圖形組態工具Net Pro。在å±å¹•çš„ä¸Šéƒ¨é¸æ“‡Profibusåç¶²çµ¡ï¼Œå³æ“Šæ‰“é–‹å¿«æ·èœå–®ï¼Œé¸æ“‡å‘½ä»¤OBJECT PROPERTIES…在“Properties-Profibusâ€å°è©±æ¡†ä¸æ‰“開“Network Settingsâ€æ¨™ç°½ã€‚æ¤æ™‚å¯ä»¥ç‚ºProfibuså網絡è¨ç½®æ‰€æœ‰æœ‰é—œçš„ç¶²çµ¡åƒæ•¸ã€‚
æ¤æ™‚需è¦è¨ç½®çš„åƒæ•¸ä¸»è¦æœ‰:傳輸速率(transmission rate),總線行è¦ï¼ˆprofileï¼‰å’Œç¸½ç·šåƒæ•¸ï¼ˆbus parametersï¼‰ï¼Œå…¶ä½™çš„åƒæ•¸é‡‡ç”¨é»˜èªè¨ç½®å³å¯ã€‚所é¸ç”¨çš„傳輸速率將é©ç”¨äºŽæ•´å€‹Profibusåç¶²çµ¡ï¼Œå› æ¤åœ¨Profibusåç¶²çµ¡ä¸Šä½¿ç”¨çš„æ‰€æœ‰ç«™éƒ½å¿…é ˆæ”¯æŒæ‰€é¸ç”¨çš„æ³¢ç‰¹çއ, 波特率å¯ä»¥åœ¨9.6kbit/s~ 12,000kbit/s之間鏿“‡ã€‚波特率1500k bit/s推薦作為缺çœè¨ç½®;總線行è¦ç‚ºä¸åŒçš„Profibus應用æä¾›åŸºæº–(缺çœè¨å®šï¼‰ã€‚æ¯å€‹ç¸½ç·šè¡Œè¦åŒ…å«ä¸€å€‹Profibusç¸½ç·šåƒæ•¸é›†, é€™äº›åƒæ•¸ç”±STEP7程åºè¨ˆç®—å’Œè¨å®šï¼Œå¹¶è€ƒæ…®åˆ°ç‰¹æ®Šçš„é…ç½®ã€è¡Œè¦å’Œæ³¢ç‰¹çŽ‡ï¼Œé€™äº›ç¸½ç·šåƒæ•¸å°æ•´å€‹ç¸½ç·šå’Œé€£æŽ¥åœ¨æ¤Profibuså網絡ä¸çš„æ‰€æœ‰ç¯€é»žéƒ½é©ç”¨;æ‰€æœ‰ç¸½ç·šåƒæ•¸å€¼å‡ä»¥tBIT(ä½é‹è¡Œæ™‚間)表示,tBIT與波特率有關,二者間的關系å¯ä»¥åˆ—于附表:
[align=center]附表 ä½é‹è¡Œæ™‚間與波特率關系
[/align]
5.2 組建Profibus-DP網絡
利用STEP7軟件來建立Profibus-DP網絡也å分方便,主è¦åŒ…括以下æ¥é©Ÿ:
(1) 進入Hardware組態環境,將使用的å„å€‹æ¨¡å¡Šç”¨é¼ æ¨™æ‹–æ‹‰çš„æ–¹å¼æ·»åŠ åˆ°æ©Ÿæž¶ç›¸æ‡‰çš„ä½ç½®è™•;
(2) 建立Profibus-DP網絡,è¨å®šä¸»ç«™ï¼Œå¹¶å°‡å„從站掛接到網絡上;
(3) è¨ç½®å„主從站的地å€;
(4) 若一個機架容ç´ä¸äº†æ‰€æœ‰çš„æ¨¡å¡Šï¼Œæ‡‰ç›¸æ‡‰åœ°å¢žåŠ æ©Ÿæž¶æ•¸ç›®;
(5) 鏿“‡Stationèœå–®ä¸‹çš„Save and Compile命令,若無錯誤,就å¯ä»¥åˆ©ç”¨Download命令將硬件組態下載到PLCä¸ã€‚
利用CPU314ã€PS307/10Aã€IM365(SEND/RECEIVE)和CP342-2組態得到的Profibus-DP網絡示æ„如圖4。
[align=center]
圖4 Profibus-DP網絡組態示æ„[/align]
在è¨å®šå„ç«™åœ°å€æ™‚æ‡‰æ³¨æ„æœ‰äº›é¡žåž‹çš„DPå¾žç«™ä¸æä¾›ç”¨äºŽè¨ç½®Profibus地å€çš„ç¡¬ä»¶é–‹é—œï¼Œå®ƒå€‘çš„ç¸½ç·šåœ°å€æ˜¯ç”¨2類DP主站功能Set_Slave_Add來指定的。由于它是集æˆçš„MPI在線接å£ï¼Œæ•…STEP7çµ„æ…‹è»Ÿä»¶èƒ½å¤ è™•ç†æ¤ç·¨å€åŠŸèƒ½ï¼Œé€™ç¨®åœ°å€åˆ†é…的方法僅é©ç”¨äºŽæ”¯æŒSet_Slave_Add功能的DP從站è¨å‚™ã€‚æ¤å¤–,從站è¨å‚™çš„缺çœåœ°å€ç”±åˆ¶é€ 商è¨å®šç‚º126ã€‚åœ¨ææ´²æ¨™æº–EN 50170ä¸ï¼Œæ¤åœ°å€å·²ç¶“被ä¿ç•™è€Œä¸èƒ½ç”±Profibus-DP用戶使用,但如果æ¤å¾žç«™æ˜¯æ–°çš„å¾žåˆ¶é€ å•†é‚£é‡Œç›´æŽ¥å¾—ä¾†çš„è¨å‚™ï¼Œä»ç„¶å¯ä»¥è¦‹åˆ°æ¤ç¼ºçœå€¼ã€‚
6 çµæŸèªž
開發Profibus-DP從站的硬件è¨è¨ˆæ¯”較簡單,相å°å¾©é›œçš„æ˜¯å…¶è»Ÿä»¶è¨è¨ˆå’Œè¯æ©Ÿèª¿è©¦ã€‚ç†è€…在DP從站開發éŽç¨‹ä¸ç™¼ç¾ï¼Œå¾ˆå¤šæƒ…æ³ä¸‹å¾žç«™æœªèƒ½æ£å¸¸å·¥ä½œå‡æ˜¯ç”±äºŽGSD文件編寫有å•é¡Œæˆ–ç¶²çµ¡çµ„æ…‹éŒ¯èª¤é€ æˆçš„。本文é‡å°é€™äº›å•題進行了探討,并çµåˆå¯¦ä¾‹çµ¦å‡ºäº†è§£æ±ºæ–¹æ¡ˆï¼Œå…·æœ‰ä¸€å®šçš„åƒè€ƒåƒ¹å€¼ã€‚在開發DP從站產å“çš„éŽç¨‹ä¸ï¼Œå¿…é ˆå°é€™äº›å•題給予å分關注。