CN114756213A - 一种智能控制系统代码自动生成方法及装置 - Google Patents
一种智能控制系统代码自动生成方法及装置 Download PDFInfo
- Publication number
- CN114756213A CN114756213A CN202210664227.0A CN202210664227A CN114756213A CN 114756213 A CN114756213 A CN 114756213A CN 202210664227 A CN202210664227 A CN 202210664227A CN 114756213 A CN114756213 A CN 114756213A
- Authority
- CN
- China
- Prior art keywords
- component
- thread
- code
- file
- components
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种智能控制系统代码自动生成方法及装置,所述方法包括:解析AADL模型文件,从所述AADL模型文件中提取所述AADL模型文件包括的各个组件及属性约束;构建AADL模型文件到C++代码的转换规则;基于所述转换规则,解析所述AADL模型文件包括的各个组件的属性;基于预设的C++代码模板及所述AADL模型文件包括的各个组件的解析结果,生成与所述AADL模型文件对应的C++代码。根据本发明的方案,通过读取AADL实例文件,经过处理,最终生成了C++标准规范的代码,实现了将体系结构设计语言到面向对象语言之间的转换。
Description
技术领域
本发明涉及软件研发技术领域,尤其涉及一种智能控制系统代码自动生成方法及装置。
背景技术
智能控制安全关键实时系统(Safety-Critical Real-Time System)广泛应用于无人机、航空电子、航天器、武器装备、核能、汽车控制等关键信息领域,智能控制安全关键实时系统是一种智能控制系统。由于功能和非功能要求不断提高,智能控制系统的复杂度急剧增加,如何设计与实现高质量的智能控制系统,并有效控制开发时间和成本,是学术界和工业界共同面临的难题。近年来,模型驱动开发方法(Model-Driven Development, MDD)逐渐成为智能控制系统设计与开发的重要手段,而作为复杂嵌入式实时系统的体系结构设计与分析语言标准,AADL(Architecture Analysis and Design Language, AADL)日益受到关注,并逐渐发展成为一个新的研究热点。
AADL,体系结构分析与设计语言,广泛应用于基于模型的系统工程,进行系统体系结构的建模和模型转换,并进而借助系统设计模型实现系统的软件验证。
AADL是一种半形式化建模语言,有确定的语义和严格语法的语言表达规范。AADL主要用于各类安全系统中,这类系统规模庞大、逻辑复杂并且经常处于高强度的运行状态,一旦出现非正常状态将造成不可估量的损失。例如航空电子、航空航天、医疗、机器人、汽车和过程控制等领域。AADL模型到代码的自动生成,在提供代码质量,缓解软件危机是不可或缺的手段。它能够有助于提高嵌入式实时系统的软件开发的自动化水平,缩短软件开发周期,减少人工写代码的工作量和编码过程中出错的可能性。使用AADL实现智能控制系统的代码自动生成,具有重大的应用价值。
在智能控制系统代码自动生成技术方面,Simulink自带了种类繁多、功能强大的模块库,在基于模型设计的开发流程下,Simulink不仅通过仿真可以进行早期设计的验证,还可以生成C/C++、PLC等代码直接应用于PC、MCU、DSP等平台,在嵌入式软件开发中发挥着重要的作用。
现有技术如图1所示,通过simulink模块库设计simulink系统模型,然后使用Build Model将已经通过仿真检验的系统ing模型转换为rtw文件,然后通过SimulinkCoder中的目标语言编译器使用TLC模板将rtw文件转换为一系列的源文件,这个过程中TLC所使用的文件包括3类:系统目标文件、模块的目标文件和支持代码生成的TLC函数库等文件。模型的源代码全部生成之后,导入到目标硬件中进行实机运行。
现有技术中,Simulink代码生成是商业化的软件,无法保证软件的有效性,在开发过程中,功能固化,无法满足自定义功能的需求,尤其是不支持采用智能算法作为系统模块的智能控制系统;同时在针对特定的平台开发时,比如Pixhawk平台开发实现代码,需要购买单独的PX4硬件支持包,价格相对昂贵,同时开发难度比较大。
发明内容
为解决上述技术问题,本发明提出了一种智能控制系统代码自动生成方法及装置,用以解决智能控制系统的代码自动化实现的技术问题。
根据本发明的第一方面,提供一种智能控制系统代码自动生成方法,所述方法包括以下步骤:
步骤S1:解析AADL模型文件,从所述AADL模型文件中提取所述AADL模型文件包括的各个组件及属性约束,所述组件包括系统组件、进程组件、线程组件、数据组件、以及子程序组件;解析提取的所述组件及属性约束;
步骤S2:构建AADL模型文件到C++代码的转换规则,所述AADL模型文件到C++代码的转换规则包括系统组件转换规则、进程组件转换规则、线程组件转换规则、数据组件转换规则、以及子程序组件转换规则;基于所述转换规则,解析所述AADL模型文件包括的各个组件的属性;
步骤S3:基于预设的C++代码模板及所述AADL模型文件包括的各个组件的解析结果,生成与所述AADL模型文件对应的C++代码;
所述智能控制系统是指包含了智能算法的控制类系统。
进一步地,所述步骤S1,所述系统组件为所述AADL模型文件对应的AADL模型的最顶层组件;所述系统组件包含一个或者多个进程组件,每个进程组件表示受保护的地址空间;所述进程组件必须至少包含一个线程组件,每个线程组件包括类型声明和类型实现两部分;所述线程组件的实现包括子程序组件和数组组件,所述数组组件表示静态数据和数据类型;所述子程序组件表示能够被调用的代码单元,具有参数、操作数据或者能够为调用者提供服务功能。
进一步地,所述系统组件转换规则为:
步骤S211:对系统组件,将所述系统组件转换为一个文件夹,该文件夹的名称与系统组件类型声明的系统组件名称一致;
步骤S212:在所述系统组件转换的文件夹下,生成一个命名为modules的文件夹,用于存放系统组件包括的各个进程组件生成的代码。
进一步地,所述进程组件的转换规则为:
步骤S221:在modules文件夹下,建立与当前系统组件所包含的进程组件一一对应的子文件夹,所述子文件夹的名称与所述进程组件的名称一致;modules文件夹下的子文件夹个数与所述系统组件包含的进程组件个数一致;
步骤S222:解析所述进程组件,在所述进程组件对应的子文件夹中,生成两个文件,分别是“*.hpp”和“*.cpp”文件;所述*.hpp文件包括所述进程组件对应的进程内的线程所共享的数据和函数的声明、所述进程组件所包含的线程组件实现的主类、以及与所述进程组件相关的头文件引用;
步骤S223:若所述进程组件中具有特征项,则在所述*.hpp文件中增加所述进程组件对外发布的消息函数的代码;
步骤S224:若所述进程组件中具有属性项,则在所述*.hpp文件中增加所述进程组件的与属性处理相关的函数的代码;
步骤S225:在文件*.cpp中生成*.hpp中定义的所有函数,每个函数的具体实现代码设置为空;“*”为通配符,替换为其对应的进程组件的名称。
进一步地,所述线程组件的转换规则为:
步骤S231:解析线程组件类型声明,为每个线程组件对应生成两个文件“*.hpp”和“*.cpp”,文件名与所述线程组件的名称相同,“*”为通配符,替换为其对应的线程组件的名称;将与所述线程组件对应的所述两个文件存储于所述线程组件对应的进程组件对应的子文件夹下;
步骤S232:在该线程组件的*.hpp文件中,生成该线程组件对应的主类(class)定义,以及所述主类的构造函数和析构函数的定义;
步骤S233:若所述线程组件的声明中具有特征(features)关键词定义的函数,则在该线程组件的*.hpp文件中,在该线程组件对应的公有函数中增加对应的静态函数定义;
步骤S234:若所述线程组件中具有属性项,根据所述线程组件中的属性项设置该线程组件的*.hpp中主类的继承属性和命名空间的参数值;所述线程组件中的属性项能够标识所述线程组件的功能的实现方式;所述实现方式若为基于智能算法实现,则基于属性值获取实现所述智能算法的功能模块的引用,所述引用用于表征所述智能算法的功能模块的路径,并在生成与所述AADL模型文件对应的C++代码时,用于指示动态加载实现所述智能算法的功能模块;
步骤S235:解析所述线程组件的实现,所述线程组件的实现包括子程序组件和数组组件;对所述线程组件包括的子程序组件,生成C++类的私有方法参数和返回值类型;对所述线程组件包括的数组组件,生成该线程组件的*.hpp头文件中的变量或者引用方法的实例;
步骤S236:根据该线程组件的*.hpp文件中的函数定义,在该线程组件的*.cpp文件中生成对应的函数实现代码框架,函数体的实现为空;*为通配符,替换为其对应的线程组件的名称;
步骤S237:确定并记录各个线程组件的依赖和调用关系,用于代码编译。
本实施例中,不为线程组件生成文件夹。所有线程组件对应的文件均存储于所述线程组件对应的进程组件的文件夹中,即所述进程组件对应的文件夹中,存储所述进程组件对应的全部线程组件对应的文件,通过文件名区分不同的线程组件。
进一步地,所述数据组件的转换规则为:
步骤S241:若所述数据组件的数据类型为C++语言支持的预定义类型,则将所述数据组件直接转换成C++语言支持的内部数据类型;
步骤S242:若所述数据组件的数据类型对应于C++语言的自定义类型,则根据所述数据组件的定义,生成C++语言支持的自定义数据类型。
进一步地,所述子程序组件的转换规则为:
将线程组件内部的子程序组件的声明,转换为与所述子程序组件对应的线程组件对应的*.hpp文件中的一个静态函数,并且所述静态函数中包括所述子程序组件的变量和返回值;*为通配符,替换为其对应的线程组件的名称。
根据本发明的第二方面,提供一种智能控制系统代码自动生成装置,所述装置包括:
解析模块:配置为解析AADL模型文件,从所述AADL模型文件中提取所述AADL模型文件包括的各个组件及属性约束,所述组件包括系统组件、进程组件、线程组件、数据组件、以及子程序组件;解析提取的所述组件及属性约束;
转换模块:配置为构建AADL模型文件到C++代码的转换规则,所述AADL模型文件到C++代码的转换规则包括系统组件转换规则、进程组件转换规则、线程组件转换规则、数据组件转换规则、以及子程序组件转换规则;基于所述转换规则,解析所述AADL模型文件包括的各个组件的属性;
代码生成模块:配置为基于预设的C++代码模板及所述AADL模型文件包括的各个组件的解析结果,生成与所述AADL模型文件对应的C++代码;
所述智能控制系统是指包含了智能算法的控制类系统。
根据本发明的上述方案,本发明从实际需求和应用角度出发,设计实现了一种智能控制系统代码自动生成方法及装置,该方法是基于AADL模型到C++代码框架的自动代码生成的方案,首先解析AADL模型文件,从中提取相关的组件信息,并进行解析;然后根据目标平台转换规则,构建代码模板,代码模板使用AADL模型和目标平台信息,对AADL模型的进程组件、线程组件、子程序以及数据组件进行转换,所述目标平台是转换后的C++代码运行的平台;最后,通过模板实现将AADL模型和已有代码整合,完成C++代码的生成。本发明从AADL模型到C++代码框架的自动代码生成方法,通过读取AADL实例文件,经过处理,最终生成了C++标准规范的代码,实现了将体系结构设计语言到面向对象语言之间的转换。
本发明通过AADL对目标硬件系统建模,并对所述目标硬件系统对应的软件系统进行处理,将AADL模型自动转换为C++代码的功能实现为相应的插件,实现从AADL模型到C++代码框架的代码自动生成,完成了从面向组件到面向对象转换。通过本方法实现的插件,既包括组件到C++转换规则,也包括AADL模型中各组件的属性的配置,最终可生成一套可编译的完整的系统代码。
本发明解决智能控制系统的代码实现问题,通过代码自动生成的方式,提高系统的开发效率,降低人力成本。本发明生成的代码适用于支持运行C++语言的平台,适用于C语言运行平台,因为C语言是C++语言的一个子集。本发明尤其适用于软件架构支持模块化设计、定制化需求强烈的智能控制系统,例如无人机、无人车等运行了智能算法的无人化平台。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明提供如下附图进行说明。在附图中:
图1为现有技术的Simulink代码自动生成方法流程图;
图2为本发明一个实施方式的智能控制系统代码自动生成方法流程示意图;
图3为本发明一个实施方式的智能控制系统代码自动生成方法基本流程图;
图4为本发明一个实施方式的智能控制系统代码自动生成方法整体流程图;
图5为本发明一个实施方式的进程组件解析流程示意图;
图6为本发明一个实施方式的线程组件解析流程示意图;
图7为本发明一个实施方式的具体实施示意图;
图8为本发明一个实施方式的智能控制系统代码自动生成装置结构示意图。
具体实施方式
名词解释:
AADL:Architecture Analysis and Design Language,体系结构分析与设计语言,用于在模型基工程的分析实践中,进行系统体系结构的建模和模型转换,并进而借助系统设计模型实现系统的软件验证。
OSATE:基于Eclipse的AADL开发环境,支持AADL语言最新标准,其支持核心语言、行为附件和错误模型附件。
MDD:Model-Driven Development,模型驱动开发方法。
智能算法:是指以神经网络模型为代表的人工智能算法,包括机器学习、深度学习等。
LSTM: 长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,常用的智能算法。
智能控制系统:是指包含了智能算法的控制类系统,例如无人机、无人车等。
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先结合图2-图4说明为本发明一个实施方式的智能控制系统代码自动生成方法流程图。如图2-图4所示,所述方法包括以下步骤:
步骤S1:解析AADL模型文件,从所述AADL模型文件中提取所述AADL模型文件包括的各个组件及属性约束,所述组件包括系统组件、进程组件、线程组件、数据组件、以及子程序组件;解析提取的所述组件及属性约束;
步骤S2:构建AADL模型文件到C++代码的转换规则,所述AADL模型文件到C++代码的转换规则包括系统组件转换规则、进程组件转换规则、线程组件转换规则、数据组件转换规则、以及子程序组件转换规则;基于所述转换规则,解析所述AADL模型文件包括的各个组件的属性;
步骤S3:基于预设的C++代码模板及所述AADL模型文件包括的各个组件的解析结果,生成与所述AADL模型文件对应的C++代码。
所述AADL模型文件能够通过直接获取的方式或基于第三方工具的方式进行获取。所述直接获取是指根据AADL语言的规范,直接编写的AADL模型文件。所述基于第三方工具的方式是指将构建完成的第一AADL模型文件导入第三方工具,例如OSATE工具,获取所述AADL模型,再基于OSATE平台的解析器,确定所述AADL模型中各组件和连接关系,对所述AADL模型进行解析。即将所述第一AADL模型文件通过OSATE开发环境实例化,将所述第一AADL模型文件转化为所述AADL模型文件。本实施例,通过直接获取AADL模型文件,或通过所述第三方工具将原始的AADL模型文件实例化,得到待转化的所述AADL模型文件。
进一步地,本实施例确定转化后的C++代码,即系统代码的存储根目录路径,在将系统代码存储于相应的存储路径。以所述系统的工程名称为PX4为例,确定的存储根目录为/home/gen/,则将PX4工程生成的代码存储于/home/gen/PX4/。所述工程根目录为后续转化后的C++代码文件的顶层目录。
所述步骤S1,其中,所述系统组件为所述AADL模型文件对应的AADL模型的最顶层组件;所述系统组件包含一个或者多个进程组件,每个进程组件表示受保护的地址空间;所述进程组件必须至少包含一个线程组件,每个线程包括类型声明和类型实现两部分;所述线程组件的实现包括子程序组件和数组组件,所述数组组件表示静态数据和数据类型;所述子程序组件表示能够被调用的代码单元,具有参数、操作数据或者能够为调用者提供服务。
所述步骤S2:构建AADL模型文件到C++代码的转换规则,所述AADL模型文件到C++代码的转换规则包括系统组件转换规则、进程组件转换规则、线程组件转换规则、数据组件转换规则、以及子程序组件转换规则;基于所述转换规则,解析所述AADL模型文件包括的各个组件的属性,其中:
所述系统组件为所述AADL模型文件对应的AADL模型的最顶层组件。系统组件必须有一个类型声明和类型实现。系统组件的类型声明以AADL语言的关键字 system和end来定义;系统组件的类型实现以AADL语言的关键字 system implementation 和end来定义。每个系统组件类型声明的名称和类型实现的名称保持一致,并且所述系统组件类型实现的命名按照*.impl的形式,*为对应的组件类型声明的名称。
如下所示,声明了一个名称为systemTypeID的系统组件,并且实现了一个名称为systemTypeID.impl的系统组件。system systemTypeID
end systemTypeID;
system implementation systemTypeID.impl
end systemTypeID.impl;
所述系统组件转换规则为:
步骤S211:对系统组件,将所述系统组件转换为一个文件夹,该文件夹的名称与系统组件类型声明的名称一致。
即采用system关键字定义的组件声明的名称,例如systemTypeID。
步骤S212:在所述系统组件转换的文件夹下,生成一个命名为modules的文件夹,用于存放系统组件包括的各个进程组件生成的代码。
本实施例中,所述系统组件包含一个或者多个进程组件,每个进程组件表示受保护的地址空间。每个进程组件在代码生成时,对应modules的文件夹下的一个子文件夹,该文件夹的名称与进程组件的名称一致;modules的文件夹下面的子文件夹个数与该系统组件包含的进程个数一致。例如对于进程A,转换成的两个文件分别为/modules/A/process_A_main.hpp和/modules/A/process_A_main.cpp。
如图5所示,所述进程组件的转换规则为:
步骤S221:在modules文件夹下,建立与进程组件一一对应的子文件夹,所述子文件夹的名称与所述进程组件的名称一致;modules文件夹下的子文件夹个数与所述系统组件包含的进程组件个数一致;
步骤S222:解析所述进程组件,在所述进程组件对应的子文件夹中,生成两个文件,分别是*.hpp和*.cpp文件;所述*.hpp文件包括所述进程组件对应的进程内的线程所共享的数据和函数的声明、所述进程组件所包含的线程组件实现的主类、以及与所述进程组件相关的头文件引用;
步骤S223:若所述进程组件中具有特征(features)项,则在所述*.hpp文件中增加所述进程组件对外发布的消息函数的代码;
步骤S224:若所述进程组件中具有属性(property)项,则在所述*.hpp文件中增加所述进程组件的与属性处理相关的函数的代码;
本实施例中,所述属性包括内存运行时与保护相关、与源文件相关、与源代码加载时间相关、与调度协议相关、与绑定时间相关的属性。
步骤S225:在文件*.cpp中生成*.hpp中定义的所有函数,每个函数的具体实现代码设置为空;*为通配符,替换为其对应的进程组件的名称。
进程组件必须至少包含一个线程组件。每个线程包括类型声明和类型实现两部分。
如图6所示,所述线程组件的转换规则为:
步骤S231:解析线程组件类型声明,为每个线程组件对应生成两个文件*.hpp和*.cpp,文件名与所述线程组件的名称相同;将与所述线程组件对应的所述两个文件存储于所述线程组件对应的进程组件对应的子文件夹下;
步骤S232:在该线程组件的*.hpp文件中,生成该线程组件对应的主类(class)定义,以及所述主类的构造函数和析构函数的定义;
步骤S233:若所述线程组件的声明中具有特征(features)关键词定义的函数,则在该线程组件的*.hpp文件中,在该线程组件对应的公有函数中增加对应的静态函数定义;
步骤S234:若所述线程组件中具有属性项,根据所述线程组件中的属性项设置该线程组件的*.hpp中主类的继承属性和命名空间的参数值;所述线程组件中的属性项能够标识所述线程组件的功能的实现方式;所述实现方式若为基于智能算法实现,则基于属性值获取实现所述智能算法的功能模块的引用,所述引用用于表征所述智能算法的功能模块的路径,并在生成与所述AADL模型文件对应的C++代码时,用于指示动态加载实现所述智能算法的功能模块;
智能控制系统的特点是该控制系统包含了深度学习算法等训练出来的模型,该模型可以作为代码生成的一部分,在线程组件中,通过插入引用的方式,基于定义好的接口,引用实现智能算法的功能模块。因此,本发明中,在将AADL模型中的线程组件进行转化时,获取标识所述线程组件的功能的实现方式的属性项,所述实现方式若为基于智能算法实现,则基于属性值获取实现所述智能算法的功能模块的引用,所述引用用于表征所述智能算法的功能模块的路径,并在生成与所述AADL模型文件对应的C++代码时,用于指示动态加载实现所述智能算法的功能模块。
例如,本实施例中,所述线程组件中的属性项可以描述该线程组件的功能通过智能算法实现,该功能模块通过模型插入引用的方式,即PX4::Class_inherit(“control::pos_control”,“pos_control_LSTM”),PX4飞控软件的姿态控制功能pos_control,采用LSTM网络训练的智能算法模型pos_control_LSTM实现。
本实施例中,所述线程组件中的属性项包括初始状态设定和计算状态设定。
步骤S235:解析所述线程组件的实现,所述线程组件的实现包括子程序组件和数组组件;对所述线程组件包括的子程序组件,生成C++类的私有方法参数和返回值类型;对所述线程组件包括的数组组件,生成该线程组件的*.hpp头文件中的变量或者引用方法的实例;
步骤S236:根据该线程组件的*.hpp文件中的函数定义,在该线程组件的*.cpp文件中生成对应的函数实现代码框架,函数体的实现为空;*为通配符,替换为其对应的线程组件的名称;
步骤S237:确定并记录各个线程组件的依赖和调用关系,用于代码编译。
数组组件表示系统中的静态数据和数据类型。复杂的数据结构可以采用数据组件的实现和层次化设计实现。
所述数据组件的转换规则为:
步骤S241:若所述数据组件的数据类型为C++语言支持的预定义类型,则将所述数据组件直接转换成C++语言支持的内部数据类型,例如int等。
步骤S242:若所述数据组件的数据类型对应于C++语言的自定义类型,则根据所述数据组件的定义,生成C++语言支持的自定义数据类型。
子程序组件表示可被调用的代码单元,可以带参数、操作数据或者为调用者提供服务。子程序通过calls关键字被调用。
所述子程序组件的转换规则为:
将线程组件内部的子程序组件的声明,转换为与所述子程序组件对应的线程组件对应的*.hpp文件中的一个静态函数(static),并且所述静态函数中包括所述子程序组件的变量和返回值;*为通配符,替换为其对应的线程组件的名称。
本实施例中,依次确定所述AADL模型文件中是否包括系统组件、进程组件、线程组件、数据组件、以及子程序组件,在确定包括某种类型的组件后,对该类型的组件按与该类型的组件对应的转换规则进行处理。本实施例中,基于系统组件转换规则、进程组件转换规则、线程组件转换规则、数据组件转换规则、以及子程序组件转换规则,能够解析所述AADL模型文件包括的各个组件的属性。
所述步骤S3:基于预设的C++代码模板及所述AADL模型文件包括的各个组件的解析结果,生成与所述AADL模型文件对应的C++代码,其中:
所述C++代码模板包括多种类型,即包括:系统组件代码模板、进程组件代码模板、线程组件代码模板、数据组件代码模板、以及子程序组件代码模板,分别用于融合解析后的各系统组件、各进程组件、各线程组件、各数据组件、以及各子程序组件的属性,以生成对应的C++代码。
所述C++代码模板是由静态文本和占位符组成的文件,所述静态文本是直接输出到C++代码文件中的文本;所述点位符的格式与各类型模板表征的组件类型相对应,所述占位符由所述ADDL模型中解析出的内容进行替换;替换后的内容输出到C++代码文件中。所述C++代码模板实际上是各种转换规则的载体。
进一步地,配置目标平台参数,所述目标平台为转化后的C++代码运行的硬件平台,在所述目标平台上配置参数,目的在于确定转化后的C++代码与所述目标平台兼容。基于生成的C++代码,将所述C++代码保存于指定文件,在所述根目录下生成所有的C++代码文件。
以下结合图7,说明本发明的实施方式。
根据本发明实施例所述的一种智能控制系统代码自动生成方法及装置,本实施例的目标平台为Pixhawk平台,基于Pixhawk平台的硬件系统,以及对应的PX4开源软件架构,以AADL模型构建运行于Pixhawk平台的硬件系统之上的PX4软件系统,为了后续使用需要,需要将所述AADL模型转化为C++代码。包括步骤:
步骤1:导入Pixhawk系统模型。
导入Pixhawk系统模型,对Pixhawk系统模型进行软硬件一体化建模,明确系统的软硬件需求。其中,硬件模型是与Pixhawk平台对应的硬件相关参数和链接关系;软件模型是运行在该平台的PX4软件系统,也是自动生成代码的AADL模型。
步骤2:设计软件组件模型。
根据映射规则,需要对模型的软件组件进行详细设计,以生成C++代码,主要对进程组件、线程组件、数据组件以及子程序组件进行详细设计,并根据设计需求,对组件的映射规则属性进行设置,同时设置组件的引用文件,其中AADL模型生成C++代码的框架,通过引用文件,填充模型的实现,例如指定子程序入口,引用安全的C++实现,来自动生成C++代码。
步骤3:实例化模型。
通过AADL描述系统模型后,需要对模型进行实例化,将实例化模型提供给Code_Gen插件去做代码生成。实例化模型为后缀名为aaxl2的文件,该方法通过解析aaxl2文件,提取模型信息,并提供给代码转换模板。
步骤4:调用Code_Gen插件,生成C++代码。
所述Code_Gen插件实现将AADL模型文件自动转换到C++代码,即将AADL模型解析后,根据提供的C++转换规则,生成转换模板,输入到模板引擎,最终输出C++代码。
调用Code_Gen插件,先确定工程根路径,判断要生成的软件的系统组件是否存在,并根据系统组件中的属性约束,生成工程目录的一二级目录,分别存储工程的底层驱动文件和自定义的进程模块文件。
分析完系统组件后,查看系统组件内部的进程组件,进程组件主要用于生成工程的进程模块文件夹,通过解析进程组件,确定工程所包含的所有进程模块,用于实现软件的全部功能。
判断进程组件的实现是否包含线程组件,并根据线程名,转换为进程的主类,线程组件内部可转换为主类的公有和私有的方法和变量,通过转换规则,对详细设计的AADL模型进行一致性的转换,判断线程组件内部的子程序和数据组件,并根据转换规则,实现AADL到C++代码的生成。
在处理完一个进程的类型和实现后,判断是否包含其他的进程,并按照逻辑对所有的进程组件做处理。
最终生成C++代码。最终生成的工程和进程模块内相关的文件,包括*.hpp和*.cpp,以及CMakeLists.txt文件。
步骤5:执行make指令,最终生成可执行文件。
生成的PX4工程文件,支持调用PX4的工具链执行编译,并最终生成可执行文件。
图8为本发明一个实施方式的智能控制系统代码自动生成装置的结构示意图,如图8所示,所述装置包括:
所述装置包括:
解析模块:配置为解析AADL模型文件,从所述AADL模型文件中提取所述AADL模型文件包括的各个组件及属性约束,所述组件包括系统组件、进程组件、线程组件、数据组件、以及子程序组件;解析提取的所述组件及属性约束;
转换模块:配置为构建AADL模型文件到C++代码的转换规则,所述AADL模型文件到C++代码的转换规则包括系统组件转换规则、进程组件转换规则、线程组件转换规则、数据组件转换规则、以及子程序组件转换规则;基于所述转换规则,解析所述AADL模型文件包括的各个组件的属性;
代码生成模块:配置为基于预设的C++代码模板及所述AADL模型文件包括的各个组件的解析结果,生成与所述AADL模型文件对应的C++代码;
所述智能控制系统是指包含了智能算法的控制类系统。
本发明实施例进一步给出一种系统,包括:
处理器,用于执行多条指令;
存储器,用于存储多条指令;
其中,所述多条指令,用于由所述存储器存储,并由所述处理器加载并执行如前所述的方法。
本发明实施例进一步给出一种计算机可读存储介质,所述存储介质中存储有多条指令;所述多条指令,用于由处理器加载并执行如前所述的方法。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,实体机服务器,或者网络云服务器等,需安装Windows或者Windows Server操作系统)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (8)
1.一种智能控制系统代码自动生成方法,其特征在于,所述方法包括以下步骤:
步骤S1:解析AADL模型文件,从所述AADL模型文件中提取所述AADL模型文件包括的各个组件及属性约束,所述组件包括系统组件、进程组件、线程组件、数据组件、以及子程序组件;解析提取的所述组件及属性约束;
步骤S2:构建AADL模型文件到C++代码的转换规则,所述AADL模型文件到C++代码的转换规则包括系统组件转换规则、进程组件转换规则、线程组件转换规则、数据组件转换规则、以及子程序组件转换规则;基于所述转换规则,解析所述AADL模型文件包括的各个组件的属性;
步骤S3:基于预设的C++代码模板及所述AADL模型文件包括的各个组件的解析结果,生成与所述AADL模型文件对应的C++代码;
所述智能控制系统是指包含了智能算法的控制类系统。
2.如权利要求1所述的方法,其特征在于,所述步骤S1,所述系统组件为所述AADL模型文件对应的AADL模型的最顶层组件;所述系统组件包含一个或者多个进程组件,每个进程组件表示受保护的地址空间;所述进程组件必须至少包含一个线程组件,每个线程组件包括类型声明和类型实现两部分;所述线程组件的实现包括子程序组件和数组组件,所述数组组件表示静态数据和数据类型;所述子程序组件表示能够被调用的代码单元,具有参数、操作数据或者能够为调用者提供服务功能。
3.如权利要求2所述的方法,其特征在于,所述系统组件转换规则为:
步骤S211:对系统组件,将所述系统组件转换为一个文件夹,该文件夹的名称与系统组件类型声明的系统组件名称一致;
步骤S212:在所述系统组件转换的文件夹下,生成一个命名为modules的文件夹,用于存放系统组件包括的各个进程组件生成的代码。
4.如权利要求3所述的方法,其特征在于,所述进程组件的转换规则为:
步骤S221:在modules文件夹下,建立与当前系统组件所包含的进程组件一一对应的子文件夹,所述子文件夹的名称与所述进程组件的名称一致;modules文件夹下的子文件夹个数与所述系统组件包含的进程组件个数一致;
步骤S222:解析所述进程组件,在所述进程组件对应的子文件夹中,生成两个文件,分别是“*.hpp”和“*.cpp”文件;所述*.hpp文件包括所述进程组件对应的进程内的线程所共享的数据和函数的声明、所述进程组件所包含的线程组件实现的主类、以及与所述进程组件相关的头文件引用;
步骤S223:若所述进程组件中具有特征项,则在所述*.hpp文件中增加所述进程组件对外发布的消息函数的代码;
步骤S224:若所述进程组件中具有属性项,则在所述*.hpp文件中增加所述进程组件的与属性处理相关的函数的代码;
步骤S225:在文件*.cpp中生成*.hpp中定义的所有函数,每个函数的具体实现代码设置为空;“*”为通配符,替换为其对应的进程组件的名称。
5.如权利要求4所述的方法,其特征在于,所述线程组件的转换规则为:
步骤S231:解析线程组件类型声明,为每个线程组件对应生成两个文件“*.hpp”和“*.cpp”,文件名与所述线程组件的名称相同,“*”为通配符,替换为其对应的线程组件的名称;将与所述线程组件对应的所述两个文件存储于所述线程组件对应的进程组件对应的子文件夹下;
步骤S232:在该线程组件的*.hpp文件中,生成该线程组件对应的主类(class)定义,以及所述主类的构造函数和析构函数的定义;
步骤S233:若所述线程组件的声明中具有特征(features)关键词定义的函数,则在该线程组件的*.hpp文件中,在该线程组件对应的公有函数中增加对应的静态函数定义;
步骤S234:若所述线程组件中具有属性项,根据所述线程组件中的属性项设置该线程组件的*.hpp中主类的继承属性和命名空间的参数值;所述线程组件中的属性项能够标识所述线程组件的功能的实现方式;所述实现方式若为基于智能算法实现,则基于属性值获取实现所述智能算法的功能模块的引用,所述引用用于表征所述智能算法的功能模块的路径,并在生成与所述AADL模型文件对应的C++代码时,用于指示动态加载实现所述智能算法的功能模块;
步骤S235:解析所述线程组件的实现,所述线程组件的实现包括子程序组件和数组组件;对所述线程组件包括的子程序组件,生成C++类的私有方法参数和返回值类型;对所述线程组件包括的数组组件,生成该线程组件的*.hpp头文件中的变量或者引用方法的实例;
步骤S236:根据该线程组件的*.hpp文件中的函数定义,在该线程组件的*.cpp文件中生成对应的函数实现代码框架,函数体的实现为空;*为通配符,替换为其对应的线程组件的名称;
步骤S237:确定并记录各个线程组件的依赖和调用关系,用于代码编译。
6.如权利要求5所述的方法,其特征在于,所述数据组件的转换规则为:
步骤S241:若所述数据组件的数据类型为C++语言支持的预定义类型,则将所述数据组件直接转换成C++语言支持的内部数据类型;
步骤S242:若所述数据组件的数据类型对应于C++语言的自定义类型,则根据所述数据组件的定义,生成C++语言支持的自定义数据类型。
7.如权利要求6所述的方法,其特征在于,所述子程序组件的转换规则为:
将线程组件内部的子程序组件的声明,转换为与所述子程序组件对应的线程组件对应的*.hpp文件中的一个静态函数,并且所述静态函数中包括所述子程序组件的变量和返回值;*为通配符,替换为其对应的线程组件的名称。
8.一种智能控制系统代码自动生成装置,其特征在于,所述装置包括:
解析模块:配置为解析AADL模型文件,从所述AADL模型文件中提取所述AADL模型文件包括的各个组件及属性约束,所述组件包括系统组件、进程组件、线程组件、数据组件、以及子程序组件;解析提取的所述组件及属性约束;
转换模块:配置为构建AADL模型文件到C++代码的转换规则,所述AADL模型文件到C++代码的转换规则包括系统组件转换规则、进程组件转换规则、线程组件转换规则、数据组件转换规则、以及子程序组件转换规则;基于所述转换规则,解析所述AADL模型文件包括的各个组件的属性;
代码生成模块:配置为基于预设的C++代码模板及所述AADL模型文件包括的各个组件的解析结果,生成与所述AADL模型文件对应的C++代码;
所述智能控制系统是指包含了智能算法的控制类系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210664227.0A CN114756213B (zh) | 2022-06-14 | 2022-06-14 | 一种智能控制系统代码自动生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210664227.0A CN114756213B (zh) | 2022-06-14 | 2022-06-14 | 一种智能控制系统代码自动生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114756213A true CN114756213A (zh) | 2022-07-15 |
CN114756213B CN114756213B (zh) | 2022-08-12 |
Family
ID=82337132
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210664227.0A Active CN114756213B (zh) | 2022-06-14 | 2022-06-14 | 一种智能控制系统代码自动生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114756213B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114995809A (zh) * | 2022-07-21 | 2022-09-02 | 军事科学院系统工程研究院网络信息研究所 | 一种可证明的高安全软件构造方法及系统 |
CN116048518A (zh) * | 2022-11-14 | 2023-05-02 | 南京航空航天大学 | 一种面向天脉操作系统的综合化航空电子系统安全代码自动生成方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101739258A (zh) * | 2010-01-13 | 2010-06-16 | 电子科技大学 | Aadl模型的自动代码生成方法 |
JP2012185542A (ja) * | 2011-03-03 | 2012-09-27 | Denso Corp | コード生成装置、及びコード生成プログラム |
CN104932905A (zh) * | 2015-07-14 | 2015-09-23 | 北京神舟航天软件技术有限公司 | 一种aadl到c语言的代码自动生成方法 |
CN110597498A (zh) * | 2019-03-04 | 2019-12-20 | 南京航空航天大学 | AADL模型精化方法及其支持的Ada可执行代码自动生成方法 |
-
2022
- 2022-06-14 CN CN202210664227.0A patent/CN114756213B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101739258A (zh) * | 2010-01-13 | 2010-06-16 | 电子科技大学 | Aadl模型的自动代码生成方法 |
JP2012185542A (ja) * | 2011-03-03 | 2012-09-27 | Denso Corp | コード生成装置、及びコード生成プログラム |
CN104932905A (zh) * | 2015-07-14 | 2015-09-23 | 北京神舟航天软件技术有限公司 | 一种aadl到c语言的代码自动生成方法 |
CN110597498A (zh) * | 2019-03-04 | 2019-12-20 | 南京航空航天大学 | AADL模型精化方法及其支持的Ada可执行代码自动生成方法 |
Non-Patent Citations (1)
Title |
---|
刘雪琴等: ""AADL模型代码自动生成技术研究"", 《计算机应用研究》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114995809A (zh) * | 2022-07-21 | 2022-09-02 | 军事科学院系统工程研究院网络信息研究所 | 一种可证明的高安全软件构造方法及系统 |
CN114995809B (zh) * | 2022-07-21 | 2022-09-30 | 军事科学院系统工程研究院网络信息研究所 | 一种可证明的高安全软件构造方法及系统 |
CN116048518A (zh) * | 2022-11-14 | 2023-05-02 | 南京航空航天大学 | 一种面向天脉操作系统的综合化航空电子系统安全代码自动生成方法 |
CN116048518B (zh) * | 2022-11-14 | 2023-12-01 | 南京航空航天大学 | 一种面向天脉操作系统的综合化航空电子系统安全代码自动生成方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114756213B (zh) | 2022-08-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114756213B (zh) | 一种智能控制系统代码自动生成方法及装置 | |
Garlan et al. | Acme: An architecture description interchange language | |
US7970601B2 (en) | Method of creating a requirement description for testing an embedded system | |
US9965259B2 (en) | System for translating diverse programming languages | |
EP2546738A1 (en) | Systems and methods for verifying model equivalence | |
CN108037913B (zh) | xUML4MC模型到MSVL语言程序的转换方法、计算机可读存储介质 | |
US20070006134A1 (en) | Data processing method compatible with an object modeling formalism | |
CN114840196A (zh) | Modelica语言模型处理方法、设备和存储介质 | |
Drath | AutomationML: the industrial cookbook | |
CN110109658B (zh) | 一种基于形式化模型的ros代码生成器及代码生成方法 | |
Yang et al. | C2AADL_Reverse: A model-driven reverse engineering approach to development and verification of safety-critical software | |
Dalibor et al. | Mind the gap: lessons learned from translating grammars between MontiCore and Xtext | |
Bucaioni et al. | From amalthea to rcm and back: a practical architectural mapping scheme | |
Mazzocca et al. | MetaPL: A notation system for parallel program description and performance analysis | |
Cosentino et al. | A model-driven approach to generate external dsls from object-oriented apis | |
KR100576941B1 (ko) | 메타모델에 기반한 모델 변환 지원 시스템 | |
Vasaiely | Interactive simulation of sysml models using modelica | |
CN115712420B (zh) | 一种基于复杂实时嵌入式系统的架构设计与架构转换方法 | |
CN117648833B (zh) | Simulink到SysML的模型生成方法和装置 | |
SEMPREBON | Model based robot development: From AADL to ROS through code generation | |
Kara | Design and implementation of the modelicaml code generator using acceleo 3. x | |
CN117971179A (zh) | 一种符合autosar标准的c语言代码自动生成方法 | |
Leitner et al. | Lightweight introduction of EAST-ADL2 in an automotive software product line | |
Dobrica | Exploring approaches of integration software architecture modeling with quality analysis models | |
Valente et al. | Extension of the Modeling Tool Suite for Development of Embedded Systems for the Space Domain |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |