999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Matlab與C#混合編程在配電網斷線監測軟件的應用①

2018-01-11 01:59:43王士新張慧芬
化工自動化及儀表 2017年12期
關鍵詞:配電網程序故障

王士新 張慧芬 徐 斌 孔 平 付 珂

(1.濟南大學自動化與電氣工程學院;2.國網山東省電力公司濟寧供電公司)

Matlab與C#混合編程在配電網斷線監測軟件的應用①

王士新1張慧芬1徐 斌2孔 平2付 珂2

(1.濟南大學自動化與電氣工程學院;2.國網山東省電力公司濟寧供電公司)

在開發配電網斷線監測軟件的過程中,提出基于Matlab與C#混合編程的軟件開發方法,該方法將Matlab語言編寫的數據處理算法源程序編譯為.NET程序集以實現兩者混編的目的,發揮兩者在軟件開發上獨特的優勢,不僅降低了數據處理算法的開發難度,也大幅提升了軟件品質。該軟件主要提供COMTRADE協議錄波文件解析和管理、監測信息管理、電壓/電流分析、處理結果可視化展示及處理結果導出等功能。

混合編程 配電網 斷線監測 數據處理算法 故障錄波器

配電網斷線故障是配電網中不可忽視的故障類型,目前在對配電線路故障檢測的研究中,主要側重于發生各類短路故障后的檢測與定位,而對于配電網斷線故障的研究較少,在目前運行的配電網中還沒有專門針對斷線故障的保護裝置[1,2]。為解決這一現狀,筆者結合當前普遍應用的故障錄波器開發上位機應用軟件,通過對COMTRADE協議錄波文件的解析得到錄波數據,利用對負序電流的希爾伯特黃變換(HHT)分析結果最終實現故障選線功能[3]。為了達到軟件可靠性和實用性的要求,該軟件不僅需要對數據快速有效的分析,而且需要良好的交互界面,為此,筆者提出了基于Matlab與C#.NET混合編程的軟件開發方法。

Matlab是優秀的數值計算和仿真分析軟件,用戶只需極少的代碼就可以完成十分復雜的計算任務,在大幅提高數據分析算法開發效率的同時也降低了開發難度。但是Matlab在開發應用程序和對系統資源利用性能上表現較差,人機界面開發較為困難,難以滿足工程需要[4]。而C#則是一種面向對象的、運行于.NET Framework之上的高級程序設計語言,程序員可以快速編寫各種基于.NET平臺的應用程序,使開發人機界面和利用系統資源更加方便、快捷。但是用C#語言編寫數據分析算法較為困難,需從底層運算編寫且容易出錯,執行效率較低[5]。因此,運用Matlab與C#混合編程方法,即利用C#編程實現人機界面的開發、系統資源的利用及端口操作等任務,利用Matlab完成數據分析算法,可以極大程度地提高編程效率。

1 C#與Matlab混合編程的實現方法

Matlab與C#通過接口可以實現雙向混合編程,但在實際軟件開發中通常將Matlab編寫的程序編譯為COM組件或者.NET程序集供C#調用[6]。筆者采用.NET程序集的方式進行混合編程,.NET程序集通常為.exe或.dll文件,是一種自描述組件,與COM組件相比它不需要向操作系統注冊,降低了在客戶機安裝運行的條件,更便于程序的發布和升級。現以傅里葉變換(FFT)功能模塊為例介紹Matlab與C#混合編程的實現方法,調試通過的開發環境為Matlab R2012a和Microsoft Visual Studio 2010。

1.1 Matlab程序編譯為.NET程序集

1.1.1編寫Matlab源程序

由于軟件的源程序較為復雜,為了更有效地說明問題,這里以FFT算法功能模塊的混編為例來進行介紹,簡化后的Matlab代碼如下:

function[mag,ang,f]=Myfft(x,Fs)%輸入為采樣信號和采樣頻率,輸出為幅值、相位和頻率序列

N=size(x,1);

n=0:N-1;

y=fft(x,N);%對信號進行快速Fourier變換

mag=abs(y)*2/N;%求得Fourier變換后的振幅(頻率譜×2/N為真實振幅)

ang=angle(y);%求得Fourier變換后的相位

f=n*Fs/N;%頻率序列

