1. 引言
IEEE将嵌入式系统定义为“控制、监视或者辅助装置、机器和设备运行的装置”,即为软件与硬件的综合体[1] [2] 。实际应用中,有很多领域需要用到嵌入式软件开发技术,实现高效、可靠地软件开发是完成需求的前提和关键,而如何将软件与硬件无缝接合,使得系统运行高效也是嵌入式软件开发关注的重点问题[3] 。随着科学技术的不断提升,新型武器装备对软件系统的要求也越来越高,在实时性、高效性、可靠性等方面达到更高的标准是武器装备中嵌入式软件系统不断追求的目标。
在软件开发技术的发展历程中,涌现过很多优秀的软件开发方法及架构,它们有各自的优势及其适用的场景与领域。软件开发方法从面向过程到面向对象再到面向服务,不断地改善着需求客户与开发人员沟通的桥梁,使软件开发从设计到需求及后期的维护步骤愈加清晰,效率也逐步提升。
本文介绍了软件开发历程中几种主要的软件开发方法,分析了SCA、OSGi模型与DDS规范。针对武器装备对软件系统动态性、实时性、可扩展性等方面的要求,本文提出了一种基于SCA与OSGi模型、以数据为中心的发布/订阅架构,最后通过实例说明该架构的实用性。
2. 嵌入式软件开发技术简介
1) 结构化的软件开发。结构化的软件开发方法主要思想是采用自顶向下,逐步求精的方法将整个业务体系抽象为一系列功能模块。结构化的软件开发方法存在着稳定性不高,对功能变化适应程度低,开发效率低以及开发周期长等不足。
2) 面向对象的软件开发。面向对象的软件开发方法解决了结构化对业务需求变化的适应能力低的问题,它将同一范围内各个相似的功能统一抽象为一个类,并提供一个统一的接口供其它类调用。面向对象极大的提升了软件开发过程的效率,具体表现在:成本低、效率高、易扩展。相比结构化方法,适用于规模较大的项目开发。
3) 模型驱动开发方法。模型驱动开发方法是通过系统建模模型来驱动整个系统的开发,实现系统需求分析、系统设计、功能实现及其后的测试、部署一系列工作的自动化[4] [5] 。模型驱动方法变革了以代码为中心的开发方法,适用于不同技术、平台集成的场景。
4) 基于组件的开发方法。基于组件的开发方法则彻底屏蔽了底层的实现细节,它将特定功能封装为一个独立的部署单元,各组件独立于编程语言与开发平台。基于组件的开发方法在很大程度上提高了软件复用性,能很好的适应软件开发平台的移植与软件架构的改变,使现有资源得到充分利用,并且使开发人员更好的关注业务逻辑本身,极大的提高了开发效率[6] 。基于组件的开发方法改善了各种传统软件开发方法的弊端,适用于大型软件开发项目、集成环境及遗留系统的移植等等。
3. 相关标准与主流思想
3.1. SCA模型
SCA是由BEA、IBM、Oracle等知名中间件厂商联合制定的一套符合SOA思想的规范,它旨在将业务功能作为一系列服务组件提供,为特定业务需求提供解决方案[7] 。如图1所示,Composite为SCA中系统部署的基本单元,其中可包含一个或多个Component, Component主要包含引用、服务、实现等元素。图1中component A通过引用获取component B的服务,而component B通过导出自己的服务供外界引用,component A与B都有自己的实现implementation。所有SCA服务组件均存在于SCA Domain中,Domain是一个完整的供服务组件部署、运行的容器[8] [9] 。SCA的初衷是面向企业应用集成领域,其屏蔽了底层实现,组件重用性、可扩展性强,开发效率高,被广泛的应用于遗留系统的移植、异构系统集成等大规模项目开发中。

