【内容摘要】本文通过对江阴长江斯菲尔电力仪表公司的多功能电力仪表进行具体的分析,介绍了基于Visual Basic 软件编程开发了远程读取多功能电力仪表数据的程序。通过MSComm 控件对RS-232串口COM1 的进行控制,实现了对多功能电力仪表远程控制功能。
【关键词】RS-232 串口,MODBUS 总线,MSComm 控件,232/485 转换模块
Abstract The paper analyzes multifunctional electrical instrument of JianYin Changjiang Sfere Electric Power Company Limited specifically. It is introduced remotely accessing multifunctional electrical instrument by application of Visual Basic. The paper achieves to remotely control multifunctional electrical instrument by using MSComm control to access serial port COM1.
Key Words RS-232 serial port, MODBUS, MSComm Control, 232/485 Converter Module
一、前言
原来的电力系统中,高低压配电柜中往往要安装各种各样的仪表,(如电度表、电流表、电压表等)实现对电力系统的监视。而如果在一些大厂往往就有很多仪表,每隔一段时间就要有专人带着纸笔到厂区内的所有仪表点巡视一番,并将所有的数值记录下来,带回办公室作数据分析和处理。
随着计算机科学技术的发展,计算机在电力监控领域中得到了越来越广泛的应用。使用多功能智能电力仪表代替机械式的电力仪表是工业自动化的大势所趋。由于多功能仪表不但可以一表多用,而且一般的多功能仪表都可以通过其通讯接口来实现对仪表的编程、数据采集等功能。所以使用多功能
电力仪表能够在很大程度上减少人们的劳力,并且可以极大地提高效率。
由于实现对电力多功能仪表的监视,功能比较单一,且市场上的组态软件也比较昂贵。在这里作者就是用MSComm 控件实现对串口的控制,实现对江阴长江斯菲尔电力仪表公司的多功能电力仪表远程读取电能数据,从而达到软件的设计。MSComm 控件是Microsoft 提供的扩展控件,用于支持VB 程序对串口的访问,该控件“隐藏”了大部分串口通讯的底层运行过程和许多烦琐的处理过程,同时支持查询方法和事件驱动通讯的机制。因此用其实现微机串口的数据通讯相当简单,以很少的程序代码就可以轻松串口的访问和数据通讯。
二、MODBUS 通讯协议分析:
由于江阴长江斯菲尔电力仪表公司CD194E 系列的多功能电力仪表是采用远程RS-485 数字接口(差分、半双工)和使用MODBUS-RTU 通讯协议,来实现对仪表的编程、数据采集等功能,所以先介绍MODBUS 协议:
MODBUS 协议是一种主从式点对点的通讯协议,允许一台主机和多台从机之间进行数据通信,在CD194E 系列的多功能电力仪表通讯系统中,主机是微机(PC、工控机、PLC),从机是CD194E系列仪表。在该通讯系统中,允许系统连接多达128 个仪表及1200 米的通讯距离。通讯方式采用主
机请求,从机应答。即:主机提出命令请求,从机响应接收数据后作数据分析,如果数据满足通讯规约,从机做数据响应。
主、从机间的通讯每一帧数据包含以下信息(16 进制):
从机地址、命令字、信息字、校验码
从机地址(1 个字节):从机设备号,主机利用从机地址来识别进行通讯从机设备。
命令字(1 个字节):设定主机对从机的通讯内容。
信息字(N 个字节):包括进行两机通讯中各种数据地址、数据长度、数据信息。
校验码(2 个字节):用于检测数据通讯错误,采用循环冗余码CRC16。
通讯参数的设置:通过仪表上的编程键盘对仪表的仪表地址(1-247)、通讯速度(4800 或9600)和数据格式(1 个起始位,8 个数据位,1 个停止位,可选择无校验位、奇校验位、偶校验位。)进行设置。
网络连线如图一如示:
在这里,作者使用的是台湾泓格科技有限公司的232/485 转换模块I-7520。由主控计算机送出的命令是通过RS-232 串行通信端口发送出去,此信号经过232/485 转换模块(模块编号I-7520)将信号标准电位及类型转换后,在485 网络上传播开来。多功能电力仪表收到属于自身的命令后,会进行分
析控制的操作,最后将结果送至485 网络,让此信号再通过I-7520 的转换后,可由计算机的RS-232串行通信端口接收进来。整个送收过程全是以串行处理。
三、软件的设计和开发
注:从CD194E 系列的多功能电力仪表传过来的电功率数据就存放在Byte1 到Byte4 内。
3.通信步骤:
⑴加入通信控件。也就是MSComm 控件
⑵设置通信端口号码。即CommPort 属性,在本文使用Com1。
⑶设置通讯参数。即Settings 属性。在本文设置为9600,n,8,1。即通讯速度为9600,数据格式为1 个
起始位,8 个数据位,1 个停止位,无校验位。注意必须与多功能电力仪表的设置一致,不然就会通
信失败。
⑷设置其它参数。必要时再加上其它的属性设置。
⑸打开通信端口。即PortOpen 属性设成True。
⑹每隔500毫秒送出字符串或读入字符串。即发送命令4(读N 个字节)来读取电功率参数,使用
Input 及Output 属性。
⑺使用完MSComm 控件后,将通信端口关闭。
4.人机界面:
5.程序代码:
'API 函数声名
Private Declare Function GetTickCount Lib "kernel32" () As Long
'点击结束程序按钮
Private Sub CmdEnd_Click()
End
End Sub
'点击读取电功率按钮
Private Sub CmdRead_Click()
Timer1.Enabled = Not Timer1.Enabled
If Timer1.Enabled Then
CmdRead.Caption = "停止读数"
Else
CmdRead.Caption = "读取电功率"
End If
End Sub
'程序初始化
Private Sub Form_Load()
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
Dim C4%, C5%, C6%, C7%
Dim Tick&
Dim Data As Double
Dim Buf() As Byte
Dim ByteOut(7) As Byte
MSComm1.InputLen = 0
Buf = MSComm1.Input
'重新定义数据输入缓冲区, 发送命令4
MSComm1.InputLen = 1
ByteOut(0) = &H1
ByteOut(1) = &H4
ByteOut(2) = &H0
ByteOut(3) = &H5C
ByteOut(4) = &H0
ByteOut(5) = &H4
ByteOut(6) = &H31
ByteOut(7) = &HDB
MSComm1.Output = ByteOut(0) & ByteOut(1) & ByteOut(2) & ByteOut(3) & ByteOut(4) & ByteOut(5) &
ByteOut(6) & ByteOut(7)
'等待多功能电力仪表响应的数据到达串口
Tick = GetTickCount()
Do
If (GetTickCount() - Tick) / 1000# > 10 Then
MsgBox "时间过久,请检查多功能电力仪表及传输状态!", vbCritical + vbOKOnly, "系统信息"
Exit Sub
End If
DoEvents
Loop Until MSComm1.InBufferCount >= 9
'从输入缓冲区读数据
Buf = MSComm1.Input
If Buf(0) <> 1 Then
MsgBox "地址错误!", vbCritical + vbOKOnly, "系统信息"
Exit Sub
End If
Buf = MSComm1.Input
If Buf(0) <> 4 Then
MsgBox "命令错误!", vbCritical + vbOKOnly, "系统信息"
Exit Sub
End If
Buf = MSComm1.Input
If Buf(0) <> 4 Then
MsgBox "长度错误!", vbCritical + vbOKOnly, "系统信息"
Exit Sub
End If
Buf = MSComm1.Input
C4 = Buf(0)
Buf = MSComm1.Input
C5 = Buf(0)
Buf = MSComm1.Input
C6 = Buf(0)
Buf = MSComm1.Input
C7 = Buf(0)
Buf = MSComm1.Input
Buf = MSComm1.Input
Data = Power(C4, C5, C6, C7)
TxtPower.Text = CStr(Data)
End Sub
'自定义功率换算函数
Private Function Power(C4%, C5%, C6%, C7%)
Dim PowerExp As String, Mantissa As String
Dim ReadValue#
Dim ValueSign&
If ((C4 And &H80) / 2 ︿ 7) = True Then
ValueSign = -1
Else
ValueSign = 1
End If
PowerExp = CStr((C4 And &H7F) * 2 + (C5 And &H80) / 2 ︿ 7)
Mantissa = CStr((&H80 Or C5) * 2 ︿ 16 + C6 * 2 ︿ 8 + C7)
ReadValue = ValueSign * 2 ︿ (Val(PowerExp) - 126) * Val(Mantissa) / (256 * 65536)
Power = ReadValue
End Function
四、结论
本实例是作者在实验室做过多次实验,达到了预定的应用效果,目前在江西某厂取得了实际的应用。
该控制系统的最大优点是:
1,从硬件上看,仅仅使用一个转换模块就可以实现全厂电能远程监控和集中管理的功能。大大提高了效率,且十分经济实惠。
2,从软件上看,直接使用串口的控制技术,而不必需要写额外的驱动程序。采用VB 开发应用软件十分方便,编程工作量小。
【参考文献】
1.李肇庆、韩涛。串行端口技术,国防工业出版社,2004
2.范逸之。Visual Basic 与RS-232 串行通信控制,清华大学出版社,2002
3.范逸之。Visual Basic 与分布监控系统——RS232/485 串行通信,清华大学出版社,2002
4.江阴长江斯菲尔电力仪表有限公司使用手册
5. 台湾泓格科技有限公司的232/485 转换模块说明书.