微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 三相多功能电能表检定软件设计与开发

三相多功能电能表检定软件设计与开发

时间:04-06 来源:电子产品世界 点击:

 引言

  随着国民经济和社会的快速发展,人民生活水平的不断提高,全社会对安全、经济、优质用电的要求越来越高,于是可以计量正/反向有功电能、正/反向无功电能、四象限无功电能,并具有多费率控制,负荷曲线记录的多功能电能表已在实际工作中大量使用。三相多功能电能表检定装置也随之发展起来。为了适应三相多功能电能表检定装置的要求,本文以Delphi 7为开发平台设计和开发出了一款技术先进、功能实用、管理全面的三相多功能电能表检定软件系统。该系统除具备普通电能表检定的功能之外,还具有测量正反向有无功电量、四象限无功电能的基本误差、日计时误差和时段投切误差、最大需量误差和需量周期误差等项目的功能[1]。

  系统设计

  电能表是当前电能计量和经济结算的主要工具,它的准确与否直接关系到国家与用户的经济利益[2]。因此,必须按照先进性、实用性、可靠性、安全性、可维护性及开放性等原则[3],来设计和开放电能表检定软件系统。同时,作为多功能电能表检定软件系统,它应该对所有电能表的各项参数和指标进行检定考核,符合DL/614-2007《多功能电能表》、DL/T645-2007 《多功能电能表通讯规约》、DL/T 460-2005《交流电能表检验装置检定规程》等规程的要求。而且,具备多功能电能表数据的管理功能和极强的证书、报表的打印功能。

  根据上述分析,把三相多功能电能表检定软件系统具体分为四个子模块:参数设置模块、试验管理模块、结果查询及打印模块和系统维护模块。

  参数设置模块包括系统参数设置和资产参数设置。系统参数设置可以对校验台的挂表总数、通讯规约、通讯端口等进行设置,同时可以对误差试验的误差限内控、误差化整、误差稳定性、误差结果处理等进行设置。在资产参数中要输入资产编号、电表常数、等级、电压档位、额定电流等信息。

  试验管理模块包括试验准备、试验项目及自定义校验三个模块。试验准备是在试验校验前进行预热工作和光电头测试工作。试验项目包括基本试验、多功能试验和自定义试验。基本试验是对启动、潜动、谐波、校核常数及基本误差进行鉴定。多功能试验项目针对多功能电子表设计,试验项目有基频试验、时段投切试验、最大需量示值误差试验、计度器组合误差试验和多功能表通讯测试。可以用自定义校验对特殊点进行校验,校验时用户自己设定电压、电流、频率、相位等。

  结果查询及打印模块, 校验完成后结果自动存储,用户可以进行查询并打印检定证书或试验数据。系统维护模块,通过建立用户密码识别体系,并对用户进行权限控制,从而保证特定的用户只能执行指定允许的操作。

       系统工作流程

  该系统包括的主要校验项目如图1所示,检定人员可以任意选择一个或者几个项目进行。另外,为了让检定人员从重复劳动中解脱出来,降低工作强度,提高效率,同时也减少了人为因素的影响,使检定数据的采集更加准确可靠,本系统增加了自动校验。当选择自动校验时,设定完参数后,系统将根据图1完成所有的校验项目,直到保存校验结果、打印鉴定记录和鉴定证书试验结束。

  系统主要功能实现

  本系统以Delphi 7 为开发平台,Delphi 7具有强大的数据库支持能力,通过引擎BDE(Borland Database Engine)对数据库进行操作和管理并与各种数据库接口。同时,Delphi 7提供功能强大的数据窗口画板及其交互功能,可以提高开发效率,缩短开发周期。

  该系统从RS-232串口接收数据,然后转化成记录结构,各功能模块根据记录的数据进行处理和显示。主界面消息分发处理机制的主要代码如下:

  procedure Tmain_form.OnGetData(var Msg :TMsg);

  var

  lPort, mPort: integer;

  while CheckRecData(lPort, mPort, OutData) = 1 do

  begin

  if OutData.Order = UI_Order then

  Power; //电源显示

  if (OutData.Order = Error_Order)

  then

  if stand_check_form <> nil then

  //电能表误差检定

  SendMessage(stand_check_form.

  handle, MSG_ERR, 0, 0);

  end;

  if (OutData.Order = Hits_Order) or

  (OutData.Order = Capture_Order)

  then

  begin

  if Start_test_form <> nil then

  //起动、潜动试验

  SendMessage(Start_test_form.

  handle, MSG_StartTest, 0, 0);

  if Under_Test_Form <> nil then

  SendMessage(Under_test_form.

  handle, MSG_UnderTest, 0, 0);

  end;

       if (OutData.Order = Ask_FReq_

  Order) and (JpForm <> nil) then

  SendMessage(Jpform.Handle,

MSG_JpTest, 0, 0); //基

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top