郑 凡,沈建良,韩圆勋,周韶园,郑荐中
(1.浙江省计量科学研究院,浙江 杭州 310018; 2.国网浙江省电力公司电力科学研究院,浙江 杭州 310011)
多表位电能表检定装置的通信控制研究
郑 凡1,沈建良2,韩圆勋1,周韶园1,郑荐中1
(1.浙江省计量科学研究院,浙江 杭州310018;2.国网浙江省电力公司电力科学研究院,浙江 杭州310011)
为实现对多表位电能表检定装置的通信控制,并满足实时性要求,对C#.NET中的SerialPort类进行研究。详细阐述了串行通信的原理和实现过程,并提出了两套设计方案。方案一采用AutoResetEvent类结合SerialPort类中的Data
事件驱动的方法进行设计;方案二采用发送控制指令数据联动接收设备应答消息数据的方法进行设计。采用方案二的方法,为多表位电能表检定装置设计、开发了上位机应用程序,并且应用到电能表型式评价的温度影响试验中。经试验验证,该串行通信方案可行、可靠,并具有良好的可传送性,为提高电能表型式评价试验的自动化检测效率作出了贡献。两套设计方案不仅适用于各类电能表检定装置的通信控制,还适用于其他工控设备的RS-232串行通信,为开发自动化控制设备的应用程序提供了捷径。
能源电力; 电能表; 检定装置; 型式评价; 串行通信; 数据采集
电能表检定装置作为功率及电能单位量值传递的主要检测设备,是政府计量部门的必备设备之一[1]。而电能表检定装置在国家电能中心(浙江)常年承担着电能表型式评价的检测试验工作,故对装置的具体功能和多表位的设定有了更多的需求。在对多表位电能表检定装置监控的过程中,须达到较高的实时性,尤其是在串行通信方面,要求与设备实时通信,以及时读取和处理误差数据,并将数据反馈给用户。
针对上述要求,利用C#.NET环境下的SerialPort类设计了两套解决方案,且均可实现计算机通过串口通信对多表位电能表装置的实时控制。方案一采用AutoResetEvent类结合SerialPort类中的DataReceived事件驱动的方法进行设计;方案二采用发送控制指令数据联动接收设备应答消息数据的方法进行设计。根据设备的具体特点,采用方案二完成应用程序的设计与开发[2]。
其次,对于控制多表位电能表检定装置的应用程序设计,其主要难点是计算机与多表位电能表检定装置间的串行通信问题。根据设备厂家提供的通信协议,不同的控制指令具有特定格式的数据帧和对应的功能。根据通信协议调试计算机与设备之间的串行通信,是开发自动化控制程序的第一步。只有确保两个设备间的正常通信以及发送完控制指令后设备能及时正确响应,并能输出正确的功能操作,才能进行后续操作。根据软件需求搭建整个软件框架,实现对设备的自由控制,以满足型式评价的试验要求。经过对串行通信技术的研究,目前提出了两种设计方案,下文将对其进行详细阐述[4]。
1.1串行通信设计方案一
AutoResetEvent类允许线程间通过发信号进行互相通信,当线程需要独占访问资源时使用。这里的访问资源是指计算机与多表位电能表检定装置的唯一通信串口。通过AutoResetEvent类为每一条设备控制指令创建唯一的实例。在发送某条控制指令前,将对应的实例初始化为非终止状态,阻止当前线程;然后发送该条控制指令,通过AutoResetEvent类中的WaitOne()方法等待接收应答消息,当收到正确应答消息后,通过AutoResetEvent类中的R.Set()方法释放当前线程,继续执行当前线程的其他程序。在利用R.Set()方法释放线程前,串口的发送和接收缓冲区被当前的控制指令和设备应答消息占用,其他控制指令不能通过此串口发送,只能等待线程释放后才能被执行[5]。
在方案一中,控制指令的发送和设备应答消息的接收是单独处理的。控制指令数据帧,以字节数组的方式通过SerialPort类中的Write()方法写入到串口发送缓冲区,然后发送出去。而对于设备应答消息的接收则要相对复杂些。为了方便编程人员开发应用程序,C#.NET将串口接收事件DataReceived事件封装到SerialPort类中,以便调用。对于设备应答消息的接收及处理是封装在一个自定义方法Port_Received()中,通过C#.NET中事件注册的方法将Port_Received()方法注册到DataReceived事件中。当计算机串口接收消息缓冲区接收到消息,即触发执行Port_Received()方法,对计算机串口接收消息缓冲区中的数据帧进行处理,并判断是否正确地返回应答消息。如果正确,即调用R.Set()方法释放线程;如果返回的应答消息不正确或在规定时间内无返回消息,则表示当前控制指令发送失败。
采用Port_Received()方法判断返回的应答消息是否正确,其步骤简述如下。
首先,将串口接收缓冲区的数据帧长度与设备通信协议中的正常返回消息的数据帧长度进行比较,判断符合要求后,再对串口接收缓冲区的数据帧内容进行判断。
串行通信设计流程(方案一)如图1所示。
本研究中选取的70例甲状腺结节患者,与早期研究报告数据基本一致,即疾病本身的发生,主要是由缺碘导致。长期处在缺碘状态下,甲状腺内纤维组织进行性增大,形成结节,并伴有甲状腺变形等器质性改变。总之,不同的诊断措施及其差异会直接对患者确诊后治疗方案产生影响,并且这种差异影响很有可能决定患者病情的走向。
图1 串行通信设计流程图(方案一)
1.2串行通信设计方案二
方案二不再采用DataReceived事件驱动的方式进行设计,而是采用发送控制指令数据联动接收设备应答消息数据的方式进行设计。串口发送控制指令后紧接着等待接收设备的正确应答消息,接收完成后,即表示本条控制指令发送成功。控制指令的发送和设备应答消息的接收被封装在同一区域内,即代码共享区;而对设备应答消息的后续处理工作是和上述方法分开的,它是在具体的设备控制操作方法内单独处理的。
在设计方案二之前,考虑到计算机会向多表位电能表检定装置不间断地发送多条控制指令来满足试验要求,在此期间若不加控制,多条控制指令连续通过串口发送后,必然会导致串口接收缓冲区接收到的设备应答消息发生紊乱,进而造成后续环节不能正确处理数据。下面将lock关键字运用到收发数据的代码共享区中,以解决上述问题。
对于关键字lock,它可以把一段代码定义为互斥段。在某一时刻,互斥段只允许一个线程进入执行,而其他线程必须等待[6]。
lock是一种较为简单、实用的线程同步方式,通过为给定对象获取互斥锁来实现同步。它可以保证当一个线程在调用关键共享代码段时,阻止其他线程调用,直到当前线程对象被释放后才能被其他线程调用。
在应用程序设计中,计算机使用串口向多表位电能表检定装置发送某条控制指令后,等待设备返回应答消息,在收到正确的应答消息前,串口将一直被占用。其他控制指令将不能通过当前串口发送,须等待上条控制指令接收到完整的设备应答消息后释放串口,其他指令才能被执行。
串行通信设计流程(方案二)如图2所示。
图2 串行通信设计流程图(方案二)
根据图2可知计算机向多表位电能表检定装置发送控制指令的方法。①根据设备通信协议,创建以字节数组的形式的控制命令数据帧。②判断串口是否打开。为保证发送控制指令后,串口接收缓冲区中应只存在当前控制指令对应的设备返回的应答消息,需事先利用SerialPort类中的DiscardInBuffer()方法清空串口接收缓冲区的数据。③通过SerialPort类中的Write()方法发送控制指令,等待串口接收缓冲区的数据。④在接收数据的过程中给定时间限制,在规定时间范围内通过SerialPort类中的BytesToRead()方法读取串口缓冲区的数据帧长度。若数据帧长度与通信协议中正确的设备应答消息的数据帧长度相同,则直接跳出时间循环并通过SerialPort类中的Read()方法读取数据。若不相同,在规定时间内继续读取串口缓冲区的数据帧长度,直到与正确的设备应答消息的数据帧长度相同为止。若超过规定时间还未读取成功,则判定控制指令发送失败。⑤处理接收的正确设备应答消息,以满足设计需求。
1.3串行通信设计方案的选择
上述的串行通信设计方案一和方案二适用于大部分的设备控制应用程序。在使用过程中,用户可根据设备的实际性能以及串口接收数据的特点来选择方案。
方案一的优点是发送数据、接收数据及处理数据完全独立,降低了程序的耦合性,在程序设计过程中条理清晰,有利于程序开发。而该方案的缺点是在利用SerialPort类中的DataReceived事件触发处理数据方法时,若设备返回的应答消息数据不完整,则后续操作会导致误判。
方案二的优点是将发送数据和接收数据的方法全部封装在一个共享代码区中,提高了程序的内聚性,也保证了在规定时间内能一次性全部接收设备返回的应答消息数据。该方案的缺点是接收全部数据所需的时间需根据实际情况进行设定,而且时间长短可能会影响到串口通信的效率。
本次基于SerialPort实现对多表位电能表检定装置的控制程序的开发,将采用方案二进行设计。其原因是当计算机向多表位电能表检定装置发送完控制指令后,检定装置不能一次性返回所有数据,无法适应方案一中DataReceived事件触发的方式。
电能表检定装置具有启动试验、潜动试验、常数或走字试验、基本误差测试、时钟准确度试验等多个检定项目的自动校验功能,而且对于多表位检定装置,可同时校验规格相同、常数不同的多批次电能表[7-8]。此处多表位电能表检定装置是指拥有18个表位的电能表检定装置,目前它主要用于电能表型式评价试验项目中的温度影响试验、时钟准确度试验和时钟温度影响试验。
本文主要通过温度影响试验来具体阐述计算机实现对多表位电能表检定装置的通信控制过程。温度影响试验是指在不同环境温度下通过测得不同负载点下的基本误差,将算出的平均温度系数与JJF1245型式评价大纲相对应的误差限值相比较,判断是否符合大纲要求的试验[9]。
在测试不同负载点下的基本误差前,需先配置检测方案,将不同的测试负载点以泛型集合的方式存储起来,以备随时调用。误差测试点配置完成后,将开始控制多表位电能表检定装置自动测试不同负载点下的误差,并将误差存储到数据库中。
多表位电能表检定装置在不同负载点下的误差测试流程图如图3所示。
图3 误差测试流程图
从图3可以看出,多表位电能表装置在测试电能表的基本误差时,需要计算机通过串口通信向其发送多条控制指令才能完成测试工作。由于多表位电能表检定装置拥有18个表位,在向其循环发送设置圈数命令和读取误差命令时,可能会出现未能及时响应的情况,需重新发送指令。此时,正常响应的表位正常完成工作,将未能及时响应的表位及时挑选出来,并重新对其单独循环发送相关命令,直至设备在规定测试时间内响应为止。如在规定测试时间内此表仍未能及时响应,则立即跳出循环进行后续测试工作。其主要目的是提高试验效率和设备的有效利用率[10]。
目前,通过开发的上位机软件来控制多表位电能表检定装置,并将其运用于温度影响试验中,现已完成120批次的电能表温度影响试验。试验结果表明,该串行通信方法可行、可靠,且具有良好的可传送性和人机操作性。
本文利用C#.NET中的SerialPort类,实现计算机与多表位电能表检定装置的通信控制。通过计算机与电能表检定装置的串行通信,提高了计算机自动化控制工控设备的能力。该设计方案提高了电能表型式评价试验的自动化检测能力,在电能表计量行业中具有较高的推广应用价值。
[1] 程田甜.电能表检定装置系统设计与应用[J].科技资讯,2010(13):25.
[2] 彭伟.线程安全的.NET平台串口通信程序设计研究[J].湖北工业大学学报,2012,27(2):34-39.
[3] 王文泉.基于SerialPort的串口通信系统实现[J].科技广场,2011,27(5):21-23.
[4] 徐蕾璐,俞子荣.C#.NET环境下基于SerialPort实现SR23与PC机的通信[J].计算机与现代化,2011(5):107-109.
[5] 韩圆勋,郑凡,钱晓耀,等.电能表温度影响系列试验自动测试系统设计[J].自动化与仪表,2017,32(1):24-29.
[6] 李琳琳,王二宝,孙继银.电缆测试仪无线串行通信的设计与实现[J].自动化与仪器仪表,2012(6):133-135.
[7] 郭昕嫔.智能电能表全自动校验系统设计与应用[D].大连:大连理工大学,2012.
[8] 许卓,陈卫强,赵山,等.电能表检定装置现场自动检定系统的研究与应用[J].电测与仪表,2015,52(12):60-63.
[9] 赵波,李博,马宇明,等.智能电能表温度影响试验远程自动测试系统设计与应用[J].上海计量测试,2015(6):2-4.
[10]刘明,陈治,张洪彦.C#多线程串行通信方法的应用[J].昆明冶金高等专科学校学报,2008,24(1):11-15.
ResearchontheCommunicationControlforMulti-PositionVerificationDeviceofEnergyMeters
ZHENG Fan1,SHEN Jianliang2,HAN Yuanxun1,ZHOU Shaoyuan1,ZHENG Jianzhong1
(1.Zhejiang Province Institute of Metrology,Hangzhou310018,China;2.Electric Power Research Institute,State Grid Corporation of Zhejiang Electric Power Company,Hangzhou310011,China)
In order to realize the communication control of verification device for energy meters in multiple positions,and to achieve the requirement of real-time performance,the SerialPort class in C#.NET has been researched.The principle and implementation process of serial communication are described in detail,and two sets of design schemes are put forward.The scheme1is designed by using the AutoResetEvent class and the DataReceived event-driven method in the SerialPort class; the scheme2is designed by sending the control command data to the receiving device to answer the message data.Through the use of scheme2,host computer application program for the design of multi-epitope energy meter verification device is developed,and applied in the test of temperature influence for type evaluation of energy meter.The experimental results verify that the serial communication scheme is feasible and reliable,and has good transmissibility; it has made contribution to improve the efficiency of automatic detection of type test for energy meter.Two of the design schemes are not only applicable to the communication control of all types of energy meter verification devices,but also suitable for RS-232serial communication of other industrial control equipment,which provide shortcut for the development of application programs of automated control equipment.
Energy power; Energy meters; Verification device; Type evaluation; Serial communication; Data collection;
事件来解决设备间串行通信的问题。
TH89; TP29
10.16086/j.cnki.issn1000-0380.201710013
修改稿收到日期:2017-05-25
国家高技术研究发展计划(863计划)基金资助项目(2015AA050404)
郑凡(1963—),男,学士,工程师,主要从事电能计量检测技术研究。E-mail574614839@qq.com。
韩圆勋(通信作者),男,硕士,工程师,主要从事控制工程、检测技术与自动化技术研究。E-mail:hanyxzz@163.com。