李 乾
(上海交通大學(xué)電子信息與電氣工程學(xué)院,上海 200240)
我國由于水資源與人口、耕地、礦產(chǎn)資源分布和生產(chǎn)力布局不相匹配,以及管理粗放、手段落后等原因,導(dǎo)致了水資源的掠奪性開發(fā)利用,引發(fā)了地下水超采、地下水位不斷下降、湖泊萎縮和水污染加劇等一系列問題,嚴(yán)重威脅到社會(huì)經(jīng)濟(jì)的持續(xù)發(fā)展。由“工程水利”向“資源水利”轉(zhuǎn)變、“傳統(tǒng)水利”向“現(xiàn)代水利、可持續(xù)發(fā)展水利”轉(zhuǎn)變,特別強(qiáng)調(diào)非工程措施的管理作用,需要深入研究水資源實(shí)時(shí)監(jiān)控的理論技術(shù),充分利用現(xiàn)代信息技術(shù),研制和開發(fā)灌區(qū)計(jì)算機(jī)監(jiān)測控制系統(tǒng),為水資源的實(shí)時(shí)監(jiān)測、信息管理、決策支持和遠(yuǎn)程監(jiān)控等提供系統(tǒng)平臺(tái)。系統(tǒng)的建設(shè)運(yùn)行將使水資源的管理發(fā)生重大變革,也將帶來巨大的經(jīng)濟(jì)、社會(huì)和環(huán)境效益。
現(xiàn)代社會(huì)是一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)和PC技術(shù)空前大發(fā)展的時(shí)代,各個(gè)傳統(tǒng)學(xué)科都在積極地與這兩個(gè)新生事物相融合,以謀求學(xué)科的新發(fā)展。在此背景下,農(nóng)業(yè)水利專業(yè)信息化方向應(yīng)運(yùn)而生,灌區(qū)信息化的開發(fā)研究作為主要的研究領(lǐng)域,涉及水利、計(jì)算機(jī)及通信多個(gè)領(lǐng)域,涉及的主要內(nèi)容有計(jì)算機(jī)、通信和網(wǎng)絡(luò)、數(shù)據(jù)通信、網(wǎng)絡(luò)結(jié)構(gòu)、局域網(wǎng)技術(shù)、Internet網(wǎng)絡(luò)、網(wǎng)站組建技術(shù)、網(wǎng)頁制作等多方面的知識(shí)。本研究從實(shí)用性和先進(jìn)性出發(fā),本研究是編寫一個(gè)簡單的基于局域網(wǎng)的工作程序,使分布在局域網(wǎng)內(nèi)的兩臺(tái)計(jì)算機(jī)可以實(shí)現(xiàn)實(shí)時(shí)通信,整個(gè)程序采用Visual Basic 6.0來實(shí)現(xiàn),系統(tǒng)地研究了大型灌區(qū)信息化系統(tǒng)基于UDP協(xié)議的局域網(wǎng)通訊程序的開發(fā)[1]。
該設(shè)計(jì)中所涉及到的網(wǎng)絡(luò)通信協(xié)議主要是TCP/IP協(xié)議:TCP/IP是Transmission Control Protocol/Internet Protocol的簡寫,又叫網(wǎng)絡(luò)通訊協(xié)議,這個(gè)協(xié)議是Internet最基本的協(xié)議,是Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)。確切地說,TCP/IP協(xié)議就是一組包括 TCP 協(xié)議和 IP 協(xié)議,UDP(User Datagram Protocol)協(xié)議、ICMP(Internet Control Message Protocol)協(xié)議和其他一些協(xié)議的協(xié)議組。TCP/IP協(xié)議有三個(gè)主要的特點(diǎn):功能豐富、開放性和普遍性,其特征是采用了分層體系結(jié)構(gòu),所涉及的層次包括網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層,見圖1。
圖1 TCP/IP參考模型
圖2 程序設(shè)計(jì)的界面
開發(fā)中所涉及到的計(jì)算機(jī)編程語言是Visual Basic,Visual Basic6.0是用來創(chuàng)建高性能的企業(yè)應(yīng)用程序及基于Web的應(yīng)用程序的最有效工具。其快速應(yīng)用開發(fā)(Rapid Application Development:RAD)工具既可以作為一個(gè)單獨(dú)的產(chǎn)品,也可以作為Visual Studio 6.0套件的一個(gè)組成部分。
該程序設(shè)計(jì)的界面見圖2,風(fēng)格簡潔。
在該程序的設(shè)計(jì)中,要使用到以下常用控件,見表1。
本開發(fā)研究中用到了以下幾個(gè)WINSOCK的屬性[2]:
(1)PROTOCOL(控制協(xié)議)屬性,將PROTOCOL屬性設(shè)置為sckUDPProtocol。
(2)屬性 RemoteHost是遠(yuǎn)程主機(jī)的地址,LocalPort、RemotePort分別是本地主機(jī)的端口和遠(yuǎn)程主機(jī)端口,對客戶來說,該屬性指定發(fā)送數(shù)據(jù)的本地端口,而對于服務(wù)器來說,這是用于偵聽的本地端口,在設(shè)置這兩個(gè)屬性時(shí)必須保證兩臺(tái)主機(jī)的端口值符合下面規(guī)則,即主機(jī)1的LocalPort等于主機(jī)2的RemotePort值,同樣主機(jī)1的RemotePort等于主機(jī)2的LocalPort值,這樣才能保證兩機(jī)通訊的正常進(jìn)行。
(3)LocalIP屬性用于返回本地機(jī)器的IP地址,格式是IP地址加點(diǎn)的字符串(xxx.xxx.xxx.xxx);
表1 常用控件
開發(fā)中用到了以下幾個(gè)WINSOCK的方法:
(1)在創(chuàng)建UDP應(yīng)用程序時(shí)調(diào)用了Bind方法。Bind方法的作用是為控件“保留”一個(gè)本地端口。例如,如果將控件綁定到1001號端口,那么其它應(yīng)用程序?qū)⒉荒苁褂迷摱丝谶M(jìn)行“監(jiān)聽”。該方法阻止其他應(yīng)用程序使用同樣的端口。
(2)SendData方法用于發(fā)送一條數(shù)據(jù)給另一臺(tái)主機(jī),使用這個(gè)方法的語法是:WinSock.SendData[要發(fā)送的數(shù)據(jù)];
(3)GetData方法。當(dāng)DataArrival事件出現(xiàn)時(shí),代碼調(diào)用Get-Data方法獲取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)在字符串變量中。使用語法是:WinSock.GetData[接收數(shù)據(jù)的變量];
(4)用到了以下WINSOCK的事件:DataArrival事件:使用了DataArrival事件,DataArrival事件是當(dāng)新數(shù)據(jù)到達(dá)時(shí)被觸發(fā)的事件,使用的語法為:WinSock1_DataArrival(bytesTotal As Long),變量bytesTotal表示獲取的數(shù)據(jù)總數(shù)量。
在兩個(gè)WINSOCK控件中間發(fā)送數(shù)據(jù),關(guān)鍵要完成以下三步:
(1)將RemoteHost屬性設(shè)置為另一臺(tái)計(jì)算機(jī)的IP地址。
(2)將RemotePort屬性設(shè)置為第二個(gè)控件的LocalPort屬性。
(3)調(diào)用Bind方法,指定使用的LocalPort。
軟件的編制步驟:
(1)打開Visual Basic 6.0的集成開發(fā)環(huán)境,創(chuàng)建一個(gè)新的標(biāo)準(zhǔn)EXE文件。將缺省的窗體名修改為frmMain,并將其Caption屬性修改為“局域網(wǎng)應(yīng)用程序”;
(2)在窗體中添加一個(gè)WinSock控件,在其“屬性”頁上,單擊“協(xié)議”,并將協(xié)議修改為sckUDPProtocol。爾后陸續(xù)添加其他控件并修改其相應(yīng)的屬性;
(3)編寫代碼;
(4)代碼編寫完成后,將程序生成“Chat.EXE”文件,到此該軟件開發(fā)完成。
將“Chat.EXE”程序,分別安裝到局域網(wǎng)內(nèi)的兩臺(tái)計(jì)算機(jī)上,見圖3。
圖3 程序調(diào)試圖
本文結(jié)合大型灌區(qū)自動(dòng)化監(jiān)控系統(tǒng)的工程實(shí)際,提出將基于UDP協(xié)議的局域網(wǎng)通訊程序應(yīng)用于大型灌區(qū)自動(dòng)化監(jiān)控系統(tǒng)中的數(shù)據(jù)通訊環(huán)節(jié),該程序可以實(shí)現(xiàn)大型灌區(qū)自動(dòng)化監(jiān)控,具有靈活、方便、可靠性高,成本低廉等優(yōu)點(diǎn),對于大型灌區(qū)的信息化建設(shè)具有一定的指導(dǎo)意義。
[2]《計(jì)算機(jī)網(wǎng)絡(luò)》張?jiān)隽?,李生?西安:西安交通大學(xué)出版社,2004.