李 乾
(上海交通大學電子信息與電氣工程學院,上海 200240)
我國由于水資源與人口、耕地、礦產資源分布和生產力布局不相匹配,以及管理粗放、手段落后等原因,導致了水資源的掠奪性開發利用,引發了地下水超采、地下水位不斷下降、湖泊萎縮和水污染加劇等一系列問題,嚴重威脅到社會經濟的持續發展。由“工程水利”向“資源水利”轉變、“傳統水利”向“現代水利、可持續發展水利”轉變,特別強調非工程措施的管理作用,需要深入研究水資源實時監控的理論技術,充分利用現代信息技術,研制和開發灌區計算機監測控制系統,為水資源的實時監測、信息管理、決策支持和遠程監控等提供系統平臺。系統的建設運行將使水資源的管理發生重大變革,也將帶來巨大的經濟、社會和環境效益。
現代社會是一個計算機網絡和PC技術空前大發展的時代,各個傳統學科都在積極地與這兩個新生事物相融合,以謀求學科的新發展。在此背景下,農業水利專業信息化方向應運而生,灌區信息化的開發研究作為主要的研究領域,涉及水利、計算機及通信多個領域,涉及的主要內容有計算機、通信和網絡、數據通信、網絡結構、局域網技術、Internet網絡、網站組建技術、網頁制作等多方面的知識。本研究從實用性和先進性出發,本研究是編寫一個簡單的基于局域網的工作程序,使分布在局域網內的兩臺計算機可以實現實時通信,整個程序采用Visual Basic 6.0來實現,系統地研究了大型灌區信息化系統基于UDP協議的局域網通訊程序的開發[1]。
該設計中所涉及到的網絡通信協議主要是TCP/IP協議:TCP/IP是Transmission Control Protocol/Internet Protocol的簡寫,又叫網絡通訊協議,這個協議是Internet最基本的協議,是Internet國際互聯網絡的基礎。確切地說,TCP/IP協議就是一組包括 TCP 協議和 IP 協議,UDP(User Datagram Protocol)協議、ICMP(Internet Control Message Protocol)協議和其他一些協議的協議組。TCP/IP協議有三個主要的特點:功能豐富、開放性和普遍性,其特征是采用了分層體系結構,所涉及的層次包括網絡接口層、網絡層、傳輸層和應用層,見圖1。

圖1 TCP/IP參考模型

圖2 程序設計的界面
開發中所涉及到的計算機編程語言是Visual Basic,Visual Basic6.0是用來創建高性能的企業應用程序及基于Web的應用程序的最有效工具。其快速應用開發(Rapid Application Development:RAD)工具既可以作為一個單獨的產品,也可以作為Visual Studio 6.0套件的一個組成部分。
該程序設計的界面見圖2,風格簡潔。
在該程序的設計中,要使用到以下常用控件,見表1。
本開發研究中用到了以下幾個WINSOCK的屬性[2]:
(1)PROTOCOL(控制協議)屬性,將PROTOCOL屬性設置為sckUDPProtocol。
(2)屬性 RemoteHost是遠程主機的地址,LocalPort、RemotePort分別是本地主機的端口和遠程主機端口,對客戶來說,該屬性指定發送數據的本地端口,而對于服務器來說,這是用于偵聽的本地端口,在設置這兩個屬性時必須保證兩臺主機的端口值符合下面規則,即主機1的LocalPort等于主機2的RemotePort值,同樣主機1的RemotePort等于主機2的LocalPort值,這樣才能保證兩機通訊的正常進行。
(3)LocalIP屬性用于返回本地機器的IP地址,格式是IP地址加點的字符串(xxx.xxx.xxx.xxx);

表1 常用控件
開發中用到了以下幾個WINSOCK的方法:
(1)在創建UDP應用程序時調用了Bind方法。Bind方法的作用是為控件“保留”一個本地端口。例如,如果將控件綁定到1001號端口,那么其它應用程序將不能使用該端口進行“監聽”。該方法阻止其他應用程序使用同樣的端口。
(2)SendData方法用于發送一條數據給另一臺主機,使用這個方法的語法是:WinSock.SendData[要發送的數據];
(3)GetData方法。當DataArrival事件出現時,代碼調用Get-Data方法獲取數據,并將數據存儲在字符串變量中。使用語法是:WinSock.GetData[接收數據的變量];
(4)用到了以下WINSOCK的事件:DataArrival事件:使用了DataArrival事件,DataArrival事件是當新數據到達時被觸發的事件,使用的語法為:WinSock1_DataArrival(bytesTotal As Long),變量bytesTotal表示獲取的數據總數量。
在兩個WINSOCK控件中間發送數據,關鍵要完成以下三步:
(1)將RemoteHost屬性設置為另一臺計算機的IP地址。
(2)將RemotePort屬性設置為第二個控件的LocalPort屬性。
(3)調用Bind方法,指定使用的LocalPort。
軟件的編制步驟:
(1)打開Visual Basic 6.0的集成開發環境,創建一個新的標準EXE文件。將缺省的窗體名修改為frmMain,并將其Caption屬性修改為“局域網應用程序”;
(2)在窗體中添加一個WinSock控件,在其“屬性”頁上,單擊“協議”,并將協議修改為sckUDPProtocol。爾后陸續添加其他控件并修改其相應的屬性;
(3)編寫代碼;
(4)代碼編寫完成后,將程序生成“Chat.EXE”文件,到此該軟件開發完成。
將“Chat.EXE”程序,分別安裝到局域網內的兩臺計算機上,見圖3。

圖3 程序調試圖
本文結合大型灌區自動化監控系統的工程實際,提出將基于UDP協議的局域網通訊程序應用于大型灌區自動化監控系統中的數據通訊環節,該程序可以實現大型灌區自動化監控,具有靈活、方便、可靠性高,成本低廉等優點,對于大型灌區的信息化建設具有一定的指導意義。
[2]《計算機網絡》張增量,李生元.西安:西安交通大學出版社,2004.