王 健,曹園山,陳 偉
(中國(guó)船舶科學(xué)研究中心 水動(dòng)力學(xué)國(guó)家重點(diǎn)實(shí)驗(yàn)室,江蘇 無(wú)錫 214082)
隨著海洋監(jiān)測(cè)手段和技術(shù)的不斷發(fā)展,水下滑翔器作為一種低功耗,長(zhǎng)續(xù)航的新型水下無(wú)人潛航器逐漸成為海洋監(jiān)測(cè)領(lǐng)域的利器[1]。目前世界最高水平續(xù)航時(shí)間長(zhǎng)達(dá)4個(gè)月,續(xù)航里程遠(yuǎn)達(dá)7千公里,潛深可至海底8千米[2]。水下滑翔器主要包括控制系統(tǒng)、動(dòng)力系統(tǒng)、通訊系統(tǒng)、測(cè)量系統(tǒng)等,作為整個(gè)潛航器的大腦,水下滑翔器中央控制系統(tǒng)在復(fù)雜的海洋環(huán)境中保持正常運(yùn)轉(zhuǎn)的能力直接關(guān)系到整個(gè)潛航器的安全性。面對(duì)復(fù)雜的控制邏輯,目前只能通過(guò)長(zhǎng)期的半實(shí)物仿真測(cè)試來(lái)發(fā)現(xiàn)設(shè)計(jì)中的問(wèn)題,再根據(jù)問(wèn)題實(shí)現(xiàn)軟件和硬件的優(yōu)化工作,通過(guò)上述方式的循環(huán)迭代來(lái)保證滑翔器控制系統(tǒng)的可靠性[3]。然而水下滑翔器的航行控制系統(tǒng)長(zhǎng)期運(yùn)行在冷熱交變的環(huán)境下,不可避免會(huì)出現(xiàn)控制系統(tǒng)CPU宕機(jī)或損壞等情況。雖然可以通過(guò)建立看門狗電路的方式進(jìn)行控制系統(tǒng)宕機(jī)處置,但是這種機(jī)械的復(fù)位系統(tǒng)的方式不僅無(wú)法解決CPU損壞問(wèn)題,而且其重新復(fù)位存儲(chǔ)區(qū)的粗暴方式并不適宜應(yīng)用在實(shí)時(shí)控制的無(wú)人設(shè)備上。
本文提出一種基于分布式系統(tǒng)主從互轉(zhuǎn)式雙冗余控制裝置及方法,利用主從互換式CPU,以可剝奪主控制權(quán)作為設(shè)計(jì)方法來(lái)預(yù)防單個(gè)中央控制器出現(xiàn)故障的情況,防止滑翔器失控;通過(guò)建立公共存儲(chǔ)區(qū),解決了切換時(shí)的數(shù)據(jù)丟失問(wèn)題,避免了算法上因?yàn)閿?shù)據(jù)丟失而產(chǎn)生的邏輯錯(cuò)誤。
圖1 水下滑翔器航行控制器控制結(jié)構(gòu)圖
傳統(tǒng)的水下滑翔器是通過(guò)自身浮力變化產(chǎn)生的動(dòng)力進(jìn)行水下運(yùn)動(dòng)的,其結(jié)構(gòu)簡(jiǎn)單,運(yùn)動(dòng)部件少,控制系統(tǒng)的組成和結(jié)構(gòu)相對(duì)單一,僅僅只能在水下作鋸齒形的運(yùn)動(dòng)。相比于傳統(tǒng)的水下滑翔器,混合驅(qū)動(dòng)水下滑翔器增加了尾推進(jìn)器以及尾舵。這種改變使其同時(shí)具備了水下滑翔器大范圍滑翔探測(cè)與AUV精細(xì)搜索的雙重作業(yè)功能,但是控制系統(tǒng)復(fù)雜性大大增加?;旌向?qū)動(dòng)水下滑翔器航行控制系統(tǒng)需控制的設(shè)備有:剩余浮力系統(tǒng)、姿態(tài)調(diào)節(jié)系統(tǒng)、航姿系統(tǒng)、無(wú)線/衛(wèi)星通信系統(tǒng)、推進(jìn)系統(tǒng)、垂直/水平舵系統(tǒng),同時(shí)需要搭載多種任務(wù)傳感器如深度計(jì)、溫鹽深傳感器、葉綠素傳感器、測(cè)高聲吶等,在保證滑翔器正常運(yùn)轉(zhuǎn)的前提下,需要對(duì)任務(wù)傳感器進(jìn)行數(shù)據(jù)采集、分析、存儲(chǔ)[4-5]?;旌向?qū)動(dòng)水下滑翔器又具備多種作業(yè)模式:連續(xù)滑翔作業(yè)模式、定深直航作業(yè)模式、路徑搜索作業(yè)模式、滑翔直航混合型作業(yè)模式等。不同的作業(yè)模式對(duì)應(yīng)不同的控制邏輯,滑翔器的中央控制器需要預(yù)存儲(chǔ)一系列的控制方案并根據(jù)上位機(jī)的指令即時(shí)更換控制模式。如果采用單一CPU進(jìn)行集中式控制,一方面硬件系統(tǒng)設(shè)計(jì)的復(fù)雜性急劇提升,設(shè)計(jì)時(shí)需綜合考慮整個(gè)系統(tǒng)硬件系統(tǒng)的兼容性,抗干擾性等,否則會(huì)因?yàn)槟骋幌到y(tǒng)引入的干擾導(dǎo)致整個(gè)CPU的崩潰;另一方面運(yùn)行程序功能性臃腫,設(shè)計(jì)程序時(shí)既需要根據(jù)不同的作業(yè)模式進(jìn)行邏輯運(yùn)算,又需要依據(jù)邏輯運(yùn)算的指令進(jìn)行底層控制,增加了CPU的負(fù)擔(dān),降低整個(gè)系統(tǒng)的可靠性。[6-7]
水下滑翔器的作業(yè)特點(diǎn)就是低功耗、長(zhǎng)航程,因此水下的滑翔器在作業(yè)過(guò)程中難免會(huì)遇到冷熱交變、波浪晃蕩、外界干擾等環(huán)境因素的影響,滑翔器控制系統(tǒng)極易出現(xiàn)可靠性的問(wèn)題。通常軟件上會(huì)出現(xiàn)程序跑飛死機(jī)的狀況,硬件上會(huì)出現(xiàn)CPU過(guò)熱或者硬件損壞的情況。出現(xiàn)硬件損壞滑翔器幾乎無(wú)法通過(guò)任何的措施恢復(fù),而出現(xiàn)程序跑飛死機(jī)時(shí),雖然可通過(guò)軟件看門狗進(jìn)行監(jiān)測(cè)后進(jìn)行軟件重啟,但是重啟軟件導(dǎo)致的數(shù)據(jù)丟失和程控邏輯失序現(xiàn)象卻對(duì)自主運(yùn)行的滑翔器來(lái)說(shuō)有著極大的控制風(fēng)險(xiǎn)。
為了進(jìn)一步減小控制器故障給滑翔器帶來(lái)的運(yùn)行風(fēng)險(xiǎn),采用主從分布式設(shè)計(jì)的方式進(jìn)行系統(tǒng)設(shè)計(jì),分別對(duì)水下滑翔器控制系統(tǒng)中的控制結(jié)構(gòu)、控制方法上進(jìn)行了針對(duì)性的優(yōu)化設(shè)計(jì)。
控制結(jié)構(gòu)上,將原單一CPU的航行控制器功能一分為二,分為邏輯運(yùn)算控制器和底層驅(qū)動(dòng)控制器。在正常情況下,兩個(gè)控制器并行運(yùn)行,互有分工。邏輯運(yùn)算控制器主要進(jìn)行信息接收、處理與運(yùn)算——經(jīng)由通訊系統(tǒng)傳輸?shù)目刂泼钍紫鹊竭_(dá)邏輯運(yùn)算控制器,通過(guò)命令解析獲取當(dāng)前任務(wù)的作業(yè)模式、運(yùn)動(dòng)參數(shù)和約定通訊節(jié)點(diǎn);控制器根據(jù)任務(wù)傳感器、航姿系統(tǒng)發(fā)送的滑翔器當(dāng)前狀態(tài)信息以及不同的作業(yè)模式和運(yùn)動(dòng)參數(shù)調(diào)用滑翔器多種作業(yè)模式的程序信息,生成相關(guān)的執(zhí)行命令傳輸給底層驅(qū)動(dòng)控制器。底層驅(qū)動(dòng)控制器主要是進(jìn)行動(dòng)作部件的操控——一旦接收邏輯運(yùn)算控制器傳輸過(guò)來(lái)的指令控制,底層驅(qū)動(dòng)控制器就會(huì)利用內(nèi)置的外設(shè)驅(qū)動(dòng)指令對(duì)滑翔器的舵角、推進(jìn)器轉(zhuǎn)速、剩余浮力以及姿態(tài)調(diào)節(jié)進(jìn)行相應(yīng)的控制。
控制方法上采用主從式CPU、互控電源、建立公共存儲(chǔ)區(qū)等方式來(lái)規(guī)避單CPU模式下可能出現(xiàn)的CPU宕機(jī)或者損壞的現(xiàn)象。其結(jié)構(gòu)如圖2所示。
圖2 水下滑翔器主從互轉(zhuǎn)式控制系統(tǒng)架構(gòu)圖
主從式CPU也即航行控制器中的邏輯運(yùn)算控制器和底層驅(qū)動(dòng)控制器在正常情況下是互有分工的,但是當(dāng)一個(gè)控制器出現(xiàn)故障時(shí)其中一個(gè)正??刂破骺梢灾苯咏庸芰硗庖粋€(gè)控制器的所有功能。設(shè)計(jì)中,對(duì)關(guān)乎潛航器航行安全的基礎(chǔ)運(yùn)動(dòng)系統(tǒng)(浮力系統(tǒng)、通信系統(tǒng)、姿態(tài)系統(tǒng))做到雙CPU同時(shí)可控,以降低單CPU所帶來(lái)的控制風(fēng)險(xiǎn)。依據(jù)各個(gè)系統(tǒng)的控制特點(diǎn)通信系統(tǒng)、姿態(tài)系統(tǒng)利用CAN總線與主從CPU相連;剩余浮力系統(tǒng)通過(guò)電源IO控制實(shí)現(xiàn)。為了達(dá)到雙CPU控制的目的以滿足主控CPU互換的要求,設(shè)計(jì)了門雙信號(hào)決策電路,任意一路信號(hào)有效則生成高電平觸發(fā)信號(hào)控制電源開(kāi)關(guān)繼電器,從而保證任一CPU都能控制剩余浮力裝置的動(dòng)作。
為了使得主從式CPU能夠互相監(jiān)控對(duì)方CPU的運(yùn)行狀態(tài),采用為“心跳”信號(hào)互監(jiān)控方式。也即在每個(gè)CPU上分別設(shè)置專用的PWM脈沖輸出腳和PWM脈沖讀取管腳,通過(guò)實(shí)時(shí)監(jiān)控脈沖輸出情況來(lái)實(shí)時(shí)監(jiān)測(cè)CPU的運(yùn)轉(zhuǎn)情況,當(dāng)CPU出現(xiàn)死機(jī)或者硬件損壞時(shí),相應(yīng)管腳的PWM脈沖必然停止輸出,以此來(lái)監(jiān)測(cè)CPU的狀態(tài)。一旦一個(gè)CPU出現(xiàn)異常,另一個(gè)CPU隨即進(jìn)行部分功能的接管。
圖3 控制系統(tǒng)電路圖
為保證應(yīng)急控制中的電量供應(yīng)要求,設(shè)計(jì)了互控電源電路?;タ仉娫匆布催壿嬰娐分械氖芸鬲?dú)立電源。為保證雙CPU的受控獨(dú)立控制,使用雙CPU互控電源裝置來(lái)對(duì)雙CPU進(jìn)行供電,系統(tǒng)電路圖如圖3所示。該電源裝置輸入為主供電電源,輸出為兩個(gè)獨(dú)立控制的互轉(zhuǎn)CPU供電電源。供電電源采用互鎖的控制結(jié)構(gòu),即主從CPU的供電鏈路是由對(duì)方進(jìn)行單獨(dú)控制。實(shí)際使用當(dāng)中,利用對(duì)方CPU產(chǎn)生的控制信號(hào)通過(guò)三極管9013在基極進(jìn)行下拉進(jìn)行信號(hào)自鎖,只有當(dāng)收到信號(hào)時(shí)才會(huì)動(dòng)作一次,即使發(fā)生信號(hào)中斷等情況也不影響裝置的供電狀態(tài)。這種互鎖的結(jié)構(gòu)既能夠保證主CPU根據(jù)控制指令進(jìn)行斷電重啟,重新恢復(fù)控制能力,又不會(huì)夠影響從CPU的正常工作,從而確??刂破鬟壿嫷捻樌麑?shí)施。
考慮到獨(dú)立存儲(chǔ)區(qū)在CPU宕機(jī)時(shí)的信息更新脫檔以及斷電重啟的復(fù)位情況,使用E2PROM-AT24C04建立了雙CPU可以同時(shí)訪問(wèn)的公共存儲(chǔ)區(qū)。該存儲(chǔ)區(qū)能夠被主從CPU訪問(wèn)與寫(xiě)入,具備掉電保持功能,其中存儲(chǔ)了滑翔器滑翔所必備的關(guān)鍵程序和參數(shù)如:通訊指令解析程序、多作業(yè)模式控制程序、滑翔周期、滑翔深度、滑翔時(shí)間等,同時(shí)替代了主CPU部分堆棧功能,暫存主CPU運(yùn)行階段的關(guān)鍵參數(shù)如:滑翔運(yùn)動(dòng)階段,當(dāng)前時(shí)刻等。在主CPU死機(jī)后,從CPU能夠從中獲取死機(jī)前的關(guān)鍵參數(shù)使得滑翔器控制器邏輯運(yùn)算不斷檔,同時(shí)在宕機(jī)的主CPU復(fù)位后能夠獲得最新的滑翔器關(guān)鍵參數(shù),使得滑翔器的控制器恢復(fù)初始的冗余功能。
水下滑翔器的軟件系統(tǒng)中采用的是UCOS操作系統(tǒng)進(jìn)行編程。UCOS是一個(gè)可移植、可固話、可剪裁的、占先式多任務(wù)實(shí)時(shí)系統(tǒng)。在進(jìn)行軟件編程時(shí),每個(gè)控制任務(wù)都可以在系統(tǒng)中設(shè)置獨(dú)立任務(wù),每個(gè)獨(dú)立的任務(wù)都能夠并行運(yùn)行,保證整個(gè)控制系統(tǒng)的實(shí)時(shí)性。在進(jìn)行水下滑翔器應(yīng)急軟件設(shè)計(jì)時(shí)分為邏輯運(yùn)算控制器軟件以及底層驅(qū)動(dòng)控制器軟件。其中邏輯運(yùn)算控制器軟件承擔(dān)了主要的運(yùn)算工作,需要進(jìn)行滑翔器上壓力、CTD、葉綠素等各個(gè)傳感器報(bào)文的讀取和解析,通過(guò)壓力傳感器測(cè)量的深度數(shù)據(jù)對(duì)當(dāng)前是否需要進(jìn)行浮力裝置的出油或者進(jìn)油,或者航向的情況判斷舵機(jī)的打舵角度;而底層驅(qū)動(dòng)控制器則是接收到邏輯運(yùn)算控制器的指令對(duì)底層的電機(jī)、舵機(jī)進(jìn)行驅(qū)動(dòng)控制。軟件運(yùn)行步驟邏輯分別如圖4和圖5所示。軟件主要的作業(yè)流程為:
1)主控系統(tǒng)進(jìn)行相關(guān)寄存器以及控制引腳的初始化。初始化完成后從外置公共存儲(chǔ)器內(nèi)讀取相關(guān)狀態(tài)參數(shù)包括:當(dāng)前作業(yè)任務(wù)類型,當(dāng)前作業(yè)階段,當(dāng)前滑翔狀態(tài),滑翔周期數(shù)、滑翔深度、滑翔時(shí)間等。
2)讀入相關(guān)參數(shù)后,程序進(jìn)行自動(dòng)切換,切換到滑翔器程序運(yùn)行點(diǎn),繼續(xù)進(jìn)行滑翔器滑翔運(yùn)動(dòng)。
3)主控CPU在程序運(yùn)行后會(huì)每個(gè)500 ms發(fā)送一次脈沖電平,該電平被發(fā)送到底層輔控CPU,用于判斷主控CPU是否死機(jī)。
4)底層輔控CPU開(kāi)始進(jìn)行相關(guān)功能初始化,然后進(jìn)行相關(guān)控制權(quán)的判斷。輔控CPU有兩種運(yùn)行模式一種是主控制權(quán)獲得模式,當(dāng)獲得主控制權(quán)后會(huì)接管主控CPU的任務(wù),對(duì)滑翔器進(jìn)行運(yùn)動(dòng)控制。另一種是主控制權(quán)未獲得模式,在未獲得模式下控制器只執(zhí)行底層的命令執(zhí)行任務(wù)。
5)底層輔控CPU在獲得控制權(quán)后,會(huì)接管滑翔器控制滑翔器進(jìn)行相關(guān)的潛浮任務(wù)作業(yè),同時(shí)會(huì)對(duì)主控CPU脈沖口進(jìn)行監(jiān)控,當(dāng)連續(xù)收到主控CPU發(fā)來(lái)的脈沖后,表示主控CPU已重啟完成,CPU釋放相關(guān)控制權(quán)。
6)底層輔控CPU如未獲得控制權(quán),每50 ms會(huì)進(jìn)行底層任務(wù)的掃描,同時(shí)會(huì)實(shí)時(shí)監(jiān)控收到的脈沖電平信號(hào),如發(fā)現(xiàn)未收到脈沖信號(hào)則獲得控制權(quán),讀取外置存儲(chǔ)器的參數(shù),重啟主控CPU。
圖4 邏輯運(yùn)算控制器控制流程
圖5 底層驅(qū)動(dòng)控制器控制流程
在正常情況下,邏輯運(yùn)算控制器執(zhí)行了滑翔器控制器中大部分的運(yùn)算任務(wù),滑翔器的主要的任務(wù)計(jì)算都是由邏輯運(yùn)算控制器進(jìn)行,而底層驅(qū)動(dòng)控制器作為從控制器主要進(jìn)行控制邏輯的底層分配和邏輯運(yùn)算控制器的監(jiān)控作用。出現(xiàn)緊急情況后,從控制器監(jiān)控到主控制器的PWM輸出引腳沒(méi)有輸出PWM信號(hào),軟件立即控制從控制器進(jìn)行主控制器的控制權(quán)剝奪,并通過(guò)斷電和重新上電的方式同步進(jìn)行主控制器的重啟動(dòng)作。在主控制器的重啟過(guò)程中,從控制器會(huì)根據(jù)公共存儲(chǔ)區(qū)的算法進(jìn)行滑翔等工況的運(yùn)算和邏輯判斷工作,等待主控制器重啟完成,從控制器立即釋放主控制權(quán),繼而整個(gè)系統(tǒng)回歸正常工作狀態(tài)。這種主從的功能分配方式盡可能保證了每個(gè)控制器的軟件功能相對(duì)單一,正常工作時(shí)每個(gè)控制器的運(yùn)算負(fù)荷也較小,保證了滑翔器控制系統(tǒng)的運(yùn)行安全。
為了進(jìn)一步驗(yàn)證主從互轉(zhuǎn)技術(shù)的實(shí)用性,以中船重工第七〇二研究所研發(fā)的USE-Ⅲ型混合驅(qū)動(dòng)水下滑翔器為控制對(duì)象,將主從互轉(zhuǎn)式應(yīng)急控制技術(shù)應(yīng)用于該型水下滑翔器的控制系統(tǒng)中,于中國(guó)南海海域進(jìn)行了海上測(cè)試。
本次海試的試驗(yàn)區(qū)域海水的平均深度約1 000 m,且不處于主要的海上航道和捕魚(yú)區(qū)域,水面和水下的障礙物比較少,非常適合進(jìn)行水下滑翔器大深度的滑翔試驗(yàn)。
本次海試的部分工況包含連續(xù)滑翔的過(guò)程,項(xiàng)目組根據(jù)任務(wù)要求對(duì)滑翔器進(jìn)行了連續(xù)工作能力的測(cè)試,利用滑翔器上搭載的剩余浮力驅(qū)動(dòng)裝置進(jìn)行了反復(fù)多次的下潛上浮作業(yè),滑翔器上搭載的深度傳感器數(shù)據(jù)圖6所示。經(jīng)過(guò)連續(xù)3天72小時(shí)共計(jì)103次的下潛測(cè)試,水下滑翔器的各項(xiàng)功能運(yùn)行正常,控制系統(tǒng)中保存的時(shí)間、溫鹽深等數(shù)據(jù)連續(xù),未出現(xiàn)任何由于CPU宕機(jī)而產(chǎn)生的數(shù)據(jù)丟失、滑翔器失控等問(wèn)題。
圖6 滑翔深度數(shù)據(jù)
傳統(tǒng)的水下滑翔器因其低功耗、長(zhǎng)續(xù)航以及低噪音的特點(diǎn),是海洋調(diào)查作業(yè)的有力工具,然而這種優(yōu)勢(shì)導(dǎo)致的功能單一問(wèn)題也成了限制其發(fā)展的一個(gè)短板。為了進(jìn)一步擴(kuò)展水下滑翔器的應(yīng)用范圍和應(yīng)用功能,使其能夠應(yīng)對(duì)更多的水下環(huán)境以及水下作業(yè)任務(wù),混合驅(qū)動(dòng)型水下滑翔器應(yīng)運(yùn)而生。隨著使用功能和范圍的增加,水下滑翔器丟失的案例屢見(jiàn)不鮮,其海上運(yùn)行的安全性成為了該學(xué)科一個(gè)永恒的話題,水下滑翔器的應(yīng)急控制技術(shù)也成為水下滑翔器應(yīng)用關(guān)鍵技術(shù)之一。在普遍使用應(yīng)急拋載的現(xiàn)狀下,實(shí)時(shí)解決因控制器問(wèn)題導(dǎo)致的滑翔器失控具有非常重大的現(xiàn)實(shí)意義。根據(jù)水下滑翔器長(zhǎng)期運(yùn)行中普遍存在的CPU宕機(jī)現(xiàn)象,利用邏輯電路方面的優(yōu)化,使用雙CPU主從互轉(zhuǎn)代替單CPU的冗余方式,進(jìn)一步增加了滑翔器中控制核心安全穩(wěn)定運(yùn)行的時(shí)間,減少了單一CPU由于宕機(jī)造成的滑翔器失控風(fēng)險(xiǎn)。雖然主從互轉(zhuǎn)的控制方法在海試中的成功應(yīng)用是水下滑翔器應(yīng)急控制方面的一次成功嘗試,然而對(duì)于這類潛航器的控制器來(lái)說(shuō),使用單片機(jī)為核心的控制器還需要進(jìn)一步進(jìn)行長(zhǎng)期的測(cè)試才能發(fā)現(xiàn)其中存在的時(shí)序或者邏輯問(wèn)題。