基于CAN-bus 總線的模擬空調(diào)溫/濕度控制系統(tǒng)
一、系統(tǒng)結(jié)構(gòu)
本系統(tǒng)是一個室內(nèi)空調(diào)溫/濕度控制系統(tǒng)的模擬系統(tǒng)數(shù)據(jù)采集及控制中心通過CAN-bus總線定時采集各個房間的溫/濕度數(shù)據(jù),并對各個房間的溫/濕度進(jìn)行控制。系統(tǒng)的數(shù)據(jù)采集及控制中心由上位機的硬件即任一款ZLGCAN系列接口卡和PC構(gòu)成,軟件由組態(tài)軟件MCGS和ZOPC_Server組成??刂剖壹聪挛粰C由DP-668實驗儀和ZLGCAN系列接口卡中的PCI-9810接口卡模擬。

圖1系統(tǒng)結(jié)構(gòu)圖
二、MCGS工程框架
本空調(diào)溫/濕度控制系統(tǒng)需要對各個控制室及風(fēng)道的溫/濕度值進(jìn)行監(jiān)控,因此工程需要有實時顯示和記錄各控制室溫/濕度值、修改房間溫/濕度SV值、報警顯示、報警顯示瀏覽記錄等功能、工程框架如下:
用戶窗口:封面窗口、主控窗口、控制室窗口1~6、風(fēng)道平面圖、狀態(tài)條、修改控制室1~6SV值、修改SV值消息窗口、風(fēng)道電加熱段消息窗口、修改風(fēng)道溫度表1~2SV值、修改風(fēng)道濕度表1~2SV值、風(fēng)道內(nèi)三級加熱報警窗口。

圖2用戶窗口
運行策略:啟動策略、退出策略、循環(huán)策略、卡車運動策略、控制柜燈閃爍策略、顯示控制室1~6策略、顯示時間策略、主控窗口中提示塊顯示策略。
主菜單:用戶登錄、封面窗口、打開主控窗口、打開各控制室、風(fēng)道平面圖、修改SV值、歷史記錄、通信錯誤記錄、溫/濕度異常記錄、退出系統(tǒng)
子菜單:第一~六控制室、修改一~六號房間、SV值修改風(fēng)道溫度、表1~2SV值、修改風(fēng)道濕度表1~2SV值

圖3系統(tǒng)菜單
三、主要數(shù)據(jù)對象
建立好一個空調(diào)溫/濕度控制系統(tǒng)的MCGS工程后,實現(xiàn)上位機的主要任務(wù)就是建立組態(tài)工程與OPC設(shè)備的連接,實現(xiàn)上位機的主要任務(wù)就是建立組態(tài)工程與OPC設(shè)備的連接,并對采集到的數(shù)據(jù)進(jìn)行處理和顯示。在這個工程的實時數(shù)據(jù)庫中,要進(jìn)行顯示、操作的數(shù)據(jù)對象如表1所示。由于風(fēng)道的數(shù)據(jù)對象較多,為了統(tǒng)一管理,將風(fēng)道當(dāng)作兩個房間節(jié)點來處理。這樣,每個房間都只有1個溫度值對象、1個濕度之對象、1個溫度SV值對象和1個濕度SV值對象。

