基于CAN-bus 總線的模擬空調(diào)溫/濕度控制系統(tǒng)
一、系統(tǒng)結(jié)構(gòu)
本系統(tǒng)是一個(gè)室內(nèi)空調(diào)溫/濕度控制系統(tǒng)的模擬系統(tǒng)數(shù)據(jù)采集及控制中心通過(guò)CAN-bus總線定時(shí)采集各個(gè)房間的溫/濕度數(shù)據(jù),并對(duì)各個(gè)房間的溫/濕度進(jìn)行控制。系統(tǒng)的數(shù)據(jù)采集及控制中心由上位機(jī)的硬件即任一款ZLGCAN系列接口卡和PC構(gòu)成,軟件由組態(tài)軟件MCGS和ZOPC_Server組成。控制室即下位機(jī)由DP-668實(shí)驗(yàn)儀和ZLGCAN系列接口卡中的PCI-9810接口卡模擬。
圖1系統(tǒng)結(jié)構(gòu)圖
二、MCGS工程框架
本空調(diào)溫/濕度控制系統(tǒng)需要對(duì)各個(gè)控制室及風(fēng)道的溫/濕度值進(jìn)行監(jiān)控,因此工程需要有實(shí)時(shí)顯示和記錄各控制室溫/濕度值、修改房間溫/濕度SV值、報(bào)警顯示、報(bào)警顯示瀏覽記錄等功能、工程框架如下:
用戶窗口:封面窗口、主控窗口、控制室窗口1~6、風(fēng)道平面圖、狀態(tài)條、修改控制室1~6SV值、修改SV值消息窗口、風(fēng)道電加熱段消息窗口、修改風(fēng)道溫度表1~2SV值、修改風(fēng)道濕度表1~2SV值、風(fēng)道內(nèi)三級(jí)加熱報(bào)警窗口。
圖2用戶窗口
運(yùn)行策略:?jiǎn)?dòng)策略、退出策略、循環(huán)策略、卡車運(yùn)動(dòng)策略、控制柜燈閃爍策略、顯示控制室1~6策略、顯示時(shí)間策略、主控窗口中提示塊顯示策略。
主菜單:用戶登錄、封面窗口、打開(kāi)主控窗口、打開(kāi)各控制室、風(fēng)道平面圖、修改SV值、歷史記錄、通信錯(cuò)誤記錄、溫/濕度異常記錄、退出系統(tǒng)
子菜單:第一~六控制室、修改一~六號(hào)房間、SV值修改風(fēng)道溫度、表1~2SV值、修改風(fēng)道濕度表1~2SV值
圖3系統(tǒng)菜單
三、主要數(shù)據(jù)對(duì)象
建立好一個(gè)空調(diào)溫/濕度控制系統(tǒng)的MCGS工程后,實(shí)現(xiàn)上位機(jī)的主要任務(wù)就是建立組態(tài)工程與OPC設(shè)備的連接,實(shí)現(xiàn)上位機(jī)的主要任務(wù)就是建立組態(tài)工程與OPC設(shè)備的連接,并對(duì)采集到的數(shù)據(jù)進(jìn)行處理和顯示。在這個(gè)工程的實(shí)時(shí)數(shù)據(jù)庫(kù)中,要進(jìn)行顯示、操作的數(shù)據(jù)對(duì)象如表1所示。由于風(fēng)道的數(shù)據(jù)對(duì)象較多,為了統(tǒng)一管理,將風(fēng)道當(dāng)作兩個(gè)房間節(jié)點(diǎn)來(lái)處理。這樣,每個(gè)房間都只有1個(gè)溫度值對(duì)象、1個(gè)濕度之對(duì)象、1個(gè)溫度SV值對(duì)象和1個(gè)濕度SV值對(duì)象。
為了使系統(tǒng)具備記錄數(shù)據(jù)及瀏覽歷史數(shù)據(jù)、錯(cuò)誤數(shù)據(jù)和異常數(shù)據(jù)的能力,在實(shí)時(shí)數(shù)據(jù)庫(kù)中建立了save、ErrorSave和exception三個(gè)數(shù)據(jù)對(duì)象組。其中ErrorSave和exception的組對(duì)象成員有:RoomID1、ErrorTemp、ErrorHum、ErrorTempSV和ErrorHumSV,save的組成員對(duì)象如表1所示。在運(yùn)行過(guò)程中,系統(tǒng)會(huì)定時(shí)保存save組對(duì)象到數(shù)據(jù)庫(kù)。當(dāng)通信產(chǎn)生錯(cuò)誤和房間溫/濕度異常時(shí),系統(tǒng)會(huì)將ErrorSave和exception保存到數(shù)據(jù)庫(kù)。
在此系統(tǒng)中的OPC設(shè)備使用的是ZOPC_Server服務(wù)器。ZOPC_Server是一個(gè)OPC服務(wù)器軟件本軟件,支持操作全系列的ZLGCAN系列接口卡,只要在一臺(tái)PC機(jī)上插上ZLGCAN系列接口卡中的任何一種或幾種,再運(yùn)行本服務(wù)器軟件,就可以使用任何一種支持OPC協(xié)議的客戶端軟件(比如組態(tài)軟件:組態(tài)王KingView、昆侖通態(tài)MCGS和Intouch等)來(lái)連接到此服務(wù)器通過(guò)此服務(wù)器,來(lái)跟CAN-bus網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)的傳輸。
本設(shè)計(jì)中,ZOPC_Server在數(shù)值存儲(chǔ)模式下和字符串存儲(chǔ)模式下提供的數(shù)據(jù)項(xiàng)都不能直接連接到實(shí)時(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)象,因此必須編寫腳本程序?qū)?shù)據(jù)進(jìn)行處理。關(guān)于數(shù)據(jù)項(xiàng)存儲(chǔ)模式,這里選用被推薦的字符串存儲(chǔ)模式;但是,使用數(shù)值存儲(chǔ)模式會(huì)更容易實(shí)現(xiàn)此系統(tǒng)。
在實(shí)時(shí)數(shù)據(jù)庫(kù)添加字符型數(shù)據(jù)對(duì)象In_CANData和Out_CANData,字符數(shù)為30,將In_CANData和Out_CANData分別連接到OPC設(shè)備的輸入通道和輸出通道,In_CANData的讀寫屬性為只讀,Out_CANData的讀寫屬性為只寫。由于這兩個(gè)數(shù)據(jù)對(duì)象是字符型的,不便于進(jìn)行數(shù)據(jù)處理,所以應(yīng)該先將它們轉(zhuǎn)換為數(shù)值型對(duì)象。在MCGS腳本程序中,用戶不能定義子程序、子函數(shù)和變量,而數(shù)據(jù)對(duì)象可以看作是腳本程序中的全局變量,在所有的程序段共用。這給編寫較復(fù)雜的腳本程序帶來(lái)不便。要進(jìn)行類似子程序和子函數(shù)的操作,只能用先將要處理的數(shù)據(jù)放入全局變量,然后調(diào)用策略行中的腳本進(jìn)行處理,最后將返回的數(shù)據(jù)放入全局變量的方法進(jìn)行處理。在實(shí)時(shí)數(shù)據(jù)庫(kù)加添以下數(shù)值型對(duì)象作為中間變量:
然后,在運(yùn)行策略中新建一個(gè)名為StringToObject的用戶策略,新增一策略行并添加以下腳本程序,用于將In_CANData轉(zhuǎn)換到數(shù)值型對(duì)象:
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))
同樣,在運(yùn)行策略中新建一個(gè)名為ObjectToString的用戶策略,新增一策略行并添加下面的腳本程序,用于將數(shù)值型對(duì)象轉(zhuǎn)換到Out_CANData。在下面的程序中,Out_SendID進(jìn)行自加是因?yàn)閆OPC_Server要判斷寫入的Out_SendID和上一次寫入的Out_SendID是否相同,如果不同才將報(bào)文發(fā)出。
評(píng)論