供水自動(dòng)監(jiān)控調(diào)度系統(tǒng)方案設(shè)計(jì)
1 引言
本文介紹的就是某自來(lái)水公司供水自動(dòng)監(jiān)控及調(diào)度系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方法。自來(lái)水是保障城市經(jīng)濟(jì)發(fā)展和人民生活的重要基礎(chǔ)設(shè)施,是保障城市繁榮發(fā)展、人民生活以及發(fā)展國(guó)民經(jīng)濟(jì)不可缺少的先決條件。從另一個(gè)方面來(lái)說(shuō),我國(guó)是一個(gè)高度缺水的發(fā)展中國(guó)家,隨著改革開(kāi)放的不斷深入和發(fā)展以及人口數(shù)量的不斷增長(zhǎng),無(wú)論從自來(lái)水產(chǎn)量和質(zhì)量上,社會(huì)都對(duì)城市供水提供了更高的要求。而實(shí)現(xiàn)水廠與供水調(diào)度系統(tǒng)的自動(dòng)化,是保證自來(lái)水安全、優(yōu)質(zhì)與供水生產(chǎn)調(diào)度的科學(xué)性、高效性以及合理性的有效措施,現(xiàn)在已經(jīng)逐步發(fā)展為以提高供水質(zhì)量,提高供水系統(tǒng)安全,降低人耗、物耗、水耗這一綜合效益為目標(biāo)。為了達(dá)到這一目標(biāo),要求供水調(diào)度系統(tǒng)從設(shè)計(jì)和選型上就必須考慮到水廠、管網(wǎng)和管理信息系統(tǒng)的一體化和配套完整性。
2 系統(tǒng)功能分析與設(shè)計(jì)
2.1項(xiàng)目背景
此自來(lái)水公司現(xiàn)擁有自來(lái)水廠三個(gè),加壓站兩個(gè)及遍布全城的供水管網(wǎng)。自來(lái)水廠擬完成絕大部分工藝參數(shù)的自動(dòng)檢測(cè)及部分參數(shù)的自動(dòng)控制,取水、制水及送水實(shí)現(xiàn)自動(dòng)程控。水廠參數(shù)應(yīng)實(shí)時(shí)傳送至公司總調(diào)度室,并能接收并執(zhí)行總調(diào)度室指令。加壓站及管網(wǎng)全部納入系統(tǒng),加壓站實(shí)現(xiàn)自動(dòng)化,管網(wǎng)全部壓力、流量等數(shù)據(jù)實(shí)時(shí)傳送至總調(diào)度室。
2.2調(diào)度控制中心的基本功能
(1) 數(shù)據(jù)通訊采集:接收水廠和管網(wǎng)測(cè)壓點(diǎn)的壓力、流量、泵運(yùn)行參數(shù)、耗電量等信息。對(duì)采集的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)和處理,提供對(duì)整個(gè)系統(tǒng)的網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理。
(2) 畫(huà)面顯示:廠站、管網(wǎng)的動(dòng)態(tài)運(yùn)行圖、實(shí)時(shí)趨勢(shì)圖、棒圖、運(yùn)行報(bào)表、及其其他自定義畫(huà)面。還可顯示日期、時(shí)間、報(bào)警、數(shù)據(jù)、工藝流程、設(shè)備狀態(tài)、趨勢(shì)、操作指導(dǎo)、調(diào)度指令等。
(3) 報(bào)警管理:提供全方位的報(bào)警功能,可在多種畫(huà)面中以直觀方式通知調(diào)度人員系統(tǒng)發(fā)生異常。不同級(jí)別的報(bào)警可在所有操作站上接收,報(bào)警沒(méi)有確認(rèn)時(shí)保持閃光。報(bào)警內(nèi)容有:實(shí)際值和偏差值報(bào)警、給定值限值報(bào)警、系統(tǒng)自診斷報(bào)警、識(shí)別變送器運(yùn)行在4~20mA范圍以外的報(bào)警、輸出限幅報(bào)警、電源故障報(bào)警、模板故障報(bào)警、通信故障報(bào)警等等。
(4) 統(tǒng)計(jì)計(jì)算和分析:系統(tǒng)能對(duì)供水量、供水總量等進(jìn)行統(tǒng)計(jì)計(jì)算,并具有數(shù)據(jù)存儲(chǔ)、查詢(xún)、建帳等功能,供管理人員進(jìn)行分析。
根據(jù)以上功能分析,可以將系統(tǒng)設(shè)計(jì)為C/S(客戶(hù)/服務(wù)器)模式,各水廠和加壓站設(shè)立下位機(jī),負(fù)責(zé)預(yù)處理現(xiàn)場(chǎng)測(cè)量點(diǎn)傳感器采集的數(shù)據(jù),然后通過(guò)RS-232將預(yù)處理數(shù)據(jù)傳送給監(jiān)控中心的上位機(jī)。上位機(jī)對(duì)接收到的數(shù)據(jù)進(jìn)一步判斷,存在越限報(bào)警的便啟動(dòng)報(bào)警處理方案,并對(duì)采集的所有數(shù)據(jù)分類(lèi)存儲(chǔ)到數(shù)據(jù)庫(kù)中。圖1是監(jiān)控網(wǎng)絡(luò)的組成結(jié)構(gòu)示意圖。
3 串口通信的實(shí)現(xiàn)
各測(cè)量點(diǎn)測(cè)得的數(shù)據(jù)的是通過(guò)RS-232標(biāo)準(zhǔn)串行接口傳送到監(jiān)控中心的,因?yàn)镽S-232驅(qū)動(dòng)能力太低,所以使用了MODEM作為中繼器。監(jiān)控中心讀取到這些數(shù)據(jù)之后,再根據(jù)預(yù)定義好的規(guī)約分析數(shù)據(jù),做出報(bào)警判斷及進(jìn)行數(shù)據(jù)存儲(chǔ)。監(jiān)控中心軟件運(yùn)行在Windows 2000操作系統(tǒng)下,為了方便對(duì)數(shù)據(jù)庫(kù)編程,可以采用Delphi(Windows平臺(tái)下的可視化軟件開(kāi)發(fā)工具)作為監(jiān)控軟件的開(kāi)發(fā)工具。在Delphi中編寫(xiě)串口讀寫(xiě)程序的方法基本可以分為兩種,一是采用封裝了串口讀寫(xiě)方法的控件,二是直接調(diào)用Win32 API。使用已有控件可以提高編程效率,只需要幾條簡(jiǎn)潔的語(yǔ)句就可以實(shí)現(xiàn)串口的讀寫(xiě),但是靈活性太差,不能完全按照個(gè)人意愿讀寫(xiě)串口,并且有些控件的健壯性也沒(méi)有得到充分的驗(yàn)證,所以本系統(tǒng)程序編寫(xiě)采用Win32 API(應(yīng)用編程適配器:Windows的32位應(yīng)用程序編程接口,一組調(diào)用操作系統(tǒng)或其他程序而獲得訪問(wèn)服務(wù)的例行程序)完成。
API函數(shù)不僅提供了打開(kāi)和讀寫(xiě)通訊端口的操作方法,還提供了名目繁多的函數(shù)以支持對(duì)串行通訊的各種操作。下面以處理串口接收數(shù)據(jù)的子程序?yàn)槔榻B一下本系統(tǒng)的串口通信程序。接收消息之前應(yīng)該先用clearcommerror函數(shù)處理串口通信錯(cuò)誤并報(bào)告當(dāng)前串口狀態(tài),如果出現(xiàn)錯(cuò)誤向用戶(hù)發(fā)出提示并退出此子程序,如果沒(méi)有錯(cuò)誤就再判斷串口接收的數(shù)據(jù)數(shù)是否超過(guò)預(yù)定以緩沖區(qū)的大小。限于篇幅,本文略過(guò)這段語(yǔ)句,直接給出讀取并處理數(shù)據(jù)的主體程序,并給出程序的注釋。
procedure TMainForm.WMCOMMNOTIFY(var message:tmessage);
var
Temp : string; inputbuffer: array[0..4000>of Char;
nBytesRead, dwError:DWORD ; showReceive:string;
commstate:TCOMSTAT;//存放串口狀態(tài)的結(jié)構(gòu)體
begin
//略過(guò)預(yù)處理程序……
//使用readfile函數(shù)讀取串口數(shù)據(jù);在win32 API中使用文件操作函數(shù)操作串口
if(not readfile(hcomm,inputbuffer,commstate.cbInQue,nbytesread,@read_os)) then
begin
if(dwerror>0)and(dwerror>error_io_pending) then
begin//讀取串口錯(cuò)誤,則提示用戶(hù),并關(guān)閉所有相關(guān)句柄
messagebox(0,'readfile error','notice',mb_ok);
stop:=true;
closehandle(read_os.hEvent);
closehandle(post_event);
closehandle(hcomm);
exit;
end
else
begin
waitforsingleobject(hcomm,infinite);
getoverlappedresult(hcomm,read_os,nbytesread,false);
end;
end;
if nbytesread>0 then
begin
temp:=system.copy(inputbuffer,1,commstate.cbinque);
receivebuffer:=receivebuffer+temp;
buffer:=receivebuffer;
if (temp[length(temp)>=#13)or(temp[length(temp)>=#10)or (length(receivebuffer)>128)
//上位機(jī)和下位機(jī)定義通信規(guī)約為以ASCII的13或者10作為幀結(jié)束標(biāo)志
then
begin
//若處于顯示接收內(nèi)容模式,顯示接收到的內(nèi)容
if NShowRecerve.Checked then
begin
showreceive:=buffer;
StatusBar1.Panels[2>.Text:='接受內(nèi)容:'+showreceive;
end
else
StatusBar1.Panels[2>.Text:='接受內(nèi)容:';
//分析故障信息
if temp[length(temp)>=#10 then
failureinfoparse(buffer);//條用故障處理子程序,此子程序分析故障類(lèi)型,判斷故障設(shè)備,并把故障信息記錄到數(shù)據(jù)庫(kù)
receivebuffer:='';//處理完一幀數(shù)據(jù)就清空緩沖區(qū),為下一次讀取做準(zhǔn)備
end; end; end;
setevent(post_event);
end;
上位機(jī)的圖形化監(jiān)控軟件完成調(diào)度控制中心的基本功能。上位機(jī)網(wǎng)絡(luò)由一個(gè)應(yīng)用程序服務(wù)器、兩個(gè)監(jiān)控工作站、一個(gè)模擬屏控制機(jī)和數(shù)據(jù)庫(kù)服務(wù)器組成。上述串口讀寫(xiě)程序就工作在應(yīng)用程序服務(wù)器上。
4 結(jié)束語(yǔ)
本文介紹了一個(gè)供水自動(dòng)監(jiān)控及調(diào)度系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),采用了分布式控制結(jié)構(gòu),使系統(tǒng)處理事故和進(jìn)行調(diào)度的效率有所改善和提高。但因?yàn)榭紤]設(shè)計(jì)成本等因素,這種設(shè)計(jì)方案并不是最優(yōu)的,在以后的實(shí)踐研究中會(huì)做出進(jìn)一步改進(jìn)。
評(píng)論