您好,欢迎访问一九零五行业门户网

用VB6.0实现PC机对流量计远程数据采集与监控

用vb6.0实现pc机对多台流量计远程数据采集与监控
(本次测试的设备由上海立阳自动化生产)
作者 朱立荣(立阳技术部工程师)
摘要: 利用vb6.0 activex 控件的mscomm通信控件,实现了windows9x下单台pc机与多台智能流量计的串行通讯,达到了对分散设备的集中控制和计量数据的采集和自动上报功能。
关键词:pc机;流量计;智能仪表;rs485;串口;事件驱动
collecting and controlling the long-distance data of flowrates by
using personal computer base on vb6.0
xiang tan steel automatic department
yu wei gang
abstract: this paper describes one personal computer series-communicating with many inlectual-flowrates under windows9x by using mscomm controls of vb6.0 activex’s.coming to centralized controlling scattered measure equipment and automatic data collecting and switching.
key word: personal computer; floweret; inlectual meter; serial communication
rs485; incident driving
一、 引言
在工业生产中,能源、动力介质的测量设备分布在现场的各个区域,给设备的监控和数据的统计带来诸多不便,随着智能仪表技术的不断发展,其通讯技术也在不断加强,当今的流量测量仪表大多带有rs-485通讯接口,*可以运用现场总线方式实现多台测量仪表的集中监控与数据采集。
本文利用vb6.0的activex控件——microsoft communication 控件,方便的实现了window9x环境下一台pc机与多台流量计测量仪表的串行通信功能,完成24台流量计的数据采集与管理。
二、 系统的硬件设计:
根据rs—485电气规定,在两线制传输方式下,rs—485驱动器可带32个接收器,实现多半点双工通讯,通讯距离在15m时波特率可达10mb/s,通讯距离在1.2m范围内波特率可达100mb/s,超过此距离可用repeater(中继器),增大传输距离,系统方框图如图所示:
图中pc机通过rs232接口,经rs232—rs485模块与多台流量计仪表相连接,一条总线上zui多可接32台,每台仪表被赋予各自的通讯地址码用以识别身份,这样上位pc即能通过rs—485总线对挂在总线上的每个仪表进行通讯。实现对流量计的远程数据采集与监控。
三、 流量计结构及通讯功能:
3.1 流量计大致由三部分组成:
1、 流量传感器,包括壳体组合,前置放大电路等;
2、 温度传感器组合;
3、 流量积算仪表组合。
随着单片技术的不断发展,流量积算仪大多采用单片计算机组成的智能系统,在完成系统的采样积算等功能的同时,还可以采用一定的通讯协议与遵循相同协议的设备联网,积算仪表系统中有1k以上字节的eprom可以*保存数据和命令,用户的命令和系统运行参数可通过串口从pc机发送到积算仪表,积算仪表将其格式化后存入不同的eprom地址中,供运行时直接调用。
3.2 积算仪表与计算机的通讯采用rs-485半双工的方式,积算仪表作为从机,上位pc机作为主机,控制和监视流量计的运行,通讯波特率大多为9600bps,通讯格式为:1位起始位,8位数据位,1位奇偶校验位,1位停止位,每个从站被赋予*的本机地址,采用主机轮询,从机应答的通讯方式。主机通过发送命令帧启动一次通讯,从机接收到数据后,判断呼叫地址是否和本机地址相同,若不同,则不与理睬,若相同则根据命令帧中的特征字(命令字),发送主机要求的数据帧。以tlxz系列流量计为例,命令帧的格式如下:
项号
1
2
3
4
字节数
1字节
2字节
4字节
1 字节
意义
起始字节(stx)
从机地址(addr)
特征字
异或校验(bcc)
*项为帧头(stx)取值41h,用以标志一帧的开始;第二项为从机地址(addr)流量计地址码,取值为0—31,当地址码两个字节都为255时为广播地址;第三项命令特征字为3a、3c、3f,用以命令流量计回传的数据内容,第四项bcc为异或校验,为前面数据的异或校验和用于通讯校错。
数据帧比较长,有12个字节,其格式如下:
项号
1
2
3
1
字节数
1字节
2字节
8字节
1 字节
意义
起始字节(stx)
从机地址(addr)
用户数据
异或校验
命令帧与数据帧除第三项外,其它意义相同,数据帧的第三部内容是从机根据主机发出的命令帧向主机发出的本机即时、累计数据,或运行参数。
另外主机还有一个特殊的命令帧——参数修改数据帧,它的格式为:
项号
1
2
3
4
5
字节数
1字节
2字节
1字节
8字节
1字节
意义
起始字节(stx)
从机地址(addr)
命令字
用户数据
异或校验
该帧的命令字特征为3e,起始码为3f,用以区别其它命令帧,第三部分是主机向从机发送的从机运行参数,从机收到此帧后,将数据格式化,存入eprom中,以发送流量计的运行参数,对此帧从机不回应。
四、 vb6.0中的activex控件:
在windows环境下,出于对系统的安全考虑,操作系统*接管了各种硬件资源,不允许用户直接对包括串口在内的硬件中断进行管理,以往人们只能通过繁琐的api函数或visualc++标准通讯函数来控制各种硬件,现在vb6.0提供了一个activex控件——microsoft communication control,version 6.0,称为mscomm控件,利用它可以方便地进行计算机串口的通讯管理。mscomm控件有许多属性,其中与串口有关的重要属性有:
commport
设置串口号,类型short,设置为1、2、3等,分别表示com1、com2、com3
settings
设置串口通讯参数(b、p、d、s),类型string ,b表示波特率,p表示奇偶校验(n—无校验,e—偶校验,o—奇校验,m—符号校验,s—空格校验),d表示有效数据位数,s表示停止位数
portopen
设置或返回通信端口状态,类型bool;
inputmode
从接收缓冲区读取数据格式,类型variant,设置为0时表示字符串格式,设置为1时表示二进制格式
input
设置从缓冲区中读取数据,类型long;
output
向发送缓冲区中写入数据,类型long;
inputlen
设置或返回input 每次读取的字节数,类型short;
rthreshold
设置返回要接收的字符数,类型short;
sthreshold
设置并返回发送缓冲区中允许的zui少字符数,类型short;
commevent
串口事件,类型short;
inputmode 使程序方便地选择从缓冲区读取数据格式。当串口接收到信息时mscomm 控件提供两种处理方法,一种为查询方式,一种为事件响应方式,利用setcommevent()函数设置串口响应事件。当响应事件发生时,系统会激活oncomm()事件。在oncomm()事件中添加用户处理代码,则可实现类似中断的串口事件处理。
五、 用vb6.0实现对流量计积算仪表的串行通讯控制:
在windows9x vb6.0编程环境下,新建工程引用mscomm通讯控件,在窗体中至少添加以下几个基本控件:
1、 1个mscomm控件,控制名为mscomm1,用于软件对串口的访问;
2、 两个定时器控件,名为(timperiodic和timnonperiodic),timperiodic 用于使pc机定时向各仪表发送周期性命令,使其定时回传实时数据;timnonperiodic 用于控制两次非周期性指令传送之间的时间间隔;
3、 1个非周期性命令发送按钮cmdnonperiodic,用于非周期性指令的传送启动;
4、若干个用于显示仪表参数的文本框和设置仪表参数的对话框;
监控软件的核心是如何读取和处理现场仪表的实时数据,编程时应注意以下几个问题:
①、 主机采用轮询方式访问从机,从机应答到发送完数据有一定的时间间隔,一般设定为2—3秒;
②、 由于采用一个串口和半双工通讯方式,一方发送数据时另一方必须等待接收,因此在发送非周期性命令时,必须停止轮询,否则会发生数据包碰撞,使通讯失败;
③、 主机呼叫从机无应答时,要有报警设置,提示通讯出错,一般设置3次呼叫无应答后,即可停止呼叫,提示通讯出错,跳过此从机继续执行;
④、 当从机故障或停运时,应可自动跳过对此从机轮询,以节省轮询时间,并在显示窗口提示,同时写入故障记录。
下面给出读取和处理现场仪表数据时的源代码,供参考:
5.1 窗体中各控件初始设置:
sub form-load()
mscomm1,commport=2 //选用com2口通讯
mscomm1,setting=“9600,n,8,1 //设置通讯参数
mscomm1,inputlen=0 //input将读取缓冲区全部内容
mscomm1,inputlensize=1024 //设置接收缓冲区大小
mscomm1,portopen=true n //打开通讯端口
mscomm1,inbuffercount=0 //清除发送缓冲区
mscomm.outbuffercount=0 //清除接收缓冲区
timnonperiodic.interval=3000 //设置3秒定时间间隔
timnonperiodic.interval=500 //设置0.5秒定时间间隔
cmdpressed=false //命令按钮在未激活状态
duringperiodic=false //周期命令传输未开始
duringnonperiodic=false //非周期命令传输未开始
end sub
5.2 周期性命令的发送:
sub timperiodic_timer()
if duringnonperiodic=true then exit sub //非周期命令数据传送未结束退出过程
duringperiodic=true //周期命令准许发送
call send date (periodic_command) //发送周期性命令
mscomm1.rthreshold=r_periopie_byte //接收字节后引发oncommgk 事件
end sub
5.3 非周期命令的发送
sub cmdnomperiodic_click()
cmdpressed=true
//允许发送
end sub
sub timnoperiodic_timer()
//发送周期性命令
if duringperiodic=true or cmdpressed=false then exit sub
//周期性命令传送未结束或本次传送未被允许时,退出本过程
cmdpressed=false
//发送命令按钮恢复禁止
call senddate(noperiodic_command)
//发送命令
mscomm1.rthreshold=r_nonperiodic_byte
//接收字节后引发oncomm事件
5.4 数据的接收和处理:
流量计积算仪表回传数据时即可在主机上引发oncomm()事件,在此事件处理函数中,首先判断接收数据的完整性,然后将数据一次全部读到所定义的变量参数中,根据流量计通讯协议中定义的内容,分别取出各个字节,解析出意义,在屏幕上显示,同时利用office自带的access数据库,在vb监控程序中加入data控件,将数据存入数据库中,使用vb的报表功能即可产生日、月、年报表,同时可以通过编程将数据发往企业内部主数据库,实现能源计量数据的自动上报。
六、结语:
本文利用vb6.0下的activex控件实现了在windows9x环境下,单台pc与多台流量计的通讯监控。本系统在宝钢集团调试系统中成功使用,实现了分散计量点数据的自动采集、汇总与上报,及时反应出生产中能源计量数据,为生产的成本控制起到了积极作用,整个系统结构简单,无需购置价格昂贵的组态软件,方便、灵活,具有较好的实际价值和使用性。
参考文献:
1、范逸文、陈立元 visual basic与rs-232串行通信控制[m],清华大学出版社,2002年。
2、王仲文等释,精通串行通信[m],北京电子工业出版社,1995年。
3、(美)steven holzner.visual basic 6.0 技术内幕,机械工业出版社[m],1999。
4、tlxz系列流量计说明书,2002年
其它类似信息

推荐信息