鄭恒持,蔣丁宇,盧興泉,劉泊江
(大連海事大學 輪機工程學院,遼寧 大連 116026)
摘要:電能質量直接影響著電力系統能否安全運行,為了能及時可靠地檢測電能質量,采用全新的Windows Presentation Foundation(WPF)技術,設計了一款電能質量檢測系統上位機軟件。從工業控制上位機軟件的特點出發,實現了上位機與下位機的串口通信,繪制了實時數據波形圖及諧波波形圖,完成了檢測數據的清晰顯示。該系統人機界面美觀,操作方便,數據存儲量大,功能完善。
關鍵詞:WPF;串口;波形圖;數據顯示
0引言
隨著電子電氣設備的不斷增多及設備功能的完善,人們對電能質量的要求也越來越高。電能質量檢測是評估電能質量水平、發現電能質量問題的主要手段[1]。
WPF是基于.NET Framework框架的面向下一款操作系統的圖形化桌面應用設計軟件[2],本文采用WPF界面實現技術,運用C#語言編寫邏輯代碼,設計一款功能強大的電能質量檢測上位機軟件。
1WPF概述
1.1WPF體系結構
WPF使用的是一個多層體系結構。在頂層,由應用程序和一個完全由托管的C#程序編寫的一組高層服務交互。將NET對象轉化成Direct3D紋理和三角形的實際工作,在后臺由一個名為milcore.dll的低級非托管組件完成。milcore.dll是使用非托管代碼實現的,因為它要與Direct3D緊密集成,而且它對性能十分敏感。需要明確的事實是,在WPF中幾乎所有繪圖內容都是由Direct3D渲染的,甚至二維圖形和普通文本也被轉換為三角形傳送到Direct3D管線,而不是使用GDI+或User32渲染圖形[3]。
1.2WPF優點
WPF是全新的編程模型,底層圖形技術不再是GDI/GDI+,而是以DirectX作為核心繪圖函數。DirectX繪圖時會將盡可能多的工作交給圖形處理單元(GPU)處理,WPF會將CPU和GPU分開利用[4],因為GPU的浮點計算能力遠高于CPU,從而保證了大量計算的優先性,同時也能最小化CPU使用率。DirectX繪圖速度高于GDI/GDI+,能產生更好的視覺效果。對于大量的浮點運算圖形來說,WPF是一個很好的選擇。同時,WPF能夠根據系統DPI設置,非常靈活地放大和縮小顯示內容,以使其適合所使用的顯示器。
2上位機軟件設計與實現
2.1界面設計
系統界面主要由串口參數設置區、電能質量參數顯示區、實時數據波形區、通道選擇區以及實時數據監測區5部分組成。圖1為上位機界面。
2.2上位機軟件功能實現
本上位機軟件主要的功能是將單片機采集的數據解析并顯示,同時繪制波形圖來清晰地展現檢測的電能質量。
2.2.1實時數據波形圖的繪制
上位機軟件往往需要顯示各種信號的變化,這時經常需要波形圖[5]。波形圖能夠直觀地反映出信號的變化及走勢,有助于分析檢測信號。雖然WPF本身的繪圖功能非常強大,但是如果每種圖表都要自己重新去實現一次的話,工作量就會變得異常大。這時就非常有必要使用一種專業的圖表生成工具Visifire。
Visifire是一款適用于微軟平臺下的控件,能夠用于WPF、Sliverlight、SharePoint以及WindowsPhone平臺,并且各平臺使用相同的API,易于開發和跨平臺使用[6]。本軟件的實時數據波形圖和實時諧波波形圖就是利用Visifire控件將采集來的信號點處理后繪制成曲線。其中曲線圖滿足以下特點:
(1)通過Chart的ScrollingEnabled屬性實現圖表的滾動功能;
(2)可以通過ZoomingEnabled和ZoomingMode實現鼠標框選放大和鼠標滾輪放大或縮小;
(3)Demo已經實現,原理是Series[0].DataPoints綁定DataPoints值集合時,按需求移出該集合的第一個點并添加最后一個點,界面圖會跟隨變化;
(4)將Chart的ToolBarEnabled的屬性值設置為true,則將鼠標指針移動到圖表上時右上角會顯示導出、打印的圖標。
2.2.2實時監測數據的顯示
數據顯示主要包括了電能質量參數、實時檢測數據、諧波數據的顯示。其中由于實時檢測數據較多,因此顯示最為復雜。這里使用DataGrid控件。DataGrid是WPF中功能最完備的數據顯示工具。它將數據分割到包含行和列的網格中,每行都與一個單獨的對象相對應,每列與該對象的一個屬性相對應。創建DataGrid關鍵是去定義列。
這里使用繼承自DataGridColumn的DataGridColumn類來動態地生成列。這種列對于大部分數據類型是標準選擇。當定義列時,幾乎總是設置3個細節:在列頂部顯示的題頭文本、列的寬度以及獲取數據綁定。
列的題頭可以通過設置DataGridColumn.Header屬性實現,但不必限制為普通文本。列的題頭是內容控件可以為Header屬性提供任何內容,包括圖像或者具有元素組合的布局面板。
列的寬度可以通過設置DataGridColumn.Width屬性和DataGrid.ColumnWidth來實現。二者唯一的區別是前者屬性應用于單個列,而后者為整個表中所有的列設置默認寬度,而且當設置前者時會覆蓋后者。
最重要的細節是為列提供恰當的信息綁定表達式,通過設置DataGridColumn.Binding屬性提供該綁定表達式。如果把Binding比作數據的橋梁,那么它的兩端分別是Binding的源和目標。
3串口通信
電能質量檢測系統由以單片機為核心的采集板卡完成數據的采集,由上位機軟件通過特定的算法完成對各個復雜參數的處理并顯示,所以需要兩者之間實現通信,這里使用異步串行通信。采用WPF開發串口通信程序主要有3種方法:第一種方法是通過MSComm控件;第二種方法是采用微軟在.NET中推出的一個串口控件SerialPort;第三種方法是用API函數[7]。為方便起見,使用了SerialPort控件。
3.1SerialPort控件使用流程
在使用SerialPort控件實現串口通信時,首先應該根據設計要求構建出程序設計的框架,接著設置通信對象、通信端口、波特率、數據位、停止位,再根據需求編寫相應的實現程序完成數據的接收和發送,接著完成數據解析和處理,最后關閉通信端口[8],通信過程如圖2所示。
3.2串口配置
通過[PortName]屬性獲取或設置通信端口,包括但不限于所有可用的COM端口,該屬性返回類型為String,PortName正常返回值為COM1、COM2……。SerialPort控件分別用[BaudRate]、[Parity]、[DataBits]、[StopBits]屬性設置通信格式中的波特率、數據位、停止位和校驗位[9]。
3.3串口讀取數據
當初始化工作結束,打開串口時,SerialPort會創建一個監聽線程ListenThread,在這個線程中,等待注冊的串口中斷,當收到中斷后,會調用DataReceived事件[10],根據已設定的通信協議,運用Read方法讀取數據并完成數據的解析。調用完成后,繼續進入循環等待,直到串口被關閉退出線程。
3.4關閉串口
通信結束后,通過調用Close()方法關閉串口。
4結論
經過驗證,本文設計的上位機軟件與下位機實現了很好的配合,能夠充分完成電能質量各個參數的實時檢測與顯示。同時將全新的WPF技術應用到上位機軟件的開發中,使軟件開發簡單化、界面美觀化、功能強大化。
參考文獻
[1] 葉敦范,劉鑫,李亞敏,等.一種電源智能測試儀的設計與實現[J].電子技術應用,2014,40(5):9396.
[2] Su Haikang, Sheng Jin. Application of video anaglyph maker for 3-D flow simulation[J]. Journal of Hydrodynamics,2010,22(2):289294.
[3] MACDONALD M. WPF編程寶典[M].王德才,譯.北京:清華大學出版社,2011.
[4] 李成剛,馮靜,凌琳. 基于WPF的交互式繪圖系統的開發[J].微型機與應用,2011,30(6):50.
[5] 劉亞雷,于艷美,孟春寧,等.一種便攜式水下圖像實時采集系統軟件設計[J].微型機與應用,2015, 34 (19):2023.
[6] MAGDA Y. Serial port controls ADC[J]. Test & Measurement World,2008,28(9):22.
[7] 李江全,鄧紅濤,劉巧,等. Visual C#.NET串口通信及測控應用典型實例[M].北京:電子工業出版社,2012.
[8] 王文泉. 基于SerialPort的串口通信系統實現[J]. 科技廣場,2011(5):2123.
[9] 李麗萍,魏權利.NET中SerialPort類在短信收發軟件中的應用[J]. 微型機與應用,2012,31(21):1113.
[10] Zhang Tao. Research and application of serial communication modules based on VB[J]. Energy Procedia,2013,180:10291033.