1 引言
éš¨è‘—ç¶²çµ¡çš„è¿…é€Ÿç™¼å±•ï¼Œè¶Šä¾†è¶Šå¤šçš„å·¥æ¥æŽ§åˆ¶ç³»çµ±èˆ‡ç¶²çµ¡çµåˆï¼Œä¸€äº›å·¥æŽ§çµ„態軟件也紛紛推出了å°ç¶²çµ¡çš„æ”¯æŒã€‚通éŽç¶²çµ¡é€²è¡Œé 程數據采集已經æˆç‚ºå¯èƒ½ï¼Œè€Œä¸”åœ¨ä¸€äº›é ˜åŸŸå·²ç¶“å¾—åˆ°äº†æ‡‰ç”¨ã€‚ç›®å‰å¾—到é‹ç”¨çš„é 程數據采集方法多采用client/serveçµæ§‹ï¼Œå¿…é ˆç·¨å¯«å®¢æˆ¶ç«¯ç¨‹åºå’Œæœå‹™å™¨ç¨‹åºï¼Œé€šéŽtcp套接å—å‚³éžæ•¸æ“šã€‚這固然是一種高效的方法,但å»å˜åœ¨å¦‚下ä¸è¶³:å°ç¶²çµ¡è¦æ±‚é«˜ï¼Œä¸€æ—¦ç¶²çµ¡å‡ºç¾æš«æ™‚å µå¡žç‰å°å•題,系統就無法æ£ç¢ºå·¥ä½œ;手工編程難度大,一般åªèƒ½åœ¨å±€åŸŸç¶²å…§éƒ¨ä½¿ç”¨;客戶端和æœå‹™å™¨ç«¯å¿…é ˆå®‰è£è»Ÿä»¶ã€‚由于這些ä¸è¶³ï¼Œä½¿å¾—基于網絡的é 程數據采集無法迅速推廣。本文介紹一種基于browser/serverçµæ§‹çš„é 程數據采集方法。
2 é 程數據采集采用的通信技術
以太網技術從出ç¾åˆ°ç¾åœ¨çš„è¿‘20å¹´ä¸å¾—到了飛速發展,先åŽå‡ºç¾äº†å兆網ã€ç™¾å…†ç¶²ã€åƒå…†ç¶²ï¼Œå…¶æ‡‰ç”¨é ˜åŸŸä¹Ÿå¾žæœ€åˆçš„è¾¦å…¬è‡ªå‹•åŒ–ç™¼å±•åˆ°å·¥æ¥æŽ§åˆ¶ã€æ¨“å®‡è‡ªå‹•åŒ–é ˜åŸŸã€‚
以太網使用tcp/ipå”è°ï¼Œé€™æ˜¯å€‹è·¨å¹³è‡ºçš„通信å”è°ï¼Œå®ƒæ—¢èƒ½ç”¨äºŽå±€åŸŸç¶²ä¹Ÿèƒ½ç”¨äºŽå»£åŸŸç¶²ï¼Œå¯æ–¹ä¾¿åœ°å¯¦ç¾ç•°ç¨®æ©Ÿä¹‹é–“的互è¯ã€‚åŸºäºŽä»¥ä¸ŠåŽŸå› ï¼Œåœ¨æ¨“å®‡è‡ªå‹•åŒ–å’Œå·¥æ¥æŽ§åˆ¶ç‰é ˜åŸŸï¼Œç¶²çµ¡é›†æˆæ˜¯äººå€‘常常希望將以太網作為主干網,以太網之下用ç¾å ´ç¸½ç·šæˆ–485總線ç‰å°‡å‰ç«¯è¨å‚™é€£åœ¨ä¸€èµ·ã€‚這樣å¯ä»¥ä½¿å…©è€…å„ªå‹¢äº’è£œï¼Œä½¿ç¶²çµ¡é›†æˆæ‡‰ç”¨æ›´åŠ éˆæ´»èˆ‡æ–¹ä¾¿ã€‚
socket支æŒé¢å‘連接和無連接的編程模型,如圖1所示。
[img=347,300]http://www.ca800.com/maga/images/2003101616515398565.gif[/img]
圖1
[img=450,259]http://www.ca800.com/maga/images/2003101616523991408.gif[/img]
下é¢å°ç·¨ç¨‹æ¨¡åž‹çš„å„å€‹ç³»çµ±èª¿ç”¨çµæ§‹å’Œæœ‰é—œé‡è¦å‡½æ•¸èª¿ç”¨ä½œä¸€ç°¡å–®ä»‹ç´¹ã€‚
以下是有關é‡è¦å‡½æ•¸èª¿ç”¨æ ¼å¼åŠèªªæ˜Žï¼Œå¦‚圖2所示。
(1) 創建socket—socketcreate()
èª¿ç”¨æ ¼å¼ç‚º:
socketid= socketcreate(ntype)
說明:返回值socketid是一個整數,å³socket號;ntype:類型,指創建socketçš„æ‡‰ç”¨ç¨‹åºæ‰€å¸Œæœ›çš„æœå‹™å”è°é¡žåž‹ï¼ˆtcp或udp)。
(2) 指定本地地å€â€”bind()
èª¿ç”¨æ ¼å¼ç‚º:
bind(socketid,localip,localport)
說明:localip,本地socket地å€;localport,本地端å£ã€‚
(3) socketlisten()調用
èª¿ç”¨æ ¼å¼:socketlisten(socketid)
說明:用于é¢å‘連接的æœå‹™å™¨ï¼Œè¡¨æ˜Žæ„¿æ„接å—連接。
(4) 建立連接—socketaccept()
èª¿ç”¨æ ¼å¼:
socketaccept(socketid,&dwremoteip)
說明:dwremoteip:指å‘客戶socket地å€çµæ§‹çš„æŒ‡é‡
(5ï¼‰ç™¼é€æ•¸æ“šâ€”———socketsend()
èª¿ç”¨æ ¼å¼:socketsend(socketid,*pby,nlen)
說明:pbyn:指å‘發é€ç·©æ²–å€çš„æŒ‡é‡ï¼Œnlen:ç·©æ²–å€å¤§å°
(6) dsockopen(),dsockclose()
說明:二者直接調用,分別表示打開ã€é—œé–‰socket庫。
(7) socketdestory(socketid)表示釋放標è˜ç‚ºsocketidçš„socket。
由于采用b/s模å¼ï¼Œå®¢æˆ¶æ©Ÿé€šéŽç€è¦½å™¨è¨ªå•æœå‹™å™¨ï¼Œæ‰€ä»¥ä¸‹é¢åƒ…給出æœå‹™å™¨ç«¯socket程åºçš„部分é‡è¦èªžå¥æºç¢¼:
/ /åˆå§‹åŒ–
if(dsock_open()==false)
ï½›printf("unable to initialize socket library "); return 1;ï½
file://創建socket
socketid = socketcreate(tcp_socket);
if(socketid == invalid_socket)
{printf("socketcreate() error ");
dsockclose(); return 1;ï½
file://指定本地地å€
if(socketbind(socketid,0l,port)==false)
{ printf("socketbind() error ");
return falseï½
file://ç‰å¾…接å—連接
if(socketlisten(socketid)==false)
{printf("socketlisten() error ");
return false;ï½
file://與請求通信的客戶機建立連接
if(socketaccept(socketid, &dwip))
ï½›datacollect();//數據采集略ï½
3 é 程數據采集ä¸ç¾å ´ç¸½ç·šæŠ€è¡“的使用
在當å‰ç¾å ´ç¸½ç·šç”¢å“æœè‘—開放å¼ç¾å ´ç¸½ç·šæŠ€è¡“ç™¼å±•çš„å¤§è¶¨å‹¢ä¸‹ï¼Œæˆ‘å€‘ç ”åˆ¶äº†ç‰¹åˆ¥é©åˆåœ‹é˜²å·¥ç¨‹ã€æ™ºèƒ½å»ºç‘ã€å·¥å» 自動化的基于lonworks技術和符åˆlontalkå”è°çš„ç¾å ´ç¸½ç·šæ¸¬æŽ§ç¶²çµ¡ã€‚該網絡充分利用了lonworksç¾æœ‰çš„å„種æˆç†Ÿçš„ã€å…ˆé€²çš„æŠ€è¡“ä»¥åŠæ–¹ä¾¿çš„é–‹ç™¼æ‰‹æ®µï¼Œå› è€Œå…·æœ‰ä»¥ä¸‹çªå‡ºçš„特點:具有高速1.25mbps和低速78kbps兩種通信速度的網絡產å“å¯ä¾›é¸æ“‡;支æŒå¤šç¨®é€šä¿¡ä»‹è³ªï¼ˆé›™çµžç·šã€é›»åŠ›ç·šã€ç„¡ç·šå…‰çº–ç‰ï¼‰;通訊è·é›¢é•·ï¼Œåœ¨78kbps時,在ä¸åŠ ä¸ç¹¼å™¨çš„æƒ…æ³ä¸‹ï¼Œå¯é”2700m,這是一般通信技術難以é”到的性能指標;支æŒå¤šç¨®ç¶²çµ¡æ‹“æ’²çµæ§‹;lontalkå”è°å°è£äº†osiåƒè€ƒæ¨¡åž‹çš„全部七層å”è°ï¼Œæ–¹ä¾¿äº†ä¸Šå±¤æ‡‰ç”¨é–‹ç™¼;neuron神經芯片內部å°è£äº†3個cpu,使應用cpu和通信cpu功能相å°ç¨ç«‹ï¼ŒåŒæ™‚也簡化了應用,通信的å¯é 性更有ä¿éšœ;通信網絡在電氣上是隔離的,ä¿è‰é€šä¿¡ç¶²çµ¡çš„安全å¯é 。
893-lmæ¸¬æŽ§ç¶²çµ¡çš„æ•¸æ“šé‡‡é›†åŠæŽ§åˆ¶ä»»å‹™éƒ½æ˜¯ç”±å„種功能的智能å‰ç«¯åŽ»å®Œæˆçš„。為了讓這些通用的智能å‰ç«¯åœ¨ä¸åŒçš„æ¸¬æŽ§ç³»çµ±ä¸åŽ»å®Œæˆè¦æ±‚çš„ä»»å‹™ï¼Œå°±å¿…é ˆå°å‰ç«¯é€²ç›¸æ‡‰çš„è¨ç½®ï¼Œé€™äº›ä¸‹è¼‰åˆ°å‰ç«¯çš„內容稱為å°å‰ç«¯çš„å‘½ä»¤æˆ–çµ„æ…‹ã€‚ä¸Šä½æ©Ÿå°å‰ç«¯çš„æ“ä½œæ˜¯é€šéŽèª¿ç”¨893-lmç¶²çµ¡é©…å‹•ç¨‹åºæä¾›çš„api函數來實ç¾çš„ï¼Œé©…å‹•ç¨‹åºæä¾›äº†windows/nt用戶編程的支æŒï¼Œé€™äº›å‡½æ•¸è¢«å°è£åœ¨dll庫ä¸ã€‚安è£é©…å‹•ç¨‹åºæ™‚,dll函數庫將自動安è£åˆ°é¸å®šçš„é©…å‹•ç¨‹åºæ–‡ä»¶å¤¾ä¸ã€‚893-lmç¶²å¡å’Œå‰ç«¯æ”¯æŒçš„å‡½æ•¸ä¸»è¦æœ‰:ç¶²å¡é€šä¿¡å£åœ°å€è¨ç½®å‡½æ•¸ï¼ˆlmport)ã€å‰ç«¯ä¿¡æ¯è®€å–函數(lmtype)ã€é–‹é—œé‡ç‹€æ…‹é‡‡é›†å‡½æ•¸ï¼ˆlmstateï¼‰ã€æ¨¡æ“¬é‡æ•¸å€¼é‡‡é›†å‡½æ•¸ï¼ˆlmnum)ã€å‘½ä»¤ç™¼é€å‡½æ•¸ï¼ˆlmcmd)ã€ç¨‹åºidã€èŠ¯ç‰‡id讀å–函數(lmids)ã€é€šé“模å¼è®€å–函數(lmmode)。
4 å‹•æ…‹ç¶²é æŠ€è¡“èˆ‡é 程數據采集
www使用超文本標記語言(html)作為表é”ä¿¡æ¯çš„æ‰‹æ®µï¼Œwwwæœå‹™å™¨ç”¨ä¾†å˜æ”¾html語言編寫的主é ,用戶通éŽwwwç€è¦½å™¨ï¼ˆinternet explore或netscapeç‰ï¼‰è¨ªå•wwwæœå‹™å™¨ï¼Œå–回主é ,經éŽç€è¦½å™¨è§£é‡‹åŽé¡¯ç¤ºå‡ºä¾†ã€‚這就是www的基本工作方å¼ã€‚
普通的htmlèªžè¨€åªæ”¯æŒéœæ…‹çš„æ–‡å—ã€åœ–片ç‰ï¼Œä¹Ÿå°±æ˜¯èªªï¼Œç•¶ä½ 訪å•一個站點時,所看到的é 颿˜¯ä¸è®Šçš„。這大大é™åˆ¶äº†èˆ‡ç”¨æˆ¶çš„äº¤äº’æ€§ï¼Œç‚ºäº†å½Œè£œé€™ä¸€ç¼ºé™·ï¼Œå‹•æ…‹ç¶²é æ‡‰é‹è€Œç”Ÿï¼Œå¦‚javaã€cgiã€aspç‰ã€‚å‹•æ…‹ç¶²é æŠ€è¡“ä¸€èˆ¬éƒ½æ˜¯ç”±åœ¨æœå‹™å™¨ç«¯é‹è¡Œçš„程åºä¾†å¯¦ç¾çš„,å³é€šéŽç·¨ç¨‹ç”¢ç”Ÿä¸åŒçš„htmlç¶²é å¹¶ç”±æœå‹™å™¨ç™¼é€åˆ°ç”¨æˆ¶ç«¯ã€‚å‹•æ…‹ç¶²é æŠ€è¡“ç›®å‰è¢«å»£æ³›æ‡‰ç”¨äºŽè™•ç†ç”¨æˆ¶å®šå–®ã€æŽ¥å—數據查詢ç‰é ˜åŸŸã€‚為了實ç¾ä½¿ç”¨æ™®é€šwebç€è¦½å™¨é€²è¡Œé 程數據采集的目的,我們也必然è¦ç”¨åˆ°å‹•æ…‹ç¶²é æŠ€è¡“ã€‚
å› ç‚ºæœå‹™å™¨ç«¯ç¨‹åºé‡‡ç”¨c語言編寫,所以這些程åºå°±æœ‰äº†ç¡¬ä»¶è¨ªå•èƒ½åŠ›ï¼Œå› è€Œä¹Ÿå°±ä½¿å¾—é‡‡ç”¨å‹•æ…‹ç¶²é æŠ€è¡“å¯¦ç¾é 程數據采集æˆç‚ºå¯èƒ½ã€‚一個基于client/serveçµæ§‹çš„é 程數據采集系統如圖3所示。用戶在客戶計算機上通éŽå®¢æˆ¶ç«¯ç¨‹åºèˆ‡æœå‹™å™¨é€šä¿¡ï¼ŒæŒ‡æ®æœå‹™å™¨ä¸Šçš„上所連接的lonworkså‰ç«¯é‡‡é›†æ•¸æ“šï¼Œå¹¶å°‡çµæžœç™¼é€åˆ°å®¢æˆ¶ç«¯ã€‚如果改æˆåŸºäºŽ broswer/serverçµæ§‹çš„é 程數據采集系統,則客戶計算機就使用普通webç€è¦½å™¨ç™¼å‡ºé‡‡é›†æŒ‡ä»¤å’ŒæŸ¥çœ‹æ•¸æ“šã€‚
[img=450,141]http://www.ca800.com/maga/images/2003101616541096396.gif[/img]
事實上,基于dsockçš„æœå‹™å™¨ç«¯ç¨‹åºç·¨å¯«å®¹æ˜“ã€‚å› ç‚ºå®ƒä¸åŒ…å«ç”¨æˆ¶ç•Œé¢ï¼Œæ‰€æœ‰çš„æ•¸æ“šé‡‡é›†ç”±é‡‡é›†å程åºå®Œæˆï¼Œè¼¸å…¥å‘½ä»¤ç”±æœå‹™å™¨è‡ªå‹•從客戶端得到,而所有的輸出由æœå‹™å™¨è‡ªå‹•發é€åˆ°ç”¨æˆ¶ç€è¦½å™¨ï¼Œå¹¶ç”±ç€è¦½å™¨è² 責解釋和顯示數據。其執行æµç¨‹ç¸½æ˜¯ç°¡å–®çš„讀入命令-程åºè™•ç†-輸出數據。(見圖4)讀入和輸出有著既定dsockè¦å‰‡ï¼Œè€Œè™•ç†éšŽæ®µå‰‡ç„¡ä»»ä½•é™åˆ¶ã€‚dsock基于dod(department of defense)模型,它æä¾›dsock.lib庫,該庫是一dos tcp/ip庫,為需è¦åœ¨dos環境下進行網絡應用編程的用戶æä¾›ç¶²çµ¡æœå‹™æŽ¥å£ã€‚該庫為用戶創建internet應用æä¾›cèªžè¨€å‡½æ•¸èª¿ç”¨ï¼Œå¦‚å‰æ‰€è¿°ã€‚dsock在dosç’°å¢ƒä¸‹çš„çµæ§‹å¦‚圖5所示。
[img=450,281]http://www.ca800.com/maga/images/2003101616533761789.gif[/img]
圖4
[img=412,300]http://www.ca800.com/maga/images/2003101616544779268.gif[/img]
ç¾å ´æ•¸æ“šé€šéŽç›´æŽ¥è¨ªå•硬件或調用驅動程åºçš„æ–¹å¼ç²å¾—,由于cèªžè¨€çš„éˆæ´»æ€§å¯ä»¥ä½¿é‡‡é›†å‹•作得以高效的執行。æœå‹™å™¨æ ¹æ“šæŒ‡å®šçš„è¦æ±‚將將采集到的數據組織æˆhttpæµç™¼é€åˆ°æœå‹™å™¨ã€‚httpå”è°æ˜¯ä¸€ç¨®é«˜å±¤å”è°ï¼Œå»ºç«‹åœ¨tcp/ip之上。
由于httpä¸ä½¿ç”¨æŒçºŒé€£æŽ¥ï¼Œä½¿å¾—這種采集方å¼ä¸é©åˆäºŽé€£çºŒé‡‡é›†ã€‚一次采集請求åªèƒ½å¾—到一組數據,這大大é™åˆ¶äº†å…¶æ‡‰ç”¨èŒƒåœã€‚為了解決這一å•題,å¯ä»¥é‡‡ç”¨å®¢æˆ¶ç«¯ç‰½å¼•的辦法。å³åœ¨ç¶²é 䏿’入定時刷新的功能,æ¯éš”ä¸€æ®µæ™‚é–“å°±å‘æœå‹™å™¨é‡æ–°ç™¼å‡ºé‡‡é›†æŒ‡ä»¤ï¼Œç²å¾—新數據。刷新有兩種方法:一是整個網é 刷新,二是通éŽç·¨å¯«è…³æœ¬ï¼ˆå¯ç”¨vbscript,javascript)程åºï¼Œå¯¦ç¾ç¶²é 局部內容定時更新。
5 應用實例
我們所開發的監控平臺由1臺æœå‹™å™¨å’Œå››è‡ºå¾®æ©Ÿçµ„æˆä»¥å¤ªç¶²ï¼Œæœå‹™å™¨é…有四塊lonworksç¶²å¡ï¼Œä¹Ÿå°±æ˜¯ï¼Œå¯æœ€å¤šå…·æœ‰4個lonworks通é“,æ¯å€‹é€šé“æœ€å¤šå¯æŽ›æŽ¥16個893-lm智能測控å‰ç«¯ï¼ˆè¦‹åœ–6)。整個系統為ç€è¦½å™¨/æœå‹™å™¨ï¼ˆb/sï¼‰çµæ§‹ï¼Œæœå‹™å™¨è² 責數據采集與儲å˜ã€é é¢å„²å˜;4è‡ºå¾®æ©Ÿä½œç‚ºå®¢æˆ¶æ©Ÿï¼Œä¸»è¦æä¾›æ•¸æ“šé¡¯ç¤ºã€ç›£æŽ§æ“ä½œåŠæŒ‡ä»¤ç™¼é€ç•Œé¢ã€‚
[img=447,300]http://www.ca800.com/maga/images/2003101616551743936.gif[/img]
æœå‹™å™¨é‡‡ç”¨åŸºäºŽdosçš„386模塊,這樣也就有dos與windows網絡通信的å•題。在軟件使用上,我們采用專用于dos çš„tcp/ip很好的解決了網絡通信å•題。實際上,在dosç’°å¢ƒä¸æˆ‘們很好的完æˆäº†åœ¨windows下更易實ç¾åŠŸèƒ½ï¼ˆè¬å¦‚ftpã€httpã€telnetç‰ï¼‰ï¼Œå¹¶ä¸”與windows相比,在完æˆä¸å¤ªå¾©é›œçš„任務時,具有更好的性價比。下é¢ä»¥tcp通信為例(見圖7)說明dsock與winsock的通信。
[img=382,300]http://www.ca800.com/maga/images/2003101616564171497.gif[/img]
æœå‹™å™¨å’Œå®¢æˆ¶æ©Ÿä¹‹é–“通信采用é¢å‘來連接的socket編程模å¼ã€‚在æœå‹™å™¨ä¸Šï¼Œæˆ‘們利用borland c3.1編寫了æœå‹™å™¨é€šä¿¡ç¨‹åºï¼Œå®Œæˆæœå‹™å™¨é€šéŽç¶²çµ¡èˆ‡å®¢æˆ¶æ©Ÿä¹‹é–“的數據傳é€ã€‚ï¼ˆé€šä¿¡ç¨‹åºæ¡†åœ–見圖8)數據采集部分專門由æœå‹™å™¨ç«¯æ•¸æ“šé‡‡é›†ç¨‹åºå®Œæˆã€‚
啟動與é‹è¡ŒéŽç¨‹éŽç¨‹:æœå‹™å™¨ä¸Šé›»åŽï¼Œè‡ªå‹•啟動定時采集數據程åºï¼Œå•Ÿå‹•httpå”è°æœå‹™ç¨‹åºï¼Œ
[img=431,300]http://www.ca800.com/maga/images/200310161657911143.gif[/img]
進入通信ç‰å¾…狀態;客戶端通éŽç€è¦½å™¨èˆ‡æœå‹™å™¨é€²è¡Œé€£æŽ¥ï¼Œé€²å…¥è¦æ±‚é é¢åŽï¼Œç¶²é 定時刷新(如1sï¼‰ï¼Œå‘æœå‹™å™¨ç”³è«‹æœå‹™ï¼Œæœå‹™å™¨éŸ¿æ‡‰å®¢æˆ¶è«‹æ±‚,接收來自客戶端的數據放入緩沖數據å€ï¼ŒåŒæ™‚å°‡å®¢æˆ¶è¦æ±‚的緩沖數據å€é€å¾€å®¢æˆ¶ç«¯é€²è¡Œæ•¸æ“šåˆ·æ–°é¡¯ç¤ºã€‚
6 çµè«–
利用aspç‰å‹•æ…‹ç¶²é æŠ€è¡“å¯¦ç¾é 程監控是å¯è¡Œçš„,在實際工程ä¸é”到了使用通用的webç€è¦½å™¨é€²è¡Œé 程數據采集/監控的目的。這種基于broswer/serverçµæ§‹çš„æ•¸æ“šé‡‡é›†/監控的方法具有開發容易ã€èª¿è©¦ç°¡å–®ç‰å„ªé»žï¼Œé©åˆäºŽåœ¨å¯¦æ™‚æ€§è¦æ±‚ä¸é«˜çš„å ´åˆæ‡‰ç”¨ã€‚這種方法也å¯ä»¥å¾ˆå®¹æ˜“的移æ¤åˆ°äº’è¯ç¶²ï¼Œå¾žè€Œå¤§å¤§æ“´å±•é 程數據采集ã€ç›£æŽ§çš„范åœã€‚