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