程序中函數fft為Matlab自帶,無需重寫,這也是用Matlab開發復雜算法的優勢之一。保存該程序,文件名為函數名Myfft.m。

1.1.2配置Matlab編譯器

在Matlab命令窗口輸入mbuild-setup,選擇開發本軟件所用的Visual開發環境對應的編譯器版本,若無對應版本需更換Visual或者Matlab版本使之對應,否則無法完成混編。筆者使用的開發環境為Matlab R2012a和Microsoft Visual Studio 2010并調試通過。配置完成后只要開發環境不改變,此步驟僅執行一次。

1.1.3打開.NET編譯器添加源程序文件

在Matlab中新建Deployment Project(圖1),輸入工程名稱為FFT,選擇工程的保存位置且類型選擇為.NET Assembly。

圖1 新建Deployment Project

在.NET Assembly窗口中選擇Add class并定義類名為fft,在此類下選擇Add files添加Matlab源程序文件Myfft.m(圖2)。在Package選項卡中可查看工程包含的文件,也可添加其他引用的文件或路徑,可選擇添加MCR到此工程,此方法可解決目標機沒有MCR的問題,但這種方式在編譯時耗時長且沒有必要。

圖2 .NET Assembly窗口

1.1.4編譯生成.NET程序集

編譯之前需在設置窗口的.NET選項卡中設置Microsoft Framework版本號,Visual Studio 2010的Framework版本為4.0。配置完成后點擊Build開始編譯工作。編譯結束后在工程路徑下會生成工程文件夾FFT,子目錄distrib文件夾中包含了混編所需要的C#程序集FFT.dll。

1.2 C#調用Matlab生成的.NET程序集

1.2.1添加引用

打開Visual C#的項目,在解決方案資源管理器當前項目下添加兩個引用,一個是對生成的程序集FFT.dll的引用,另一個是對MWArray.dll動態鏈接庫的引用,此文件位于Matlab安裝目錄下。在程序中需要引用兩個命名空間:using MathWorks.Matlab.NET.Arrays和using MathWorks.Matlab.NET.Utility。Matlab平臺與.NET平臺的數據交換是由這兩個命名空間下的類和接口實現的,可以使用MathWorks.Matlab.NET.Arrays.MWArray類型變量作為兩個平臺的中間變量實現數據交換。

1.2.2編寫C#代碼調用程序集

在編寫調用代碼之前要查看被調用的程序集的輸入輸出形式,編譯器將Matlab源程序函數編譯后以多函數重載的方式存放于類fft下,供用戶以不同的方式調用,在解決方案資源管理器中雙擊FFT引用即可打開對象瀏覽器,定位到成員fft可查看重載,并根據實際輸入輸出方式選擇合理的重載進行調用。這里選用public MathWorks.Matlab.NET.Arrays.MWArray[]Myfft(int numArgsOut,MathWorks.Matlab.NET.Arrays.MWArray x,MathWorks.Matlab.NET.Arrays.MWArray Fs),如圖3所示。

圖3 類fft的重載函數成員

可以看出,除輸出參數個數numArgsOut變量為int類型外,其他輸入/輸出參數均為中間類型MWArray。根據上述分析編寫的調用函數如下(主要代碼和注釋):

using MathWorks.Matlab.NET.Arrays;

using MathWorks.Matlab.NET.Utility;

//定義一個函數fft對調用進行二次封裝

public static void fft(float[]ia2,float[]T)

{

//創建fft類對象

FFT.fft ft=new FFT.fft();

//利用MWArray提供的接口函數對輸入量進行數據類型轉換,MWNumericArray類型是MWArray的子類,即向下兼容

MWNumericArray Ia2=new MWNumericArray(ia2);

MWNumericArray t=new MWNumericArray(T);

//調用Myfft方法,返回MWArray[]類型變量resultArray

MWArray[]resultArray=ft.Myfft(3,Ia2,t);

//將輸出結果的每一個元素拿出來用ToArray方法強制轉換為double型二維數組,即完成了從中間變量到.NET變量的轉換

double[,]result0=(double[,])resultArray[0].ToArray();

double[,]result1=(double[,])resultArray[1].ToArray();

double[,]result2=(double[,])resultArray[2].ToArray();

}

至此完成了C#語言調用Matlab生成的.NET程序集的任務,對于其他功能模塊的編程均按照這種方式進行混合編程。

