引言 铁路部门的雨量监测是有关铁路安全的一个重要环节。由雨量过多引起的洪水会影响铁路路基,引发列车交通事故。因此,为了确保交通命脉的安全,应及时将铁路沿线的雨量反馈至铁路管理部门。过去雨量监测是由各站点人工抄记雨量监测仪表数据,再汇总铁路管理部门。显然信息传送不及时,且存在人为因素,备案困难。 微型计算机的发展和计算机通信技术的提高,使得各种信息采集的自动化、实时性变为可能。作者成功地运用微型计算机和单片机组成主从式微机网络,将铁路雨量监测构成一个分布式雨量监测系统。该系统将单片机雨量监测仪采集的数据,自动地由MODEM汇集到系统主计算机,从而使几百公里长的远程通信既经济又可靠,大大提高了铁路部门抗灾的能力。 一、系统结构设计 雨量监测系统是由微型计算机和单片机组成的主从式微机网络。以单片机为核心的雨量监测仪分布在铁路各站点。该仪器功能有采集雨量、存储雨量信息、雨量报警、现场雨量曲线打印以及通信。管理部门以个人计算机为系统主机。雨量监测系统结构如图1所示。
从图1中看出系统主机直接与单片机建立通信联系。由于各站点远离系统主机,在不附加外部连线等硬件设施基础上,利用单片机加MODEM方式以及电话线实现单片机远程。系统主机可对各站部的单片机雨量监测仪进行各种设置及数据采集,单片机雨量监测仪根据雨量情况也可自动向系统主机发送当前雨量数据,这样就可做到及时提供现场的雨量情况。 二、单片机雨量监测仪及其远程通信 各站点的雨量监测仪以8051系列单片机为CPU,辅以定制的液晶显示器、SRAM、热敏式绘图仪、雨量传感器等,其原理框图如图2所示。图中 W87E58是MCU,它兼容MCS-51单片机并具有32KB片内EEPROM。 单片机远程通信由ST16C450连接MODEM实现。ST16C450是一种通用异步接收发送器,内部有10个寄存器,其中有MODEM控制寄存器和 MODEM状态寄存器。MCU通过这2个寄存器的操作实现对MODEM的控制并了解MODEM的工作状态,从而顺利进行数据通信。ST16C450进行通信前首先要对其进行初始化,即设置波特率、通信数据格式、是否使用中断等。ST16C450初始化后可采用程序查询或中断方式进行通信。 MODEM的使用主要有以下4个操作: ①初始化MODEM; ②拨号; ③应答到来的呼叫; ④挂断线路,使MODEM回到AT命令状态。 MODEM的控制由Hayes AT命令集完成,程序可直接发送(以AT字符开始再加命令和参)数给MODEM。但是,AT命令无法完成系统间的文件传送,发送或接收文件必须由通信软件按预先规定的通信协议完成。 MODEM初始化命令串"AT%26;amp;FS0=3","%26;amp;F"重置MODEM,"S0=3"表示应答铃响3次。雨量监测仪 MODEM初始化子程序如下: MSTR:MOV R4,#0 MST0:MOV DPTR,#P3FE ;MODEM状态寄存器地址 MST1:MOVX A,@DPTR ANL A,#30H CJNE A,#30H,MST1 MOV DPTR,#P3FD ;通信线状态寄存器 MST2:MOVX A,@DPTR JNB ACC.5,MST2 MOV DPTR,#MTAB MOV A,R4 MOVC A,@A+DPTR JZ MST3 MOV DPTR,#P3F3 ;数据发送保持寄存器 MOVX @DPTR,A INC R4 SJMP MST0 MST3:RET MTAB:DB 41H,54H,26H,53H,30H,3DH,33H DB 0DH,0 ;AT%26;amp;FS0=3 子程序执行后MODEM应答"OK",表示初始化完成。 MODEM拨号命令串"ATDTxxxxx",xxxxx是电话号码;拨号成功时MODEM将应答以"CONNECT"字符开始的字符串。单睡机与系统主机连接完成后,按通信协议所规定的数据串通信交换数据。数据通信结束后,程序发送挂断线路命令串"+++ATH0",MODEM自动断线,从而完成1次通信。
三、系统主机与雨量监测仪的通信 系统主机软件用VB5.0编制,运行于Windows 95环境。整个软件由通信、日报表、月报表、年报表、设定、曲线图、报警等模块组成,操作平台如图3所示。主机可与30个站点的雨量监测仪连接。 程序中使用MSComm控件,通过向连接在串行口上的MODEM发送AT命令来控制。主机通信状况分为2类:主动通信和被动通信。下面分别加以介绍。 1.主动通信 主机向站点雨量监测仪传送报警设定值及收集当天或前天的雨量数据时称为主动通信。电话图标表示各站点的雨量监测仪,一旦被选中,程序就发出"ATDTxxxxx"拨号命令,雨量监测仪MDOEM处于自动应答方式被连接。MODEM连接成功后,主机会收到"CONNECT 4800"信息,此时,主机就可以向站点发送命令和数据串。如果站点接收到正确数据,根据命令代码(由通信协议规定)就可知道主机是要设定参数还是要收集当天或前天的雨量数据。若是收集雨量数据,站点雨量监测仪将雨量数据传送给主机;主机收到站点正确的雨量数据后,向MODEM发送"+++ATH0"离线挂机命令,结束本次通信。 主站发送的数据串里包括站点号、通信代码、当前日期和时间、警戒值及校验和等信息。用@K和@J作为开始和结束标志。 下面是主动通信的主要源程序: Private Sub 主动通信(发送代码) Dim i,j,ss,FsStr,ret 设置充许通信False For i=0 T0 29 "工区数 If工区选中(i)Then 显示信息"拨号到"+工区名(i)+"..." FsStr="ATDT"+电话号码(i)+vbCr "拨号的AT命令 ret=发送AT命令(FsStr,"CONNECT",60000) "发送拨号命令,限时60s If ret="正常"Then FsStr=Format(i,"00")+发送代码 "发送字符串组合 FsStr=FsStr+Format(Now,"yymmddhhmmss") FsStr=FsStr+设定值 FsStr=FsStr+计算累加和(FsStr) FsStr="@K"+FsStr+"@J" ret=发送AT命令(FsStr,"@J",5000) "发送数据,等待接收串结束符@J If InStr(接收串,"@KCUO@J")Then "收到下位机的返回是"错" 显示"返回有错."信息处理 Else 处理接收串 "下位机接收正确 End If 显示"挂机..."信息处理 ret=发送AT命令("+++","OK",3000) "挂机,等待OK,限时3S ret=发送AT命令("ATH0"+vbCrLf,"OK",3000) End If End If Next i End Sub 2.被动通信
当站点监测到雨量超过警戒值时,就主动拨号给主机,对主机而言就是被动通信。平时主机MODEM也处于自动应答状态,随时可以接收站点呼叫。主机程序接收到正确数据串后,将数据记录到相应文件中保存,点亮操作平台上该站点的报警指示灯提醒用户,同时向站点发送"接收正确"的信息。站点收到主机正确信息后向 MODEM发送"+++ATH0"离线挂机命令,结束本次通信。站点发来的数据串里包括站点号、通信代码、各种雨量数据、报警数据及校验和等信息。用@K 和@J作为开始和结束标志。 被动通信部分的主要源程序如下: Private Sub MSComm1_OnComm() Dim strSh,Shc Shc=MSComm1.InBufferCount "取接收字符个数 If Shc>0 Then strSh=MSComm1,Input "取本次接收串 接收串=接收串+strSh If InStr(接收串,"RING")Then "若是电话铃响 显示"接收数据..."信息算是 "显示接收数据信息 接收串="" End If If InStr(接收串,"@J")Then "收到接收串结束答@J 处理接收串 "处理接收串 End If End If End Sub 结束语 本系统已成功应用于铁路部门。它具有实时性好、信息传送距离远、可靠性高、电路简单、投资少等优点。它可推广用于其他需要信息采集及远程通信的部门,如气象部门温度和风速收集、水文部门水位和雨量监测;电力部门电网监测等。