首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

远程电能计量系统的设计与实现

远程电能计量系统的设计与实现

1 引言
随着电力系统自动化程度的提高,以及计算机技术在电力系统中日益广泛的应用。传统的电量计费方式由于其效率低、投入大、可靠性差等弊端,已无法适应新的形势要求。建立一套高精度、稳定可靠、自动化程度高的电能量自动计量系统具有实际应用意义。可靠、及时的将各数据指标量从厂站端送入主站的数据库,供后台计算分析、报表输出,是该系统正常运行的关键。而这部分功能是由远程数据采集子系统所实现的。下面,笔者将结合现场实际情况介绍该子系统的结构和设计方法,并就如何在Delphi5.0下编写该部分的通信软件进行详细阐述。
2 系统结构
本数据采集子系统由电能表、电能量采集器、前置机、通信通道、数据库服务器等硬件设备组成。系统结构如图1所示。采集器为东方电子CLL064型,通过RS485总线下接多块威胜、恒通等多功能电能表。采集器采集电能表中的各项输出数据(包括分时电量、瞬时量、需量、失压断相量等),将其在存储区中保存一定时间,并随时接受主站命令将数据打包上传。前置机采用一般PC机,通过MoxaC168H/PCI多串口卡扩展至1-10个串口,分别接多个Modem经各种通信通道(包括电力载波、微波、公用电话网等)与采集器进行通信。前置机对采集器上传数据进行相应处理后,通过DelphiBDE(Borland数据库引擎)存入网络数据库服务器(Sybase Adaptive Server 12.1),供其它子系统查询计算。
3 通信软件的设计
在Windows2000下,用Delphi进行串行口通信程序开发,一般有四种方法:利用windows提供的API函数;嵌入汇编语言直接读写串口;引入第三方的通信控件;利用第三方提供的通信函数。
利用Windows API函数读写串口即通过调用API函数中CreateFile、ReadFile、WriteFile等函数操作串口;嵌入汇编要进行中断接口编程,程序员必须掌握丰富的硬件知识。以上两种方法都要求编写大量的底层函数,增大了编程的工作量。而后两种方法对API函数进行了很好的封装,程序员只需设置一些简单的属性,调用少数直观、简易的函数即可完成大部分通信功能。程序员从大量繁琐的底层编程工作中解脱了出来。下面将对如何利用Microsoft ActiveX通信控件MSComm.OCX进行收发数据作详细介绍。
3.1 通信控件的引入
要将第三方的控件引入Delphi,首先在菜单项中选中“Component”,再选择“Import ActiveX”,从弹出的“Import ActiveX”窗口中选中“Microsoft Comm Control6.0(Version 1.1)”,最后点击Install按钮进行安装。即可将MSComm控件引入到Delphi5.0中。


3.2 通信控件的属性
下面给出了几个基本属性,其它属性请参阅MSDNLibrary VisualStudio 6.0。
属性 描述
CommPort 设置并返回通讯端口号。
Settings 设置并返回波特率、奇偶校验、数据位、停止位。
PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。
Input 从接收缓冲区返回和删除字符。
Output 向传输缓冲区写数据。
3.3 通信的实现
(1)发送数据
要想利用控件发送数据只需调用其Output属性向串口中写入数据。例如,


上述代码将字符串'The Sended String'通过串口1发送出去。又如,


上述代码将二进制流‘123’通过串口1发送出去。
(2)接收数据
接收数据按照接收数据的类型分两种形式,即如上述的字符串和二进制流类型。通过改变InputMode属性来区分,当其值为comInputModeText时表示以文本方式取回数据;当其值为comInputModeBinary时表示以二进制方式取回数据。
接收数据按照接收的方式也分两种形式。1)事件驱动的方式:当MSComm代表的串口收到Rthreshold个字符时会触发OnComm事件。因此只需通过添加OnComm事件代码来处理所收到的Rthreshold个字符即可实现。2)查询方式:以一定的时间间隔循环检测接受缓冲区,即通过InBufferCount的值来判断是否收到指定的字符数。
3.4 通信协议的说明
通信协议采用IEC60870-5-102《电力系统中传输电能量配套标准》。目前,各公司开发的电能量采集装置已逐步向该规约靠拢。下面就该规约的字节、帧格式进行说明。
每个字节有一个开始位(二进制0),八个信息位,一个偶校验位和一个终止位(二进制1)。
本规约采用3种基本的数据帧:单字节的E5H帧,10H开头的固定长度帧,68H开头的可变长帧。如下所示:


4 程序实例
本软件由两部组成:一部分是主线程,它负责处理主窗口的消息,对用户的输入进行响应。另一部分是通信线程,它负责与采集器的通信,由主线程控制其产生和终止。运行时,主线程根据数据库中的参数定时生成抄表任务,产生通信线程,在这种方式下主线程可控制多个通信线程同时运行,从而实现定时对多台采集器同时抄录。另外,主线程还进行监听服务,网络上的其它工作站籍此可通过TCP/IP套接字与其通信,产生通信线程从而实现随时抄表。下面给出通信线程的实现过程。
在Delphi5.0中创建线程只需从Tthread类继承一个自己的线程类,例如:TMyThread=class(TThread)。然后对该类的Execute方法进行重载,通信线程的实现部分就在该Execute方法中。程序流程图如图2所示。




部分代码如下:
procedure TMy Thread.Execute;
uar
...








5 结论
本文介绍了在Delphi5.0下利用ActiveX控件进行串行通信和使用多线程的方法,并给出了IEC102规约的解释。详细阐述了前置机与采集器通信软件的功能和设计方法。作为电量计费系统中的核心部分,本软件在湖北襄樊供电局已得到应用,实际运行表明,该通信方式简单、可靠、稳定,具有很好的可移植性、实时性。可供其它的远程通信系统借鉴参考。
6 参考文献
1 Marco Cantu.Delphi4从入门到精通.北京:电子工业出版社,1999
2 谢希仁编.计算机网络(第二版).北京:电子工业出版社,1999
3 Charles Petzold著.Windows程序设计(第五版).北京:北京大学出版社,1999
返回列表