在工業(yè)冶金、發(fā)電、供曖等行業(yè),鍋爐是必不可少的能源動力設(shè)備,其中,對鍋爐汽包水位的實時測量與控制是整個控制系統(tǒng)的核心環(huán)節(jié)。汽包水位過高,將減少蒸汽重力分離行程,破壞汽水分離效果,惡化過熱器的工作條件,嚴(yán)重時會引起汽輪機(jī)沖擊,造成汽輪機(jī)轉(zhuǎn)軸彎曲等惡性事故;水位過低時,鍋爐水循環(huán)受到影響,爐膛內(nèi)的水冷壁將面臨爆管危險。因此,必須對水位進(jìn)行精準(zhǔn)、實時、高效的測量與控制。
摘要:智能監(jiān)測系統(tǒng)集計算機(jī)技術(shù)、通信技術(shù)和儀表測控技術(shù)于一體,論文介紹了采用VisualC++6.0為開發(fā)工具和以SQLsever2000為數(shù)據(jù)庫平臺,通過串行接口進(jìn)行通信的測控系統(tǒng)實現(xiàn)過程。作者提出了使用自由口通信的模式將工控機(jī)與西門子S7300系列PLC模塊進(jìn)行連接,實現(xiàn)現(xiàn)場傳感器、PLC模塊和工控機(jī)的相互通信,在此基礎(chǔ)上開發(fā)了鍋爐汽包水位的實時測量與在線控制軟件,對鍋爐汽包水位進(jìn)行實時監(jiān)測,并給出基于VC的上位機(jī)界面。
關(guān)鍵詞:VisualC++6.0,串口通信,水位測量
在以往的系統(tǒng)中,由于安裝工藝,測量設(shè)備和軟件設(shè)計的不足,加上工況欠缺穩(wěn)定,同一鍋爐中汽包不同測量點的水位測量結(jié)果存在較大偏差,無形中加大了工人的勞動強(qiáng)度。在本設(shè)計中,采用雙室平衡容器與差壓變送器的兩者配套使用來測量液位,變送器將傳感器采集的壓力參數(shù)轉(zhuǎn)化為4~20mA的電流信號傳輸至PLC的模擬量輸入模塊,再通過上位機(jī)相關(guān)處理后在顯示器上顯示實時的水位情況。為實現(xiàn)汽包水位的自動調(diào)節(jié),采用前饋串級控制設(shè)計,使用三沖量的調(diào)節(jié)機(jī)制,有效控制鍋爐給水流量、蒸汽流量和爐膛熱負(fù)荷等三要素對汽包水位的影響,防止虛假水位的產(chǎn)生。在本設(shè)計中,采用西門子S7300的系列的PLC,將工控機(jī)的RS232串口與PLC的編程接口連接起來進(jìn)行通信,在VisualC++6.0的基礎(chǔ)上,設(shè)計出在線監(jiān)測的上位機(jī)軟件,實現(xiàn)對汽包水位的實時、精準(zhǔn)監(jiān)控,確保汽包上各測量點偏差不超過±30mm。
1系統(tǒng)整體框架的設(shè)計
系統(tǒng)是一個將測控技術(shù)、通信技術(shù)和計算機(jī)技術(shù)結(jié)合在一起的智能測控系統(tǒng),主要包括數(shù)據(jù)的采集、傳輸、處理和顯示四部分,如圖1所示。首先,傳感器通過雙室平衡容器正負(fù)壓管采集壓力,并將壓力參數(shù)輸出為差分小信號傳送至智能變送器,變送器則對差分信號進(jìn)行放大和數(shù)字處理,轉(zhuǎn)換并輸出4~20mA的電流信號,而配電隔離器則為變送器提供24V直流電源并隔離信號,消除外界信號的干擾。信號到達(dá)PLC模塊,經(jīng)過PLC模擬量輸入模塊的相關(guān)處理,轉(zhuǎn)換為符合RS232標(biāo)準(zhǔn)電平的數(shù)字信號,PC上位機(jī)通過完全開放的自由口通信模式完成與PLC的串口通信,實現(xiàn)傳感器到PC機(jī)的數(shù)據(jù)交互,從而完成對水位的實時測量。
2上位機(jī)軟件的設(shè)計與實現(xiàn)
系統(tǒng)的上位機(jī)監(jiān)測軟件是基于VisualC++6.0的單文檔(SID)的MFC應(yīng)用程序開發(fā)的,系統(tǒng)主要分為通信模塊,數(shù)據(jù)管理模塊,界面設(shè)計模塊等三個模塊。
2.1串口通信設(shè)計與實現(xiàn)
實現(xiàn)上位機(jī)與S7300的通信有很多方法,常用的有Prodave通信、串口通信等。Prodave通信采用MPI的通信接口,因為MPI口是每塊CPU的編程口,所以PLC不需要另外添加通訊模塊,但MPI的速度是有限的,如果采用普通的PCAdapter連接PC和PLC,最高速度也就38.4kbps。本設(shè)計采用串口通信方式,只需另加CP340或者CP341串口通信模塊,同時在PLC和上位機(jī)中分別對接收報文和發(fā)送報文進(jìn)行相應(yīng)的描述,報文格式相對自由,串口通信使用的數(shù)據(jù)線較少,在遠(yuǎn)距離通信中可以節(jié)約通信成本。
上位機(jī)界面采用VisualC++6.0軟件工具進(jìn)行編寫,利用MSComm控件實現(xiàn)RS232串口編程。首先,在基于單文檔應(yīng)用程序中創(chuàng)建串口通信控件,若Control工具欄中缺少該控件,可通過菜單Project—>AddtoProject—>ComponentsandControl插入即可,再將該控件從工具箱中拉到對話框中。此時,只需要關(guān)心控件提供的對Windows通訊驅(qū)動程序的API函數(shù)的接口。換句話說,只需要設(shè)置和監(jiān)視MSComm控件的屬性和事件。如果計算機(jī)未安裝VC++,用戶的計算機(jī)沒有注冊MSCOMM32.OCX控件的情況下,用戶是不能使用該控件的。此時,只能通過運行命令”regsvr32+控件的完整路徑名”完成控件的注冊,此處輸入”regsvr32C:\windows\system32\mscomm32.ocx”,點擊確定即可完成注冊。
本文采用事件驅(qū)動法來處理通信,當(dāng)有新字符到達(dá)緩沖區(qū)或端口狀態(tài)發(fā)生變化時,即使有錯誤發(fā)生,都會觸發(fā)若串口的消息處理函數(shù),進(jìn)而調(diào)用GetCommEvent()函數(shù)查看是哪類事件,再做出相應(yīng)的處理。這種方法程序能夠響應(yīng)及時,可靠性較高。
2.1.1MSComm控件類參數(shù)初始化
MSComm控件類初始化時,在視圖類的初始化函數(shù)OnInitUpdate()中進(jìn)行。其中串口號、波特率、校驗方式、數(shù)據(jù)位等相關(guān)參數(shù)可以由用戶按照實際情況自行設(shè)置。SetCommPort(n),將串口控件與指定的串口號相關(guān)聯(lián);SetInputMode(),設(shè)置接收數(shù)據(jù)的類型;SetSettings(str),設(shè)置串口的相關(guān)參數(shù),str字符串內(nèi)包括波特率、奇偶校驗、數(shù)據(jù)位、停止位等串口參數(shù)信息;SetRThreshold(),設(shè)置是否產(chǎn)生串口事件;SetInputLen(),表示是否全部讀取串口。
同時通過調(diào)用GetPortOpen()方法判斷串口是否已經(jīng)打開,若處于關(guān)閉狀態(tài),則調(diào)用SetPortOpen()方法,將串口打開。2.1.2發(fā)送串口數(shù)據(jù)
在發(fā)送數(shù)據(jù)時,需要在程序中調(diào)用串口控件類的成員函數(shù)SetOutput()進(jìn)行數(shù)據(jù)發(fā)送操作,數(shù)據(jù)在通過串口進(jìn)行發(fā)送時或接收時,必須將數(shù)據(jù)類型強(qiáng)制統(tǒng)一轉(zhuǎn)換為COleSafeArray類型,否則,數(shù)據(jù)將不能完整或安全地被發(fā)送或接收,并為發(fā)送數(shù)據(jù)按鈕增加消息處理函數(shù)并添加相關(guān)處理代碼,發(fā)送串口數(shù)據(jù)流程如圖2所示。
2.1.3接收串口數(shù)據(jù)
在單當(dāng)串口緩沖區(qū)中有數(shù)據(jù)到來時,該串口控件會產(chǎn)生串口事件,調(diào)用GetCommEvent()函數(shù)獲取當(dāng)前發(fā)生的串口事件。為接收數(shù)據(jù)按鈕增加相應(yīng)的消息響應(yīng)函數(shù)并添加相關(guān)代碼。
if(mm.GetCommEvent()==2)//若發(fā)生的串口事件是讀取事件
{
variant=mm.GetInput();//則讀取串口緩沖區(qū)
safearray=variant;//轉(zhuǎn)換數(shù)據(jù)類型
len=safearray.GetOneDimSize();//獲取有效數(shù)據(jù)的長度
for(longi=0;i{safearray.GetElement(&i,&rxdata[i]);//將數(shù)據(jù)轉(zhuǎn)換為CHAR型數(shù)組
str.Format("%c",rxdata);//格式化輸出字符串
}
2.2數(shù)據(jù)庫設(shè)計
為方便對實時數(shù)據(jù)進(jìn)行診斷和歷史分析,該文把系統(tǒng)所采集到的數(shù)據(jù)保存到數(shù)據(jù)庫中。設(shè)計中采用MFCODBC的方式訪問數(shù)據(jù)庫,VisualC++中提供的MFCODBC數(shù)據(jù)庫類封裝了ODBCAPI,這使得利用MFC來創(chuàng)建ODBC應(yīng)用程序非常簡便,避免了直接使用ODBCAPI要編寫的大量代碼,同時采用SQLServer2000作為上位機(jī)軟件的數(shù)據(jù)庫管理系統(tǒng)。在運行系統(tǒng)前,需添加數(shù)據(jù)源,首先,打開“開始”—“控制面板”—“管理工具”—“數(shù)據(jù)源(ODBC)”,在用戶數(shù)據(jù)源列表的右邊選擇“添加”,出現(xiàn)創(chuàng)建新數(shù)據(jù)源對話框。雙擊SQLServer,打開對話框,輸入數(shù)據(jù)源名稱和選擇SQLServer服務(wù)器,完成數(shù)據(jù)源的創(chuàng)建與配置工作。
2.3上位機(jī)軟件界面設(shè)計
上位機(jī)軟件是基于MFC的單文檔應(yīng)用程序,注意將該工程視圖類的基類設(shè)置為CFormView類,可以實現(xiàn)可視化編程,在對話框資源中直接拖拽控件至對話框內(nèi),減少不必要的程序代碼,簡化工作量。在ResourceView的Dialog中為單文檔添加相關(guān)的標(biāo)簽、按鈕、編輯框等,并為編輯框創(chuàng)建相關(guān)成員變量,為按鈕添加相應(yīng)的消息響應(yīng)函數(shù),完成相應(yīng)的函數(shù)功能,最后軟件界面如圖3。
3下位機(jī)軟件實現(xiàn)
由于使用的是自由口通信協(xié)議實現(xiàn)PC機(jī)與PLC的通信,需要在下位機(jī)軟件SIMATICSTEP7中利用梯形圖編寫相關(guān)的接收數(shù)據(jù)和發(fā)送數(shù)據(jù)的程序,并用中斷來處理發(fā)送數(shù)據(jù)和接收數(shù)據(jù)之間的狀態(tài)切換。在硬件組態(tài)中,除加入必要的導(dǎo)軌、電源、CPU、輸入輸出模塊外,還需要為PLC添加一塊串行通訊模塊,在S7300中可以加放CP340或者CP341通訊模塊,實現(xiàn)串口通信。在軟件組態(tài)中,采用汽包水位三沖量前饋-反饋串級控制系統(tǒng),調(diào)整電動執(zhí)行機(jī)構(gòu)的閥門開度,合理調(diào)節(jié)蒸汽流量、鍋爐給水量和爐內(nèi)燃燒量的變化,實現(xiàn)對水位的自動控制。
4結(jié)束語
本系統(tǒng)中運用VC++設(shè)計并實現(xiàn)了PC機(jī)與西門子系列PLC的通訊,使用MFC技術(shù),靈活運用ActiveX的MSCOMM控件,實現(xiàn)了串口通信。同時,將系統(tǒng)采集的數(shù)據(jù)存入數(shù)據(jù)庫,以備歷史查詢。系統(tǒng)充分利用計算機(jī)和PLC本身的資源實現(xiàn)了上位機(jī)對PLC的實時監(jiān)控,而PLC作為下位機(jī)實現(xiàn)對現(xiàn)場工況的實時監(jiān)控和有效控制,從而從最大限度上保證汽包中三個測量點數(shù)據(jù)相差不超過±30mm,確保測量結(jié)果的相對穩(wěn)定,實現(xiàn)了對汽包水位的實時監(jiān)測和有效控制。本系統(tǒng)而且還可以進(jìn)行擴(kuò)展,與多臺PLC進(jìn)行通信,簡單、實用,具有較高的可靠性和安全性,降低了工人勞動強(qiáng)度,達(dá)到了預(yù)期的目標(biāo)。
參考文獻(xiàn):
[1]胡超,閆玉寶.由淺入深學(xué)VisualC++:基礎(chǔ)、進(jìn)階與必做300題[M].北京:電子工業(yè)出版社,2012.
[2]周韌研,商斌.VisualC++串口通信開發(fā)入門與編程實踐[M].北京:電子工業(yè)出版社,2009.
[3]梁偉.VisualC++網(wǎng)絡(luò)編程經(jīng)典案例詳解[M].北京:清華大學(xué)出版社,2010.
[4]吉順平,孫承志,孫書芳,等.西門子現(xiàn)場總線通信原理與應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2009.
轉(zhuǎn)載請注明來自:http://www.jinnzone.com/zhinengkexuejishulw/28841.html
上一篇:濕法冶金雜志