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