鄭 凡,沈建良,韓圓勛,周韶園,鄭薦中
(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。