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