基于MODBUS总线多功能电力仪表远程通讯的软件开发技术

时间:2012-07-25

      一、前言

  原来的电力系统中,高低压配电柜中往往要安装各种各样的仪表,(如电度表、电流表电压表等)实现对电力系统的监视。而如果在一些大厂往往就有很多仪表,每隔一段时间就要有专人带着纸笔到厂区内的所有仪表点巡视一番,并将所有的数值记录下来,带回办公室作数据分析和处理。

  随着计算机科学技术的发展,计算机在电力监控领域中得到了越来越广泛的应用。使用多功能智能电力仪表代替机械式的电力仪表是工业自动化的大势所趋。由于多功能仪表不但可以一表多用,而且一般的多功能仪表都可以通过其通讯接口来实现对仪表的编程、数据采集等功能。所以使用多功能电力仪表能够在很大程度上减少人们的劳力,并且可以极大地提高效率。由于实现对电力多功能仪表的监视,功能比较单一,且市场上的组态软件也比较昂贵。在这里作者就是用 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个停止位,可选择无校验位、奇校验位、偶校验位。)进行设置。

  网络连线如图一如示:

图1 网络连线

  在这里,作者使用的是台湾泓格科技有限公司的232/485转换模块 I-7520。由主控计算机送出的命令是通过 RS-232 串行通信端口发送出去,此信号经过 232/485 转换模块(模块编号I-7520)将信号标准电位及类型转换后,在 485 网络上传播开来。多功能电力仪表收到属于自身的命令后,会进行分析控制的操作,将结果送至485网络,让此信号再通过I-7520的转换后,可由计算机的 RS-232串行通信端口接收进来。整个送收过程全是以串行处理。

  三、软件的设计和开发

图2 软件的设计和开发

  注:从 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.人机界面

图3 人机界面

  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

  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 转换模块说明书.

      6. RS-485  datasheet https://www.dzsc.com/datasheet/RS-485+_584821.html.

      7. PLC datasheet https://www.dzsc.com/datasheet/PLC_1248813.html.

      8. RS-232  datasheet https://www.dzsc.com/datasheet/RS-232+_584855.html.

上一篇:用一只三相整流器和降压器做离线单相电源
下一篇:光电隔离技术的应用

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料