Figure 1. SCA service component model chart
图1. SCA服务组件模型图
3.2. OSGi规范
OSGi是由OSGi Alliance制定的一个基于Java的服务规范,它实现了一种动态插件机制,组件可以在运行期动态装配、升级、卸载,其主要包含4个层次:Java运行环境、模块管理、生命周期管理以及服务注册。由于OSGi动态管理的优秀特性使得它成为许多应用开发的最佳选择,但OSGi不支持跨平台开发,这使它具有很大局限性。而SCA独立于平台、编程语言这一特性恰好弥补OSGi这一缺陷。OSGi的设计初衷是为嵌入式系统、移动设备等提供通用软件运行平台,现在它已逐渐成为室内智能装置、移动电话、汽车等网络设备的应用程序。
3.3. DDS标准协议
DDS是OMG针对分布式实时系统中数据订阅模型颁布的规范,是国际上第一个规范分布式系统数据交换的开放标准,它定义了一个以数据为中心的发布/订阅通信机制,其数据模型与平台无关,并将资源状况、资源期待度、网络状况等用QoS参数的形式进行描述,从而大大增强了通信的实时性和灵活性[10] 。DDS规范定义的架构分为两层:以数据为中心的发布/订阅层(Data Centric Publish-Subscribe,简称DCPS),以及本地数据重构层(Data Local Reconstruction Layer,简称DLRL)。
DCPS为核心层,提供数据发布/定义机制,即发布者发布数据,订阅者通过根据自己的偏好订阅感兴趣的数据。DLRL层是一个可选层,其功能为将接收到的数据重组,传至上层应用层。由于DDS中间件的轻便性与实时性,其方法广泛应用于各种领域的网络通信,包括作战系统、无人机系统、航空航天、金融等。
4. 适用于武器装备发展的新型嵌入式软件开发方法及架构
武器装备嵌入式系统存在一定的特殊性,包括需面临复杂、恶劣的作战环境,需要极强的抗毁性与容错性,作战过程中对事件的响应要有很强的实时性,且受到严格的软硬件资源的制约。由于传统的软件开发模式开发周期长,异构环境通信多采用特定私有协议或基于COBAR,在可复用性、动态性、稳定性等方面都有着严重不足,综上所述,不难发现无论从软件重用性还是从可扩展方面来考虑,组件化系统结构是最佳选择,同时采用当前发展成熟的标准规范有利于提升开发效率。因此,我们提出一种基于SCA标准模型与基于OSGi规范相结合的新型嵌入式软件开发方法,提高开发效率和系统灵活性。
4.1. 适用于武器装备系统的新型嵌入式软件架构
国际OSOA组织于2007年颁布了SCA与OSGi结合的白皮书《Power Combination: SCA, OSGi and Spring》,其中描述了OSGi与SCA集成的几种方式,可将OSGi服务作为SCA组件或通过SCA组件绑定OSGi服务,也可以将SCA组件作为OSGi容器内的服务,最佳的方法是用OSGi规范构建SCA。
本文采用以OSGi规范构建SCA的方法来实现OSGi与SCA的集成。由于SCA架构可扩展性强、组件可重用性高,对于嵌入式系统开发模式来说是不二选择,而OSGi有着很强的动态性和灵活性,与SCA形成优势互补。本模型以OSGi的机制构建SCA组件,将OSGi Bundle封装为SCA组件,通过Bundle Activator管理组件的生命周期来实现组件的动态装配、升级、卸载等。外层封装为SCA组件对外提供服务,屏蔽内部实现细节,解决了OSGi基于Java环境的限制。以这种方法实现OSGi与SCA的集成既可以将OSGi作为SCA组件,又可以通过绑定OSGi服务实现特定功能。图2为新型嵌入式软件开发架构图。
SCA组件封装了OSGi Bundle作为系统调度的基本单元,其SCA组件内部可以为任何符合SCA接口规范的实现,Composite内部的组件调用可以通过引用实现,Composite之间或Composite与Domain外的服务交互可以通过绑定服务实现。服务注册中心的实现类似于OSGi规范所描述的机制,发现模块可动态发现服务,并将其注册在服务注册中心,相应的产生一个服务监听对象来实现对该服务状态变化的监管,当服务改变时,监听对象会广播其已更新。组件的实现形式与服务注册中心是本架构的核心,除此还有一些如安全管理、错误处理等必要的辅助模块。

