婁景藝,屈曉旭
(海軍工程大學(xué) 電子工程學(xué)院,湖北 武漢 430033)
摘 要: 針對(duì)短波低速通信條件下船舶遠(yuǎn)程維修指導(dǎo)效率低下的問(wèn)題,提出了一種新的基于PDF動(dòng)態(tài)標(biāo)注技術(shù)的遠(yuǎn)程維修指導(dǎo)信息交互手段?;贏crobat SDK實(shí)現(xiàn)了PDF文檔所見即所得方式的動(dòng)態(tài)標(biāo)注,其中重點(diǎn)解決了PDF文檔動(dòng)態(tài)加載、基于Windows鉤子技術(shù)的PDF文檔鼠標(biāo)響應(yīng)處理、PDF標(biāo)注動(dòng)態(tài)添加中的坐標(biāo)空間變換以及PDF標(biāo)注文本的動(dòng)態(tài)修改等問(wèn)題。實(shí)際應(yīng)用表明,通過(guò)應(yīng)用PDF動(dòng)態(tài)標(biāo)注技術(shù),實(shí)現(xiàn)了窄帶低速通信條件下的所見即所得的維修信息描述,為無(wú)視頻通信輔助條件下的高效遠(yuǎn)程維修指導(dǎo)提供了一種可行手段。
關(guān)鍵詞: 便攜式文檔;動(dòng)態(tài)標(biāo)注;遠(yuǎn)程維修;短波通信;所見即所得
0 引言
目前,短波通信因其應(yīng)用范圍廣、抗毀性強(qiáng)、通信距離遠(yuǎn)(可全球通信)、運(yùn)行成本低等特點(diǎn),仍是船舶遠(yuǎn)洋航行中不可或缺的通信手段[1]。依托短波通信系統(tǒng)構(gòu)建基于計(jì)算機(jī)輔助協(xié)同工作(Computer Supported Cooperative Work,CSCW)[2-3]技術(shù)的遠(yuǎn)程維修指導(dǎo)平臺(tái),對(duì)于保持和提高船舶的持續(xù)運(yùn)行能力具有顯著意義。但是,由于短波信道環(huán)境惡劣,短波通信帶寬一般較窄,在美國(guó)國(guó)防部最新提出的MIL-STD-188-141C短波組網(wǎng)協(xié)議中,最大信道帶寬也只有24 kHz[4],通常僅能支持話音和低速數(shù)據(jù)業(yè)務(wù)。現(xiàn)有基于語(yǔ)音的遠(yuǎn)程維修指導(dǎo)方式主要存在以下兩方面問(wèn)題:一是維修指導(dǎo)雙方難以快速準(zhǔn)確地描述指示燈和故障模塊的位置、具體檢修的方法和位置、顯示的具體情況等輔助信息;二是通常短波語(yǔ)音通信可懂度低,維修指導(dǎo)過(guò)程開展困難。相比話音通信,短波低速數(shù)據(jù)通信的實(shí)時(shí)性稍差,但可靠性高。本文利用短波低速數(shù)據(jù)通信設(shè)備,基于PDF動(dòng)態(tài)標(biāo)注技術(shù)實(shí)現(xiàn)了一種窄帶通信條件下的所見即所得(What You See Is What You Get,WYSIWYG)的高效維修信息描述和傳遞手段。
1 平臺(tái)總體設(shè)計(jì)
維修指導(dǎo)過(guò)程中常見的信息包括故障位置、故障狀態(tài)、自檢結(jié)果、檢修位置等,在低通信帶寬條件下,將維修信息進(jìn)行合理編碼能夠有效壓縮數(shù)據(jù)流量,提高遠(yuǎn)程維修指導(dǎo)效率。維修信息編碼過(guò)程本質(zhì)上是一種信源編碼過(guò)程,平臺(tái)針對(duì)維修交互信息的特點(diǎn),利用模型基壓縮編碼理論對(duì)維修交互信息進(jìn)行高碼率壓縮,有效降低了信息碼率。模型基信源編碼的基本思想是在收發(fā)信者之間共享信源模型,將信源產(chǎn)生的原始消息建模為某種激勵(lì)信號(hào)作用于信源模型,并在通信時(shí)僅傳輸此激勵(lì)信號(hào)。理論研究表明,如果信源模型構(gòu)建合理,所提取的激勵(lì)信號(hào)碼率將遠(yuǎn)低于原始消息碼率。
本系統(tǒng)中將維修現(xiàn)場(chǎng)的裝備相關(guān)信息(包括裝備內(nèi)外部結(jié)構(gòu)、組成、連接關(guān)系、工作狀態(tài)、維修手冊(cè)、電路圖冊(cè)等)建模為信源模型,并從收發(fā)雙方圍繞裝備展開的故障描述和維修指導(dǎo)信息中提取激勵(lì)信號(hào)。具體設(shè)計(jì)中采用PDF文檔承載信源模型,收發(fā)雙方保存相同PDF文檔庫(kù),利用PDF標(biāo)注技術(shù)描述激勵(lì)信號(hào),使維修指導(dǎo)雙方可以高效準(zhǔn)確地描述各類維修信息,保證了低信道帶寬條件下的維修信息交互效率。
遠(yuǎn)程維修指導(dǎo)平臺(tái)依托普遍安裝的陸地和船舶通信設(shè)施實(shí)現(xiàn),由陸地部分和海上部分兩部分組成,如圖1所示。陸地部分和海上部分內(nèi)部都使用以太網(wǎng)作為網(wǎng)絡(luò)載體,二者之間經(jīng)短波無(wú)線網(wǎng)關(guān)控制器利用短波數(shù)字通信設(shè)備互連互通。
廠家客戶端和船舶客戶端采用一致的架構(gòu)設(shè)計(jì)。維修專家可利用PDF動(dòng)態(tài)標(biāo)注技術(shù)、實(shí)時(shí)VoIP語(yǔ)音和文本聊天等形式展開遠(yuǎn)程維修指導(dǎo)?;谝蕴W(wǎng)絡(luò)的實(shí)時(shí)VoIP語(yǔ)音通信和文本聊天技術(shù)已很成熟,本文不再贅述。本文重點(diǎn)分析客戶端中PDF動(dòng)態(tài)標(biāo)注技術(shù)的實(shí)現(xiàn),這也是平臺(tái)設(shè)計(jì)中的重點(diǎn)。
2 PDF動(dòng)態(tài)標(biāo)注技術(shù)的實(shí)現(xiàn)原理
便攜式文檔格式(PDF)是由Adobe公司于1993年開發(fā)出的一種文件格式,能容納電子表單、網(wǎng)頁(yè)、視頻、音頻、3D虛擬現(xiàn)實(shí)等豐富內(nèi)容,便于集成各種媒體格式的維修資料。根據(jù)PDF文檔規(guī)范,一個(gè)PDF文檔(document)是由若干對(duì)象(object)組成的,這些對(duì)象共同組成了文檔的頁(yè)面(pages)。PDF標(biāo)注(annotation,也稱附注)是一類特殊的PDF對(duì)象。要對(duì)PDF標(biāo)注進(jìn)行動(dòng)態(tài)控制,需要對(duì)PDF文檔的結(jié)構(gòu)進(jìn)行解析。目前,PDF文檔的解析工具有多種,主流的解析工具包括Apache公司推出的開源工具PDFBox[5]、著名開源站點(diǎn)Sourceforge的iTEXT[6]以及Adobe公司提供的Acrobat SDK[7]。前兩者是開源項(xiàng)目,但功能有限,系統(tǒng)設(shè)計(jì)中選用Adobe SDK開發(fā)。
Acrobat SDK采用OLE對(duì)象(SDK中稱作IAC對(duì)象)實(shí)現(xiàn)Windows平臺(tái)下的PDF文檔顯控[8]。IAC對(duì)象分兩個(gè)層次,一是Application View(AV)層,使用該層控制PDF文檔的顯示,該層中包括AVDoc、AVPageView、AVMenu等對(duì)象,顯示的文檔形式與Acrobat reader顯示非常相似,用戶界面友好;二是Portable Document(PD)層,使用該層提供的對(duì)象可操作PDF文檔中的內(nèi)容,例如增減頁(yè)面、操作PDF文檔中的標(biāo)注等。
需要指出的是,Acrobat SDK中PDF文檔在客戶程序中的顯示是以COM接口形式實(shí)現(xiàn)的,該接口提供了PDF文檔操作需要的基本功能,但是未提供鼠標(biāo)響應(yīng)事件。
實(shí)現(xiàn)PDF標(biāo)注動(dòng)態(tài)控制的過(guò)程須解決以下四個(gè)問(wèn)題:(1)PDF文檔在用戶程序中的動(dòng)態(tài)加載;(2)為顯示的PDF文檔增加鼠標(biāo)響應(yīng)等用戶交互能力;(3)以所見即所得的方式添加PDF標(biāo)注;(4)實(shí)現(xiàn)PDF標(biāo)注文本的動(dòng)態(tài)修改功能。
3 PDF文檔動(dòng)態(tài)加載的實(shí)現(xiàn)
PDF文檔的加載流程如下:
//創(chuàng)建AVDoc對(duì)象,用于控制PDF文檔的顯示
AVDoc=new AcroAVDocClass();
//打開PDF文檔,并將其關(guān)聯(lián)至tabPage
AVDoc.OpenInWindowEx(fileFullName,tp1.Handle.ToInt32(),..);
//創(chuàng)建PDDoc對(duì)象,用于解析和控制PDF文檔的內(nèi)容
PDDoc=(AcroPDDoc)AVDoc.GetPDDoc();
//獲取當(dāng)前文檔的AVPageView對(duì)象
AVPageView=(AcroAVPageView)AVDoc.GetAVPageView();
//導(dǎo)航至首頁(yè)
AVPageView.GoTo(0);
本設(shè)計(jì)中采用多標(biāo)簽頁(yè)形式顯示不同PDF文檔,即每個(gè)TabPage上顯示一個(gè)PDF文件。PDF文檔顯示到客戶端TabPage上后,在TabPage的大小發(fā)生變化時(shí),其上顯示的PDF文檔不會(huì)自動(dòng)同步變化,需要程序自行控制??刂品椒ㄊ窃赥abPage所在的TabControl的Resize事件中重設(shè)PDF視窗大小和位置,具體方法是首先使用系統(tǒng)API函數(shù)GetWindow獲取PDF顯示視窗句柄,然后利用系統(tǒng)API函數(shù)SetWindowPos將該窗體調(diào)整至合適位置。
4 基于Windows鉤子技術(shù)的PDF文檔鼠標(biāo)響應(yīng)處理
在PDF標(biāo)注編輯過(guò)程中,采用鼠標(biāo)指定標(biāo)注所在位置的所見即所得的方法是最高效的方法,但Acrobat SDK未提供鼠標(biāo)響應(yīng)機(jī)制。為此,本系統(tǒng)設(shè)計(jì)中利用Windows的全局鼠標(biāo)鉤子機(jī)制為PDF文檔視窗加入了鼠標(biāo)事件。
鉤子(Hook)是一種Windows消息處理機(jī)制,用戶程序可在鉤子上掛載自定義函數(shù)監(jiān)視指定窗口的某種消息,被監(jiān)視的窗口可以是其他線程創(chuàng)建的[9]。當(dāng)指定消息發(fā)出時(shí),在沒有到達(dá)目的窗口前,鉤子程序可以先捕獲該消息。圖2為鼠標(biāo)鉤子的實(shí)現(xiàn)流程圖。
設(shè)計(jì)MouseHook類掛載和卸載鼠標(biāo)鉤子,捕獲Windows標(biāo)準(zhǔn)鼠標(biāo)事件及觸發(fā)自定義的.Net事件OnMouseActivity。PDF顯示窗口類訂閱.Net事件響應(yīng)鼠標(biāo)事件。在鉤子回調(diào)函數(shù)中,若滿足以下條件,則觸發(fā)鼠標(biāo)事件MouseHookProc:(1)顯示PDF的窗體可見且處于最上層;(2)鼠標(biāo)位置在PDF窗體區(qū)域范圍內(nèi)。
鉤子的掛載和卸載采用Windows API函數(shù)SetWindowsHookEx和UnhookWindowsHookEx實(shí)現(xiàn)。
5 PDF標(biāo)注動(dòng)態(tài)操作中不同坐標(biāo)系間映射的實(shí)現(xiàn)
在對(duì)PDF標(biāo)注進(jìn)行添加、選中、修改過(guò)程中,需要解決屏幕坐標(biāo)系、用戶坐標(biāo)系及設(shè)備坐標(biāo)系間的相互映射問(wèn)題。
在Windows操作系統(tǒng)中,屏幕坐標(biāo)系以屏幕左上角為原點(diǎn),向右、向下分別為橫縱兩個(gè)坐標(biāo)軸的正方向。鼠標(biāo)鉤子返回的鼠標(biāo)位置就是相對(duì)于此坐標(biāo)系的。而用戶坐標(biāo)系(User Space)和設(shè)備坐標(biāo)系(Device Space)是PDF文檔操作中兩個(gè)重要概念。用戶坐標(biāo)系如圖3所示,缺省的用戶坐標(biāo)系為每次頁(yè)面剛剛加載時(shí)的坐標(biāo)系。該坐標(biāo)系的原點(diǎn)位于該頁(yè)媒體框(Media Box)的左下角。圖中的Crop Box為PDF文件顯示的區(qū)域,而Media Box則包含了PDF文件四周的灰色邊框。缺省的用戶坐標(biāo)系的單位為1/72英寸。在Acrobat SDK中,PD層的各種對(duì)象均使用該坐標(biāo)系,這是因?yàn)樵撟鴺?biāo)系與實(shí)現(xiàn)無(wú)關(guān)。
設(shè)備坐標(biāo)系是PDF文件顯示于屏幕上時(shí)使用的坐標(biāo)系,其單位為像素,坐標(biāo)軸取向與屏幕坐標(biāo)軸取向相同,如圖4所示。與用戶坐標(biāo)系不同,該坐標(biāo)系用于PDF文件的顯示。設(shè)備坐標(biāo)系的原點(diǎn)位于Crop Box的左上角。眾所周知,隨著PDF文檔的縮放,該區(qū)域的位置在屏幕上是變化的。
作為PDF文檔的一種對(duì)象,PDF標(biāo)注的位置和大小采用的坐標(biāo)系為用戶坐標(biāo)系。由上可見,為了以一種所見即所得的方式添加標(biāo)注,即將標(biāo)注添加到鼠標(biāo)指示的PDF文檔位置上,必須將鼠標(biāo)位置坐標(biāo)(屏幕坐標(biāo)系)映射到用戶坐標(biāo)系上,但Acrobat SDK未提供該映射接口,而是提供了設(shè)備坐標(biāo)系到用戶坐標(biāo)系的接口。為了實(shí)現(xiàn)所見即所得的鼠標(biāo)操作,需執(zhí)行如下步驟:
(1)獲取鼠標(biāo)在屏幕上的位置Pm(屏幕坐標(biāo)系);
(2)將Pm映射到設(shè)備坐標(biāo)系Pd;
(3)將Pd映射到用戶坐標(biāo)系Pu。
Pm到Pd的映射可采用以下公式實(shí)現(xiàn):
Pd.x=Pm.X-PdfWindowRect.Left+PdfWindowDeviceRect.Left
Pd.y=Pm.Y-PdfWindowRect.Top+PdfWindowDeviceRect.Top
其中,PdfWindowRect為PDF顯示窗體中Media Box的矩形區(qū)域(采用屏幕坐標(biāo)系),可直接根據(jù)Tabpage窗體客戶區(qū)矩形獲得;PdfWindowDeviceRect為PDF窗體Crop Box的矩形區(qū)域(采用用戶坐標(biāo)系),可利用AVPageView.GetAperture()函數(shù)獲得。Pd到Pu的映射可直接調(diào)用AVPageView.DevicePointToPage()函數(shù)實(shí)現(xiàn)。
6 PDF標(biāo)注文本的動(dòng)態(tài)修改
PDF標(biāo)注在添加到PDF頁(yè)面上時(shí),可以指定其對(duì)應(yīng)的文本內(nèi)容。但與Acrobat Reader中不同,該內(nèi)容可以閱覽,但不支持現(xiàn)場(chǎng)編輯。雖然如此,Acrobat SDK預(yù)留了PDF標(biāo)注文本的設(shè)置接口,即AcroPDAnnot對(duì)象的SetContents和GetContents函數(shù)。系統(tǒng)設(shè)計(jì)中,使用此接口解決該問(wèn)題。用戶在指定文本框中輸入的文本內(nèi)容自動(dòng)添加到PDF文件上選中的標(biāo)注上。PDF文檔標(biāo)注本身并無(wú)選中與否的屬性。為此,系統(tǒng)設(shè)計(jì)中為文檔標(biāo)注加入了選中屬性,方法是當(dāng)鼠標(biāo)點(diǎn)擊PDF文檔時(shí),自動(dòng)判定當(dāng)前位置是否有PDF標(biāo)注,如果有,則在程序中記錄該標(biāo)注作為當(dāng)前選中標(biāo)注,同時(shí)更改該標(biāo)注的顏色以突出顯示。
7 平臺(tái)應(yīng)用效果及分析
圖5為應(yīng)用基于PDF動(dòng)態(tài)標(biāo)注技術(shù)的遠(yuǎn)程維修指導(dǎo)平臺(tái)的用戶界面示例。維修船員首先利用文本聊天和表單對(duì)故障進(jìn)行了描述。陸地工程師根據(jù)故障現(xiàn)象,打開設(shè)備圖冊(cè)(一個(gè)PDF文件),并在“電源穩(wěn)壓?jiǎn)卧獌?nèi)部結(jié)構(gòu)圖”頁(yè)面的電源輸出連接頭處添加標(biāo)注(圖中左上方標(biāo)注),指導(dǎo)船員檢查連接器處是否損壞。船員客戶端會(huì)自動(dòng)同步打開同一PDF文件,并同步添加相同標(biāo)注。船員檢查后發(fā)現(xiàn)電源板中一個(gè)電解電容器損壞,故障排查完成。
由于在陸/船雙方保存了相同的PDF文件資料庫(kù),上述過(guò)程中僅需傳遞PDF文件編號(hào)、標(biāo)注頁(yè)碼、標(biāo)注內(nèi)容等信息,需要交互的信息量大大壓縮,且故障位置、檢修位置、維修手冊(cè)翻閱等均以所見即所得的形式實(shí)現(xiàn),提高了遠(yuǎn)程指導(dǎo)效率。由于PDF文件不僅可以存儲(chǔ)裝備使用說(shuō)明書、技術(shù)說(shuō)明書、檢修手冊(cè)、實(shí)物照片等靜態(tài)信息,還可以存儲(chǔ)視頻、虛擬實(shí)境等動(dòng)態(tài)對(duì)象,資源豐富,能夠保證遠(yuǎn)程維修指導(dǎo)的順利開展。
利用該平臺(tái)進(jìn)行維修指導(dǎo)時(shí),陸地和海上部分之間的交互信息中既包含了故障現(xiàn)象,又包含了故障檢測(cè)、分析和維修流程,因此可以作為設(shè)備維修案例庫(kù)使用,用于類似故障維修的參考或設(shè)備維修教學(xué)中的生動(dòng)素材。
8 結(jié)論
由于短波裝備在各類軍民用船只上安裝廣泛,且各種維修相關(guān)的紙質(zhì)或電子版資料、照片甚至視頻信息均可方便地集成于PDF文檔中,平臺(tái)的文檔資料資源可以得到充分保證,因此平臺(tái)的實(shí)際應(yīng)用前景廣闊。該方法亦可推廣應(yīng)用于帶寬受限的基于衛(wèi)星通信的遠(yuǎn)程維修指導(dǎo)平臺(tái),由于需要的通信帶寬窄,成本低,可作為一種低成本的常規(guī)遠(yuǎn)程維修指導(dǎo)手段。
參考文獻(xiàn)
[1] 羅利春,王越.短波通信100年與通信電子戰(zhàn)的新課題[J].系統(tǒng)工程與電子技術(shù),1998,20(11):42-44.
[2] 王旭輝,王彤.CSCW技術(shù)在裝備遠(yuǎn)程維修支持信息系統(tǒng)中的應(yīng)用[J].火力與指揮控制,2010,35(1):132-135.
[3] 劉建輝,張俊利,王爽.基于Agent的遠(yuǎn)程協(xié)同故障診斷系統(tǒng)研究[J].計(jì)算機(jī)測(cè)量與控制,2006,14(1):39-42.
[4] 鄭雅敏.基于非連續(xù)頻譜的短波傳輸技術(shù)研究[D].杭州:浙江大學(xué),2014.
[5] 王曉娟,譚建龍,劉燕兵,等.基于自動(dòng)機(jī)理論的PDF文本內(nèi)容抽取[J].計(jì)算機(jī)應(yīng)用,2012,32(9):2491-2495.
[6] 王鵬飛,楊和梅,丁俊松.利用Struts+iText在J2EE中實(shí)現(xiàn)PDF報(bào)表[J].現(xiàn)代電子技術(shù),2006,29(22):46-48.
[7] 張英杰.快速批處理文件編輯系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2012.
[8] Adobe.Acrobat XI SDK 10.1[EB/OL].[2014-12-01].http://www.adobe.com/devnet/acrobat/sdk/eula.html,2014.
[9] 郭津之,龍海,黃皓.Windows消息鉤子的攔截和清除[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(18):4201-4206.