1 應用背景
本系統用來監控æå·žã€æº«å·žã€å¯§æ³¢ç‰åŸŽå¸‚çš„å¾®æ³¢ç«™ï¼Œä¸»æŽ§ç«™åœ¨åŸŽå¸‚æ©Ÿæˆ¿ï¼Œå—æŽ§ç«™å‰‡åœ¨å…§åœ°æˆ–æµ·é‚Šçš„å±±é ‚ï¼Œç’°å¢ƒæ¯”è¼ƒæƒ¡åŠ£ã€‚å…±æœ‰6 個主控站,æ¯å€‹ä¸»æŽ§ç«™å¸¶1 å€‹å—æŽ§ç«™ï¼Œé‡‡ç”¨ç¸½ç·šåž‹çš„ä¸»æŽ§æ©Ÿå’Œå—æŽ§æ©Ÿå…©ç´šçµæ§‹ï¼Œé€šéŽå¾®æ³¢ä¿¡é“(圖1 ç²—é»‘ç·šæ‰€ç¤ºï¼‰åœ¨ä¸»æŽ§æ©Ÿä¹‹é–“å‚³é€æ•¸æ“šï¼Œä½†åœ¨æŸä¸€æ™‚åˆ»åªæœ‰ä¸€è‡ºä¸»æŽ§æ©ŸPolling æ‰€å±¬å—æŽ§æ©Ÿï¼Œè¢«Polling å—æŽ§æ©Ÿä½œæ‡‰ç”處ç†ï¼Œå…¶ä½™ä¸»æŽ§æ©Ÿè™•于åµè½ï¼ˆListen)狀態。主控機Polling å®Œæ‰€å±¬å—æŽ§æ©ŸåŽï¼Œè½‰ç§»Polling 權,由下一臺主控機接管Polling 權……如æ¤å¾ªç’°ã€‚監控內容主è¦åŒ…括柴油發電機ã€é–‹é—œé›»æºã€å¸‚é›»ã€è“„é›»æ± ç‰çš„工作狀態ã€ç’°å¢ƒæº«åº¦ã€æ¿•度ã€é˜²ç›œç‰ã€‚ç³»çµ±çµæ§‹å¦‚圖1 所示。
2 硬件è¨è¨ˆ
油機監控器是與大型柴油發電機é…套的專用監控器,采用雙機熱備;1600 與2800 也是與原è¨å‚™é…套的專用監控器,其ä¸1600 主è¦ç”¨ä¾†ç›£æŽ§å¸‚é›»å’Œç’°å¢ƒåƒæ•¸ï¼Œ2800 å°å…©çµ„è“„é›»æ± ï¼ˆå„12 ç¯€ï¼‰é€²è¡Œç›£æŽ§ï¼›å ±è¦é–‹é—œé‡ï¼ˆé™ä¿¡ï¼‰è¼¸å…¥æ¨¡å¡Šé‡‡ç”¨7041,控制開關é‡ï¼ˆé™æŽ§ï¼‰é‡‡ç”¨7067 æ¨¡å¡Šï¼Œå—æŽ§æ©Ÿçš„ä¸»æŽ§æ¨¡å¡Šå‰‡é¸ç”¨7188。7188 有四個串行å£ï¼Œå…¶ä¸å…©å€‹RS232(僅å«Rxã€Txã€GND 信號線),一個RS485,一個9 é‡å…¨ä¿¡è™ŸRS232 å£ï¼ˆé€šéŽå…§éƒ¨è·³ç·šï¼Œå¯å°‡æ¤å£æ”¹è®Šç‚ºRS485å£ï¼‰ã€‚7188 模塊接å£å¤šï¼ŒæŠ—æƒ¡åŠ£ç’°å¢ƒï¼ŒåŒæ™‚,æä¾›è±å¯Œçš„內部函數,有利于快速開發出性能å¯é çš„ä¸‹ä½æ©Ÿç›£æŽ§ç³»çµ±ç¨‹åºã€‚å—æŽ§ç«™ç³»çµ±çš„ç¡¬ä»¶çµæ§‹è¦‹åœ–2 所示。由于å„監控模塊å‡ä½¿ç”¨RS485 接å£ï¼Œæ‰€ä»¥éœ€è¦å…©å€‹RS232/RS485 è½‰æ›æŽ¥å£ã€‚COM1 å£ç‚ºå…¨ä¿¡è™ŸRS232,連接專用Modem,從而進入微波信é“進行數據的傳輸。主控站通éŽRS232 接å£èˆ‡å°ˆç”¨Modem 連接,進入微波信é“。
[align=center]

