CN112667242A - 一种将c代码封装成fmu的方法及装置 - Google Patents

一种将c代码封装成fmu的方法及装置 Download PDF

Info

Publication number
CN112667242A
CN112667242A CN202011597097.0A CN202011597097A CN112667242A CN 112667242 A CN112667242 A CN 112667242A CN 202011597097 A CN202011597097 A CN 202011597097A CN 112667242 A CN112667242 A CN 112667242A
Authority
CN
China
Prior art keywords
code
packaged
file
cpp
fmu
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
Application number
CN202011597097.0A
Other languages
English (en)
Other versions
CN112667242B (zh
Inventor
张桥
李京燕
何子中
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Shi Guan Jin Yang Technology Development Co ltd
Original Assignee
Beijing Shi Guan Jin Yang Technology Development Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Shi Guan Jin Yang Technology Development Co ltd filed Critical Beijing Shi Guan Jin Yang Technology Development Co ltd
Priority to CN202011597097.0A priority Critical patent/CN112667242B/zh
Publication of CN112667242A publication Critical patent/CN112667242A/zh
Application granted granted Critical
Publication of CN112667242B publication Critical patent/CN112667242B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/70Reducing energy consumption in communication networks in wireless communication networks

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种将C代码封装成FMU的方法及装置,所述方法包括:在接收到封装请求的情况下,获取所述封装请求中包含的待封装C代码;基于FMI标准接口将所述待封装C代码封装为动态链接库文件;基于预设的描述性模板生成与所述待封装C代码对应的描述性文件;对所述动态链接库文件和所述描述性文件进行打包,得到FMU。上述过程中,将待封装C代码基于FMI标准接口进行封装,基于FMI标准中的对应接口获取待封装C代码中的输出结果,由于预先对待封装C代码进行封装,输出结果的获取不再受FMU中代码形式的限制,在联合仿真过程中,即使基于C代码编写相关模块,采用上述方法封装成FMU后,也可以实现联合仿真。

Description

一种将C代码封装成FMU的方法及装置
技术领域
本发明涉及数据处理技术领域,尤其涉及一种将C代码封装成FMU的方法及装置。
背景技术
传统的情况下,多个部门协作可能要使用统一的建模工具,当用户希望编写更加灵活的算法或使用已有成熟算法时,建模工具可能不能满足用户的需求。就会出现系统的不同模块,使用工具可能不统一,例如某些算法是通过C代码实现的。
用户希望将各个模块联合仿真,以验证各个模块集成后整体运行情况时,由于某些模块基于C代码实现,导致不能实现联合仿真。
发明内容
有鉴于此,本发明提供了一种将C代码封装成FMU的方法及装置,用以解决现有技术中用户希望将各个模块联合仿真,以验证各个模块集成后整体运行情况时,由于某些模块基于C代码实现,导致不能实现联合仿真问题。具体方案如下:
一种将C代码封装成FMU的方法,包括:
在接收到封装请求的情况下,获取所述封装请求中包含的待封装C代码;
基于FMI标准接口将所述待封装C代码封装为动态链接库文件;
基于预设的描述性模板生成与所述待封装C代码对应的描述性文件;
对所述动态链接库文件和所述描述性文件进行打包,得到FMU。
上述的方法,可选的,基于FMI标准接口将所述待封装C代码封装为动态链接库文件,包括:
将所述待封装C代码的用户算法进行封装,得到业务Cpp;
将预设的FMI模板文件与目标Cpp文件中的对应接口建立关联,其中,所述目标Cpp文件用于调用所述业务Cpp;
基于预设的编译器对所述业务Cpp、所述预设的FMI模板文件和所述目标Cpp文件进行编译,得到动态链接库文件。
上述的方法,可选的,将所述待封装C代码的用户算法进行封装,得到业务Cpp,包括:
读取所述待封装C代码中参数,将所述参数添加到Init(param)中;
读取所述待封装C代码中的输入单数,将所述输入参数添加到SetValue(param)中;
读取所述待封装C代码中的运算逻辑,将所述运算逻辑添加到DoStep()中;
读取所述待封装C代码中的输出结果,将所述输出结果基于GetValue()反馈。
上述的方法,可选的,基于预设的描述性模板生成与所述待封装C代码对应的描述性文件,包括:
获取所述预设的描述性模板中包含的各个参数,其中,所述各个参数至少包括:FMU基本属性、ModelExchange和CoSimulation节至少一个、ModelVariables节和ModelStructure节;
设置所述FMU基本属性中的GUID;
对所述业务Cpp进行解析,获取与所述ModelVariables节和所述ModelStructure节相关联的参数,将所述参数添加到所述ModelVariables节和所述ModelStructure节。
上述的方法,可选的,所述FMU中还包括:Model.png、Documentation、Sources和Resources中的至少一个。
一种将C代码封装成FMU的装置,包括:
获取模块,用于在接收到封装请求的情况下,获取所述封装请求中包含的待封装C代码;
封装模块,用于基于FMI标准接口将所述待封装C代码封装为动态链接库文件;
生成模块,用于基于预设的描述性模板生成与所述待封装C代码对应的描述性文件;
打包模块,用于对所述动态链接库文件和所述描述性文件进行打包,得到FMU。
上述的装置,可选的,所述封装模块包括:
封装单元,用于将所述待封装C代码的用户算法进行封装,得到业务Cpp;
关联单元,用于将预设的FMI模板文件与目标Cpp文件中的对应接口建立关联,其中,所述目标Cpp文件用于调用所述业务Cpp;
编译单元,用于基于预设的编译器对所述业务Cpp、所述预设的FMI模板文件和所述目标Cpp文件进行编译,得到动态链接库文件。
上述的装置,可选的,所述封装单元包括:
第一读取子单元,用于读取所述待封装C代码中参数,将所述参数添加到Init(param)中;
第二读取子单元,用于读取所述待封装C代码中的输入单数,将所述输入参数添加到SetValue(param)中;
第三读取子单元,用于读取所述待封装C代码中的运算逻辑,将所述运算逻辑添加到DoStep()中;
第四读取子单元,用于读取所述待封装C代码中的输出结果,将所述输出结果基于GetValue()反馈。
上述的装置,可选的,所述生成模块包括:
获取单元,用于获取所述预设的描述性模板中包含的各个参数,其中,所述各个参数至少包括:FMU基本属性、ModelExchange和CoSimulation节至少一个、ModelVariables节和ModelStructure节;
设置单元,用于设置所述FMU基本属性中的GUID;
获取和添加单元,用于对所述业务Cpp进行解析,获取与所述ModelVariables节和所述ModelStructure节相关联的参数,将所述参数添加到所述ModelVariables节和所述ModelStructure节。
上述的装置,可选的,所述FMU中还包括:Model.png、Documentation、Sources和Resources中的至少一个。
与现有技术相比,本发明包括以下优点:
本发明公开了一种将C代码封装成FMU的方法及装置,所述方法包括:在接收到封装请求的情况下,获取所述封装请求中包含的待封装C代码;基于FMI标准接口将所述待封装C代码封装为动态链接库文件;基于预设的描述性模板生成与所述待封装C代码对应的描述性文件;对所述动态链接库文件和所述描述性文件进行打包,得到FMU。上述过程中,将待封装C代码基于FMI标准接口进行封装,基于FMI标准中的对应接口获取待封装C代码中的输出结果,由于预先对待封装C代码进行封装,输出结果的获取不再受FMU中代码形式的限制,在联合仿真过程中,即使基于C代码编写相关模块,采用上述方法封装成FMU后,也可以实现联合仿真。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例公开的一种FMU的结构示意图;
图2为本申请实施例公开的一种将C代码封装成FMU的方法流程图;
图3为本申请实施例公开的一种业务Cpp调用过程示意图;
图4为本申请实施例公开的一种将C代码封装成FMU的装置结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
本发明公开了一种将C代码封装成FMU的方法及装置,应用于对C代码进行封装的过程中,现有技术中,用户希望将各个模块联合仿真,以验证各个模块集成后整体运行情况时,由于某些模块基于C代码实现,导致不能实现联合仿真,基于上述的问题,本发明提供了一种将C代码封装成FMU的方法,其中,所述FMU的结构如图1所示,所述FMU包括:ModelDescription.xml、Model.png、Documentation、Sources、Binnaries和Resources,其中,
所述ModelDescription.xml:包含了FMU的一些基本属性说明,和FMU的输入变量、输出变量、参数。
所述Model.png:fmu显示图片,可选
所述Documentation:fmu的说明文档,可选
所述Sources:fmu的源代码,可选,跨平台需要重新编译的情况可能需要提供源代码。
所述Binnaries:fmu的各平台的库文件,一般应该至少包含一个平台的库文件(window平台.dll文件,linux平台.so)
所述Resources:fmu用到的资源文件,可选
其中,其中binaries的库文件和modelDescription.xml描述文件是必须的。打包成的FMU至少要包含这两项。
所述方法的执行流程如图2所示,包括步骤:
S101、在接收到封装请求的情况下,获取所述封装请求中包含的待封装C代码;
本发明实施例中,在接收到封装请求的情况下,解析所述封装请求中,获取所述封装请求中包含待封装C代码。
S102、基于FMI标准接口将所述待封装C代码封装为动态链接库文件;
本发明实施例中,获取所述待封装C代码的用户算法,对所述用户算法进行封装,得到业务Cpp,封装用户算法,包含Init(param)、SetValue(param)、DoStep()、GetValue()方法。封装过程如下:
读取所述待封装Cpp中的参数,读取输入,进行运算,输出结果到文件。
其中,
读取参数对应添加到Init(param)里。
把读取输入对应添加到SetValue(param),外部可通过param传递输入变量进入模型内部。
运算模块对应的逻辑添加到DoStep()里
运算完输出结果,对应通过GetValue()反馈到外部。
封装完成后,将预设的FMI模板文件与目标Cpp文件中的对应接口建立关联,其中,所述目标Cpp文件用于调用所述业务Cpp,所述预设的FMI模板文件Template.c,Template.c模板文件提供FMI标准接口包括:fmiInstantiateSlave,fmiFreeSlaveInstance,fmiInitializeSlave,fmiDoStep和fmiGetReal。
所述目标Cpp包括:void*constructor(void)、void destructor(fmiComponentexternalObject)、void initialize(ModelInstance*comp,fmiEventInfo*eventInfo)、fmiReal DoStep(ModelInstance*comp,fmiRealcurrentCommunicationPoint,fmiRealcommunicationStepSize,fmiBoolean newStep)和fmiReal getReal(ModelInstance*comp,fmiValueReference vr)。优选的,所述目标Cpp与所述业务Cpp的名称相同,所述预设的FMI模板文件与所述目标Cpp中各项的对应关系如下:fmiInstantiateSlave与void*constructor(void)相对应,fmiFreeSlaveInstance与void destructor(fmiComponentexternalObject)对应,fmiInitializeSlave和void initialize(ModelInstance*comp,fmiEventInfo*eventInfo)对应,fmiDoStep和fmiReal DoStep(ModelInstance*comp,fmiReal currentCommunicationPoint,fmiReal communicationStepSize,fmiBooleannewStep)对应,fmiGetReal和fmiReal getReal(ModelInstance*comp,fmiValueReferencevr)对应。
所述目标Cpp调用所述业务Cpp基于预设的映射表进行调用,其中,所述预设的映射表用于限定所述目标Cpp和所述业务Cpp两者之间参数调用的对应关系,所述预设的映射表可以基于经验或者具体情况进行设定,本发明实施例中,对所述预设的映射表的具体存在形式不进行限定。基于所述目标Cpp调用所述业务Cpp的过程如图3所示,预先基于Init()进行初始化,初始化完成后,所述目标Cpp将输入传递给SetValue()<输入>,基于DoStep()<运算>,运算完成后,通过GetValue()<反馈输出>,将最终的输出结果反馈给所述目标Cpp。
优选的,预先定义好用户算法与外部进行数据交换的数据机构,其中,所述数据结构与所述用户算法所属业务有关,例如,发动机模型输入可以是高度,马赫数,油门大小,定义输出包含一个推力,即在该条件下,指定的油门,产生对应的推力通过改结构。以c为例,输入如下所示,
Figure BDA0002866716550000071
Figure BDA0002866716550000081
所述目标Cpp文件中引用上述定义好的数据结构,便于对外进行数据交换。基于DllExport fmiStatus fmiGetReal(fmiComponent c,const fmiValueReference vr[],size_t nvr,fmiReal value[])
外部获取内部数据是通过fmiValueReference vr[]这个参数传入索引(每个参数的索引在描述文件中定义了对应索引),通过fmiReal value[]得到对应的值。
所述目标Cpp文件调用具体业务模型接口,返回定义的数据结构。并将该数据结构,赋值给指定索引的value数组。
基于预设的编译器对所述业务Cpp、所述预设的FMI模板文件和所述目标Cpp文件进行编译,得到动态链接库文件DLL,优选的,所述预设的编译器可以为微软的CL编译器。
进一步的,如果用户算法以库的形式提供,生成dll库步骤稍有不同,需要将用户提供的dll库放置在Resource文件夹,并在所述业务Cpp文件中动态加载该用户库调用用户库接口。
S103、基于预设的描述性模板生成与所述待封装C代码对应的描述性文件;
本发明实施例中,获取所述预设的描述性模板中包含的各个参数,其中,所述各个参数至少包括:FMU基本属性、ModelExchange和CoSimulation节至少一个、ModelVariables节和ModelStructure节,其中,所述ModelExchange和所述CoSimulation至少存在一个,如果ModelExchange出现说明支持ME类型,如果CoSimulation出现说明支持CS类型,ME类型:FMU包含模型,环境去提供仿真引擎,CS类型:FMU包含模型和仿真引擎。所述ModelVariables提供了输入输出变量列表,附件带有一个fmu可查看其描述文件结构。所述ModelStructure表明了的输出顺序,依赖关系等内容。基于所述预设的描述性模板生成与所述待封装C代码对应的描述性文件的过程如下:假设所述modelDescription.xml模板中提供FMU基本属性、UnitDefinitions节、CoSimulation节、空白的ModelVariables和空白ModelStruecture节。以资源所在文件夹名称设置FMU的名称,生GUID作为该FMU的GUID。通过对业务CPP文件中输入、输出、参数区域的解析,将需要暴露出的FMU输入、输出、参数等变量进行编号,并进行格式化注解,生成ModelVariables和ModelStruecture节点,得到所述待封装C代码对应的描述性文件。
上述过程的实现代码如下:
Figure BDA0002866716550000091
前一行是在定义变量的序号
后一行通过中括号分成不同的部分
[description:input signal][type:Real][variability:continuous][causality:input][start:0.0][quantity:Unitless][unit:-][displayUnit:-]
通过字符串的拆分,获取对应的值,填充到下边的描述结构中
Figure BDA0002866716550000092
Figure BDA0002866716550000101
通过预设的描述性模板中暴露的变量生成ModelVariables
Figure BDA0002866716550000102
同时根据注释,记录编号生成ModelStructure节,记录output,Initial变量的编号。
Figure BDA0002866716550000103
Figure BDA0002866716550000111
S104、对所述动态链接库文件和所述描述性文件进行打包,得到FMU。
本发明实施例中,将所述动态链接库文件和所述描述性文件modelDescription.xml按照指定结构使用7Z打包工具进行压缩打包成.fmu文件。
本发明公开了一种将C代码封装成FMU的方法,包括:在接收到封装请求的情况下,获取所述封装请求中包含的待封装C代码;基于FMI标准接口将所述待封装C代码封装为动态链接库文件;基于预设的描述性模板生成与所述待封装C代码对应的描述性文件;对所述动态链接库文件和所述描述性文件进行打包,得到FMU。上述过程中,将待封装C代码基于FMI标准接口进行封装,基于FMI标准中的对应接口获取待封装C代码中的输出结果,由于预先对待封装C代码进行封装,输出结果的获取不再受FMU中代码形式的限制,在联合仿真过程中,即使基于C代码编写相关模块,采用上述方法封装成FMU后,也可以实现联合仿真。
本发明实施例中,用户可以更加灵活的编写自己的算法。通过对客户代码做简单的接口封装,然后进行自动化的配置处理就可以生成标准的FMU,此方式沿用已有成熟算法,增加系统整体稳定性,缩短开发时间可以实现与其它模块的FMU进行联合仿真。
基于上述的一种将C代码封装成FMU的方法,本发明实施例中,还提供了一种将C代码封装成FMU的装置,所述装置的结构框图如图4所示,包括:
获取模块201、封装模块202、生成模块203和打包模块204。
其中,
所述获取模块201,用于在接收到封装请求的情况下,获取所述封装请求中包含的待封装C代码;
所述封装模块202,用于基于FMI标准接口将所述待封装C代码封装为动态链接库文件;
所述生成模块203,用于基于预设的描述性模板生成与所述待封装C代码对应的描述性文件;
所述打包模块204,用于对所述动态链接库文件和所述描述性文件进行打包,得到FMU。
本发明实施例中,所述封装模块202包括:
封装单元205、关联单元206和编译单元207。
其中,
所述封装单元205,用于将所述待封装C代码的用户算法进行封装,得到业务Cpp;
所述关联单元206,用于将预设的FMI模板文件与目标Cpp文件中的对应接口建立关联,其中,所述目标Cpp文件用于调用所述业务Cpp;
所述编译单元207,用于基于预设的编译器对所述业务Cpp、所述预设的FMI模板文件和所述目标Cpp文件进行编译,得到动态链接库文件。
本发明实施例中,所述封装单元205包括:
第一读取子单元208、第二读取子单元209、第三读取子单元210和第四读取子单元211。
其中,
所述第一读取子单元208,用于读取所述待封装C代码中参数,将所述参数添加到Init(param)中;
所述第二读取子单元209,用于读取所述待封装C代码中的输入单数,将所述输入参数添加到SetValue(param)中;
所述第三读取子单元210,用于读取所述待封装C代码中的运算逻辑,将所述运算逻辑添加到DoStep()中;
所述第四读取子单元211,用于读取所述待封装C代码中的输出结果,将所述输出结果基于GetValue()反馈。
本发明实施例中,所述生成模块203包括:
获取单元212、设置单元213和获取和添加单元214。
其中,
所述获取单元212,用于获取所述预设的描述性模板中包含的各个参数,其中,所述各个参数至少包括:FMU基本属性、ModelExchange和CoSimulation节至少一个、ModelVariables节和ModelStructure节;
所述设置单元213,用于设置所述FMU基本属性中的GUID;
所述获取和添加单元214,用于对所述业务Cpp进行解析,获取与所述ModelVariables节和所述ModelStructure节相关联的参数,将所述参数添加到所述ModelVariables节和所述ModelStructure节。
本发明实施例中,所述FMU中还包括:Model.png、Documentation、Sources和Resources中的至少一个。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本发明时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
以上对本发明所提供的一种将C代码封装成FMU的方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (10)

1.一种将C代码封装成FMU的方法,其特征在于,包括:
在接收到封装请求的情况下,获取所述封装请求中包含的待封装C代码;
基于FMI标准接口将所述待封装C代码封装为动态链接库文件;
基于预设的描述性模板生成与所述待封装C代码对应的描述性文件;
对所述动态链接库文件和所述描述性文件进行打包,得到FMU。
2.根据权利要求1所述的方法,其特征在于,基于FMI标准接口将所述待封装C代码封装为动态链接库文件,包括:
将所述待封装C代码的用户算法进行封装,得到业务Cpp;
将预设的FMI模板文件与目标Cpp文件中的对应接口建立关联,其中,所述目标Cpp文件用于调用所述业务Cpp;
基于预设的编译器对所述业务Cpp、所述预设的FMI模板文件和所述目标Cpp文件进行编译,得到动态链接库文件。
3.根据权利要求2所述的方法,其特征在于,将所述待封装C代码的用户算法进行封装,得到业务Cpp,包括:
读取所述待封装C代码中参数,将所述参数添加到Init(param)中;
读取所述待封装C代码中的输入单数,将所述输入参数添加到SetValue(param)中;
读取所述待封装C代码中的运算逻辑,将所述运算逻辑添加到DoStep()中;
读取所述待封装C代码中的输出结果,将所述输出结果基于GetValue()反馈。
4.根据权利要求1所述的方法,其特征在于,基于预设的描述性模板生成与所述待封装C代码对应的描述性文件,包括:
获取所述预设的描述性模板中包含的各个参数,其中,所述各个参数至少包括:FMU基本属性、ModelExchange和CoSimulation节至少一个、ModelVariables节和ModelStructure节;
设置所述FMU基本属性中的GUID;
对所述业务Cpp进行解析,获取与所述ModelVariables节和所述ModelStructure节相关联的参数,将所述参数添加到所述ModelVariables节和所述ModelStructure节。
5.根据权利要求1所述的方法,其特征在于,所述FMU中还包括:Model.png、Documentation、Sources和Resources中的至少一个。
6.一种将C代码封装成FMU的装置,其特征在于,包括:
获取模块,用于在接收到封装请求的情况下,获取所述封装请求中包含的待封装C代码;
封装模块,用于基于FMI标准接口将所述待封装C代码封装为动态链接库文件;
生成模块,用于基于预设的描述性模板生成与所述待封装C代码对应的描述性文件;
打包模块,用于对所述动态链接库文件和所述描述性文件进行打包,得到FMU。
7.根据权利要求6所述的装置,其特征在于,所述封装模块包括:
封装单元,用于将所述待封装C代码的用户算法进行封装,得到业务Cpp;
关联单元,用于将预设的FMI模板文件与目标Cpp文件中的对应接口建立关联,其中,所述目标Cpp文件用于调用所述业务Cpp;
编译单元,用于基于预设的编译器对所述业务Cpp、所述预设的FMI模板文件和所述目标Cpp文件进行编译,得到动态链接库文件。
8.根据权利要求7所述的装置,其特征在于,所述封装单元包括:
第一读取子单元,用于读取所述待封装C代码中参数,将所述参数添加到Init(param)中;
第二读取子单元,用于读取所述待封装C代码中的输入单数,将所述输入参数添加到SetValue(param)中;
第三读取子单元,用于读取所述待封装C代码中的运算逻辑,将所述运算逻辑添加到DoStep()中;
第四读取子单元,用于读取所述待封装C代码中的输出结果,将所述输出结果基于GetValue()反馈。
9.根据权利要求6所述的装置,其特征在于,所述生成模块包括:
获取单元,用于获取所述预设的描述性模板中包含的各个参数,其中,所述各个参数至少包括:FMU基本属性、ModelExchange和CoSimulation节至少一个、ModelVariables节和ModelStructure节;
设置单元,用于设置所述FMU基本属性中的GUID;
获取和添加单元,用于对所述业务Cpp进行解析,获取与所述ModelVariables节和所述ModelStructure节相关联的参数,将所述参数添加到所述ModelVariables节和所述ModelStructure节。
10.根据权利要求6所述的装置,其特征在于,所述FMU中还包括:Model.png、Documentation、Sources和Resources中的至少一个。
CN202011597097.0A 2020-12-28 2020-12-28 一种将c代码封装成fmu的方法及装置 Active CN112667242B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011597097.0A CN112667242B (zh) 2020-12-28 2020-12-28 一种将c代码封装成fmu的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011597097.0A CN112667242B (zh) 2020-12-28 2020-12-28 一种将c代码封装成fmu的方法及装置

Publications (2)

Publication Number Publication Date
CN112667242A true CN112667242A (zh) 2021-04-16
CN112667242B CN112667242B (zh) 2023-08-22

Family

ID=75410267

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011597097.0A Active CN112667242B (zh) 2020-12-28 2020-12-28 一种将c代码封装成fmu的方法及装置

Country Status (1)

Country Link
CN (1) CN112667242B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113238834A (zh) * 2021-05-31 2021-08-10 北京世冠金洋科技发展有限公司 仿真模型文件的处理方法、装置及电子设备
CN114721666A (zh) * 2022-04-20 2022-07-08 北京世冠金洋科技发展有限公司 一种代码封装方法及装置
CN114942757A (zh) * 2022-05-16 2022-08-26 北京世冠金洋科技发展有限公司 一种文件生成方法、系统及电子设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130198713A1 (en) * 2011-11-08 2013-08-01 The Mathworks, Inc. Code generation for control design
US20150113502A1 (en) * 2013-10-18 2015-04-23 Openpeak Inc. Method and system for encapsulation of application
CN107908830A (zh) * 2017-10-26 2018-04-13 北京动力机械研究所 基于fmi标准的模型转换方法和模型转换系统
KR20200063848A (ko) * 2018-11-28 2020-06-05 (주)사라 스프레드시트 기반 공조기 해석 방법
CN111367511A (zh) * 2020-03-02 2020-07-03 北京中科宇航技术有限公司 一种仿真模型接口适配开发系统及其工作方法
CN111552636A (zh) * 2020-04-17 2020-08-18 中国航空无线电电子研究所 一种应用fmi协议支持aadl集成仿真的方法
US20200278875A1 (en) * 2017-11-20 2020-09-03 Huawei Technologies Co., Ltd. Dynamic loading method, and target file creation method and apparatus
CN111985055A (zh) * 2020-08-28 2020-11-24 北京世冠金洋科技发展有限公司 一种模型封装方法、装置及电子设备

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130198713A1 (en) * 2011-11-08 2013-08-01 The Mathworks, Inc. Code generation for control design
US20150113502A1 (en) * 2013-10-18 2015-04-23 Openpeak Inc. Method and system for encapsulation of application
CN107908830A (zh) * 2017-10-26 2018-04-13 北京动力机械研究所 基于fmi标准的模型转换方法和模型转换系统
US20200278875A1 (en) * 2017-11-20 2020-09-03 Huawei Technologies Co., Ltd. Dynamic loading method, and target file creation method and apparatus
KR20200063848A (ko) * 2018-11-28 2020-06-05 (주)사라 스프레드시트 기반 공조기 해석 방법
CN111367511A (zh) * 2020-03-02 2020-07-03 北京中科宇航技术有限公司 一种仿真模型接口适配开发系统及其工作方法
CN111552636A (zh) * 2020-04-17 2020-08-18 中国航空无线电电子研究所 一种应用fmi协议支持aadl集成仿真的方法
CN111985055A (zh) * 2020-08-28 2020-11-24 北京世冠金洋科技发展有限公司 一种模型封装方法、装置及电子设备

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
DEVIN YANG: "Functional Mock-up Interface(FMI) 概述", Retrieved from the Internet <URL:https://zhuanlan.zhihu.com/p/149530177> *
宋华振: "FMU/FMI", pages 3, Retrieved from the Internet <URL:http://www.uml.org.cn/modeler/202003314.as> *
胡峻豪;冯雷;朱睿;李荣强;: "支持MBSE的系统全过程设计应用框架研究与实现", 航空制造技术, no. 13 *
苏一博等: "基于FMI的功能模拟单元创建与仿真分析", Retrieved from the Internet <URL:https://www.fx361.com/page/2019/1020/5866664.shtml> *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113238834A (zh) * 2021-05-31 2021-08-10 北京世冠金洋科技发展有限公司 仿真模型文件的处理方法、装置及电子设备
CN113238834B (zh) * 2021-05-31 2023-08-08 北京世冠金洋科技发展有限公司 仿真模型文件的处理方法、装置及电子设备
CN114721666A (zh) * 2022-04-20 2022-07-08 北京世冠金洋科技发展有限公司 一种代码封装方法及装置
CN114942757A (zh) * 2022-05-16 2022-08-26 北京世冠金洋科技发展有限公司 一种文件生成方法、系统及电子设备

Also Published As

Publication number Publication date
CN112667242B (zh) 2023-08-22

Similar Documents

Publication Publication Date Title
KR101314949B1 (ko) 통합 환경 생성기
CN112667242B (zh) 一种将c代码封装成fmu的方法及装置
CN107273117B (zh) 一种编程友好型的敏捷代码自动生成系统
CN106663002B (zh) Rest服务源代码生成
US20030221184A1 (en) Template-based application development system
US9038017B2 (en) Method and system for facilitating rapid development of end-to-end software applications
CN110912724A (zh) 一种基于参数驱动的自动业务编排方法及装置
CN111290778A (zh) Ai模型的包装方法、平台及电子设备
US20170242665A1 (en) Generation of hybrid enterprise mobile applications in cloud environment
Naily et al. A framework for modelling variable microservices as software product lines
CN111985055A (zh) 一种模型封装方法、装置及电子设备
CN112860260A (zh) 一种在高校场景下基于web的跨平台应用构建工具及方法
CN109240923B (zh) 接口测试脚本的生成方法及计算机可读存储介质
US9244706B2 (en) Command line shell command generation based on schema
KR100994070B1 (ko) 예약된 컴포넌트 컨테이너 기반 소프트웨어 개발 방법 및장치
Shute Advanced JavaScript: Speed up web development with the powerful features and benefits of JavaScript
CN116243923A (zh) 一种小程序处理方法、装置及电子设备
Del Sole Microsoft computer vision apis distilled
Diercks et al. Evaluation of tools for describing, reproducing and reusing scientific workflows
CN116795351A (zh) 一种软件工具包的生成方法、装置及可读存储介质
CN114721666A (zh) 一种代码封装方法及装置
CN115390846A (zh) 编译构建方法、装置、电子设备和存储介质
CN113342399A (zh) 应用项目的结构配置方法、装置及可读存储介质
CN112363700A (zh) 智能合约的协同创建方法、装置、计算机设备和存储介质
US20040194022A1 (en) Kernel configuration tool

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