為了使系統(tǒng)具備記錄數(shù)據(jù)及瀏覽歷史數(shù)據(jù)、錯誤數(shù)據(jù)和異常數(shù)據(jù)的能力,在實時數(shù)據(jù)庫中建立了save、ErrorSave和exception三個數(shù)據(jù)對象組。其中ErrorSave和exception的組對象成員有:RoomID1、ErrorTemp、ErrorHum、ErrorTempSV和ErrorHumSV,save的組成員對象如表1所示。在運行過程中,系統(tǒng)會定時保存save組對象到數(shù)據(jù)庫。當(dāng)通信產(chǎn)生錯誤和房間溫/濕度異常時,系統(tǒng)會將ErrorSave和exception保存到數(shù)據(jù)庫。
在此系統(tǒng)中的OPC設(shè)備使用的是ZOPC_Server服務(wù)器。ZOPC_Server是一個OPC服務(wù)器軟件本軟件,支持操作全系列的ZLGCAN系列接口卡,只要在一臺PC機上插上ZLGCAN系列接口卡中的任何一種或幾種,再運行本服務(wù)器軟件,就可以使用任何一種支持OPC協(xié)議的客戶端軟件(比如組態(tài)軟件:組態(tài)王KingView、昆侖通態(tài)MCGS和Intouch等)來連接到此服務(wù)器通過此服務(wù)器,來跟CAN-bus網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)的傳輸。
本設(shè)計中,ZOPC_Server在數(shù)值存儲模式下和字符串存儲模式下提供的數(shù)據(jù)項都不能直接連接到實時數(shù)據(jù)庫中的數(shù)據(jù)對象,因此必須編寫腳本程序?qū)?shù)據(jù)進(jìn)行處理。關(guān)于數(shù)據(jù)項存儲模式,這里選用被推薦的字符串存儲模式;但是,使用數(shù)值存儲模式會更容易實現(xiàn)此系統(tǒng)。
在實時數(shù)據(jù)庫添加字符型數(shù)據(jù)對象In_CANData和Out_CANData,字符數(shù)為30,將In_CANData和Out_CANData分別連接到OPC設(shè)備的輸入通道和輸出通道,In_CANData的讀寫屬性為只讀,Out_CANData的讀寫屬性為只寫。由于這兩個數(shù)據(jù)對象是字符型的,不便于進(jìn)行數(shù)據(jù)處理,所以應(yīng)該先將它們轉(zhuǎn)換為數(shù)值型對象。在MCGS腳本程序中,用戶不能定義子程序、子函數(shù)和變量,而數(shù)據(jù)對象可以看作是腳本程序中的全局變量,在所有的程序段共用。這給編寫較復(fù)雜的腳本程序帶來不便。要進(jìn)行類似子程序和子函數(shù)的操作,只能用先將要處理的數(shù)據(jù)放入全局變量,然后調(diào)用策略行中的腳本進(jìn)行處理,最后將返回的數(shù)據(jù)放入全局變量的方法進(jìn)行處理。在實時數(shù)據(jù)庫加添以下數(shù)值型對象作為中間變量:

然后,在運行策略中新建一個名為StringToObject的用戶策略,新增一策略行并添加以下腳本程序,用于將In_CANData轉(zhuǎn)換到數(shù)值型對象:
In_Flag=!Hex2I(!mid(In_CANData,1,2))
In_Extern=!Hex2I(!mid(In_CANData,3,1))
In_Remote=!Hex2I(!mid(In_CANData,4,1))
In_ID=!Hex2I(!mid(In_CANData,5,8))
In_DataLen=!Hex2I(!mid(In_CANData,13,2))
In_Data0=!Hex2I(!mid(In_CANData,15,2))
In_Data1=!Hex2I(!mid(In_CANData,17,2))
In_Data2=!Hex2I(!mid(In_CANData,19,2))
In_Data3=!Hex2I(!mid(In_CANData,21,2))
In_Data4=!Hex2I(!mid(In_CANData,23,2))
In_Data5=!Hex2I(!mid(In_CANData,25,2))
In_Data6=!Hex2I(!mid(In_CANData,27,2))
In_Data7=!Hex2I(!mid(In_CANData,29,2))
同樣,在運行策略中新建一個名為ObjectToString的用戶策略,新增一策略行并添加下面的腳本程序,用于將數(shù)值型對象轉(zhuǎn)換到Out_CANData。在下面的程序中,Out_SendID進(jìn)行自加是因為ZOPC_Server要判斷寫入的Out_SendID和上一次寫入的Out_SendID是否相同,如果不同才將報文發(fā)出。
評論