圖2 å—æŽ§ç«™ç¡¬ä»¶çµæ§‹[/align]
3 軟件實ç¾
3.1 主控機部分
主控機部分采用組態王5.1 來實ç¾ã€‚該系統å¯é‹è¡ŒäºŽWin98/NT 平臺,真æ£32 ä½ç¨‹åºï¼Œå¯¦æ™‚多任務ã€å¤šç·šç¨‹ï¼Œé‡‡æ¨£é€Ÿåº¦å¿«ï¼Œå¯é æ€§é«˜ï¼ŒåŒæ™‚,支æŒåˆ†å¸ƒå¼æ·å²æ•¸æ“šåº«åŠæ’¥è™Ÿç¶²çµ¡ï¼Œå…·æœ‰è±å¯Œçš„ActiveX 控件,廣泛應用于鋼éµã€åŒ–å·¥ã€ç’°ä¿ã€åœ‹é˜²ã€èˆªç©ºèˆªå¤©ç‰é‡å¤§é ˜åŸŸã€‚
利用組態王開發實時計算機監控系統方便快æ·ã€‚首先,定義è¨å‚™ï¼ŒåŠ è¼‰é€šè¨Šé©…å‹•ç¨‹åºã€‚如å°äºŽæœ¬ç³»çµ±ï¼Œæ˜¯åˆ©ç”¨RS232 接å£ä¾†èˆ‡å—控機通訊的,其定義è¨å‚™æ™‚é¸å–çš„é †åºå¦‚下:智能模塊—I-7000 系列—I-7188—Modbus RTU Extention。然åŽï¼Œå†è¦å®šRS232 çš„å·¥ä½œåƒæ•¸ã€‚其次,定義數據詞典,è¦å®šè®Šé‡åã€æ•¸æ“šé¡žåž‹ã€å¯„å˜å™¨ä¹‹é–“的關系。數據詞典ä¸çš„變é‡å¯ä»¥æ ¹æ“šåŽŸå§‹æ•¸å€¼è‡ªå‹•è¨ˆç®—æ‰€å°æ‡‰çš„線性目標值。最åŽï¼Œæ ¹æ“šçµ„態王æä¾›çš„圖元控件è¨è¨ˆç”¨æˆ¶ç•Œé¢ï¼Œç„¡è«–是å—符串還是圖元,å‡å¯å»ºç«‹â€œå‹•ç•«éˆæŽ¥â€ï¼Œå¾žè€Œï¼Œå°‡æ•¸æ“šè®Šé‡å’Œæ•¸æ“šçš„顯示çµåˆèµ·ä¾†ã€‚數據顯示包括兩種形å¼ï¼Œä¸€æ˜¯æ•¸æ“šçš„æ–‡æœ¬æ ¼å¼çš„顯示,二是數據的動畫表示,如å°äºŽå ±è¦é‡ï¼Œæ£å¸¸é¡¯ç¤ºç¶ ç‡ˆï¼Œå ±è¦é¡¯ç¤ºç´…燈ç‰ã€‚如æ¤ä¸‰æ¥ï¼Œä¸»æŽ§æ©Ÿè»Ÿä»¶é–‹ç™¼åŸºæœ¬å®Œå·¥ã€‚
3.2 å—æŽ§æ©Ÿéƒ¨åˆ†
3.2.1 å—æŽ§æ©Ÿä¸»ç¨‹åºè¨è¨ˆ
7188 æä¾›äº†è±å¯Œè€Œæ–¹ä¾¿çš„庫函數,其ä¸åŒ…括關éµçš„看門狗ã€ç›¸é—œçš„æ•¸æ“šç™¼é€å’ŒæŽ¥æ”¶å‡½æ•¸ã€æ™‚é˜ä¸æ–·å‡½æ•¸ç‰ç‰ï¼ŒåŒæ™‚,還æä¾›äº†è±å¯Œçš„ä¾‹ç¨‹ï¼Œå› è€Œï¼Œä½¿å¾—å—æŽ§æ©Ÿè»Ÿä»¶é‚輯簡æ·ï¼Œé–‹ç™¼æ¥µå…¶è¿…速å¯é ï¼Œèˆ‡å…¶å®ƒå» å®¶çš„æ¨¡å¡Šä¹Ÿèƒ½æ¥µå…¶å‹å¥½åœ°é€£æŽ¥ã€‚7188 çš„ä¸€å€‹ä¸²å£æŽ§åˆ¶å…©è‡ºæ™ºèƒ½è¨å‚™ï¼Œé€™æ˜¯é€šéŽåœ°å€ä¾†å€åˆ†çš„。å°äºŽæ³“æ ¼ç”¢å“çš„7000 ç³»åˆ—æ¨¡å¡Šï¼Œå…¶å·¥ä½œåƒæ•¸åŠæ¨¡å¡Šåœ°å€æ˜¯å¯èª¿çš„,å¯åœ¨ç³»çµ±çµ„è£ä¹‹å‰å°å…¶é€²è¡Œè¨ç½®ã€‚è€Œå…¶å®ƒæ™ºèƒ½æ¨¡å¡Šçš„å·¥ä½œåƒæ•¸å’Œåœ°å€å‰‡æ˜¯ç”±å» å®¶è¨å®šçš„,ä¸å¯æ›´æ”¹ã€‚
由于7188 內嵌基本的DOS ç’°å¢ƒï¼Œå› è€Œï¼Œé‡‡ç”¨TC2.0 ä¾†ç·¨å¯«å—æŽ§æ©Ÿç¨‹åºã€‚主程åºé¦–å…ˆåˆå§‹åŒ–系統,包括å°å„串å£çš„åˆå§‹åŒ–åŠç³»çµ±é‹è¡Œåƒæ•¸çš„åˆå§‹åŒ–,并安è£ç”¨æˆ¶æ™‚é˜ä¸æ–·ã€‚ç”±äºŽè©²ç”¨æˆ¶ä¸æ–·å›ºå®šç‚º1msï¼Œå› è€Œï¼Œåœ¨ä¸æ–·ç¨‹åºä¸æ‡‰é¿å…æŽ¥æ”¶å’Œç™¼é€æ•¸æ“šï¼Œå› 為監控系統ä¸çš„æ³¢ç‰¹çŽ‡ä¸€èˆ¬ä¸è¶…éŽ9600(太高å¯èƒ½å°Žè‡´æ•¸æ“šå‚³è¼¸çš„ä¸å¯é ),而å°äºŽ9600 的波特率,傳輸1 個å—節的數據大約需è¦1ms,一般情æ³ä¸‹ï¼Œæ‰€é¸æ“‡çš„æ³¢ç‰¹çŽ‡ä½ŽäºŽ9600,而且,一次發é€å’ŒæŽ¥æ”¶çš„æ•¸æ“šä¸€èˆ¬è¶…éŽ2 個å—ç¯€ï¼Œå› è€Œï¼Œæœƒå¼•èµ·DOS é‡å…¥ï¼Œå¾žè€Œä½¿ç³»çµ±ä¸å¯é 。所以,時é˜ä¸æ–·ç¨‹åºæ‡‰ç›¡é‡ç°¡æ·ï¼Œä¸»è¦å®Œæˆå„個工作節æ‹ä¹‹é–“çš„å”調å•題,主è¦å·¥ä½œåœ¨ä¸»ç¨‹åºä¸é€²è¡Œï¼Œå³è¼ªè©¢æ™‚間或節æ‹åˆ°ï¼Œå³å‘智能模塊或è¨å‚™ç™¼é€æŸ¥è©¢å‘½ä»¤ï¼Œè€Œç•¶æœ‰æ•¸æ“šè¿”回時,å†åŽ»è®€å–æ•¸æ“šå¹¶è™•ç†ã€‚其軟件系統框圖如圖3 所示。

