陳智君,王元真,雷本鑫,高 超
(武漢理工大學(xué) 能源與動(dòng)力工程學(xué)院,湖北 武漢 430063)
由于我國(guó)主動(dòng)隔振系統(tǒng)的研究起步較晚,技術(shù)并不成熟,較多主動(dòng)隔振控制算法仍在仿真實(shí)驗(yàn)階段,很少有在實(shí)際應(yīng)用中的案例[1]。而對(duì)于實(shí)驗(yàn)階段的主動(dòng)隔振來說,為驗(yàn)證控制算法的控制效果,往往希望能夠?qū)崟r(shí)觀察被控對(duì)象的振動(dòng)情況,并通過對(duì)比參數(shù)調(diào)整前后被控對(duì)象的振動(dòng)曲線,來判斷控制算法在不同條件下控制效果的好壞。因此,擁有1個(gè)配套上位機(jī)監(jiān)控系統(tǒng)對(duì)于隔振實(shí)驗(yàn)來說很有必要。本文作者以某型柴油機(jī)為對(duì)象,開發(fā)了1套主動(dòng)隔振系統(tǒng)上位機(jī)監(jiān)測(cè)軟件,并對(duì)自適應(yīng)主動(dòng)隔振算法進(jìn)行研究。
主動(dòng)隔振系統(tǒng)是指能夠?qū)崿F(xiàn)對(duì)被控對(duì)象的振動(dòng)實(shí)時(shí)監(jiān)測(cè),并根據(jù)所監(jiān)測(cè)的振動(dòng)信息利用自適應(yīng)算法得出實(shí)時(shí)的控制規(guī)律,最終控制作動(dòng)器產(chǎn)生反振力從而抑制其振動(dòng)的1套完整系統(tǒng)。系統(tǒng)主要由上、下位機(jī)2部分組成。
下位機(jī)是系統(tǒng)硬件部分,主要功能是實(shí)時(shí)采集被控區(qū)域的振動(dòng)信號(hào),并根據(jù)所采集的振動(dòng)信號(hào)進(jìn)行次級(jí)通道辨識(shí),再由自適應(yīng)算法得出實(shí)時(shí)的控制規(guī)律,經(jīng)由功率放大器輸出給作動(dòng)器,控制作動(dòng)器產(chǎn)生相應(yīng)頻率的反振力。上位機(jī)是系統(tǒng)PC端顯示系統(tǒng),主要功能是通過以太網(wǎng)接收下位機(jī)辨識(shí)結(jié)果以及采集的實(shí)時(shí)加速度信號(hào),并在顯示軟件中繪制成曲線。本文上、下位機(jī)之間的通訊連接采用C/S模式,即客戶端/服務(wù)器模式[2]。下位機(jī)為系統(tǒng)服務(wù)器,上位機(jī)顯示系統(tǒng)為客戶端。系統(tǒng)具體結(jié)構(gòu)如圖1所示。
圖 1 主動(dòng)隔振系統(tǒng)整體框架Fig. 1 Active vibration isolation system overall frame
本文中上位機(jī)的主要功能是接收并顯示下位機(jī)加速度傳感器采集的實(shí)時(shí)振動(dòng)信息,以及讀取、存儲(chǔ)并修改下位機(jī)的重要參數(shù),本文采用UDP協(xié)議發(fā)送和接收數(shù)據(jù)。
為保證數(shù)據(jù)傳輸?shù)某晒β?,在設(shè)計(jì)過程中應(yīng)避免數(shù)據(jù)報(bào)發(fā)生分片。對(duì)UDP數(shù)據(jù)報(bào)來說,需要在應(yīng)用層限制每個(gè)UDP數(shù)據(jù)報(bào)的大小,一般不超過1 472個(gè)字節(jié)[6]。本文采樣頻率為4 K,每個(gè)通道的單個(gè)數(shù)據(jù)為2個(gè)字節(jié),總的通道數(shù)為12個(gè),則每秒采集96 KB大小的數(shù)據(jù)。為方便編程及數(shù)據(jù)的解析同時(shí)避免IP分片,本文將每次采集的12個(gè)通道的數(shù)據(jù)組合為一個(gè)數(shù)據(jù)結(jié)構(gòu)體作為最小的數(shù)據(jù)單元,每個(gè)數(shù)據(jù)包中均包含50個(gè)這樣的數(shù)據(jù)單元,即總的用戶數(shù)據(jù)大小為1 200字節(jié),上位機(jī)每秒將接收到80個(gè)這樣的數(shù)據(jù)包。
此外,UDP協(xié)議在通信過程中發(fā)送端可于任意時(shí)刻自由發(fā)送數(shù)據(jù),接收端無法確認(rèn)何時(shí)接收到來自何地的數(shù)據(jù),且接收到數(shù)據(jù)后也不會(huì)有任何確認(rèn)信息。因此,本文在UDP協(xié)議的基礎(chǔ)上,在應(yīng)用層協(xié)議中引入了數(shù)據(jù)包確認(rèn)、掉包重發(fā)以及排序機(jī)制。為此本協(xié)議自定義了一個(gè)長(zhǎng)度為5個(gè)字節(jié)的應(yīng)用層協(xié)議頭,協(xié)議頭的組成為1個(gè)字節(jié)的數(shù)據(jù)包類型標(biāo)識(shí)、2個(gè)字節(jié)的數(shù)據(jù)包序號(hào)(包括1個(gè)字節(jié)的前序號(hào)和1個(gè)字節(jié)的后序號(hào))以及2個(gè)字節(jié)的數(shù)據(jù)長(zhǎng)度標(biāo)識(shí),使通訊在不占用太多系統(tǒng)資源的條件下滿足一定的傳輸可靠性。此外,在模擬量通道數(shù)據(jù)之前為3個(gè)字節(jié)的數(shù)字量通道數(shù)據(jù),用于標(biāo)識(shí)下位機(jī)的重要報(bào)警信息。因此,一個(gè)UDP數(shù)據(jù)報(bào)的大小應(yīng)為協(xié)議頭大小加上用戶數(shù)據(jù)大小,總共為1 208個(gè)字節(jié),遠(yuǎn)小于1 472個(gè)字節(jié),不會(huì)發(fā)生IP分片。自定義用戶協(xié)議頭結(jié)構(gòu)如圖2所示。
圖 2 自定義用戶協(xié)議頭結(jié)構(gòu)Fig. 2 Custom user protocol header structure
數(shù)據(jù)包的確認(rèn)機(jī)制主要通過自定義協(xié)議頭中的數(shù)據(jù)包序號(hào)來實(shí)現(xiàn),數(shù)據(jù)包序號(hào)包含前序號(hào)和后序號(hào)2個(gè)信息。前序號(hào)為當(dāng)前數(shù)據(jù)包的序號(hào),后序號(hào)為期望下一個(gè)數(shù)據(jù)包的序號(hào)。為保證確認(rèn)機(jī)制的實(shí)現(xiàn),在客戶端引入接收緩沖區(qū),用于存放驗(yàn)證后的數(shù)據(jù)??蛻舳舜_認(rèn)機(jī)制的流程圖如圖3所示。其中VeriFied和LastVerif分別為保存當(dāng)前接收到數(shù)據(jù)包序號(hào)和前一個(gè)接收到的數(shù)據(jù)包序號(hào)的數(shù)組,Count為接收到數(shù)據(jù)包的次數(shù)。
圖 3 客戶端確認(rèn)機(jī)制流程圖Fig. 3 Client confirmation mechanism flow chart
在服務(wù)器與客戶端進(jìn)行通信的過程中,當(dāng)數(shù)據(jù)傳輸過程中發(fā)生了掉包或者是發(fā)送的數(shù)據(jù)出現(xiàn)了錯(cuò)誤,就需要對(duì)丟掉的以及發(fā)生錯(cuò)誤的數(shù)據(jù)包進(jìn)行重新發(fā)送,并在客戶端對(duì)重發(fā)的數(shù)據(jù)進(jìn)行排序,以確保接收數(shù)據(jù)的正確性。為實(shí)現(xiàn)重發(fā)以及數(shù)據(jù)包的排序,在服務(wù)器引入2個(gè)發(fā)送緩沖區(qū),一個(gè)用于存放已發(fā)送的數(shù)據(jù)包,一個(gè)用于向上位機(jī)發(fā)送數(shù)據(jù);在客戶端引入一個(gè)接收隊(duì)列,用于存放驗(yàn)證后的數(shù)據(jù)包。服務(wù)器采用2個(gè)緩沖區(qū)的目的是存放發(fā)送后的數(shù)據(jù)包,用于客戶端驗(yàn)證掉包后的重發(fā)。重發(fā)機(jī)制如圖4所示。
對(duì)于客戶端,為保證顯示數(shù)據(jù)的實(shí)時(shí)性,本文使用多線程技術(shù),將接收數(shù)據(jù)以及驗(yàn)證過程放在一個(gè)線程中,將解碼數(shù)據(jù)包的過程放在另一個(gè)線程中,2個(gè)線程同步運(yùn)行從而保證接收數(shù)據(jù)與解碼顯示數(shù)據(jù)的同步性。為給重發(fā)及排序過程留出一定的時(shí)間,且保證接收數(shù)據(jù)的實(shí)時(shí)性,規(guī)定上位機(jī)在接收到10個(gè)數(shù)據(jù)包之后再開啟解碼線程。客戶端接收隊(duì)列如圖5所示。
圖 4 重發(fā)機(jī)制流程圖Fig. 4 Retransmission mechanism flow chart
圖 5 客戶端接收隊(duì)列Fig. 5 Client receive queue
對(duì)于服務(wù)器,為保證數(shù)據(jù)包重發(fā)的實(shí)現(xiàn),服務(wù)器需要緩存部分已發(fā)送的數(shù)據(jù)包。為此,在服務(wù)器引入了2個(gè)緩沖區(qū),一個(gè)用于發(fā)送實(shí)時(shí)的數(shù)據(jù),另一個(gè)用于緩存部分已發(fā)送的數(shù)據(jù)包。服務(wù)器的2個(gè)緩沖區(qū)及工作模式如圖6所示。
圖 6 服務(wù)器緩存區(qū)工作模式圖Fig. 6 Server cache area working mode diagram
本文中上位機(jī)使用Socket以簡(jiǎn)化編程。為減小數(shù)據(jù)通信過程中出錯(cuò)的可能性,在進(jìn)行參數(shù)配置時(shí),選用與實(shí)時(shí)數(shù)據(jù)不同的Socket進(jìn)行通信。這里將實(shí)時(shí)數(shù)據(jù)通信所用Socket命名為Socket1,而將參數(shù)配置所使用的Socket命名為Socket2。由于在進(jìn)行參數(shù)設(shè)置時(shí),并不是每次都需要配置所有參數(shù),大多數(shù)情況下僅需要修改個(gè)別參數(shù)。因此在本設(shè)計(jì)中,將所有參數(shù)分別通過不同的數(shù)據(jù)包進(jìn)行發(fā)送,且只有當(dāng)界面上發(fā)生更改后,才將更改的參數(shù)數(shù)據(jù)發(fā)送至下位機(jī),沒有更改的參數(shù)不做處理。
參數(shù)配置界面的主要功能是對(duì)下位機(jī)某些重要參數(shù)的值進(jìn)行修改,同時(shí)具有從下位機(jī)中讀取出這些參數(shù)值的功能。此外,還可將修改后的參數(shù)值或者從下位機(jī)中讀取出來的參數(shù)值保存至計(jì)算機(jī)本地文件中,也可從本地文件中讀取參數(shù)信息并下載至下位機(jī)。本文使用XML文檔來存儲(chǔ)用戶配置信息,包括下位機(jī)配置參數(shù)以及通道辨識(shí)數(shù)據(jù)。下面將對(duì)操作XML文件的具體方法進(jìn)行說明。
1)創(chuàng)建XML文件
這里首先聲明一個(gè)XmlDocument對(duì)象命名為xml-Doc,隨后創(chuàng)建XML文檔的文件頭,創(chuàng)建完文件頭后,需要?jiǎng)?chuàng)建文件的根元素,即根結(jié)點(diǎn)。這里創(chuàng)建一個(gè)名稱為Settings的根結(jié)點(diǎn),根結(jié)點(diǎn)創(chuàng)建完成后,通過xml-Doc.Save方法將該XML文件保存至本地文件夾中。
2)讀取XML文件
讀取XML文件信息之前,首先聲明一個(gè)XmlDocument對(duì)象,再調(diào)用該對(duì)象的Load方法,從指定的路徑中加載XML文件。加載完XML文件后,即可通過調(diào)用對(duì)象的SelectSingleNode以及GetAttribute方法來獲取該XML文件指定的結(jié)點(diǎn)和屬性值。這樣就可根據(jù)該元素的屬性名稱得到該結(jié)點(diǎn)的屬性以及所包含的子結(jié)點(diǎn)信息。
3)向XML文件中添加數(shù)據(jù)
在向XML文檔中添加新數(shù)據(jù)的時(shí)候,也必須先通過XmlDocument對(duì)象加載整個(gè)XML文檔。然后調(diào)用SelectSingleNode方法來獲取根結(jié)點(diǎn),通過CreateElement方法創(chuàng)建新的元素,使用CreateAttribute方法創(chuàng)建屬性,用AppendChild將新建的結(jié)點(diǎn)掛接在其他結(jié)點(diǎn)上,通過SetAttributeNode來設(shè)置結(jié)點(diǎn)的屬性。完成后,再創(chuàng)建該結(jié)點(diǎn)的子結(jié)點(diǎn),最后將新創(chuàng)建的
結(jié)合用戶對(duì)監(jiān)測(cè)系統(tǒng)界面的要求可將界面劃分如下:
1)通道辨識(shí)界面,主要用于顯示接收下位機(jī)通道辨識(shí)得到的濾波器系數(shù),并以曲線的形式顯示在界面上,并且軟件提供了辨識(shí)系數(shù)保存至本地和本地辨識(shí)系數(shù)下載的功能。此外,界面上留有指定區(qū)域用以顯示下位機(jī)的報(bào)警信息,當(dāng)下位機(jī)出現(xiàn)報(bào)警時(shí),會(huì)在界面上以紅色標(biāo)出。
2)實(shí)時(shí)曲線界面,用于顯示各個(gè)通道的實(shí)時(shí)數(shù)據(jù),并可選擇將其中4個(gè)通道的數(shù)據(jù)以曲線的形式顯示在界面上,并且軟件提供了數(shù)據(jù)保存功能,可以一次保存1 000個(gè)數(shù)據(jù)點(diǎn),用于進(jìn)一步的數(shù)據(jù)分析。此外,該界面也留有指定的報(bào)警顯示區(qū)域。
3)參數(shù)配置界面,用于完成下位機(jī)配置信息的下載。打開該界面時(shí),軟件會(huì)讀取下位機(jī)當(dāng)前的配置信息并顯示,辨識(shí)濾波器系數(shù)也會(huì)被讀取,并以曲線的形式顯示在通道辨識(shí)界面上。此外,軟件提供了配置信息保存至本地和本地配置信息下載功能。設(shè)計(jì)好的系統(tǒng)界面主要功能模塊如圖7所示。
圖 7 系統(tǒng)界面功能模塊圖Fig. 7 System interface function block diagram
圖 8 次級(jí)通道估計(jì)模型計(jì)算流程圖Fig. 8 Secondary channel estimation model calculation flow chart
假定次級(jí)通道的估計(jì)模型為M階的橫向?yàn)V波器,即
則該時(shí)刻的誤差信號(hào)為:
則可將誤差信號(hào)表示為:
根據(jù)梯度下降法,可知控制濾波器權(quán)向量的遞推方程為:
將式(10)代入式(9)得到濾波器權(quán)向量的遞推公式為:
以上即為FxLMS算法,F(xiàn)xLMS算法與LMS算法最大的區(qū)別在于增加了一個(gè)次級(jí)通道來減小甚至消除功率放放大器、作動(dòng)器等設(shè)備形成的誤差通道所造成的影響。
在該驗(yàn)證環(huán)節(jié)中,首先配置下位機(jī),使下位機(jī)共上傳4 800個(gè)數(shù)據(jù)包,且每上傳5個(gè)數(shù)據(jù)包便丟失一個(gè)數(shù)據(jù)包,之后通過修改數(shù)據(jù)包的上傳時(shí)間間隔,觀察上位機(jī)記錄的丟包次數(shù)和接收到的重發(fā)數(shù)據(jù)包數(shù),以檢測(cè)通信協(xié)議的可靠性。經(jīng)驗(yàn)證,當(dāng)下位機(jī)上傳時(shí)間間隔在4 ms及以上時(shí),上位機(jī)收到的總包數(shù)為4 800,記錄的丟包次數(shù)和重發(fā)包數(shù)均為960,此時(shí)協(xié)議可靠。而當(dāng)時(shí)間間隔約為2.6 ms時(shí),上位機(jī)收到的總包數(shù)為4 607,丟包次數(shù)為1 003,重發(fā)包數(shù)為910,此時(shí)協(xié)議丟包率達(dá)到4%。而下位機(jī)在實(shí)際控制過程中數(shù)據(jù)包的上傳時(shí)間間隔約為20 ms,因此可以認(rèn)為該通信協(xié)議可靠。
在本驗(yàn)證環(huán)節(jié)中,以控制器輸出的白噪聲作為次級(jí)通道的輸入,利用LMS算法對(duì)次級(jí)通道估計(jì)模型的橫向?yàn)V波器權(quán)向量進(jìn)行更新。并將辨識(shí)得到的次級(jí)通道的估計(jì)模型應(yīng)用到主動(dòng)控制上,進(jìn)行主動(dòng)控制的臺(tái)架試驗(yàn)。首先打開功放對(duì)4個(gè)通道依次進(jìn)行辨識(shí),穩(wěn)定后所得的4個(gè)次級(jí)通道估計(jì)模型的權(quán)向量系數(shù)如圖9所示。
圖 9 次級(jí)通道辨識(shí)結(jié)果Fig. 9 Secondary channel identification results
可以看出辨識(shí)數(shù)據(jù)均逐漸趨于收斂,適合用于主動(dòng)隔振控制。將該組辨識(shí)結(jié)果應(yīng)用于主動(dòng)隔振,所得到的控制數(shù)據(jù)如圖10所示??梢钥闯隹刂茢?shù)據(jù)平穩(wěn)且峰值適當(dāng)??烧J(rèn)為主動(dòng)隔振監(jiān)控系統(tǒng)運(yùn)作良好,無嚴(yán)重丟包現(xiàn)象,且達(dá)到隔振目的。
圖 10 控制數(shù)據(jù)Fig. 10 Control data
本文在分析主動(dòng)隔振系統(tǒng)對(duì)于振動(dòng)監(jiān)測(cè)顯示需求的基礎(chǔ)上,運(yùn)用C#語言進(jìn)行上位機(jī)系統(tǒng)軟件的開發(fā),實(shí)現(xiàn)上、下位機(jī)之間的實(shí)時(shí)、可靠的傳輸數(shù)據(jù),對(duì)自適應(yīng)主動(dòng)隔振算法進(jìn)行了研究。并在臺(tái)架試驗(yàn)中,上位機(jī)軟件實(shí)現(xiàn)了對(duì)柴油機(jī)振動(dòng)狀態(tài)的實(shí)時(shí)監(jiān)測(cè),監(jiān)測(cè)精度較高,同時(shí)取得了較好的主動(dòng)隔振效果。通過使用此上位機(jī)軟件對(duì)柴油機(jī)進(jìn)行實(shí)時(shí)監(jiān)測(cè),一方面有助于柴油機(jī)主動(dòng)隔振系統(tǒng)的開發(fā),另一方面通過觀察和分析柴油機(jī)運(yùn)行過程中振動(dòng)狀態(tài)的變化,能夠及時(shí)發(fā)現(xiàn)甚至預(yù)測(cè)柴油機(jī)可能出現(xiàn)的故障,提高柴油機(jī)運(yùn)行的安全性,同時(shí)也符合智能船舶的發(fā)展理念。本監(jiān)控系統(tǒng)軟件的設(shè)計(jì)思路和實(shí)現(xiàn)方法,可為國(guó)內(nèi)柴油機(jī)主動(dòng)隔振系統(tǒng)開發(fā)等領(lǐng)域提供一定的參考。
此監(jiān)控軟件還有些需要改進(jìn)的方面,例如目前該軟件只能導(dǎo)出短時(shí)間內(nèi)的振動(dòng)數(shù)據(jù),因此在后續(xù)的開發(fā)過程中可通過使用數(shù)據(jù)庫等技術(shù)進(jìn)行優(yōu)化等。