摘 要: 針對(duì)當(dāng)前污水處理沒有實(shí)現(xiàn)自動(dòng)控制和污水處理工藝分散的特點(diǎn),設(shè)計(jì)了基于CAN總線結(jié)構(gòu)的污水處理集散控制系統(tǒng)(DCS)模型構(gòu)建一體化氧化溝的整個(gè)控制系統(tǒng),。用CAN總線對(duì)上位機(jī)與下位機(jī)之間進(jìn)行數(shù)據(jù)通信,,解決了多臺(tái)設(shè)備監(jiān)控的實(shí)時(shí)傳輸。對(duì)CAN總線和DeviceNet協(xié)議作了詳細(xì)的解釋,,并給出了DLL以及DeviceNet協(xié)議中控室的應(yīng)用程序,。
關(guān)鍵詞: CAN總線;DeviceNet協(xié)議,;DCS
當(dāng)今世界的水環(huán)境面臨兩大問題:水資源短缺和水污染加重,。造成水污染的主要原因是工業(yè)廢水、農(nóng)田排水及城鄉(xiāng)生活污水向江河湖海大量排放,,造成地面水和地下水水質(zhì)受到污染,,嚴(yán)重制約了經(jīng)濟(jì)的發(fā)展并危害著人類的健康,,因此,近年來各國對(duì)控制水污染越來越引起重視,,全球都在加大和加快水污染治理的力度和速度,。我國污水處理設(shè)備的制造水平和科技含量都比較低,本文對(duì)污水處理設(shè)備在線監(jiān)測系統(tǒng)設(shè)計(jì)方案進(jìn)行分析,,并對(duì)其軟件開發(fā)提供了一定的指導(dǎo)作用[1-2],。
1 污水處理系統(tǒng)現(xiàn)狀
目前,對(duì)污水處理系統(tǒng)運(yùn)行狀況進(jìn)行在線監(jiān)測已成為發(fā)展趨勢,,國外已開發(fā)出一些污水處理在線監(jiān)測系統(tǒng),,并設(shè)計(jì)了一些基于神經(jīng)網(wǎng)絡(luò)、小波變化,、專家系統(tǒng)等技術(shù)的診斷軟件?,F(xiàn)有的污水處理在線監(jiān)測系統(tǒng)設(shè)計(jì)方案大多采用傳統(tǒng)的上下位機(jī)結(jié)構(gòu)。下位機(jī)完成現(xiàn)場設(shè)備運(yùn)行狀況和污水處理狀態(tài)信號(hào)的在線監(jiān)測,,大多采用工控機(jī)和單片機(jī)來實(shí)現(xiàn),。上位機(jī)負(fù)責(zé)污水處理狀態(tài)參數(shù)的監(jiān)測顯示、報(bào)警,、故障診斷及識(shí)別等,。這種結(jié)構(gòu)對(duì)少量設(shè)備的幾個(gè)狀態(tài)參數(shù)的檢測,實(shí)時(shí)處理效率較高,,當(dāng)需要對(duì)多個(gè)設(shè)備進(jìn)行監(jiān)測時(shí),,上下位機(jī)通信成為系統(tǒng)實(shí)時(shí)性和可靠性的瓶頸。另外,,這些系統(tǒng)的在線監(jiān)測和故障診斷相對(duì)脫離,,即各成一套系統(tǒng),即使有些系統(tǒng)將兩者合在一起,,當(dāng)多個(gè)設(shè)備對(duì)多種診斷功能提出診斷請(qǐng)求時(shí),,整個(gè)系統(tǒng)的工作效率會(huì)明顯降低,造成系統(tǒng)集成性差,,不便于軟件升級(jí)和擴(kuò)充[2-3],。
2 污水處理軟件開發(fā)
為了便于用戶監(jiān)控和管理整個(gè)污水處理廠處理情況,本文開發(fā)了中控室通信與應(yīng)用控制程序,,提供了良好的人機(jī)操作界面,。ADAM5000系列CAN模塊與許多軟件兼容,DeviceNet和CANopen可用來配置系統(tǒng),,建立在這兩個(gè)協(xié)議上的動(dòng)態(tài)鏈接庫DLL可用于Windows程序設(shè)計(jì)。PCL-841附帶軟件包提供了7個(gè)函數(shù),,分別為初始化模塊CanInitHW(),、退出模塊CanExitHW(),、復(fù)位模塊CanReset()、配置模塊CanConfig(),、設(shè)置正常運(yùn)行狀態(tài)模塊CanNormRun(),、發(fā)送幀模塊CanSendMsg()及接收幀模塊CanReceiveMsg()。其源文件在Can841.h中,,運(yùn)用這幾個(gè)函數(shù)和DeviceNet指令集就可構(gòu)成系統(tǒng)應(yīng)用軟件各個(gè)功能子程序,,實(shí)現(xiàn)各個(gè)節(jié)點(diǎn)模塊間數(shù)據(jù)傳送數(shù)據(jù)采集和控制輸出。PC機(jī)與CAN適配卡的聯(lián)絡(luò)采用命令的通信協(xié)議,,即“命令+參數(shù)”形式和“多主競爭的總線仲裁”方式實(shí)現(xiàn),。
適配卡設(shè)備驅(qū)動(dòng)程序、動(dòng)態(tài)連接庫和所要開發(fā)的Ring3層應(yīng)用程序的關(guān)系如圖1所示,。
Ring3應(yīng)用層對(duì)CAN適配卡的訪問全部通過動(dòng)態(tài)鏈接庫實(shí)現(xiàn),,這種訪問主要包括對(duì)CAN卡的初始化、發(fā)送報(bào)文,、接收?qǐng)?bào)文以及其他操作,。CAN卡初始化除了對(duì)CAN適配卡本身的初始化外,還包括虛擬設(shè)備驅(qū)動(dòng)程序的動(dòng)態(tài)加載和初始化(設(shè)置中斷號(hào)和I/O地址),。
污水處理自控軟件的設(shè)計(jì)如圖2所示,。
2.1 對(duì)CAN串口的操作
適配卡PCL-841上提供了兩個(gè)獨(dú)立的CAN串口,對(duì)該串口的操作有幾種方法可以使用,,如直接使用Windows AP對(duì)該串口進(jìn)行操作,,使用包裝好的控件(例如MSComm),也可以先把涉及到串口操作的WindowsAPI都封裝到一個(gè)類里面供開發(fā)使用,。在本系統(tǒng)中,,使用一個(gè)封裝好的串口類來對(duì)串口進(jìn)行操作。該類能支持多串口,、多線程,,并能在所有主流Windows系統(tǒng)下使用。serialPortEx類的用戶只需熟悉少數(shù)幾個(gè)公共成員函數(shù),,就能輕易在自己的程序中加入串口的支持,。必須注意的是該類并不支持串口通信協(xié)議,因?yàn)椴煌瑧?yīng)用場合下可能需要使用不同的協(xié)議,,在本系統(tǒng)中使用的是DeviceNet協(xié)議,。
2.2 實(shí)時(shí)運(yùn)行數(shù)據(jù)的讀取
監(jiān)控軟件中設(shè)備實(shí)時(shí)運(yùn)行狀態(tài)的顯示通過對(duì)設(shè)備實(shí)時(shí)運(yùn)行數(shù)據(jù)的讀取來實(shí)現(xiàn)。實(shí)時(shí)數(shù)據(jù)的讀取通過定時(shí)發(fā)送狀態(tài)請(qǐng)求(STATUS REQUEST)信號(hào)來實(shí)現(xiàn),,定時(shí)器的間隔足夠小(例如1 s),,那么每隔1 s監(jiān)控軟件都能夠?qū)⑵湎到y(tǒng)運(yùn)行狀態(tài)顯示和現(xiàn)場設(shè)備的運(yùn)行狀態(tài)同步,這就保證了監(jiān)控軟件中系統(tǒng)狀態(tài)顯示的實(shí)時(shí)性,。如果定時(shí)器的精度要求不高,、定時(shí)器的間隔不是太小,,使用Windows定時(shí)器就可以了,一般用SetTimer()函數(shù)來啟動(dòng)一個(gè)定時(shí)器,,用KillTimer()函數(shù)來結(jié)束一個(gè)定時(shí)器,。對(duì)于污水處理系統(tǒng),通常每隔1 s左右讀取一次系統(tǒng)狀態(tài)信息就可以滿足系統(tǒng)實(shí)時(shí)性的要求,,因此使用Windows定時(shí)器完全可以滿足要求,。實(shí)時(shí)數(shù)據(jù)的讀取步驟是:在監(jiān)控軟件啟動(dòng)時(shí)打開定時(shí)器,每次定時(shí)器被觸發(fā)后,,發(fā)送一條狀態(tài)請(qǐng)求信號(hào),;接收到回應(yīng)的狀態(tài)信號(hào)后,再更新系統(tǒng)運(yùn)行狀態(tài)的顯示,,在下一次定時(shí)器被觸發(fā)之后,,再發(fā)送一條狀態(tài)請(qǐng)求信號(hào)。不斷循環(huán),,直到監(jiān)控軟件退出為止[2-7],。
3 編寫程序代碼
(1)使用Visual C++6.0的應(yīng)用程序向?qū)聞?chuàng)建一個(gè)基于文檔時(shí)間的“COMMSewageDlg”,修改標(biāo)題為“污水處理自動(dòng)控制系統(tǒng)”,,其他設(shè)置全部接受默認(rèn)選項(xiàng),。
(2)為了使用DLL,必須將DLL驅(qū)動(dòng)函數(shù)庫的頭文件加入工程中,。方法是:從Visual C++主菜單中選擇Project-Add to Project-Filesw…,,在彈出的對(duì)話框中選擇driver.H,單擊確定即可,。加入完該文件后,,就可以看見DA&C常量定義、參數(shù)聲明和DLL函數(shù)定義等,。這些函數(shù)都可以用在將要開發(fā)的應(yīng)用程序中,。
(3)選擇Build菜單,選中Settings選項(xiàng),,在彈出的對(duì)話框中選中Link頁,,接著在類型欄選中Input,輸入adsapi32.lib于Object/library模塊中,,然后單擊OK按鈕即可,。
(4)將SerialPort.h、SerialPort.cpp兩個(gè)類文件復(fù)制到工程文件夾中,,用Project-Add to Project-Files命令將上述兩個(gè)文件加入工程,,并在COMMSewageView.h中將頭文件SerialPort.h說明:#include "SerialPort.h"。
(5) 人工添加消息響應(yīng)函數(shù)
首先在CCOMMsewageView. h中添加串口字符接收消息WM COMM RXCHAR(串口接收緩沖區(qū)內(nèi)有一個(gè)字符)的響應(yīng)函數(shù)聲明:
//{{AFXes MSG(COMMSewageView)
afx_msgLONG onCommunication(WPARAM ch,LPARAM port),;
//}}AFXes MSG
然后在S CPortTestView.cpp文件中進(jìn)行WM_ COMM- RXCHAR消息映射:
BEGIN_MESSAGE_MAP(COMMSewageView,,CView)
//{{AFX_ MSG MAP(COMMSewageView)
ON_MESSAGE(WM_COMM_RXCHAR, On Communication)
//}}AFX_ MSG MAP
END_ MESSAGE_ MAP()
接著在S CPortTestView. cpp中加入函數(shù)的實(shí)現(xiàn):
LONG
COMMSewageView::OnCommunication(WPARAM ch,, LPARAM port){…};
(6)在視創(chuàng)建時(shí)初始化串口,,首先利用C1assWizardr生成OnInitialUpdate()函數(shù),;
(7)利用C1assWizard成COMMSewageView的時(shí)間消息WM_TIMER響應(yīng)函數(shù);
(8)在OnCommunication(WPARAM ch,,LPARAM port)函數(shù)中進(jìn)行數(shù)據(jù)處理,。
本文詳細(xì)分析了污水處理的總體設(shè)計(jì)方案,介紹了CAN總線能實(shí)時(shí)處理上位機(jī)與下位機(jī)的數(shù)據(jù)通信,,對(duì)CAN串口操作,、數(shù)據(jù)的讀取以及編寫程序代碼的步驟都進(jìn)行詳細(xì)的分析和介紹。本文的思想對(duì)我國的污水處理在線監(jiān)測系統(tǒng)的實(shí)時(shí)顯示和監(jiān)控起到一定的指導(dǎo)作用,。
參考文獻(xiàn)
[1] 黃大貴.微機(jī)數(shù)控系統(tǒng)[M].成都:電子科技大學(xué)出版社,,1996.
[2] 蒲旺.污水處理在線監(jiān)測系統(tǒng)及關(guān)鍵設(shè)備設(shè)計(jì)[D].成都:電子科技大學(xué),2004.
[3] 饒運(yùn)濤,,鄒繼軍.現(xiàn)場總線CAN原理與應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社,,2003.
[4] 鄔寬明.CAN總線原理和應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2002.
[5] 金以慧.過程控制[M].北京:清華大學(xué)出版社,,2002.
[6] 李現(xiàn)勇.Visual c++串口通信技術(shù)與工程實(shí)踐[M].北京:人民郵電出版社,,2003.
[7] 盧鴻權(quán),黃大貴等.基十CAN總線的一體化氧化溝DCS系統(tǒng)方案研究[J].電子科技大學(xué)學(xué)報(bào),,2001,,30(3).
[8] 鄔寬明.CAN總線系統(tǒng)設(shè)計(jì)中的幾個(gè)問題[J].電子技術(shù)應(yīng)用,1998,,24(9).