娄景艺,屈晓旭(海军工程大学 电子工程学院,湖北 武汉 430033)
目前,短波通信因其应用范围广、抗毁性强、通信距离远(可全球通信)、运行成本低等特点,仍是船舶远洋航行中不可或缺的通信手段[1]。依托短波通信系统构建基于计算机辅助协同工作(Computer Supported Cooperative Work,CSCW)[2-3]技术的远程维修指导平台,对于保持和提高船舶的持续运行能力具有显著意义。但是,由于短波信道环境恶劣,短波通信带宽一般较窄,在美国国防部最新提出的MIL-STD-188-141C短波组网协议中,最大信道带宽也只有24 kHz[4],通常仅能支持话音和低速数据业务。现有基于语音的远程维修指导方式主要存在以下两方面问题:一是维修指导双方难以快速准确地描述指示灯和故障模块的位置、具体检修的方法和位置、显示的具体情况等辅助信息;二是通常短波语音通信可懂度低,维修指导过程开展困难。相比话音通信,短波低速数据通信的实时性稍差,但可靠性高。本文利用短波低速数据通信设备,基于PDF动态标注技术实现了一种窄带通信条件下的所见即所得(What You See Is What You Get,WYSIWYG)的高效维修信息描述和传递手段。
维修指导过程中常见的信息包括故障位置、故障状态、自检结果、检修位置等,在低通信带宽条件下,将维修信息进行合理编码能够有效压缩数据流量,提高远程维修指导效率。维修信息编码过程本质上是一种信源编码过程,平台针对维修交互信息的特点,利用模型基压缩编码理论对维修交互信息进行高码率压缩,有效降低了信息码率。模型基信源编码的基本思想是在收发信者之间共享信源模型,将信源产生的原始消息建模为某种激励信号作用于信源模型,并在通信时仅传输此激励信号。理论研究表明,如果信源模型构建合理,所提取的激励信号码率将远低于原始消息码率。
本系统中将维修现场的装备相关信息(包括装备内外部结构、组成、连接关系、工作状态、维修手册、电路图册等)建模为信源模型,并从收发双方围绕装备展开的故障描述和维修指导信息中提取激励信号。具体设计中采用PDF文档承载信源模型,收发双方保存相同PDF文档库,利用PDF标注技术描述激励信号,使维修指导双方可以高效准确地描述各类维修信息,保证了低信道带宽条件下的维修信息交互效率。
远程维修指导平台依托普遍安装的陆地和船舶通信设施实现,由陆地部分和海上部分两部分组成,如图1所示。陆地部分和海上部分内部都使用以太网作为网络载体,二者之间经短波无线网关控制器利用短波数字通信设备互连互通。
图1 平台总体结构
厂家客户端和船舶客户端采用一致的架构设计。维修专家可利用PDF动态标注技术、实时VoIP语音和文本聊天等形式展开远程维修指导。基于以太网络的实时VoIP语音通信和文本聊天技术已很成熟,本文不再赘述。本文重点分析客户端中PDF动态标注技术的实现,这也是平台设计中的重点。
便携式文档格式(PDF)是由 Adobe公司于 1993年开发出的一种文件格式,能容纳电子表单、网页、视频、音频、3D虚拟现实等丰富内容,便于集成各种媒体格式的维修资料。根据PDF文档规范,一个PDF文档(document)是由若干对象(object)组成的,这些对象共同组成了文档的页面(pages)。 PDF标注(annotation,也称附注)是一类特殊的PDF对象。要对PDF标注进行动态控制,需要对PDF文档的结构进行解析。目前,PDF文档的解析工具有多种,主流的解析工具包括Apache公司推出的开源工具 PDFBox[5]、著名开源站点Sourceforge的iTEXT[6]以及 Adobe公司提供的 Acrobat SDK[7]。 前两者是开源项目,但功能有限,系统设计中选用Adobe SDK开发。
Acrobat SDK采用OLE对象(SDK中称作IAC对象)实现Windows平台下的PDF文档显控[8]。IAC对象分两个层次,一是 Application View(AV)层,使用该层控制PDF文档的显示,该层中包括 AVDoc、AVPageView、AVMenu等对象,显示的文档形式与Acrobat reader显示非常相似,用户界面友好;二是 Portable Document(PD)层,使用该层提供的对象可操作PDF文档中的内容,例如增减页面、操作PDF文档中的标注等。
需要指出的是,Acrobat SDK中PDF文档在客户程序中的显示是以COM接口形式实现的,该接口提供了PDF文档操作需要的基本功能,但是未提供鼠标响应事件。
实现PDF标注动态控制的过程须解决以下四个问题:(1)PDF文档在用户程序中的动态加载;(2)为显示的PDF文档增加鼠标响应等用户交互能力;(3)以所见即所得的方式添加PDF标注;(4)实现 PDF标注文本的动态修改功能。
PDF文档的加载流程如下:
//创建AVDoc对象,用于控制 PDF文档的显示
AVDoc=new AcroAVDocClass();
//打开PDF文档,并将其关联至 tabPage
AVDoc.OpenInWindowEx (fileFullName,tp1.Handle.ToInt32(),..);
//创建PDDoc对象,用于解析和控制PDF文档的内容
PDDoc=(AcroPDDoc)AVDoc.GetPDDoc();
//获取当前文档的AVPageView对象
AVPageView=(AcroAVPageView)AVDoc.GetAVPageView();
//导航至首页
AVPageView.GoTo(0);
本设计中采用多标签页形式显示不同PDF文档,即每个TabPage上显示一个PDF文件。PDF文档显示到客户端TabPage上后,在TabPage的大小发生变化时,其上显示的PDF文档不会自动同步变化,需要程序自行控制。控制方法是在TabPage所在的TabControl的Resize事件中重设PDF视窗大小和位置,具体方法是首先使用系统API函数GetWindow获取PDF显示视窗句柄,然后利用系统API函数SetWindowPos将该窗体调整至合适位置。
在PDF标注编辑过程中,采用鼠标指定标注所在位置的所见即所得的方法是最高效的方法,但Acrobat SDK未提供鼠标响应机制。为此,本系统设计中利用Windows的全局鼠标钩子机制为PDF文档视窗加入了鼠标事件。
钩子(Hook)是一种 Windows消息处理机制,用户程序可在钩子上挂载自定义函数监视指定窗口的某种消息,被监视的窗口可以是其他线程创建的[9]。当指定消息发出时,在没有到达目的窗口前,钩子程序可以先捕获该消息。图2为鼠标钩子的实现流程图。
图2 鼠标钩子实现流程图
设计MouseHook类挂载和卸载鼠标钩子,捕获Windows标准鼠标事件及触发自定义的.Net事件OnMouse-Activity。PDF显示窗口类订阅.Net事件响应鼠标事件。在钩子回调函数中,若满足以下条件,则触发鼠标事件MouseHookProc:(1)显示 PDF的窗体可见且处于最上层;(2)鼠标位置在PDF窗体区域范围内。
钩子的挂载和卸载采用Windows API函数SetWindowsHookEx和UnhookWindowsHookEx实现。
在对PDF标注进行添加、选中、修改过程中,需要解决屏幕坐标系、用户坐标系及设备坐标系间的相互映射问题。
在Windows操作系统中,屏幕坐标系以屏幕左上角为原点,向右、向下分别为横纵两个坐标轴的正方向。鼠标钩子返回的鼠标位置就是相对于此坐标系的。而用户坐标系 (User Space) 和设备坐标系 (Device Space)是PDF文档操作中两个重要概念。用户坐标系如图3所示,缺省的用户坐标系为每次页面刚刚加载时的坐标系。该坐标系的原点位于该页媒体框(Media Box)的左下角。图中的 Crop Box为PDF文件显示的区域,而Media Box则包含了PDF文件四周的灰色边框。缺省的用户坐标系的单位为1/72英寸。在Acrobat SDK中,PD层的各种对象均使用该坐标系,这是因为该坐标系与实现无关。
图3 用户坐标系
设备坐标系是PDF文件显示于屏幕上时使用的坐标系,其单位为像素,坐标轴取向与屏幕坐标轴取向相同,如图4所示。与用户坐标系不同,该坐标系用于PDF文件的显示。设备坐标系的原点位于Crop Box的左上角。众所周知,随着PDF文档的缩放,该区域的位置在屏幕上是变化的。
作为PDF文档的一种对象,PDF标注的位置和大小采用的坐标系为用户坐标系。由上可见,为了以一种所见即所得的方式添加标注,即将标注添加到鼠标指示的PDF文档位置上,必须将鼠标位置坐标(屏幕坐标系)映射到用户坐标系上,但Acrobat SDK未提供该映射接口,而是提供了设备坐标系到用户坐标系的接口。为了实现所见即所得的鼠标操作,需执行如下步骤:
图4 设备坐标系
(1)获取鼠标在屏幕上的位置Pm(屏幕坐标系);
(2)将 Pm映射到设备坐标系Pd;
(3)将 Pd映射到用户坐标系 Pu。
Pm到Pd的映射可采用以下公式实现:
Pd.x=Pm.X-PdfWindowRect.Left+PdfWindowDeviceRect.Left
Pd.y=Pm.Y-PdfWindowRect.Top+PdfWindowDeviceRect.Top
其中,PdfWindowRect为 PDF显示窗体中 Media Box的矩形区域(采用屏幕坐标系),可直接根据Tabpage窗体客户区矩形获得;PdfWindowDeviceRect为PDF窗体Crop Box的矩形区域(采用用户坐标系),可利用 AVPageView.GetAperture()函数获得。Pd到 Pu的映射可直接调用 AVPageView.DevicePointToPage()函数实现。
PDF标注在添加到PDF页面上时,可以指定其对应的文本内容。但与Acrobat Reader中不同,该内容可以阅览,但不支持现场编辑。虽然如此,Acrobat SDK预留了PDF标注文本的设置接口,即AcroPDAnnot对象的Set-Contents和GetContents函数。系统设计中,使用此接口解决该问题。用户在指定文本框中输入的文本内容自动添加到PDF文件上选中的标注上。PDF文档标注本身并无选中与否的属性。为此,系统设计中为文档标注加入了选中属性,方法是当鼠标点击PDF文档时,自动判定当前位置是否有PDF标注,如果有,则在程序中记录该标注作为当前选中标注,同时更改该标注的颜色以突出显示。
图5为应用基于PDF动态标注技术的远程维修指导平台的用户界面示例。维修船员首先利用文本聊天和表单对故障进行了描述。陆地工程师根据故障现象,打开设备图册(一个PDF文件),并在“电源稳压单元内部结构图”页面的电源输出连接头处添加标注(图中左上方标注),指导船员检查连接器处是否损坏。船员客户端会自动同步打开同一PDF文件,并同步添加相同标注。船员检查后发现电源板中一个电解电容器损坏,故障排查完成。
图5 基于PDF动态标注的远程维修指导平台
由于在陆/船双方保存了相同的PDF文件资料库,上述过程中仅需传递PDF文件编号、标注页码、标注内容等信息,需要交互的信息量大大压缩,且故障位置、检修位置、维修手册翻阅等均以所见即所得的形式实现,提高了远程指导效率。由于PDF文件不仅可以存储装备使用说明书、技术说明书、检修手册、实物照片等静态信息,还可以存储视频、虚拟实境等动态对象,资源丰富,能够保证远程维修指导的顺利开展。
利用该平台进行维修指导时,陆地和海上部分之间的交互信息中既包含了故障现象,又包含了故障检测、分析和维修流程,因此可以作为设备维修案例库使用,用于类似故障维修的参考或设备维修教学中的生动素材。
由于短波装备在各类军民用船只上安装广泛,且各种维修相关的纸质或电子版资料、照片甚至视频信息均可方便地集成于PDF文档中,平台的文档资料资源可以得到充分保证,因此平台的实际应用前景广阔。该方法亦可推广应用于带宽受限的基于卫星通信的远程维修指导平台,由于需要的通信带宽窄,成本低,可作为一种低成本的常规远程维修指导手段。
[1]罗利春,王越.短波通信100年与通信电子战的新课题[J].系统工程与电子技术,1998,20(11):42-44.
[2]王旭辉,王彤.CSCW技术在装备远程维修支持信息系统中的应用 [J].火力与指挥控制,2010,35(1):132-135.
[3]刘建辉,张俊利,王爽.基于 Agent的远程协同故障诊断系统研究[J].计算机测量与控制,2006,14(1):39-42.
[4]郑雅敏.基于非连续频谱的短波传输技术研究 [D].杭州:浙江大学,2014.
[5]王晓娟,谭建龙,刘燕兵,等.基于自动机理论的 PDF文本内容抽取[J].计算机应用,2012,32(9):2491-2495.
[6]王鹏飞,杨和梅,丁俊松.利用 Struts+iText在 J2EE中实现 PDF 报表[J].现代电子技术,2006,29(22):46-48.
[7]张英杰.快速批处理文件编辑系统的设计与实现[D].成都:电子科技大学,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].计算机工程与设计,2009,30(18):4201-4206.