一种基于消息的无人机通用地面站软件架构的制作方法

文档序号:13520627阅读:126来源:国知局

本发明涉及无人机通用地面站软件架构设计技术,尤其适用于外部环境复杂、数据处理密集的无人机地面站软件产品设计。



背景技术:

传统的无人机地面站软件往往由各个地面控制软件直接通过网络或其他总线与无人机链路终端直接进行数据交互,对于单个的地面站软件控制软件,由于功能比较固定和单一,涉及到的外部数据集较小,且外部接口协议一般只有1到2种,在可控制的范围内。所以传统的地面站软件开发过程中往往不注重对数据接口的良好设计,一般在处理逻辑中直接调用操作系统提供的io接口或者个别专用总线驱动接口。对于传统的无人机地面站软件忽视对数据接口的良好封装对软件复杂性不会带来明显的提升。

无人机通用地面站是近年来无人机发展的方向,比较传统的无人机地面站,无人机通用地面站具有更加复杂的外部环境,比如无人机通用地面站需要能够同时监控多个架次多个型号的无人机,还要适应新的无人机监控需求加入和现有无人机升级改动。因此,无人机通用地面站是比传统无人机地面站复杂得多的大系统,对于无人机通用地面站软件设计而言,会面临着处理更大的数据集,对于大的数据集里的各个不同的小数据集会采用不同的总线或者不同的协议,如果还采用一般地面站软件的设计模式软件的复杂程度会随着数据集的增加和交互协议或总线接口的增加而成倍的增加。



技术实现要素:

本发明的发明目的在于提供一种基于消息的无人机通用地面站软件架构,按数据流对软件进行分层设计,对业务处理逻辑屏蔽了数据获取细节,以实现复杂数据接口处理环境下的统一软件开发模型,在可预见的需求变化情况下实现各层软件组件的复用,进而缩短软件的开发周期,提升软件质量,减少维护成本。

本发明的发明目的通过以下技术方案实现:

一种基于消息的无人机通用地面站软件架构,包含消息配置文件、io驱动组件、消息路由组件和业务逻辑处理组件,消息路由组件包含消息配置组件、消息组件、消息输入组件和消息输出组件,消息安全组件;

消息配置组件用于对消息配置文件进行解析,根据解析出的消息的<uuid>、<length>、<inout>和<link_list>完成消息组件、消息输入组件和消息输出组件的初始化配置;

在接收外部系统的外部数据时:

io驱动组件用于先从外部系统接收外部数据;然后调用消息组件,由消息组件在外部数据上加上<uuid>和<length>标识后封装为输入消息实体;最后将输入消息实体放入消息输入组件的消息输入队列中;

业务逻辑处理组件用于根据<uuid>从消息输入组件的消息输入队列中获取输入消息实体,然后进行相应处理;

在向外部系统发送内部数据时:

业务逻辑处理组件用于先调用消息组件,由消息组件在内部数据上加上<uuid>、<length>和<link_list>标识后封装为输出消息实体;再调用消息输出组件,将输出消息实体发送给对应的io层输出组件;

io层输出组件用于处理输出消息实体,将消息实体内包含的内部数据发送给外部系统。

优选地,消息配置组件包括解析功能接口和可视化界面组件;

解析功能接口用于对消息配置文件进行解析,根据解析出的消息实体的<uuid>、<length>、<inout>和<link_list>完成消息组件、消息输入组件和消息输出组件的初始化配置;

可视化界面组件用于提供对消息配置文件进行编辑的消息配置界面。

优选地,消息组件包括消息类,消息类用于为io驱动组件和业务逻辑处理组件提供生成消息的工厂方法;所述工厂方法用于将外部数据或内部数据封装为输入消息实体或输出消息实体。

优选地,消息输入组件包含若干个消息输入队列,每个消息输入队列对应一个<uuid>。

优选地,消息输入组件包含put方法和get方法;put方法供io驱动组件调用,将输入消息实体放入到消息输入队列中;get方法供业务逻辑处理组件周期性查询,根据<uuid>从消息输入队列中获取输入消息实体。

优选地,消息输入组件还包含回调接口,回调接口用于根据<uuid>将消息输入队列中的输入消息实体传递给业务逻辑处理组件。

优选地,消息输出组件包括一套方法定义和实现以及一个接口类定义;所述方法定义及实现包含提供给业务逻辑处理组件使用的一组重载的send方法;所述接口类定义包含提供给io驱动层组件使用的虚方法send;所述io驱动组件中包含与所述虚方法send为继承关系的send方法;重载的send方法根据输出消息实体中的<uuid>和<link_list>调用相应的虚方法send,从而调用io驱动层的send方法实现将输出消息实体发送到外部系统。

优选地,消息输出组件的接口类定义还包括两个注册函数,注册函数1用于供io驱动层组件中的相关组件注册自身处理的具体<link_list>,注册函数2用于供io驱动层组件中的相关组件向消息输出组件声明自身存在。

优选地,消息路由组件还包含消息安全组件,提供以消息为单位的安全策略方法。

