摘 要:智能小区电表、水表和煤气表数据采集和监控的实现,对降低管理费用、提高物业管理水平具有举足轻重的作用。利用VB6.0 ActiveX通信控件MSComm和C-MBUS总线实现了单台PC机与多个智能表的串行通信和监控,可以集中控制分散设备、采集计量数据和自动上报。
关键词:智能小区;集中抄表系统;数据采集;智能仪表
中图分类号:TP274 文献标识码:A 文章编号:2095-6835(2014)05-0129-03
近年,智能小区逐渐由构想变成了现实,其中水、电、煤气的数据远传是其重要组成部分。它的实现对提高物业管理水平和工作效率、降低管理费用具有十分重要的意义,目前正被广泛地推广和运用。
本文利用C-MBUS(China Meter-Bus)总线和Vb6.0的ActiveX──Microsoft Communication控键,实现了Windows环境下1台PC机对小区“三表”的串行通信功能,并完成对数据的采集和监控。
C-MBUS是一种低成本的、一点对多点的通讯总线,具有通讯容量大(500点)、通讯速率高(9 600 bps)、抗干扰能力强、功耗成本低和设计简单等特点。此外,C-MBUS搭建的自动抄表通信系统还具有自动登陆、节点中断报警和双向可中断的先进通讯功能。
1 系统硬件设计
C-MBUS电气特性规定,在两线制传输方式下实现半双工通信,在波特率为4.8 kb/s时通讯距离可达2.4 km,通讯容量为500个结点;当通讯距离超过2 km时,可使用隔离中继器使设备再延长2 km,增大通讯距离,系统结构框图如图1所示。
图1 C-MBUS通讯系统框图
图1中,串口RS-232经总线集中器和C-MBUS总线隔离器与末端通讯节点——智能仪表相连。总线集中器接口电路如图2和图3所示,其主要由C-MBUS主控芯片CMT100和MAX232电平转换电路组成。当通讯总线上部分通讯节点的智能仪表发生故障时,总线隔离器确保剩余总线上的通信节点仍能实现与上位机正常通讯。在总线上,各智能仪表被赋予唯一的地址码,用以身份识别。
图2 CMT100与PC机电平转换电路
2 智能仪表的结构与通讯功能
2.1 仪表的组成
随着单片机技术的发展,用户表大多采用单片机组建的仪表智能系统。在该系统中,智能仪表的核心由零功耗磁敏传感器、低功耗MSP430系列MSP430F449单片机和C-MBUS通信芯片CMT001构成,它们之间的完美组合不但能完成数据的采集,还可以运用一定的通信协议或遵循相同协议的设备联网通信,硬件设计如图4所示。
图3 CMT100与总线接口电路
图4 CMT001与单片机的接口电路
2.2 智能仪表与计算机的通信
采用半双工的通讯方式,智能仪表为从机,上位PC机为主机,总线集中器为C-MBUS的主控端,并实现与PC机的RS232进行数据传输,波特率为4 800 bps,通讯格式为3个前导字节(FE,FE,FE)、1位起始位(68H)、8位数据位、无奇偶校验位、2位停止位,数据格式为十六进制,且每个从机(智能仪表)被赋予唯一的地址,主机循环查询,从机应答方式。主机通过总线向智能仪表发送包含仪表地址的控制命令帧启动一次通讯,从机接收到数据后,判断主机呼叫地址是否和本机地址匹配:如果地址相同,则握手成功,智能仪表作出响应,并给出相应的返回码;否则不会作出任何响应。
3 用VB6.0实现对用户表的串行通信控制
出于安全性的考虑,Windows环境下各种硬件资源直接由操作系统负责管理和配置,编程人员通过应用接口程序(API)或VC标准函数来控制各种硬件资源。在VB6.0编程环境下,利用其提供的ActiveX控件——Microsoft Communication Control,version6.0(MSComm),通过设置MSComm控件属性,PC机很容易实现串口通讯和管理。
MSComm常用的重要属性如下:①Commport. 设置串口号,类型short设置为1,2,3等,分别为COM1,COM2,COM3.②Settings. 以字符串形式设置串口通讯参数,格式为MSComm.Settings=”4800,n,8,2”,字符串中的第一部分为波特率;第二部分为奇偶校验,其中n表示无奇偶校验,E表示奇校验,0表示偶校验;第三部分为数据位;第四部分为停止。③Portopen. 设置COM端口的状态,类型为Bool.④Input.从接收缓冲区返回和删除字符,类型为Long. ⑤Output.向传输缓冲区写一个字符,类型为Long。⑥InputLen. 设置从接收缓冲区取得字符数,类型为Short。⑦InputMode. 设置取回的数据类型,类型为VARIANT,0或comInputModeText表示以文本形式取回,1或comInputModeBinary表示以二进制形式取回。如果数据只用ANSI字符集,则用comInputModeText;对其他字符数据,则使用comInputModeBinary.⑧Comm Event.串口事件,类型为Short.
另外,还有一些属性比较重要,例如InBuffersize(设置输入缓冲区的大小)、OutBuffersize(设置输出缓冲区的大小)、Sthreshold(设置输出缓冲区允许的最少的字符数)、Rthreshold(设置输入缓冲区允许的最少的字符数),Windows正是利用这些属性的设置来实现串行端口的中断功能。
新建工程引用MSComm通讯控件,在窗体中添加以下控件:①1个MSComm控件,用于软件对串口的访问。②3个定时器控件,分别为TSend,TRev和TDelay,其中TSend用于PC机启动对各仪表发送周期性的命令,时期定时回传实时数据;TDelay用于延时,即相邻两次指令发送周期,控制两次周期指令传送之间的时间间隔;TRev接收仪表设备回传数据的响应时间。③监控软件的核心是采用何种策略,实时、准确获取和处理现场仪表数据。endprint
本设计主要从以下几个方面着手:①主机采用自动循环方式查询从机;②利用串口通信,采用半双工确保数据的准确传送和接收;③主机呼叫从机且无应答时,给出相应的提示,跳过该从机并执行其他任务,避免系统因一个从机的故障而影响其他仪表正常通讯。
以下是通讯时的部分代码和运行界面,实时采集界面如图5所示。
Dim iLoop As Integer
Dim iloop1 As Integer
…
cport(1) = "COM2"
…
cmbSerial(0).Clear
vCommPointer = 0
For iloop1 = 0 To UBound(cport)
… //通讯参数的设置
cPortSpeedA(9) = "4800,n,8,2"
…
cmbSerial(0).ListIndex = 0
cmbSerial(1).ListIndex = 9
txtRevData.Text = "" //清空接受区
txtsendData.Text = "" //清空发送区
End Sub
Private Sub cmdSend_Click() //通讯开始
…
Timesend = True //Timesend控件使能
…
End Sub
Private Sub timesend_Timer()
Call senddata //调用发送程序
End Sub
Private Sub mscCom_OnComm()
…
Select Case mscCom.CommEvent //中断响应事件
…
Case comEvReceive
timRev.Enabled = True
…
End Select
End Sub
4 数据的接收和处理
智能仪表回传数据时即刻在主机上引发OnComm()事件,在此事件处理函数中,首先判断接收数据的完整性,然后将数据一次全部读到所定义的变量中,根据流量计通讯协议重定义的内容分别取出各字节,解析出意义并在屏幕上显示如图5所示。同时利用Access数据库,在VB监控程序中加入DATA控件,将数据存入数据库中,利用数据库报表功能即可产生日、月、年报表,同时,可以通过编程将数据发送到各公司的数据库,实现能源计量数据的自动上报。
5 结束语
利用VB6.0的ActiveX空间实现Windows环境下,单台PC机与255台用户表的采集和监控,其数据传输稳定可靠,具有扩展性好、调试维护方便等优点,避免人工抄表工作量大、效率低等弊端。
参考文献
[1]刘萌,周学明,郭安源.Visual Basic企业办公系统开发实例导航[M].北京:人民邮电出版社,2004.
[2]范逸之,陈立元.Visual Basic与RS-232串行通信控制[M].北京:清华大学出版社,2002.
————————
作者简介:贾琦(1989—),男,山西临汾人,2012毕业于中北大学自动化专业,工学学士。
〔编辑:李珏〕endprint
本设计主要从以下几个方面着手:①主机采用自动循环方式查询从机;②利用串口通信,采用半双工确保数据的准确传送和接收;③主机呼叫从机且无应答时,给出相应的提示,跳过该从机并执行其他任务,避免系统因一个从机的故障而影响其他仪表正常通讯。
以下是通讯时的部分代码和运行界面,实时采集界面如图5所示。
Dim iLoop As Integer
Dim iloop1 As Integer
…
cport(1) = "COM2"
…
cmbSerial(0).Clear
vCommPointer = 0
For iloop1 = 0 To UBound(cport)
… //通讯参数的设置
cPortSpeedA(9) = "4800,n,8,2"
…
cmbSerial(0).ListIndex = 0
cmbSerial(1).ListIndex = 9
txtRevData.Text = "" //清空接受区
txtsendData.Text = "" //清空发送区
End Sub
Private Sub cmdSend_Click() //通讯开始
…
Timesend = True //Timesend控件使能
…
End Sub
Private Sub timesend_Timer()
Call senddata //调用发送程序
End Sub
Private Sub mscCom_OnComm()
…
Select Case mscCom.CommEvent //中断响应事件
…
Case comEvReceive
timRev.Enabled = True
…
End Select
End Sub
4 数据的接收和处理
智能仪表回传数据时即刻在主机上引发OnComm()事件,在此事件处理函数中,首先判断接收数据的完整性,然后将数据一次全部读到所定义的变量中,根据流量计通讯协议重定义的内容分别取出各字节,解析出意义并在屏幕上显示如图5所示。同时利用Access数据库,在VB监控程序中加入DATA控件,将数据存入数据库中,利用数据库报表功能即可产生日、月、年报表,同时,可以通过编程将数据发送到各公司的数据库,实现能源计量数据的自动上报。
5 结束语
利用VB6.0的ActiveX空间实现Windows环境下,单台PC机与255台用户表的采集和监控,其数据传输稳定可靠,具有扩展性好、调试维护方便等优点,避免人工抄表工作量大、效率低等弊端。
参考文献
[1]刘萌,周学明,郭安源.Visual Basic企业办公系统开发实例导航[M].北京:人民邮电出版社,2004.
[2]范逸之,陈立元.Visual Basic与RS-232串行通信控制[M].北京:清华大学出版社,2002.
————————
作者简介:贾琦(1989—),男,山西临汾人,2012毕业于中北大学自动化专业,工学学士。
〔编辑:李珏〕endprint
本设计主要从以下几个方面着手:①主机采用自动循环方式查询从机;②利用串口通信,采用半双工确保数据的准确传送和接收;③主机呼叫从机且无应答时,给出相应的提示,跳过该从机并执行其他任务,避免系统因一个从机的故障而影响其他仪表正常通讯。
以下是通讯时的部分代码和运行界面,实时采集界面如图5所示。
Dim iLoop As Integer
Dim iloop1 As Integer
…
cport(1) = "COM2"
…
cmbSerial(0).Clear
vCommPointer = 0
For iloop1 = 0 To UBound(cport)
… //通讯参数的设置
cPortSpeedA(9) = "4800,n,8,2"
…
cmbSerial(0).ListIndex = 0
cmbSerial(1).ListIndex = 9
txtRevData.Text = "" //清空接受区
txtsendData.Text = "" //清空发送区
End Sub
Private Sub cmdSend_Click() //通讯开始
…
Timesend = True //Timesend控件使能
…
End Sub
Private Sub timesend_Timer()
Call senddata //调用发送程序
End Sub
Private Sub mscCom_OnComm()
…
Select Case mscCom.CommEvent //中断响应事件
…
Case comEvReceive
timRev.Enabled = True
…
End Select
End Sub
4 数据的接收和处理
智能仪表回传数据时即刻在主机上引发OnComm()事件,在此事件处理函数中,首先判断接收数据的完整性,然后将数据一次全部读到所定义的变量中,根据流量计通讯协议重定义的内容分别取出各字节,解析出意义并在屏幕上显示如图5所示。同时利用Access数据库,在VB监控程序中加入DATA控件,将数据存入数据库中,利用数据库报表功能即可产生日、月、年报表,同时,可以通过编程将数据发送到各公司的数据库,实现能源计量数据的自动上报。
5 结束语
利用VB6.0的ActiveX空间实现Windows环境下,单台PC机与255台用户表的采集和监控,其数据传输稳定可靠,具有扩展性好、调试维护方便等优点,避免人工抄表工作量大、效率低等弊端。
参考文献
[1]刘萌,周学明,郭安源.Visual Basic企业办公系统开发实例导航[M].北京:人民邮电出版社,2004.
[2]范逸之,陈立元.Visual Basic与RS-232串行通信控制[M].北京:清华大学出版社,2002.
————————
作者简介:贾琦(1989—),男,山西临汾人,2012毕业于中北大学自动化专业,工学学士。
〔编辑:李珏〕endprint