[導讀] 論述一種新型明渠流量計量儀表——LMC型超聲波明渠流量計的后續(xù)研發(fā)工作。重點介紹了該流量計的監(jiān)控系統(tǒng)通信技術(shù),及如何利用VC++6.0的MSCOMM控件來開發(fā)上位機與8051單片機的串行通信,給出了通信程序的部分流程圖。
城市污水處理地域跨度大,測控點分散,各測控點往往處于無人值守狀態(tài)。區(qū)域內(nèi)、區(qū)域與區(qū)域之間,需要傳輸、匯總和分析的數(shù)據(jù)量很大。因此,區(qū)域內(nèi)和跨區(qū)域的網(wǎng)絡(luò)化通信成為現(xiàn)代城市污水處理廠監(jiān)控系統(tǒng)的重要標志。
1 LMC型超聲波明渠流量計通信網(wǎng)絡(luò)
LMC型超聲波明渠流量計設(shè)有RS-232C或RS-422串行通信端口,通過一根最長達1200m的通信電纜,可直接與計算機的連接。在計算機中安裝LMC監(jiān)控軟件,即可隨時在計算機中監(jiān)控瞬時流量、總流量。換算的日流量、月流量和年流量等參數(shù),以及曲線顯示、報表打印等,系統(tǒng)構(gòu)成如圖1所示。若在15m之內(nèi)通信則可直接用一根通信電纜將流量計接到計算機。流量計的信息也可以通過電話線網(wǎng)絡(luò)傳輸,但系統(tǒng)需配置專用通信器和MODEM卡。
2 監(jiān)控系統(tǒng)通信軟件設(shè)計
我們設(shè)計了一個超聲波明渠流量計城市網(wǎng)絡(luò)監(jiān)控系統(tǒng),實現(xiàn)了上位微機與8051單片機的串行通信。監(jiān)控系統(tǒng)通信軟件主要包括專線方式(通過RS232C連接)及網(wǎng)絡(luò)自動撥號方式兩大功能。限于篇幅,文中只給出部分程序流程圖和程序清單。
實現(xiàn)串行通信一般分為3個步驟:
(1)初始化通信端口:具體工作為向操作系統(tǒng)申請通信端口資源,設(shè)置通信波特率和配置通信格式(如起始位個數(shù)、數(shù)據(jù)位個數(shù)、停止位個數(shù)、奇偶校驗方式等)。
(2)串行通信的讀寫操作:用計算機發(fā)送和接受數(shù)據(jù)。
(3)關(guān)閉通信端口:在完成所有的串行通情操作后,將串行通信端口資源還給操作系統(tǒng)。
2.1 MSCOMM 控件的主要屬性
MSCOMM 控件是由Microsoft開發(fā)的,用于計算機間通信的Active X控件。利用它能方便地實現(xiàn)串行通信。用MSCOMM控件實現(xiàn)串行通信主要使用以下的一些屬性:
(1 )用于初始化串行通信端口的屬性CommPort,設(shè)置并返回要用于串行通信的端口號;
PortOPen,初始化時置為True以打開通信端口;
Setting,以字符串形式設(shè)置并返回波特率、奇偶檢驗位、數(shù)據(jù)位、停止位;
InputMode,置0以本格式接收數(shù)據(jù),置1以二進制格式接收數(shù)據(jù)。
(2)用于串行通信端口讀寫操作的屬性
Input,從接收緩沖區(qū)返回并刪除數(shù)據(jù);
Output,向發(fā)送緩沖區(qū)寫數(shù)據(jù)。
(3)用于關(guān)閉通信端口的屬性
PortOpen,關(guān)閉端口時置為False以關(guān)閉通信端口。
2.2 串行通信協(xié)議說明
上位機與下位機均采用查詢發(fā)送、中斷接收的通信方式。
幀格式為7位數(shù)據(jù)位,無檢驗位,1位停止位,波特率為W,編碼為ASCll碼。每次上位機向單片機發(fā)數(shù)據(jù)時,上位機先向單片機發(fā)握手信號“02”,單片機收到握手信號則發(fā)應答信號“03”至上位機上位機收到應答信號后即發(fā)數(shù)據(jù)。同樣,當單片機要向上位機發(fā)數(shù)據(jù)時,也先向上位機發(fā)握手信號“ 04”,上位機收到握手信號后發(fā)應答信號“05”,單片機收到應答信號后則發(fā)數(shù)據(jù)。
2.3 上位機(PC)通信程序設(shè)計
利用VC++6.0對設(shè)計上位機通信程序。主要步驟如下;
(1)先進人Visual C++6.0集成開發(fā)環(huán)境;
(2)創(chuàng)建一個單文檔控制界面;
(3)添加控制菜單、控制對話框、控制按鈕與編輯框;
(4)在控制對話框中添加ActiveX控件中的MSCOMM控件;
(5)設(shè)置MSCOMM控件屬性:
Setting9600,n,7,1;InputLen:2;Rthreshold:2;其它按缺省值。
通信程序主要部分如下:
Void CROTOTEDlg::OnButtom1() //通信初始化消息處理函數(shù)
{
DataORShaking=1; //握手信號或數(shù)據(jù)標志
Commsuce=0;//握手成功標志
receiveNo=3;//數(shù)據(jù)區(qū)標志
if(!m_RototeCom_dlg.GetPortOpen())
!m_RototeCom_dlg.GetPortOpen(TRUE);//打開串行口
m_RototeCom_dlg.SetOutput(ColeVariant(“02”));//發(fā)握手信號
m_RototeCom_dlg.SetInputMode(0);//讀取串口緩沖區(qū)全部數(shù)據(jù)
MessageBox(“START”);
for(int i=0;i<=10000;i++);//延時
MessageBox (“通信失敗,請檢查通信硬件”);//握手失敗顯示
}
Void CROTOTEDlg::OnOnCommMscomml(); //Mscomm控件消息處理函數(shù)
{
VARIANT varii;
varii= m_RototeCom_dlg.GetPortOpen();//讀入數(shù)據(jù)賦給VARIANT變量
CString ll;
ll= varii,bstrVal;
UpdateData();//將文本值從控件傳給相應的變量
if(DataORShaking==0)//如果握手完畢,則開始接收數(shù)據(jù)
{
if(receiveNo==4) DataORShaking=1;
if(receiveNo==3);
{ m_edit3=ll;//接收實際年流量信號
receiveNo==4;}
else
m_edit4=ll;
}
if(ll==”03”)&&( DataORShaking==1)//接收單片機應答信號
{ m_RototeCom_dlg.SetOutput(ColeVariant(m_edit1));//發(fā)給年流量
n_RototeCom_dlg.SetOutput(ColeVariant(m_edit2));//發(fā)給年流量
commsuce=1;//握手成功
}
if(ll==”04”)&& ( DataORShaking==1)// 接收單片機握手信號
{n_RototeCom_dlg.SetOutput(ColeVariant(“05”));//發(fā)應答信號
DataORShaking=0;// 握手成功
}UpdateData(FALSE);//將控件變量內(nèi)容送回其對應控件
}
2.4 下位機(8051)通信程序設(shè)計
發(fā)應答信號及數(shù)據(jù)時,8051單片機工作于查詢方式;當接收握手信號及數(shù)據(jù)時,8051工作于中斷方式,中斷入口地址為0023H。當5051接收到來自上位機的握手信號“02”并核查確認后,則給上位機發(fā)應答信號,同時準備接收數(shù)據(jù)。中斷服務程序先區(qū)分是握手信號還是數(shù)據(jù),如是握手信號就發(fā)應答信號,如是數(shù)據(jù)就轉(zhuǎn)換數(shù)據(jù)格式再送人內(nèi)存。當8051需要發(fā)數(shù)據(jù)時,先向上位機發(fā)握手信號“04”,等收到上位機的應答信號“05”,即可發(fā)數(shù)據(jù)。程序框圖如圖2所示,中斷服務程序如圖3所示。
3 經(jīng)濟效往分析
就上海而言,需進行污水排放計量的工礦企業(yè)達4000多家。根據(jù)上海市環(huán)保局要求,這些企業(yè)都將按要求安裝檢測污水排放的儀器。目前本市尚無同類產(chǎn)品。如選用國外產(chǎn)品,以美國的伊思柯(ISCO)公司為例,同類型的超聲波明渠流量計的價格為71300元。本成果轉(zhuǎn)化為產(chǎn)品后,基本價格為17000左右,低于國外產(chǎn)品約5.4萬元左右。仍以全市4000家企業(yè)計,可以節(jié)約資金2億元。