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結構的數據采集/監控的方法具有開發容易、調試簡單等優點,適合于在實時性要求不高的場合應用。這種方法也可以很容易的移植到互聯網,從而大大擴展遠程數據采集、監控的范圍。