本发明为通用无人机地面站软件设计提供了统一的开发模型,基于消息对象的软件内部数据交互模型使软件开发人员在不清楚数据硬件接口、软件协议或接口、协议多变的情况下能够聚焦在业务层组件的开发上,完全解耦了软件业务逻辑和外部接口环境。带来的有益效果是使软件开发人员不用考虑与外部环境的真实交互接口和协议,从而开发出健壮的、低耦合、可移植或重用的业务逻辑处理软件组件。io驱动层的设计遵循开发模型定义的规则,具备一致的设计套路和步骤,既统一了软件设计风格又降低了开发人员的设计复杂性,又屏蔽了不同开发设计人员不同设计模式带来的不确定性风险,同时带来的有益效果还包括io层的组件同样低耦合和高可移植的特性。消息路由组件为其它组件提供注册接收、注册发送、接收、发送消息接口,并对软件接收和发送的数据集以消息对象的方式统一管理,带来的有益效果是,统一了软件组件的设计风格并能对软件的安全性做出轻松设计。

附图说明

图1典型的无人机通用地面站软件交联关系示意图。

图2为基于消息的无人机通用地面站软件架构的结构示意图。

图3为消息配置文件的示意图。

图4消息输入过程示意图。

图5消息输出过程示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。

图1是本发明适用领域典型的无人机通用地面站软件交联关系示意图,以无人机通用地面站里的测控处理软件为例介绍本发明的具体实施方式。测控处理软件是无人机通用地面站里的核心软件,如图1所示,测控处理软件和站内和站外多个软件都有交联关系,是一个典型的外部环境复杂、数据处理密集型的无人机通用地面站软件产品。

图2是本发明基于消息的无人机通用地面站软件架构的模型示意图,采用本发明设计的软件由一个消息配置文件和3类软件组件构成,3类软件组件为io驱动组件、消息路由组件和业务逻辑处理组件。

消息配置文件是本发明的核心基础,本实例中采用xml文件作为软件架构模型的消息配置文件的一种实现方式,消息配置文件还可以采用其他任何格式的文本文件作为实现替换,比如ini、json、txt、yaml等。在消息配置文件(msg-config.xml)文件中定义了两类消息:输入消息和输出消息,图3是msg-config.xml的示例文件,下面以图3为例讲解本发明消息配置文件的一种实施方式和作用。xml标记<msg_list>是消息配置树的根,标识了采用本软件架构模型开发的软件可处理的全部输入消息和输出消息列表。xml标记<msg>标识了一条输入消息实体或输出消息实体。xml标记<uuid>标识了唯一的消息id,采用16位或者32位的无符号整数表示,软件框架提供基于消息id的处理接口。xml标记<length>标识一个消息的预定义长度,采用32位的无符号整数表示,其中数值0为软件框架提供处理变长消息的能力。xml标记<inout>标识消息实体的类型,在本软件框架模型下取值可以是字符串”in”或”out”,取值”in”表示定义的消息实体是一条输入消息实体,取值”out”表示定义的消息实体是一条输出消息实体。xml标记<note>定义一段描述字符用于对定义的消息实体进行表述性说明,可用于消息框架的日志或者调试等用途。对于输出消息实体,xml标记<link_list>定义了消息的输出链路列表,输出链路可以理解为硬件接口或者软件实现的模拟硬件接口,标记<link>定义一段字符串用于标识输出链路,如tcp,udp等。软件框架模型提供的消息输出接口会根据这里定义的链路名列表将消息实体发送给每一个处理链路名列表中消息链路的软件组件。

消息路由组件提供基于消息配置文件的框架接口,为io驱动组件和业务逻辑处理组件提供完整的消息路由服务,消息路由组件由以下几个二级组件构成:消息配置组件、消息组件、消息输出组件、消息输入组件、消息安全组件。

消息配置组件提供基于消息配置文件的消息解析配置能力,包括解析功能接口和一套可视化界面组件。解析功能接口用于对消息配置文件进行解析,根据解析出的消息实体的<uuid>、<length>、<inout>和<link_list>完成消息组件、消息输入组件和消息输出组件的初始化配置,包含根据<uuid>在消息输入组件设置针对每个<uuid>的消息输入队列,根据<link_list>在消息输出组件中配置重载的send1方法的参数,根据<uuid>、<length>、<inout>和<link_list>在消息组件设置创建消息实体的参数。可视化界面组件是软件框架模型提供的一套分离的软件组件,不与用户开发的软件一起编译运行,供开发人员创建和编辑msg-config.xml消息配置文件使用,给开发人员提供友好的消息配置界面,避免手动修改msg-config.xml带来的繁琐工作量和因此潜在引入错误的风险。

消息组件为开发人员提供消息实体创建和转换功能,包括消息类和工厂方法,消息类用于为io驱动组件和业务逻辑处理组件提供生成消息的工厂方法;所述工厂方法用于将外部数据或内部数据封装为输入消息实体或输出消息实体。消息类提供基于其他对象或者二进制数据流创建消息对象的接口,这些接口最终由工厂方法呈现给开发者。