2 混合編程存在的問題與優化

Matlab與C#混合編程也有不可避免的劣勢,當第1次調用.dll程序集時必然會加載MCR,這個過程根據目標機器性能的不同將耗費10~15s的時間,造成首次進行數據分析時的假死現象。采取在MCR加載前提醒用戶的方式無法從根本解決問題,增加線程雖然程序不會假死,但加載的時間是必然存在的。徹底解決這一問題的關鍵在于如何完全規避加載時間,使之不影響調用時間。

然而,在程序運行后的時間內均有可能調用.dll程序集,在程序運行前加載又會拖慢程序的打開速度。筆者采用增加用戶登錄界面的方法,在程序真正運行前進行身份驗證的同時創建新的后臺線程完成MCR的加載,這樣既對軟件的使用權限加以限制又解決了MCR加載耗時長的問題。

用戶登錄信息采用本地加密存儲方式,C#.NET提供了DESCryptoServiceProvider類可以對用戶信息進行加密處理并存儲在本地目錄,通過這種方式實現了較為可靠的用戶登錄系統。

在登錄界面初始化的過程中創建一個新的線程,該線程通過調用一次.dll間接實現MCR的加載,仍以FFT算法為例,其調用程序如下:

public LoginForm()

{

InitializeComponent();//登錄界面初始化

//啟用新線程進行加載,防止假死

Thread th=new Thread(Load_MCR);

th.IsBackground=true;

th.Start();

}

private static void Load_MCR()

{

//用創建.dll實例的方法預加載MCR

FFT.fft mcrLoad=new FFT.fft();

}

3 軟件的安裝和應用

由于采用了自描述.NET程序集實現了Matlab與.NET兩個平臺的混合編程,目標機器僅需安裝.NET Framework 4.0和Matlab Compiler Runtime(MCR)即可脫離特定開發環境運行此軟件。程序打包時要將.NET Framework 4.0作為系統必備條件一起打包,這樣在軟件安裝時,安裝向導自動檢測當前安裝環境下是否存在指定版本的.NET Framework,若沒有則首先安裝.NET Framework 4.0然后再進行應用軟件的安裝,最后在目標機上安裝MCR,其安裝文件在開發機Matlab安裝目錄的MatlabR2012a oolboxcompilerdeploywin32下。

基于筆者所述方法完成的配電網斷線監測軟件,主要實現了對COMTRADE協議錄波文件的解析,并利用對負序電流的HHT分析結果最終實現故障選線的功能,為了增強軟件的實用性,還添加了傅里葉分析(FFT)與波形對比等功能,軟件功能框圖如圖4所示,其中FFT分析功能模塊、序分量分解功能模塊、EMD分解功能模塊和希爾伯特變換功能模塊均由Matlab編寫,軟件主界面如圖5所示,軟件充分考慮人機交互的人性化,在主界面和子界面中均保持了傳統軟件的界面風格。

圖4 配電網斷線監測軟件功能框圖

4 結束語

通過實例介紹了Matlab與C#混合編程的實現方法,將Matlab源程序編譯為.NET程序集,用C#語言編寫調用方法實現兩者的混合編程。利用用戶登錄界面初始化時添加新線程加載MCR的方式,規避了MCR加載對調用.dll程序集的影響,解決了MCR加載時間過長的缺陷。此方法充分發揮了兩種語言的優勢,用較少的代碼完成了復雜的數據處理算法,而且具有人機界面美觀、程序運行穩定及升級維護方便等特點,是算法處理和界面開發極為有效的結合方式,非專業人士也可以完成軟件的開發、維護和升級,具有較廣的應用范圍。

圖5 配電網斷線監測軟件主界面

[1] 張慧芬,桑在中.架空線單相斷線接地復故障分析[J].中國電力,2013,46(2):65~71.

[2] 盛方正,陳子聰,陳曉炯.中性點不接地系統單相斷線故障分析及對策研究[J].供用電,2011,28(3):43~45.

[3] 肖希鳳.配電線路單相斷線故障檢測技術研究[D].濟南:濟南大學,2016.

[4] 黃敬濤.基于C#與Matlab混合編程的肝儲備功能分析系統研究[D].長春:吉林大學,2013.

