摘? 要:探討了基于Socket的空調(diào)遠(yuǎn)程控制系統(tǒng)設(shè)計和實現(xiàn),介紹了系統(tǒng)設(shè)計的總體方案,并在Delphi編程環(huán)境下實現(xiàn)了基于局域網(wǎng)的控制系統(tǒng)。該系統(tǒng)由服務(wù)器及客戶端組成,服務(wù)器負(fù)責(zé)下達(dá)指令,客戶端接收指令,采集空調(diào)機(jī)組的運行數(shù)據(jù)上報給服務(wù)器。服務(wù)器與客戶端之間采用Socket進(jìn)行遠(yuǎn)程通信。實驗證明,該系統(tǒng)能有效地實現(xiàn)一對多的實時控制。
關(guān)鍵詞:Socket;Delphi;空調(diào);遠(yuǎn)程控制
中圖分類號:TP311? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識碼:A文章編號:2096-4706(2021)20-0024-04
Design of Air Conditioner Remote Control System Based on Socket
XU Li
(Nanjing Tica Climate Solutions Co.,Ltd., Nanjing? 210046, China)
Abstract: This paper discusses the design and implementation of air conditioner remote control system based on Socket, introduces the overall scheme of system design, and realizes the control system based on LAN in Delphi programming environment. The system consists of a server and some clients. The server is responsible for issuing instructions. The clients receive instructions, collect the operation data of the air conditioning unit and report them to the server. Socket is used for remote communication between server and clients. Experiments show that the system can realize one-to-many real-time control effectively.
Keywords: Socket; Delphi; air conditioner; remote control
0? 引? 言
隨著樓宇自動化的不斷發(fā)展,空調(diào)系統(tǒng)使用傳統(tǒng)的工業(yè)現(xiàn)場控制管理模式已無法適應(yīng)需求,而網(wǎng)絡(luò)技術(shù)的發(fā)展,使遠(yuǎn)程控制逐漸進(jìn)入人們的意識。用戶及維護(hù)人員不僅可以通過操作遙控器或線控器控制空調(diào),也可通過計算機(jī)遠(yuǎn)程遙控空調(diào)。這大大提高了客戶及維護(hù)人員的運行維護(hù)能力,也降低了管理費用。本系統(tǒng)在Delphi編程環(huán)境下,利用Socket建立服務(wù)器與客戶端的連接,對空調(diào)系統(tǒng)實施遠(yuǎn)程控制。
1? 相關(guān)知識簡介
1.1? ?TCP/IP
TCP/IP(Transmission Control Protocol/Internet Protocol)即傳輸控制協(xié)議/網(wǎng)間協(xié)議,定義了主機(jī)如何連入因特網(wǎng)及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。TCP/IP系列協(xié)議歸類到四個抽象層中,應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層。每一抽象層建立在低一層提供的服務(wù)上,并且為高一層提供服務(wù)。
1.2? Socket
Socket是在應(yīng)用層和傳輸層之間的一個抽象層,它把TCP/IP層復(fù)雜的操作抽象為幾個簡單的接口供應(yīng)用層調(diào)用已實現(xiàn)進(jìn)程在網(wǎng)絡(luò)中通信。服務(wù)器Socket與客戶端Socket建立通過三次握手建立可靠的連接。
1.3? Delphi
由Borland公司推出的Delphi是全新的可視化編程環(huán)境,它提供了一種方便、快捷的Windows應(yīng)用程序開發(fā)工具。它使用了MicrosoftWindows圖形用戶界面的許多先進(jìn)特性和設(shè)計思想,采用了彈性可重復(fù)利用的完整的面向?qū)ο蟪绦蛘Z言(Object-Oriented Language)、當(dāng)今世界上最快的編譯器、最為領(lǐng)先的數(shù)據(jù)庫技術(shù)。
2? 系統(tǒng)總體設(shè)計方案
基于Socket的空調(diào)遠(yuǎn)程控制系統(tǒng)由空調(diào)系統(tǒng)、遠(yuǎn)程控制器、交換機(jī)及上位機(jī)軟件組成。上位機(jī)與遠(yuǎn)程控制器間采用TCP/IP協(xié)議進(jìn)行通訊,遠(yuǎn)程控制器與空調(diào)機(jī)組間采用485協(xié)議進(jìn)行通訊。設(shè)計方案如圖1所示。
遠(yuǎn)程控制系統(tǒng)大部分時間是對空調(diào)系統(tǒng)運行參數(shù)進(jìn)行監(jiān)控,接收來自遠(yuǎn)程控制器的數(shù)據(jù),實時顯示機(jī)組內(nèi)外機(jī)信息及故障數(shù)據(jù),需要時,亦可對空調(diào)系統(tǒng)進(jìn)行控制。
該系統(tǒng)中采用C/S(客戶/服務(wù)器)模式:作為服務(wù)器端的上位機(jī)軟件用于收集不同地點的遠(yuǎn)程控制器的數(shù)據(jù);作為客戶端的遠(yuǎn)程控制器通過485通訊采集空調(diào)機(jī)組的運行參數(shù),采集的運行參數(shù)利用Socket技術(shù)上報給服務(wù)器。
上位機(jī)與遠(yuǎn)程控制器的連接方式采用TCP/IP連接。上位機(jī)監(jiān)聽特定的端口,在接收到遠(yuǎn)程控制器的連接請求時做出響應(yīng),建立點對點的連接。建立連接后的上位機(jī)及遠(yuǎn)程控制器就可以通過這個連接進(jìn)行通訊。上位機(jī)可以采集不同地點的遠(yuǎn)程控制器的運行參數(shù)信息。
3? 系統(tǒng)的軟件設(shè)計
3.1? Socket技術(shù)應(yīng)用
Socket是“打開—讀/寫—關(guān)閉”模式的實現(xiàn),其交互流程大致如圖2所示。
服務(wù)器端先創(chuàng)建Socket,然后與端口進(jìn)行綁定(bind),再調(diào)用(listen)對端口進(jìn)行監(jiān)聽,等待客戶端連接??蛻舳嗽趧?chuàng)建Socket后,調(diào)用(connect)試圖連接服務(wù)器Socket。如果連接成功,這時客戶端與服務(wù)器端的連接就建立了??蛻舳税l(fā)送數(shù)據(jù)請求,服務(wù)器端接收請求并處理請求,然后把回應(yīng)數(shù)據(jù)發(fā)送給客戶端,客戶端讀取數(shù)據(jù),最后關(guān)閉連接。
3.2? DelphiSocket組件
在Delphi編程環(huán)境中,可用TServerSocket和TClientSocket兩個組件實現(xiàn)socket通訊。
ClientSocket組件為客戶端組件。它是通信的請求方,主動地與服務(wù)器端建立連接。
ServerSocket組件為服務(wù)器端組件。它是通信的響應(yīng)方,它的動作是監(jiān)聽以及被動接受客戶端的連接請求,并對請求進(jìn)行回復(fù)。
ServerSocket組件可以同時接受一個或多個ClientSocket組件的連接請求,并與每個ClientSocket組件建立單獨的連接,進(jìn)行單獨的通信。因此,一個服務(wù)器端可以為多個客戶端服務(wù)。
3.3? 軟件部分設(shè)計方案
上位機(jī)軟件在Delphi平臺下開發(fā),具備良好的可操作性,程序清晰而又容易擴(kuò)展及維護(hù)。上位機(jī)軟件共有5部分組成:Tupo圖、內(nèi)機(jī)控制、群組控制、定時控制及故障處理,如圖3所示。
3.3.1? 拓?fù)鋱D
機(jī)組正常通訊后,拓?fù)鋱D會顯示控制系統(tǒng)所連接的空調(diào)機(jī)組信息。外機(jī)信息包含:遠(yuǎn)程控制器地址、系統(tǒng)地址、外機(jī)地址、離線/在線、內(nèi)機(jī)數(shù)、模式、溫度及故障信息等。內(nèi)機(jī)信息包含:遠(yuǎn)程控制器地址、系統(tǒng)地址、內(nèi)機(jī)地址、離線/在線、開關(guān)、模式、溫度、風(fēng)速及故障信息等。軟件界面如圖4所示。
3.3.2? 內(nèi)機(jī)控制
顯示內(nèi)機(jī)的基礎(chǔ)運行參數(shù),如甲醛、CO2、PM2.5、溫度、濕度、TVOC等;顯示機(jī)組設(shè)定參數(shù),如開關(guān)、模式、溫度、風(fēng)速等。在該頁面內(nèi)機(jī)實行單臺控制,包含開關(guān)機(jī)、運行模式、風(fēng)速等。
3.3.3? 群組控制
在該頁面,對所連接的空調(diào)機(jī)組進(jìn)行分組,可增加或刪除分組信息,并對空調(diào)機(jī)組進(jìn)行分組控制。
3.3.4? 定時控制
配置定時方案參數(shù),包括定時方案名稱、適用群組、周定時、開始時間、模式、風(fēng)速、溫度、開關(guān)。軟件在用戶登錄后,即開啟定時輪詢,當(dāng)設(shè)定時間與當(dāng)前時間一致時,對已分組的空調(diào)機(jī)組進(jìn)行控制。
3.3.5? 故障處理
顯示空調(diào)機(jī)組實時故障信息,包含內(nèi)外機(jī)故障。
3.3.6? 系統(tǒng)配置
配置服務(wù)器端的端口號,設(shè)置軟件連接的遠(yuǎn)程控制器的數(shù)量及故障數(shù)據(jù)記錄周期。
3.3.7? 部分實現(xiàn)代碼
ServerSocket激活的實現(xiàn)代碼為:
procedure TMainForm.sSpeedButton9Click(Sender: TObject);? ? ?//用戶登錄
var
StrTemp,StrTemp1:string;
Begin
。。。。。。
LoginInit();//登錄信息初始化
TimerSetInit(); //定時設(shè)置初始化
indoorlistinit();//內(nèi)機(jī)數(shù)據(jù)初始化
grouplistinit();//分組數(shù)據(jù)初始化
groupsetinit();//分組設(shè)置初始化
ServerSocket1.Active:=true; //TSERVERSOCKET激活
。。。。。。
end;
ServerSocket監(jiān)聽的實現(xiàn)代碼為:
procedure TMainForm.ServerSocket1Listen(Sender: TObject; Socket: TCustomWinSocket);//打開監(jiān)聽
var
i:integer;
begin
if ServerSocket1.Active=true then
begin
sessions:=0;
for? ?i:=0? ?to? ?CMAX? ?do
begin
session[i].CHandle :=0;
session[i].CUsed := False;
end;
end;
end;
ServerSocket讀取客戶端數(shù)據(jù)的實現(xiàn)代碼為:
procedure TMainForm.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);//讀取客戶端數(shù)據(jù)
begin
。。。。。。
smemo1.Lines.Add(StrTemp1+ 接收client'+Socket.Remote Address+包長:+(‘+inttostr(leng)+);+總長:+(‘+inttostr(gDataTotalLength)+););
if gDataTotal[7]=3 then
begin
fillchar(gDataTotal,26624,0); //清緩存
gDataTotalLength:=0;
exit;
end;
if gDataTotal[7]=2 then
begin
if gDataTotalLength=26624 then
begin
if gGatewayid=gGatewaycnt then
begin
Odata();
if (gflag2=0) then //首次搜索存儲內(nèi)外機(jī)信息
begin
if gadd4 begin gatewaylistsave(); IndoorlistSave(); outdoorlistSave(); indoorlistinit(); grouplistinit(); groupsetinit(); add4:=gadd4+1; sStatusBar1.Panels[3].Text:=系統(tǒng)初始化中......; Memo1.Lines.Add(‘系統(tǒng)初始化中......); end else begin gflag2:=1; aq06.SQL.Clear; StrTemp:=UPDATE login SET searchstate = ‘1 ; aq06.SQL.Add(StrTemp); Timer1.Enabled:=true; Timer5.Enabled:=true; gadd4:=0; sStatusBar1.Panels[3].Text:=系統(tǒng)初始化已完成!; sMemo1.Lines.Add(‘系統(tǒng)初始化已完成?。? end; end; gGatewaycnt:=gGatewaycnt+1; if gGatewaycnt>=gGatewaytotal then begin gGatewaycnt:=0; end; Timer4.Enabled:=true; //故障存儲 fillchar(gSendLanData,4352,0); //清緩存 end else begin smemo1.Lines.Add(‘未搜索到+inttostr (gGatewaycnt +1)+#網(wǎng)關(guān)?。? end; end; gDataTotalLength:=0; fillchar(gDataTotal,26624,0); end; end; ServerSocket關(guān)閉的實現(xiàn)代碼為: procedure TMainForm.sSpeedButton2Click(Sender: TObject); //關(guān)閉socket begin ServerSocket1.Active:=false; sSpeedButton9.Enabled:=true; end; 4? 結(jié)? 論 本系統(tǒng)在Delphi平臺上完成,基于Socket的通信方式,使服務(wù)器遠(yuǎn)程獲得了空調(diào)機(jī)組的運行參數(shù),并實現(xiàn)了對空調(diào)機(jī)組的遠(yuǎn)程控制,包含單臺機(jī)組控制、群組控制及定時控制。借助該系統(tǒng),用戶可以方便地通過計算機(jī)遠(yuǎn)程讀取空調(diào)系統(tǒng)的運行狀態(tài)參數(shù),并可對空調(diào)系統(tǒng)進(jìn)行遠(yuǎn)程控制,提高了用戶及調(diào)試人員的使用效率,大大提高了產(chǎn)品的競爭力,具有廣闊的應(yīng)用前景。 參考文獻(xiàn): [1] 楊長春.Delphi程序設(shè)計教程 [M].北京:清華大學(xué)出版社,2016 [2] 李洪彪,廖玲俐,王萬勝,等.基于Socket的遠(yuǎn)程無線監(jiān)控系統(tǒng)設(shè)計及應(yīng)用 [J].自動化與儀器儀表,2009(3):19-21. [3] 張允剛,劉常春,劉偉,等.基于Socket和多線程的遠(yuǎn)程監(jiān)控系統(tǒng) [J].控制工程,2006(2):175-177. [4] 王艷君,朱綿慶,孫彥彥.基于Delphi的遠(yuǎn)程監(jiān)控系統(tǒng)的開發(fā)與實現(xiàn) [J].福建電腦,2008(2):124-125. [5] 李龍光,何伊斐.TCP/IP協(xié)議的安全性淺析 [J].江西廣播電視大學(xué)學(xué)報,2011,50(2):75-78. 作者簡介:許麗(1984—),女,漢族,江蘇句容人,工程師,碩士研究生,研究方向:空調(diào)控制系統(tǒng)。