消息输出组件是本软件框架模型基于配置文件中定义的输出消息,为开发人员提供消息输出方法和框架的组件,包括一套方法定义和实现以及一个接口类定义。在消息输出组件中定义了一组重载的send方法,send方法接受输出消息实体引用,可选的链路名字符串引用,业务逻辑处理组件通过调用send方法最终将期望的内部数据以消息实体的方式通过链路名的标识最终以期望的物理链路或软件虚拟链路发给外部其他系统或组件。接口类定义了所有io驱动组件需要实现的虚方法send,并提供了两个注册方法。虚方法send的实现规则在后面介绍io驱动组件时详细介绍。注册方法1接受一个字符串或者字符串列表作为参数,字符串对应xml标记<link>标识的链路名,可以多次调用,对于重复传入的字符串或消息配置文件中不存在的链路名参数忽略,通过注册方法1申明的链路名在消息配置文件中对应的消息实体都会通过消息输出组件send方法传递到对应的io层驱动组件处理。注册方法2,不接受任何参数,io层驱动组件在实例化时必须调用该方法,该注册方法2将io层驱动组件句柄注册给消息输出组件,让消息输出组件能够通过句柄将适当的输出消息实体传递给io层驱动组件。

消息输入组件是本软件框架模型基于消息配置文件中定义的输入消息,为开发人员提供消息输入方法和消息获取方法。消息输入组件基于消息配置文件定义的输入消息的uuid为每一个输入消息维护一个消息输入队列。消息输入组件包括一套方法定义和实现以及一个接口类定义,方法定义和实现包含put方法和get方法。put方法供io层驱动组件调用,io层驱动组件将从硬件链路或虚拟链路上解析出的原始数据封装成输入消息实体后通过调用put方法将输入消息实体放入到消息输入队列中。定义了并实现了get方法供业务逻辑处理组件调用,业务逻辑处理组件通过调用get方法从uuid标识的消息输入队列中定期查询是否有更新,并获取消息实体。另外消息输入组件还定义了一套回调机制,回调机制给开发人员提供了另一种获取和处理输入消息实体的方式,开发人员需要实现框架定义的回调接口类,并在类实例化的时候调用消息输入组件定义的注册方法,接收uuid为参数,注册要回调处理的消息,在回调接口中完成对应输入消息实体的业务逻辑处理。

消息安全组件为开发人员以消息为单位提供一些安全策略方法。

业务处理逻辑组件由开发人员在软件架构定义的框架下灵活开发,业务处理逻辑组件包含在业务逻辑不改变的情况下可作为可重用的多个逻辑组件,例如遥控逻辑组件、遥测逻辑组件等。逻辑组件依赖于消息输入组件提供的查询get方法或者回调接口获取外部系统或外部其他组件发来的数据,并在完成处理之后通过消息输出组件将处理之后的数据发给期望收到数据的外部系统或外部其他组件。逻辑组件在软件框架下有两种实现方式,方式1是构建一个普通的类对象,在类对象实例中调用消息输入组件提供的get方法周期查询获取输入消息,并完成逻辑处理,方式2是逻辑组件实现消息输入组件定义的回调接口,在回调接口中实现逻辑处理代码。

io层驱动组件是灵活的可替换的软件组件,包含数据输出组件和数据输入组件,主要功能是完成软件内部数据输出和外部数据输入操作,对于数据输出组件和数据输入组件可以在同一个类对象中实现也可以分开实现,没有必然的耦合关系。数据输入组件实现方式是,构建一个类对象,一般是一个主动类对象,由操作系统接口而定,在类对象中调用操作系统接口从外部系统获取外部数据,并完成外部数据的解析工作,将解析之后的外部数据调用消息组件封装成一个完整的输入消息实体,再通过消息输入组件的put方法将输入消息实体放入到消息输入组件的消息输入队列,在消息输入队列中的对象等待业务处理逻辑组件处理,如果业务处理逻辑组件采用回调方式处理输入消息实体,消息输入组件的回调接口将在这里调用put方法时被调用。数据输出组件的实现方式是,首先数据输出组件必须包含与消息输出组件中的虚方法send有继承关系的send方法,在send方法中完成对输出消息实体的处理,获取原始数据并将原始数据通过操作系统接口发送给外部系统。另外数据输出组件还必须调用消息输出组件提供的两个注册方法,以向框架声明可以处理的消息链路列表和告诉框架自己的存在。

图4是本发明软件架构中基于消息的消息输入过程的示意图。

io驱动组件用于先从外部系统接收外部数据;然后调用消息组件,由消息组件在外部数据上加上<uuid>和<length>标识后封装为输入消息实体;最后将输入消息实体放入消息输入组件的消息输入队列中;

业务逻辑处理组件用于根据<uuid>从消息输入组件的消息输入队列中获取输入消息实体,然后进行相应处理。

图5是本发明软件架构中基于消息的消息输出过程的示意图。

业务逻辑处理组件先调用消息组件,由消息组件在内部数据上加上<uuid>、<length>和<link_list>标识后封装为输出消息实体;再调用消息输出组件,将输出消息实体发送给对应的io层输出组件;

io层输出组件处理输出消息实体,将消息实体内包含的内部数据发送给外部系统。

可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1