基于RTOS的太陽能熱水控制系統設計
在數據采集端,溫度的采集包括對屋頂集熱器溫度的采集,對恒溫小水箱溫度的采集,對大小箱溫度的采集和對輸水管網中某點溫度的采集。數據采集邏輯間接控制循環閥門、回水閥門、加熱閥門、加水閥門。數據采集端的功能模塊圖如圖4所示(虛線部分表示對閥門的間接控制)。

3 通信幀格式
主控制端所實時顯示和進行處理的數據要靠數據采集端進行采集后發回,兩者之間的通信通過RS485接口,采用定義幀結構的方式來實現。
在程序中,我們靠對幀類型的區分和判斷,共定義了七種代表不同含義的幀,分別是:①主控制端向數據采集端發送的數據查詢幀;②數據采集端向主控制端回送的溫度水位等數據幀;③監控計算機端向主控制端發送的查詢閥門狀態幀;④監控計算機向主控制端發送的查詢溫度水位等數據幀;⑤主控制端向監控計算機回送的閥門狀態幀;⑥主控制端向監控計算機回送的數據幀;⑦監控計算機端設置參數告知主控制端幀。若某一幀是傳送數據的幀,則data1~dada7的7個字節中依次填充大水箱水位、小水箱水溫、大小箱水溫、屋頂集熱器中水溫(3個采集點)和采集點處的水溫。若某一幀作為傳送當前閥門狀態的幀,則用7個字節中的前4個來分別表示進水閥、回水閥、加熱閥和循環閥是打開狀態還是閉合狀態。幀結構的格式如圖5所示。
除此之外,還可以按照設計的需要自行增加幀的類型,以實現更為復雜的通信。
4 系統外存儲器EEPROM
由于控制中經常會涉及到參數的更改,為了使掉電后不影響系統的運行,即需要參數能夠重現,系統采用帶有I2C總線接口的EEPROM 2402芯片實現數據的存儲和讀取。讀和寫分別調用的兩個函數如下:
unsigned char eepromread(unsigned char beginbyte){
unsigned char data result;
unsigned char i;
EA=0;
i=RW24XX(result,1,beginbyte,READ_OP,M2402);
EA=1;
return(result);
}
/******************************************************
unsigned char i;
EA=0;
i=RW24XX(datum,beginbyte,WRITE_OP,M2402);
EA=1;
}
可以看出,函數RW24XX是對EEPROM外存儲芯片操作的主體函數,這里給出該函數中包含參數的定義:
bit RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,unsigned char ControlByte,enum eepromtype EepromType)
其中,DataBuff為讀寫數據輸入輸出緩沖區的首地址,ByteQuantity為要讀寫數據的字節數,Address為EEPROM芯片的片內地址,ControlByte是EEPROM的控制字節,具體形式為(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中R/W=1,表示讀操作,R/W=0為寫操作,A2、A1、A0為EEPROM的頁選或片選地址;EepromType為枚舉變量,需為M2401~M24256中的一種,分別對應24C01~24C256,本系統中為M2402;函數返回值為一個位變量,若返回1表示此次操作失效,0表示操作成功;ERRORCOUNT為允許最大次數,若出現ERRORCOUNT次操作失效后,則函數中止操作,并返回1。
在該函數中,調用的若干I2C總線函數如下:
void IICStart(void);
void IICStop(void);
bit IICRecAck(void);
void IICNoAck(void);
void IICAck(void);
unsigned char IICReceiveByte(void);
void IICSendByte(unsigned char sendbyte);
結語
本系統結構簡單,操作方便,擁有手動和自動兩種控制模式,具有一定的智能性;既可現場控制,又可遠程控制;能根據現場狀況,合理地調節控制狀態。便于模塊化處理,使程序的可讀性、可維護性和可移植性都得到進一步提高。
液位計相關文章:磁翻板液位計原理
評論