[导读] 论述一种新型明渠流量计量仪表——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].自动化与仪器仪表