Figure 2. New embedded software development structure
图2. 新型嵌入式软件开发架构
4.2. 适用于分布式武器装备系统的嵌入式软件架构
基于OSGi构建SCA的模型改善了传统开发模式在重用性、扩展性、动态性等方面的缺陷,但武器装备往往对实时性方面要求较高,分布式系统通信时需采用实时性高的通信模式以适应军事系统。
4.2.1. 分布式武器装备系统通信模型
DDS规范所描述的以数据为中心、发布–订阅模型能够及时响应系统命令,满足高实时性的要求,非常适用于分布式系统中节点间的通信。同时DDS规范标准化了分布式实时系统中数据发布、传输以及接收的接口,具有很强的通用性。本文将封装了OSGi Bundle的SCA作为分布式系统中的独立节点,图3为分布式武器装备系统中各节点间的通信模型。

Figure 3. Weapon system communication model
图3. 武器装备系统通信模型
如图3所示,将封装好的SCA组件作为独立的分布式节点,作为发布者,组件可以将自己的服务发布出去,在以数据为中心的通信模型中,数据writer将数据写入全局数据空间的数据对象中;作为订阅者,组件通过订阅自己感兴趣的消息筛选数据中心的数据,一旦数据中心出现订阅消息,数据reader会立即将此数据对象传回订阅者。发布者与订阅者不必建立严格的同步机制,因此数据传输十分灵活,同时组件的请求一旦满足可得到及时响应,使组件间的通信达到很高的实时性。
4.2.2. 分布式武器装备嵌入式软件系统架构
分布式武器装备系统在集成SCA与OSGi的基础上,加入了以数据为中心的发布/订阅通信模型。
如图4所示,服务以SCA组件封装OSGi Bundle的形式向外发布,与传统OSGi模型中不同的是,本架构改进了服务注册中心的运行模式,服务发布者发布服务后由注册模块将其注册到服务中心或由更

Figure 4. The architecture of distributed weapon equipment embedded software system
图4. 分布式武器装备嵌入式软件系统架构
新模块将升级信息发布到服务中心。服务订阅者通过设置topic筛选自己感兴趣的服务,在同步机制下,调用WaitSet接口等待订阅服务出现;在异步机制下,采用服务Listener监听服务中心,一旦出现订阅服务立即通知服务消费者,通过回调实现服务调用。调用服务时,通过服务定位获取服务位置,然后产生客户端代理执行调用过程。
4.2.3. 应用实例
武器装备系统中,整个系统作为一个SCA Domain,所有composite均存在于Domain中,每个composite包含若干component,通过相互合作实现特定功能。如图5所示,雷达服务、声呐服务、识别服务等作为独立的composite向外提供服务,其内部包含较细粒度的若干component,通过相互配合提供雷达、声纳等服务,这些组件遵从OSGi规范,能够动态发现、加载。其中发射控制组件的实现需要引用雷达系统、声呐系统等组件。

Figure 5. Case diagram of local combat command system
图5. 局部作战指挥系统实例图
在图5中,节点1服务订阅者订阅了发射服务,节点2的发布者将发射服务发布到服务中心。服务监听模块Listener检测到发射服务并通知节点1的订阅者,服务订阅者收到消息执行回调操作,通过访问路径、服务名、请求消息体等一系列信息绑定发射服务,在本地生成客户端代理并通过远程过程调用完成对发射服务的调用。
5. 结论
武器装备要求嵌入式软件在软件效率、可靠性、实时性、灵活性等方面都需要达到一定要求,本文提出了一种基于OSGi规范构建SCA模型的嵌入式软件架构,能够满足武器装备对嵌入式系统的要求。基于组件的开发模式有利于增强软件复用性与可靠性,提高软件的开发效率,结合OSGi的开发模式使得系统在调用服务方面更具灵活性、动态性。对于分布式系统来说,组件之间的通信模式是影响嵌入式系统实时性的重要因素,采用以数据为中心、发布/订阅的通信机制,极大的满足了武器装备对实时性的要求。由于发布/订阅的通信模型较单一,今后将把工作重点放在高效、多样化通信模式上,使系统能够满足更多场景。