
技术摘要:
本发明公开了一种基于模块定义图的无人机飞控系统的C 代码生成方法,旨在解决现有无人机飞控系统C 生成代码技术中存在的生成效率和正确率较低的技术问题。其实现步骤包括:构建无人机飞控系统的SysML模块定义图;获取SysML模块定义图对应的XMI文件;基于XMI文件构建 全部
背景技术:
嵌入式系统是一个以应用为中心的专用计算机系统,在航空航天安全关键领域被 广泛应用。相比于一般的计算机处理系统而言,嵌入式系统存在较大的差异性,不能实现大 容量的存储功能,对软件代码有较高的可靠性和实时性要求。一般应用于嵌入式系统开发 中使用的程序语言有很多种,包括java、C/C 、python等,其中C 语言实现了面向对象程 序设计,且在高级语言中运行速度是最快的,因此在嵌入式系统的开发中应用最为广泛。 一个可应用于嵌入式系统的生成C 代码方法应具有较高的生成效率,且生成C 代码的正确率高,代码结构完整。现有的生成C 代码方法包括技术人员直接开发和使用模 型驱动技术自动生成两种,其中使用模型驱动技术自动生成的基本思想是将工作重点放在 模型构建上,通过模型转换自动生成代码,避免了人工书写代码可能出现的错误,因此具有 开发效率高、生成代码正确率高的优点。模型驱动首先需要建立适合设计对象的模型,建模 时可选择的模型分为SysML模型、UML模型等。其中SysML模型是一类专门面向系统工程建立 的模型,SysML结构模型是SysML模型的一部分,分为模块定义图、内部模块图和包图,模块 定义图用于描述系统的层次以及系统/组件的分类,通过模块之间的组成、泛化、依赖等关 系来表示各个子系统之间的关系。 无人机的飞行控制系统是一个典型的嵌入式系统,无人机飞控系统是指能够稳定 无人机飞行姿态,并能控制无人机自主或半自主飞行的控制系统,是无人机的大脑,主要的 功能就是自动保持飞机的正常飞行姿态,具体包括模态控制、位置控制、切换飞行模式等功 能。随着无人机的广泛应用,各项功能趋于完善,无人机飞行控制系统作为一种实时控制系 统,其复杂性也日益增加,使得人工开发飞行控制系统难度大,开发时生成代码的效率低, 代码正确率低。 为了提高生成C 代码的正确率和效率,研发人员做了尝试,例如授权公告号为 CN102929681B,名称为“一种虚拟试验分布式对象模型框架代码自动生成方法”的发明专 利,公开了一种从虚拟试验分布式对象模型自动生成C 代码的方法,该专利定义一种虚拟 试验分布式对象模型的描述语言,对使用所述语言描述的虚拟试验分布式对象模型的文本 文件进行词法分析和语法分析,建立所述描述语言与IDL语言的映射关系,调用IDL编译器 生成对应的虚拟试验分布式对象模型框架代码,构建分布式对象模型模板,通过标签替换 生成虚拟试验分布式对象模型框架C 代码。该发明给出的方法通过词法分析和语法分析 虚拟试验分布式对象模型的描述语言,建立描述语言与其他语言的映射关系,将模型自动 转换为C 代码,减少了开发人员的工作量,提高了应用开发的可靠性和效率。但因为只提 出了基于虚拟分布式试验对象模型的生成代码方法,应用于生成无人机代码的步骤过多, 需要定义模型描述语言并映射为IDL语言,再通过标签替换生成C 代码,生成无人机代码 6 CN 111596901 A 说 明 书 2/18 页 正确率较低,生成效率较低。
技术实现要素:
本发明的目的在于克服现有技术存在的缺陷,提出一种基于模块定义图的无人机 飞控系统的C 代码生成方法,旨在解决现有无人机飞控系统C 生成代码技术中存在的生 成效率和正确率较低的技术问题。 本发明的技术思路是:首先构建无人机飞控系统的SysML模块定义图,获取SysML 模块定义图对应的XMI文件,并将此XMI文件元素映射为结构树节点,生成对应的结构树,之 后查找结构树中的所有节点,将节点元素转换为无人机C 代码中类代码、枚举类型代码, 最后将类代码和枚举类型代码相连得到完整的无人机飞行模式的C 代码,完成从SysML模 块定义图到无人机飞控系统的C 代码转换,其实现方案包括如下步骤: (1)构建无人机飞行控制系统的SysML模块定义图: 在papyrus软件中,构建无人机飞行控制系统的SysML模块定义图,包括基础功能 模块和与其并行连接的多个飞行模式模块,以及多个枚举类型模块,其中: 所述基础功能模块,用于生成无人机C 代码中的部分类代码,该模块包含了无人 机飞行控制系统中所有飞行模式共有的操作和块属性,操作用于生成C 类中的函数,块属 性用于生成C 类中的变量定义,操作中包含参数定义,用于生成类中函数的参数,操作和 属性均具有属性name、visibility、type、isstatic,参数具有属性name、type、direction; 所述飞行模式模块,是为每一种无人机飞控系统飞行模式构建的多个模块,用于 生成无人机C 代码中的部分类代码,每个模块包含一种飞行模式用到的操作和块属性,操 作中包含参数定义,每个模块包含与基础功能模块的泛化关系,并泛化关系与基础功能模 块相连接,操作和块属性均具有属性name、visibility、type、isstatic,参数具有属性 name、type、direction,泛化关系具有属性general; 所述枚举类型模块,是为无人机飞行控制系统开发中需要用到的枚举类型构建的 多个模块,用于生成无人机C 代码中的枚举类型代码,每个模块包含枚举类型的关键字和 具体信息,关键字具有属性name,具体信息包括name和value,关键字用于生成枚举类型的 常量定义,具体信息用于生成枚举类型常量中的具体取值和文本; (2)获取SysML模块定义图对应的XMI文件: 通过papyrus软件读取SysML模块定义图对应的XMI文件,文件里包含对模块定义 图中的多个元素,每个元素有对应的标签和属性,元模型为模块定义图,标签为model,基础 功能模块、飞行模式模块和枚举类型模块对应的标签均为packagedelement,其中: packagedelement是model的子标签,其中基础功能模块、飞行模式模块对应的 packagedelement类型为block,枚举类型模块对应的packagedelement类型为 enumeration; 类型为block的packagedelement,子标签分别为块属性的标签ownedattribute、 操作的标签ownedoperation和泛化的标签generalization;其中ownedoperation的子标签 为参数的标签ownedparmeter; 类型为enumeraiton的packagedelement,子标签为关键字的标签ownedliteral; ownedliteral的子标签为具体信息的标签specification; 7 CN 111596901 A 说 明 书 3/18 页 (3)基于模块定义图的XMI文件构建结构树: (3a)定义结构树T,T=(V ,E),其中V表示节点集,E表示有向边集,并初始化 (3b)获取结构树节点集V: (3b1)在XMI文件中查找标签model、packagedelement的元素,并将model的元素作 为T的根节点