[5] 姚光強,陳立平.基于COM技術的C#與Matlab混合編程[J].計算機工程,2008,34(14):87~89.

[6] 侯偉真,李正強,張玉環,等.基于C#和Matlab的HJ-1-CCD氣溶膠光學厚度反演系統的開發[J].遙感信息,2013,28(5):28~31.

ApplicationofProgrammingMixedMatlabandC#inLine-brokenMonitoringSoftwareforDistributionNetwork

WANG Shi-xin1,ZHANG Hui-fen1,XU Bin2,KONG Ping2,FU Ke2
(1.SchoolofAutomationandElectricalEngineering,UniversityofJinan; 2.JiningPowerSupplyCompany,ShandongElectricPowerCompany)

In the process of developing line-broken monitoring software for the power distribution network, a software development method based on programming which mixed Matlab and C# language was proposed, which has the source program of data processing algorithm written in Matlab language compiled as a .NET

國家電網公司科技項目。

王士新(1991-),碩士研究生,從事配電網故障檢測工作,wangshixin1016@163.com。

TH865; TM769

A

1000-3932(2017)12-1135-05

2017-09-07,

2017-10-18)

(Continued on Page 1163)

猜你喜歡
配電網程序故障
故障一點通
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
配電網自動化的應用與發展趨勢
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
奔馳R320車ABS、ESP故障燈異常點亮
基于IEC61850的配電網數據傳輸保護機制
電測與儀表(2016年5期)2016-04-22 01:14:14
配電網不止一步的跨越
河南電力(2016年5期)2016-02-06 02:11:24
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
故障一點通
主站蜘蛛池模板: 午夜爽爽视频| 538国产在线| 全部免费特黄特色大片视频| 欧美日韩专区| 午夜爽爽视频| 国产伦精品一区二区三区视频优播 | 秋霞午夜国产精品成人片| 亚洲开心婷婷中文字幕| 亚洲国产AV无码综合原创| 又黄又湿又爽的视频| 久久久久青草线综合超碰| 国产乱子伦视频在线播放| 92精品国产自产在线观看| 午夜福利网址| 3D动漫精品啪啪一区二区下载| 婷婷色一二三区波多野衣| 日韩无码黄色| 少妇人妻无码首页| 国产精品人莉莉成在线播放| 搞黄网站免费观看| 在线99视频| 国产一区二区丝袜高跟鞋| 天天综合网在线| 亚洲无码高清视频在线观看 | 亚洲第一黄片大全| 欧美日韩中文字幕在线| 欧美日韩理论| 亚洲欧美极品| 午夜国产在线观看| 国产精品久久久久久搜索 | 成人国产精品网站在线看| 青草视频在线观看国产| 国内精品视频区在线2021 | 日本午夜精品一本在线观看| 在线不卡免费视频| 国内精品一区二区在线观看| 日韩精品专区免费无码aⅴ| 国产97视频在线| 欧美不卡视频在线观看| 欧美福利在线观看| 天堂成人在线| 国产主播一区二区三区| 久久国产V一级毛多内射| 欧美精品亚洲精品日韩专区va| 亚洲国产AV无码综合原创| 亚洲大尺码专区影院| 五月天综合网亚洲综合天堂网| 亚洲精品动漫在线观看| 亚洲国产亚综合在线区| 午夜影院a级片| 国产成人精品第一区二区| 国产成人精品视频一区视频二区| 国产在线日本| 91麻豆精品国产高清在线| yjizz视频最新网站在线| 欧美亚洲中文精品三区| 久久精品电影| 国产乱人乱偷精品视频a人人澡| 婷婷中文在线| 99激情网| 国产资源站| 国产XXXX做受性欧美88| 欧美A级V片在线观看| 91在线激情在线观看| 毛片大全免费观看| 凹凸国产分类在线观看| 久久毛片网| 午夜成人在线视频| 亚洲欧美日韩成人在线| 色婷婷成人| 在线观看免费国产| 91青青视频| 亚洲日本中文字幕天堂网| 丁香婷婷久久| 无码人妻热线精品视频| 91久久国产热精品免费| 国产综合精品日本亚洲777| 亚洲日本www| 午夜性刺激在线观看免费| 日韩在线第三页| 国产视频资源在线观看| 免费观看国产小粉嫩喷水|