3.2.2 通訊å•題åŠè§£æ±ºæ–¹æ¡ˆ
å°äºŽè¨ˆç®—機監控系統,最關éµçš„å•題是數據通訊的å¯é æ€§ã€‚æ³“æ ¼ç”¢å“çš„I/O è¨å‚™æ•¸æ“šå‚³è¼¸å¹³ç©©ï¼Œèƒ½èˆ‡7188 å¯é åœ°é€£æŽ¥ï¼Œä½†å…¶å®ƒå» å®¶æ¨¡å¡Šçš„æ•¸æ“šå‚³è¼¸å¹¶ä¸è±¡æ‰€æƒ³è±¡çš„é‚£ä¹ˆé€£çºŒï¼Œå› è€Œï¼Œæ‡‰è©²æ ¹æ“šæ‰€æŽ¥æ”¶çš„æ•¸æ“šçš„ä¸é€£çºŒæ€§ä½œç›¸æ‡‰çš„ç‰å¾…,時間太çŸï¼Œæ•¸æ“šå°‡å¯èƒ½ä¸Ÿå¤±ï¼Œæ™‚間太長,則å¯èƒ½é€ æˆæ»æ©Ÿæˆ–將下一批的數據也一塊接收進來。數據接收程åºè¦‹ç®—法1 ä¸çš„ReadDataDelay å程åºã€‚ç¶“éŽå復調試,å°äºŽæœ¬ç³»çµ±ï¼Œç™¼ç¾å»¶æ™‚數據大于0x0140 å³å¯ï¼Œå°äºŽ0x0130 則數據錯誤率é”1/4 å·¦å³ï¼Œå¹¶ä¸”ï¼Œä¸»è¦æ˜¯æ¯æ¬¡ä¸Ÿå¤±1~2 個å—節的數據。0x0130 與0x0140 之間為臨界值。數據發é€ä¹Ÿç”¨ä¸€å€‹çµ±ä¸€çš„å程åºä¾†å®Œæˆï¼Œè¦‹ç®—法1 ä¸çš„SendData å程åºï¼Œæ•¸çµ„ä¸ç¬¬ä¸€å€‹å—ç¯€ç”¨ä¾†å˜æ”¾æ”¶åˆ°çš„å—節數,其åŽç‚ºæ•¸æ“šå…§å®¹ã€‚以下算法å°åµŒå…¥å¼æ¨¡å¡Šçš„程åºè¨è¨ˆå…·æœ‰é€šç”¨æ€§ï¼Œå…¶åŸºæœ¬åŽŸç†å¯ä»¥å»£æ³›ä½¿ç”¨ã€‚
/****************************************************/
/* ReadDataDelay:讀å–串å£nPort ä¸çš„æ•¸æ“šï¼Œæ”¾å…¥ */
/* bData ä¸ï¼ŒnDealy 為需è¦ç‰å¾…çš„ç¯€æ‹æ•¸ */
/****************************************************/
void ReadDataDelay(int nPort, unsigned char *bData, int nDelay)
ï½›
int nData=0; /*接收到的å—節數*/
int iCount=0; /*ç‰å¾…計時*/
while(iCount < nDelay)
ï½›
if(IsCom(nPort)==QueueIsNotEmpty) /*nPort 壿œ‰æ•¸æ“šï¼Š/
ï½›
nData++;
bData[nData] = ReadCom(nPort); /*讀å–一個å—節的數據*/
iCount = 0; /*有數據,計時清零*/
ï½
else iCount++; /*沒有數據,則ç‰å¾…計時*/
ï½
/*bData 數據ä¸ç¬¬ä¸€å€‹å—節地å€å˜æ”¾æ”¶åˆ°çš„å—節數,其余為å—節內容*/
bData[0] = nData;
ClearCom(nPort); /ï¼Šæ¸…é™¤ä¸²å£æ•¸æ“šå…§å®¹ï¼Œç‚ºä¸‹æ¬¡æ•¸æ“šæŽ¥æ”¶ä½œæº–å‚™ï¼Š/
ï½
/*********************************************************/
/* SendData:nPort 為串å£è™Ÿï¼ŒComData 為需è¦ç™¼é€çš„æ•¸æ“š */
/*********************************************************/
void SendData(int nPort, unsigned char *ComData)
ï½›
int nlength, i;
nlength = ComData[0];
if(2 == nPort) Set485DirToTransmit(nPort);
for(i=0; i
算法1 數據的接收和發é€
æ³“æ ¼ç”¢å“çš„7000 ç³»åˆ—çµ„åˆæ–¹ä¾¿ï¼Œè€Œä¸”,7188 有四個RS232/485 串å£ï¼Œåƒ¹æ ¼å»éžå¸¸ä¾¿å®œï¼Œä¸€å¡Š7188 主控模塊åªè¦2000 å¤šå…ƒï¼Œä¸”åŒæ¨£æŠ—惡劣環境,曾用電å¹é¢¨å°å…¶é€£çºŒå‹å¹ï¼Œä½¿å…¶è¡¨é¢ç™¼ç‡™ï¼ˆæº«åº¦åœ¨50℃以上),å»ä¾ç„¶å¯é åœ°å·¥ä½œã€‚ç”±äºŽä¸Šä½æ©Ÿæä¾›äº†çµ„æ…‹è»Ÿä»¶ï¼Œå› è€Œï¼Œä¸Šä½æ©Ÿç¨‹åºé–‹ç™¼è¿…速,性能å¯é ï¼›ä¸‹ä½æ©Ÿæä¾›äº†è±å¯Œçš„åº«å‡½æ•¸å’Œä¾‹ç¨‹ï¼Œä½¿å¾—ä¸‹ä½æ©Ÿè»Ÿä»¶çš„é‚輯簡æ·ï¼Œç·¨ç¨‹éˆæ´»è€Œè¿…速,看門狗功能åˆèƒ½ä½¿å…¶è‡ªå‹•æ¢å¾©ã€‚作者長期從事計算機監控方é¢çš„é …ç›®èˆ‡ç ”ç©¶å·¥ä½œï¼Œè¨è¨ˆäº†â€œé€šç”¨å¤šåŠŸèƒ½è¨ˆç®—æ©Ÿç›£æŽ§ç³»çµ±æ¸¬è©¦è»Ÿä»¶â€ï¼Œå°ˆé–€ç”¨ä¾†é€šéŽRS232 或RS485 測試監控系統或相應的智能è¨å‚™[1] ã€‚è©²è»Ÿä»¶æ—¢èƒ½å……ç•¶å—æŽ§æ©Ÿç”¨ä¾†æ¸¬è©¦ä¸»æŽ§æ©Ÿç¨‹åºï¼Œåˆèƒ½å……ç•¶ä¸»æŽ§æ©Ÿç”¨ä¾†æ¸¬è©¦å—æŽ§æ©Ÿç¨‹åºï¼Œå¹¶åœ¨å¤šå€‹ç›£æŽ§ç³»çµ±ä¸å¾—到驗è‰ã€‚在測試éŽç¨‹ä¸ç™¼ç¾ï¼Œ7000 系列的模塊數據傳輸平穩,并且,連續測試48å°æ™‚(5 秒測試1 æ¬¡ï¼‰ï¼Œéžæ³“æ ¼ç”¢å“的監控器平å‡ç™¼ç”Ÿ25 次數據傳輸錯誤,而å°äºŽ7000 ç³»åˆ—çš„æ¨¡å¡Šå»æ²’æœ‰ä¸€æ¬¡éŒ¯èª¤è¨˜éŒ„ï¼›ç”¨è©²æ¸¬è©¦è»Ÿä»¶æ¨¡æ“¬å—æŽ§æ©Ÿå°ä¸»æŽ§æ©Ÿï¼ˆçµ„態軟件)進行測試,也沒有錯誤記錄。目å‰ï¼Œè©²ç³»çµ±å·²ç¶“在實驗室調試通éŽï¼Œæ•ˆæžœè‰¯å¥½ã€‚ç”±äºŽé‡‡ç”¨äº†æ³“æ ¼ç”¢å“的組態軟件åŠ7000 系列的模塊,該系統開發迅速,性能å¯é ï¼Œå› è€Œï¼Œæ¥µæœ‰æŽ¨å»£åƒ¹å€¼ï¼ˆonspring@sina.com)。
[1] 馬玉春, 宋瀚濤. 串行通訊å”è°çš„ç ”ç©¶èˆ‡æ‡‰ç”¨. è¨ˆç®—æ©Ÿæ‡‰ç”¨ç ”ç©¶, 2004.4, p228