耿朝陽(yáng),王宏見,謝安明
(1.西安工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,西安710021;2.上海信息安全技術(shù)工程研究中心,上海201204)
20世紀(jì)80年代末以來(lái),神經(jīng)網(wǎng)絡(luò)這個(gè)涉及多種學(xué)科的新的高科技領(lǐng)域,吸引了眾多的神經(jīng)生理學(xué)家、心理學(xué)家、數(shù)理科學(xué)家、計(jì)算機(jī)與信息科學(xué)家及工程師們進(jìn)行研究和應(yīng)用[1].神經(jīng)網(wǎng)絡(luò)日益成為當(dāng)代高科技領(lǐng)域中的競(jìng)爭(zhēng)熱點(diǎn).
隨著現(xiàn)代化的發(fā)展,設(shè)備的規(guī)模和復(fù)雜度越來(lái)越高,對(duì)設(shè)備運(yùn)行效率的要求越來(lái)越高,因此對(duì)設(shè)備在線故障檢測(cè)和故障診斷方法有了更高的要求,故障診斷方法的研究越來(lái)越受到關(guān)注[2].由于設(shè)備故障信息的不確定性,以及故障現(xiàn)象與故障原因之間的復(fù)雜的非線性關(guān)系,故障診斷的難度越來(lái)越高,故障診斷的效率和準(zhǔn)確度不高,需要探索一種新的方便、快捷、可靠的診斷方法,以提高故障診斷的效率和準(zhǔn)確度[3].
基于神經(jīng)網(wǎng)絡(luò)的故障診斷方法,因?yàn)樯窠?jīng)網(wǎng)絡(luò)自身固有的非線性映射能力、超強(qiáng)自適應(yīng)能力及學(xué)習(xí)能力,使其在故障診斷領(lǐng)域中擁有獨(dú)特的優(yōu)勢(shì)[4].但是神經(jīng)網(wǎng)絡(luò)算法復(fù)雜,如果直接使用C/C++語(yǔ)言編程,雖然運(yùn)行效率較高,但易出錯(cuò),且修改困難.傳統(tǒng)的方法中,首先在 Matlab環(huán)境中對(duì)目標(biāo)對(duì)象進(jìn)行仿真建模,并進(jìn)行實(shí)驗(yàn)調(diào)試.確定模型正確后,再手工將 Matlab中的模型翻譯成硬件或者軟件加以實(shí)現(xiàn),工作量大而且易出錯(cuò).
文中將神經(jīng)網(wǎng)絡(luò)與專家系統(tǒng)融合應(yīng)用于某裝備的設(shè)備故障診斷,使用BP神經(jīng)網(wǎng)絡(luò)對(duì)某裝備的電信號(hào)的狀態(tài)特征參數(shù)進(jìn)行分類和識(shí)別,有效地將狀態(tài)分離開來(lái),根據(jù)實(shí)時(shí)采集到的裝備內(nèi)部不同位置的電信號(hào)判斷其是否正常工作,并能對(duì)該裝備出現(xiàn)的故障類型進(jìn)行識(shí)別,首先在Matlab環(huán)境中輸入故障樣本,對(duì)BP網(wǎng)絡(luò)進(jìn)行訓(xùn)練,將訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)進(jìn)行轉(zhuǎn)換,生成C++代碼,將代碼移植到Linux環(huán)境中,減少了手工工作量,提高了系統(tǒng)的開發(fā)效率和可靠性,達(dá)到快速診斷的目的.
使用神經(jīng)網(wǎng)絡(luò)進(jìn)行故障診斷時(shí),需要將故障信息或故障現(xiàn)象輸入神經(jīng)元網(wǎng)絡(luò),網(wǎng)絡(luò)的權(quán)值和閾值.存儲(chǔ)在神經(jīng)網(wǎng)絡(luò)的各節(jié)點(diǎn)中.為了得到合適的權(quán)值和閾值,需要對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練[5].選定適當(dāng)?shù)木W(wǎng)絡(luò)結(jié)構(gòu)和規(guī)模,用能反映被檢測(cè)設(shè)備系統(tǒng)特性的變量組作為神經(jīng)網(wǎng)絡(luò)的輸入,以對(duì)應(yīng)的狀態(tài)編碼為期望輸出,構(gòu)成輸入/期望輸出樣本對(duì),借助一定的學(xué)習(xí)算法,對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,確定神經(jīng)網(wǎng)絡(luò)的權(quán)值和閾值,網(wǎng)絡(luò)訓(xùn)練完成后將神經(jīng)網(wǎng)絡(luò)的權(quán)值和閾值存儲(chǔ)下來(lái).使用訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)進(jìn)行故障診斷,采集到的設(shè)備信號(hào)送到神經(jīng)網(wǎng)絡(luò)的輸入節(jié)點(diǎn),經(jīng)過(guò)神經(jīng)網(wǎng)絡(luò)的運(yùn)算處理,產(chǎn)生相應(yīng)的輸出結(jié)果編碼,與故障編碼進(jìn)行比較即可方便地確定故障[6-7].
使用BP神經(jīng)網(wǎng)絡(luò)進(jìn)行故障診斷的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,xi表示神經(jīng)網(wǎng)絡(luò)的輸入信號(hào),wi表示神經(jīng)元之間的權(quán),yi表示神經(jīng)元的信號(hào)輸出.
圖1 BP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.1 BP neural network structure
在被檢測(cè)設(shè)備內(nèi)部提取信號(hào),內(nèi)部各元件連接處的電壓值為V1~V6,如圖2所示,從設(shè)備研制單位得到設(shè)備正常工作時(shí)這些工作點(diǎn)的電壓范圍,如果在正常范圍內(nèi),用“1”表示,不在正常范圍內(nèi),用“0”表示,“*”表示任意值.如:電源輸出電壓V1如果不在正常范圍內(nèi),則電源故障,V1如果在正常范圍內(nèi)則電源正常;電源正常的情況下,如果電源電纜的輸出端電壓V2不正常,則電源電纜故障,如果V2正常,則電源電纜正常.由此得到設(shè)備故障征兆列表見表,對(duì)應(yīng)電壓值V1~V6正常與否,可快速確定設(shè)備內(nèi)部某個(gè)元件是否發(fā)生故障.故障征兆見表1.
圖2 設(shè)備內(nèi)部工作電壓采集點(diǎn)Fig.2 Voltage acquisition points of equipment
表1 設(shè)備故障征兆列表Tab.1 List of equipment fault symptoms
訓(xùn)練樣本直接來(lái)自設(shè)備工作過(guò)程中的故障信息,對(duì)各節(jié)點(diǎn)處的工作電壓進(jìn)行歸一化處理后得到各種典型故障特征值,U1~U6作為BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練樣本.測(cè)試的訓(xùn)練樣本見表2.
用BP神經(jīng)網(wǎng)絡(luò)進(jìn)行故障診斷,需確定BP網(wǎng)絡(luò)的結(jié)構(gòu),要采集6個(gè)節(jié)點(diǎn)的電壓值,抽取6個(gè)故障特征參數(shù),因此網(wǎng)絡(luò)的輸入層神經(jīng)元個(gè)數(shù)為6,經(jīng)過(guò)反復(fù)的訓(xùn)練確定隱含層神經(jīng)元個(gè)數(shù)為17,輸出層為3個(gè)神經(jīng)元,表征7種狀態(tài),這就需要對(duì)故障進(jìn)行簡(jiǎn)單編碼,見表3.
表2 故障診斷特征參數(shù)值Tab.2 The parameter values of Fault characteristics
表3 設(shè)備故障源編碼Tab.3 Source codes of equipments faults
Matlab中提供了很多工具箱,主要用到神經(jīng)網(wǎng)絡(luò)工具箱,開發(fā)人員只需要調(diào)用神經(jīng)網(wǎng)絡(luò)函數(shù)庫(kù)中的相應(yīng)的函數(shù)基本就能實(shí)現(xiàn)所需要的應(yīng)用功能,減少了開發(fā)難度并縮短了工程開發(fā)周期,將表2的訓(xùn)練樣本數(shù)值保存在矩陣P中,作為神經(jīng)網(wǎng)絡(luò)的訓(xùn)練樣本矩陣,表3的故障源代碼作為神經(jīng)網(wǎng)絡(luò)的目標(biāo)矩陣T對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練.以下是BP的網(wǎng)絡(luò)腳本代碼
Matlab中所提供的神經(jīng)網(wǎng)絡(luò)庫(kù)提供的訓(xùn)練函數(shù)train,開發(fā)者根據(jù)實(shí)際需要可以調(diào)用此函數(shù)對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練使之完成函數(shù)的收斂,達(dá)到或接近預(yù)先所設(shè)定的誤差目標(biāo),如圖3所示,訓(xùn)練消耗一定的時(shí)間,經(jīng)過(guò)多個(gè)周期的運(yùn)算后,函數(shù)逼近和收斂到所預(yù)定的誤差范圍內(nèi),滿足了預(yù)定的訓(xùn)練要求.
圖3 Matlab中BP網(wǎng)絡(luò)的訓(xùn)練Fig.3 BP network training in Matlab
使用Matlab中的組件Real-Time Workshop對(duì)生成ModelSim模型進(jìn)行代碼轉(zhuǎn)換,可以直接把Matlab里的M語(yǔ)言轉(zhuǎn)換成嵌入式平臺(tái)下所運(yùn)行的C代碼形式,想要實(shí)現(xiàn)這個(gè)目標(biāo),必須得把訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)換為ModelSim模型,因?yàn)榻M件Real-Time Workshop的代碼轉(zhuǎn)換功能是要把訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)換成ModelSim模型后才能進(jìn)行轉(zhuǎn)換,神經(jīng)網(wǎng)絡(luò)工具箱中所提供的gensim函數(shù)能實(shí)現(xiàn)此功能,將預(yù)先設(shè)定好的神經(jīng)網(wǎng)絡(luò)保存到對(duì)象net中,然后執(zhí)行腳本代碼gensim(net,1)后,生成目標(biāo)模型ModelSim模型,然后執(zhí)行g(shù)ensim(new_net,1).
Real-Time Workshop在進(jìn)行轉(zhuǎn)換時(shí)首先搜索模型中的Input與Output標(biāo)準(zhǔn)模塊,將標(biāo)準(zhǔn)模塊翻譯成函數(shù)目標(biāo)輸入和輸出.調(diào)用gensim生成的網(wǎng)絡(luò)模型,神經(jīng)網(wǎng)絡(luò)模塊被封裝成一個(gè)對(duì)象,但生成的網(wǎng)絡(luò)模型不能直接轉(zhuǎn)換成預(yù)想的C代碼,默認(rèn)設(shè)置下,輸入外接虛擬數(shù)據(jù)源,輸出外接虛擬示波器.用模型庫(kù)中的標(biāo)準(zhǔn)輸入和輸出模塊代替虛擬數(shù)據(jù)源和虛擬示波器.將神經(jīng)網(wǎng)絡(luò)模塊和標(biāo)準(zhǔn)輸入輸出模塊連線,為代碼轉(zhuǎn)換做準(zhǔn)備.
在嵌入式系統(tǒng)目標(biāo)平臺(tái)上運(yùn)行Linux下的Qt環(huán)境生成的可執(zhí)行程序,Qt下運(yùn)用的編譯器是GCC(GNU Compiler Collection),由 GCC 編 譯ModelSim模型生成C++代碼,再由Matlab的編譯器Bordland C生成和硬件相關(guān)的可執(zhí)行程序,對(duì)編譯器和相關(guān)參數(shù)進(jìn)行有效設(shè)置,在tool下找到Real-time Workshop組件,使用Options對(duì)相關(guān)選項(xiàng)設(shè)置,進(jìn)行代碼轉(zhuǎn)換.
轉(zhuǎn)換前重要參數(shù)設(shè)置為
① 轉(zhuǎn)換目標(biāo)模板設(shè)置為ERT,則實(shí)際使用的是Embbed Real-Time Workshop,此模式化了嵌入式應(yīng)用且更容易嵌入代碼.
② 語(yǔ)言類型設(shè)置為C++,使生成的代碼以C++形式存在,以便Qt程序調(diào)用.
③ 勾選Generate code only選項(xiàng),使轉(zhuǎn)換結(jié)果形成頭文件和CPP文件.
④設(shè)置執(zhí)行及采樣時(shí)間為定步長(zhǎng),否則不能生成有效代碼.
⑤確定目標(biāo)硬件類型,指定硬件中的高低字節(jié)順序及字長(zhǎng)大?。?/p>
⑥數(shù)據(jù)接口中選擇生成目標(biāo)語(yǔ)言標(biāo)準(zhǔn)為C89/C90(ANSI).
⑦數(shù)據(jù)交換選項(xiàng)中選擇C-API,此模式下轉(zhuǎn)換的代碼以函數(shù)方式呈現(xiàn)入口和出口.
Test-data.cpp中存儲(chǔ)了大量的常用數(shù)據(jù),文中訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)權(quán)重與偏移等參數(shù)以常量的方式記錄在此,供程序調(diào)用.文件Ert-main.cpp中的main函數(shù)作為程序入口點(diǎn),以周期性的采樣頻率獨(dú)立運(yùn)行,實(shí)現(xiàn)在線實(shí)時(shí)仿真.自動(dòng)生成代碼時(shí),可以參考文件Ert-main.cpp中main函數(shù)運(yùn)算模型的調(diào)用方法,編譯時(shí)屏蔽此main函數(shù),再用Qt的main函數(shù)代替文件Ert-main.cpp中main函數(shù)作為整個(gè)程序的入口點(diǎn).
以Test.mdl模型測(cè)試為例,轉(zhuǎn)換后生成的主要文件見表4.
表4 代碼模塊Tab.4 Code module
Test-data.cpp中存儲(chǔ)了大量的常用數(shù)據(jù),文中訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)權(quán)重與偏移等參數(shù)以常量方式記錄在此,供程序調(diào)用,把主函數(shù)Ert-main.cpp文件中的main函數(shù)當(dāng)成程序入口點(diǎn),以周期性的采樣頻率獨(dú)立運(yùn)行,實(shí)現(xiàn)在線的實(shí)時(shí)仿真,自動(dòng)生成代碼時(shí),可以參考main函數(shù)中運(yùn)算模型的調(diào)用方法,編譯時(shí)屏蔽這個(gè)main函數(shù),用Qt的主函數(shù)代替作為整個(gè)程序的入口點(diǎn).
將上文中由Real-Time Workshop生成的C代碼與Qt程序進(jìn)行聯(lián)合編程后,在Qt環(huán)境下進(jìn)行編譯生成可以在嵌入式系統(tǒng)中運(yùn)行的可執(zhí)行程序,然后通過(guò)交叉編譯鏈將其下載到嵌入式硬件平臺(tái)下位機(jī),選取輸入測(cè)試值,運(yùn)行在Matlab中的神經(jīng)網(wǎng)絡(luò)代碼程序并記下輸出結(jié)果,用同樣的數(shù)據(jù)測(cè)試在Qt環(huán)境中測(cè)試聯(lián)合編程后的Qt程序,實(shí)驗(yàn)表明經(jīng)過(guò)轉(zhuǎn)化為可在嵌入式系統(tǒng)中運(yùn)行的可執(zhí)行C代碼形式下的神經(jīng)網(wǎng)絡(luò),與Matlab中的輸出結(jié)果完全相同,達(dá)到了預(yù)期目標(biāo).如圖4所示.
圖4 聯(lián)合編程測(cè)試結(jié)果Fig.4 Joint programming test results
文中通過(guò)使用Matlab與Qt編程工具聯(lián)合編程,快速將神經(jīng)網(wǎng)絡(luò)算法轉(zhuǎn)換為能在嵌入式平臺(tái)上運(yùn)行的C/C++代碼,實(shí)現(xiàn)了神經(jīng)網(wǎng)絡(luò)算法快速應(yīng)用到嵌入式故障診斷系統(tǒng)的目標(biāo),驗(yàn)證了這一方法的實(shí)用性和可行性,方便開發(fā)人員進(jìn)行高效的程序開發(fā)和實(shí)驗(yàn)調(diào)試,縮短了產(chǎn)品的開發(fā)周期,節(jié)約了開發(fā)成本.神經(jīng)網(wǎng)絡(luò)算法快速應(yīng)用到嵌入式故障診斷系統(tǒng)的同樣適合更復(fù)雜的應(yīng)用神經(jīng)網(wǎng)絡(luò)算法的場(chǎng)合,目標(biāo)系統(tǒng)可以是嵌入式平臺(tái),也可以是普通的Windows平臺(tái),在控制、模式識(shí)別等領(lǐng)域都可以廣泛的推廣和應(yīng)用.
[1] 飛思科技產(chǎn)品研發(fā)中心.神經(jīng)網(wǎng)絡(luò)理論與Matlab7實(shí)現(xiàn)[M].北京:電子工業(yè)出版社,2005.Feisi Science and Technology R & D Center.Neural Network Theory and Matlab7Realization[M].Beijing:Publishing House of Electronics Industry,2005.(in Chinese)
[2] 姚光強(qiáng),陳立平.基于COM 技術(shù)的C#與 Matlab混合編程[J].計(jì)算機(jī)工程,2008,34(14):87.YAO Guang-qiang,CHEN Li-ping.Integrated Programming Between C# and Matlab Based on Component Object Model[J].Computer Engineering,2008,34(14):87.(in Chinese)
[3] 從爽.面向 Matlab工具箱的神經(jīng)網(wǎng)絡(luò)理論與應(yīng)用[M].合肥:中國(guó)科學(xué)技術(shù)大學(xué)出版社,2003.CONG Shuang.Toolbox for MATLAB Neural Network Theory and Application[M].Hefei:Press of University of Science and Technology of China,2003.(in Chinese)
[4] 王永慶.人工智能原理與方法[M].西安:西安交通大學(xué)出版社,2006.WANG Yong-qing.The Principle and Method of Artificial Intelligence[M].Xi’an:Xi’an Jiaotong University Press,2006.(in Chinese)
[5] 耿朝陽(yáng),劉德明.嵌入式故障診斷專家系統(tǒng)[J].西安工業(yè)大學(xué)學(xué)報(bào),2013,33(11):889.GENG Chao-yang,LIU De-ming.Embedded Fault Diagnosis Expert System in Equipment[J].Journal of Xi’an Technological University,2013,33(11):889.(in Chinese)
[6] 戚涌,李千目,劉鳳玉.基于BP神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)智能診斷系統(tǒng)[J].微電子學(xué)與計(jì)算機(jī),2004,21(10):10.QI Yong,LI Qian-mu,LIU Feng-yu.Network Fault Intelligent Diagnosis Base on BP Neural Network[J].The Microelectronics and Meter Computer,2004,21(10):10.(in Chinese)
[7] 蔣宗禮.人工神經(jīng)網(wǎng)絡(luò)導(dǎo)論[M].北京:高等教育出版社,2001.JIANG Zong-li.Introduction to Artificial Neural Network[M].Beijing:Higher Education Press,2001.(in Chinese)