亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Matlab與C#混合編程在配電網(wǎng)斷線監(jiān)測軟件的應用①

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

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

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

        Matlab與C#混合編程在配電網(wǎng)斷線監(jiān)測軟件的應用①

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

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

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

        混合編程 配電網(wǎng) 斷線監(jiān)測 數(shù)據(jù)處理算法 故障錄波器

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

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

        1 C#與Matlab混合編程的實現(xiàn)方法

        Matlab與C#通過接口可以實現(xiàn)雙向混合編程,但在實際軟件開發(fā)中通常將Matlab編寫的程序編譯為COM組件或者.NET程序集供C#調(diào)用[6]。筆者采用.NET程序集的方式進行混合編程,.NET程序集通常為.exe或.dll文件,是一種自描述組件,與COM組件相比它不需要向操作系統(tǒng)注冊,降低了在客戶機安裝運行的條件,更便于程序的發(fā)布和升級?,F(xiàn)以傅里葉變換(FFT)功能模塊為例介紹Matlab與C#混合編程的實現(xiàn)方法,調(diào)試通過的開發(fā)環(huán)境為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;%頻率序列

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

        1.1.2配置Matlab編譯器

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

        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#調(diào)用Matlab生成的.NET程序集

        1.2.1添加引用

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

        1.2.2編寫C#代碼調(diào)用程序集

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

        圖3 類fft的重載函數(shù)成員

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

        using MathWorks.Matlab.NET.Arrays;

        using MathWorks.Matlab.NET.Utility;

        //定義一個函數(shù)fft對調(diào)用進行二次封裝

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

        {

        //創(chuàng)建fft類對象

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

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

        MWNumericArray Ia2=new MWNumericArray(ia2);

        MWNumericArray t=new MWNumericArray(T);

        //調(diào)用Myfft方法,返回MWArray[]類型變量resultArray

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

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

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

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

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

        }

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

        2 混合編程存在的問題與優(yōu)化

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

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

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

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

        public LoginForm()

        {

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

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

        Thread th=new Thread(Load_MCR);

        th.IsBackground=true;

        th.Start();

        }

        private static void Load_MCR()

        {

        //用創(chuàng)建.dll實例的方法預加載MCR

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

        }

        3 軟件的安裝和應用

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

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

        圖4 配電網(wǎng)斷線監(jiān)測軟件功能框圖

        4 結束語

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

        圖5 配電網(wǎng)斷線監(jiān)測軟件主界面

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

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

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

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

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

        [6] 侯偉真,李正強,張玉環(huán),等.基于C#和Matlab的HJ-1-CCD氣溶膠光學厚度反演系統(tǒng)的開發(fā)[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

        國家電網(wǎng)公司科技項目。

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

        TH865; TM769

        A

        1000-3932(2017)12-1135-05

        2017-09-07,

        2017-10-18)

        (Continued on Page 1163)

        猜你喜歡
        配電網(wǎng)程序故障
        故障一點通
        試論我國未決羈押程序的立法完善
        人大建設(2019年12期)2019-05-21 02:55:44
        配電網(wǎng)自動化的應用與發(fā)展趨勢
        “程序猿”的生活什么樣
        英國與歐盟正式啟動“離婚”程序程序
        奔馳R320車ABS、ESP故障燈異常點亮
        基于IEC61850的配電網(wǎng)數(shù)據(jù)傳輸保護機制
        電測與儀表(2016年5期)2016-04-22 01:14:14
        配電網(wǎng)不止一步的跨越
        河南電力(2016年5期)2016-02-06 02:11:24
        創(chuàng)衛(wèi)暗訪程序有待改進
        故障一點通
        粉嫩虎白女毛片人体| 男男做h嗯啊高潮涩涩| 激情文学婷婷六月开心久久| 亚洲av永久无码一区二区三区| 中文字幕爆乳julia女教师| 三级国产女主播在线观看| 全程国语对白资源在线观看 | 日韩午夜在线视频观看| 日本最新视频一区二区| 亚洲国产精品无码久久| 亚洲av无码一区二区三区在线| 久久久久成人精品免费播放| 亚洲av成人永久网站一区| 蜜臀av在线播放一区二区三区| 小sao货水好多真紧h视频| 人妻无码人妻有码不卡| av中文字幕在线直播| 朝鲜女人大白屁股ass孕交| 美女大量吞精在线观看456 | 国产亚洲午夜高清国产拍精品不卡| 亚洲一二三四区免费视频| 丰满少妇被粗大的猛烈进出视频| 久久国产自偷自免费一区100| 亚洲综合一区二区三区蜜臀av| 亚洲精品成人无百码中文毛片| 99久久精品国产一区二区三区| 国产女人精品视频国产灰线| 中文字幕亚洲视频三区| 女人的精水喷出来视频| 久久精品无码免费不卡| 91免费国产| 色综合悠悠88久久久亚洲| 粉嫩被粗大进进出出视频| 国产精品久久久久久2021| 亚洲精品中文字幕乱码三区99| 中文字幕免费在线观看动作大片 | 蜜桃av观看亚洲一区二区| 亚洲男人av天堂久久资源| 狠狠色成人综合网| 青青草视频网站免费观看| 国产精品久久婷婷免费观看|