CN114706592B - 面向对象及面向过程语言的Modelica仿真组件生成方法 - Google Patents
面向对象及面向过程语言的Modelica仿真组件生成方法 Download PDFInfo
- Publication number
- CN114706592B CN114706592B CN202210365983.3A CN202210365983A CN114706592B CN 114706592 B CN114706592 B CN 114706592B CN 202210365983 A CN202210365983 A CN 202210365983A CN 114706592 B CN114706592 B CN 114706592B
- Authority
- CN
- China
- Prior art keywords
- function
- file
- dynamic library
- modelica
- generating
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 35
- 238000004088 simulation Methods 0.000 title claims abstract description 26
- 230000006870 function Effects 0.000 claims abstract description 184
- 238000006243 chemical reaction Methods 0.000 claims abstract description 9
- 238000010586 diagram Methods 0.000 claims description 17
- 230000007704 transition Effects 0.000 claims description 13
- 238000013507 mapping Methods 0.000 claims description 6
- 230000003068 static effect Effects 0.000 claims description 6
- 238000000605 extraction Methods 0.000 claims description 5
- 238000009434 installation Methods 0.000 claims description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001364 causal effect Effects 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000009517 secondary packaging Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及面向对象及面向过程语言的Modelica仿真组件生成方法,包括:从指定的文件夹中逐一获取待转换的动态库及外部函数;分析得到每个外部函数的返回值类型、函数名称、函数参数列表;生成项目文件和源代码文件;为每一个外部函数在代码文件中生成符合Modelica使用规范的外部函数;将生成的项目编译成动态库文件;建立外部语言函数对应的mo文件,将外部函数引入到Modelica函数中,生成Modelica组件。本发明提供了将面向对象语言以及面向过程语言编写的动态库批量生成Modelica组件的自动转化方法,便于计算机执行,代替人工,大大提高了转换效率。
Description
技术领域
本发明属于计算机仿真领域,具体涉及一种面向对象及面向过程语言的Modelica仿真组件生成方法。
背景技术
Modelica是一种开源的多领域统一建模语言,该语言具有面向对象特点和非因果关系建模能力,具有较好的交互性和较强的模型表达力,在多领域仿真领域有广泛的应用。
采用Modelica进行***仿真时,可以使用Modelica语言建模,也可以使用由C语言或Fortran语言编写的外部语言函数建模。外部语言函数建模时,常用的方法是按照Modelica语言规范编写一个与原外部语言函数有相同接口的Modelica函数,按照参数映射规则进行参数类型映射,Modelica函数的实现部分通过external关键字通过动态库方式调用外部语言函数实现。目前这种人工进行的方法存在二方面的问题:一是由于这种做法需要具备专业知识的程序员编写代码,操作难度较大,效率较低;二是由于Modelica语言自身可以采用Mingw或vs编译器对C语言源代码进行编译,当选择的编译器和制作外部函数动态库使用的编译器不同时,此时常规方法是必须获得外部函数的源码,然后使用与Modelica相同的编译器重新生成外部函数动态库,否则将会建模失败。
发明内容
本发明的目的是针对上述问题,提供面向对象及面向过程语言的Modelica仿真组件生成方法,自动将面向对象语言或面向过程语言编写的外部函数利用二次封装方法转换、生成Modelica组件,代替人工,并解决非Mingw编译器编译的外部函数动态库在选择Mingw编译器的Modelica环境下不能使用问题,避免必须获取源代码;转换过程批量进行,大大提高转换效率。
本发明结合动态库转换和mo文件描述方式实现将以动态库方式提供的外部函数制作成Modelica组件,通过生成新的动态库对原始动态库函数进行封装,实现编译器兼容和接口转换。
本发明的技术方案是面向对象及面向过程语言的Modelica仿真组件生成方法,包括以下步骤:
步骤1:从指定的文件夹中逐一获取待转换的动态库及外部函数;
步骤2:分析得到每个外部函数的返回值类型、函数名称、函数参数列表;
步骤3:生成项目文件和源代码文件;
步骤4:为每一个外部函数在代码文件中生成符合Modelica使用规范的外部函数;
步骤4.1:在源代码文件中增加对原始动态库头文件的include包含;
步骤4.2:对由步骤2输出的每一个原始动态库导出函数原型,在源代码中生成一个新的函数原型,新函数返回值为整数;新函数名称由原始动态库对应的导出函数的名称转换得到;新函数的参数列表由原函数的参数列表的基础上增加原函数的返回值参数形成;
步骤4.3:生成由大括号对构成的函数体;
步骤4.4:在函数体内,根据原始动态库采用的不同编写语言类型生成不同的执行语句;
步骤5:将步骤3生成的项目编译成动态库文件;
步骤6:建立外部语言函数对应的mo文件,将外部函数引入到Modelica函数中,生成Modelica组件。
步骤1采用默认模式或配置文件模式获取待转换的动态库及外部函数。采用默认模式时,遍历指定文件夹中扩展名为dll的动态库文件,对每一个动态库文件,在当前文件夹中查找与动态库文件主文件名相同且扩展名为h的头文件,没有则记录错误,处理下一个动态库文件,直到所有动态库文件处理完后结束;采用配置文件模式时,读取配置文件,根据配置文件中的记录的文件名,依次读取动态库文件和对应的头文件,对每一个头文件采用文本分析方式去掉注释,然后按照标识符提取状态转换图方式分析得到标识符列表,然后从列表中倒序读取获取外部函数原型。
步骤2具体包括以下子步骤:
步骤2.1:首先从标识符列表中获取函数的返回值类型和函数名称;
步骤2.2:由左括号开始,按照函数参数分析状态转换图确定函数包括参数类型和参数名称的参数列表。函数参数分析状态转换图包括状态集合{0, 1, 2, 3, 5, 7, 8, 9,11, 12, 13, 22},状态0为初始状态,状态9为终止状态。
步骤3具体包括以下子步骤:
步骤3.1:用程序方式生成Mingw规范的项目文件;
步骤3.2:生成C语言源代码文件,源代码文件文件名由原始动态库文件名转换得到;并将该源代码文件加入到步骤3.1生成的项目中。
步骤6具体包括以下子步骤:
步骤6.1:根据外部函数名生成Modelica语言函数名,按照一定规则生成函数名前缀,避免重名;
步骤6.2:根据参数的输入、输出类型和数据类型,按照语言规范映射成Modelica语言的输入Input、输出Output及对应的数据类型;
步骤6.3:生成external引用的函数名称、动态库文件路径与头文件路径,并生成XML格式的组件安装引导文件,相关的动态库文件、静态库文件、mo文件、xml文件统一输出到相同的文件夹并根据应用需要决定是否压缩打包。
步骤4.4中,对C或Fortran语言编写的动态库,在函数体内用新生成函数的参数列表中的参数名称作为参数,按照调用约定和参数次序对原始动态库函数进行调用;
对C++语言编写的动态库,在函数体内,首先对原始动态库中的类进行实例化,然后根据导出的方法的参数次序,用新生成函数参数列表中的参数名称作为参数对方法进行调用。
相比现有技术,本发明的有益效果包括:
1)本发明提供了将C、Fortan等面向过程语言以及C++等面向对象语言编写的动态库批量生成Modelica组件的自动转化方法,便于计算机执行,代替人工,省时省力,大大提高了转换效率,便于在Modelica仿真平台上进行跨语言的建模仿真;
2)本发明解决了受Modelica自身接口限制,Modelica仿真***选择的编译器和制作外部函数动态库使用的编译器不同时难以转化的问题;
3)本发明将C语言、Fortan语言、C++语言等多种语言编写的动态库同时转化,实现了多种程序语言外部函数在Modelica仿真***的集成仿真。
附图说明
下面结合附图和实施例对本发明作进一步说明。
图1为本发明实施例的Modelica组件批量生成***的示意图。
图2为本发明实施例的Modelica组件批量生成***的输入输出示意图。
图3为本发明实施例的标识符提取状态转换图。
图4为本发明实施例的函数参数分析状态转换图。
图5为本发明实施例的配置文件示意图。
图6为本发明实施例的头文件内容示意图。
具体实施方式
如图1所示,实施例的Modelica组件批量生成***包括:
批量提取部件,从文件夹中批量获取待处理的动态库和头文件等原始文件;
函数分析部件,从待处理的头文件中分析得到对应动态库的每个导出函数的返回值类型、函数名称、函数参数列表,函数参数列表包括参数的输入输出类型、参数数据类型、参数名称;
项目生成部件,生成一个新的符合Modelica规范的外部动态库项目,该项目实现对原始动态库的封装调用;
函数生成部件,生成一个符合Modelica使用规范的外部函数,将根据原始动态库采用的不同的语言,生成的外部函数具有不同的原型和函数实现代码;
项目编译部件,自动调用***编译器将新生成的项目及源代码文件编译成符合Modelica使用规范的动态库,完成对动态库工程和源码的编译;
Modelica组件生成部件,为外部函数建立对应的mo文件,生成Modelica组件。
上述***的面向对象及面向过程语言的Modelica仿真组件生成方法,包括以下步骤:
步骤1:从指定的文件夹中逐一获取待转换的动态库及外部函数;
采用默认模式获取待转换的动态库及外部函数。用户指定的文件夹中包含一个或多个待处理的动态库文件及其对应头文件。默认模式下,遍历文件夹中扩展名为dll的动态库文件,对每一个动态库文件,在当前文件夹中查找与动态库文件主文件名相同,扩展名为h的头文件,头文件内容如图6所示,没有则记录错误,处理下一个动态库文件,直到所有动态库文件处理完后结束;
步骤2:分析得到每个外部函数的返回值类型、函数名称、函数参数列表;
步骤2.1:首先从标识符列表中获取函数的返回值类型和函数名称;
步骤2.2:由左括号开始,按照图4所示的函数参数分析状态转换图确定函数包括参数类型和参数名称的参数列表。
步骤3:生成项目文件和源代码文件;
步骤3.1:用程序方式生成Mingw规范的项目文件;
步骤3.2:生成C语言源代码文件,源代码文件文件名由原始动态库文件名转换得到;并将该源代码文件加入到步骤3.1生成的项目中。
步骤4:为每一个外部函数在代码文件中生成符合Modelica使用规范的外部函数;
步骤4.1:在源代码文件中增加对原始动态库头文件的include包含;
步骤4.2:对由步骤2输出的每一个原始动态库导出函数原型,在源代码中生成一个新的C语言函数原型,新函数返回值类型为整数int类型;当原函数调用成功返回0;调用不成功返回一个指示错误代码的整数值;新函数名称由原始动态库对应的导出函数的名称转换得到;
功能有关的输入和输出参数统一放入新函数的参数列表中,其中对输入参数在变量前加const修饰;
步骤4.3:生成由大括号对构成的函数体;
步骤4.4:在函数体内,根据原始动态采用的编写语言类型如C、Fortran、C++等,生成不同的执行语句;
步骤5:调用Mingw编译器,对新建的项目和源代码文件进行编译,生成新的动态库文件和静态库文件;
步骤6:建立外部语言函数对应的mo文件,将外部函数引入到Modelica函数中,生成Modelica组件,组件文件通过annnotation实现通过新建的动态库函数实现对原始动态库函数的调用;
步骤6.1:根据外部函数名生成Modelica语言函数名,为避免重名,按照一定规则生成函数名前缀;
步骤6.2:根据参数的输入、输出类型和数据类型,按照语言规范映射成Modelica语言的输入Input、输出Output及对应的数据类型;
步骤6.3:生成external引用的函数名称、动态库文件路径与头文件路径;将新的动态库文件,静态库文件、头文件和原始动态库文件与mo文件放在一起,即可以实现在Modelica语言模型中使用。
实施例中指定的文件夹下有C语言编写的动态库A.dll, B.dll, C.dll和对应的头文件CHeadForA.h, CHeadForB.h, CHeadForC.h。CHeadForA.h文件中有AFUN1, AFUN2,AFUN3等函数的声明。类似的CHeadForB.h, CHeadForC.h文件中有BFUN1, BFUN2,CFUN1,CFUN2等函数声明。A.dll, A.lib, B.dll, B.lib, C.dll, C.lib, CHeadForA.h,CHeadForB.h, CHeadForC.h以及相关的文件均存放在目录DIR中。实施例基于Modelica建模仿真平台的仿真***中需要使用函数AFUN1, AFUN2, AFUN3, BFUN1, BFUN2, CFUN1,CFUN2等。
如图2所示,将指定文件夹的目录DIR作为输入参数传递给本发明的Modelica组件批量生成***,Modelica组件批量生成***批量生成Modelica组件,在每个Modelica组件中以外部函数的方式使用原动态库中C语言函数。Modelica组件可以在Modelica仿真***中和原生函数一样使用。
实施例二
实施例二采用和实施例一相同的Modelica组件批量生成***。
面向对象及面向过程语言的Modelica仿真组件生成方法包括以下步骤:
步骤1:从指定的文件夹中逐一获取待转换的动态库及外部函数;
采用配置文件模式获取待转换的动态库及外部函数,在配置文件模式下,读取配置文件,根据配置文件中的记录的文件名,依次读取动态库文件和对应的头文件。对每一个头文件采用文本分析方式去掉注释,然后按照图3所示的标识符提取状态转换图方式分析得到标识符列表,然后从列表中倒序读取获取外部函数原型。
步骤2:分析得到每个外部函数的返回值类型、函数名称、函数参数列表;
步骤2.1:首先从标识符列表中获取函数的返回值类型和函数名称;
步骤2.2:由左括号开始,按照图4所示的函数参数分析状态转换图确定函数包括参数类型和参数名称的参数列表。函数参数分析状态转换图包括状态集合{0, 1, 2, 3,5, 7, 8, 9, 11, 12, 13, 22},状态0为初始状态,状态9为终止状态。
函数参数分析的状态处理流程包括:
1)状态0下,输入空格继续保持状态0;状态0下输入字母,进入状态1;状态0下输入“)”,进入状态8;状态0下其它情况进入状态9;
2)状态1下,输入字母、数字继续保持状态1;状态1下输入空格,进入状态2;状态1下输入“*”,进入状态3;状态1下输入“,”,进入状态5;状态1下输入“)”,进入状态8;状态1下输入“(”、“;”或其它字符,进入状态9;
3)状态2下,输入空格继续保持状态2;状态2下输入字母,进入状态11;状态2下输入“*”,进入状态3;状态2下输入“,”进入状态5;状态2下输入“)”,进入状态8;状态2下输入其它字符,进入状态9;
4)状态3下,输入“*”、空格继续保持状态3;状态3下输入“,”,进入状态5;状态3下输入“)”,进入状态8;状态3下输入字母,进入状态12;状态3下输入其它字符,进入状态9;
5)状态5下,输入空格继续保持状态5;状态5下输入字母,进入状态1;状态5下输入其它字符,进入状态9;
6)状态7下,输入空格继续保持状态7;状态7下输入其它字符,进入状态9;
7)状态8下,输入空格继续保持状态8;状态8下输入“;”,进入状态7;状态8下输入其它字符,进入状态9;
8)状态9下,返回-1,结束状态处理流程;
9)状态11下,输入字母、数字继续保持状态11;状态11下输入空格,进入状态22;状态11下输入“,”,进入状态5;状态11下输入“)”,进入状态8;状态11下输入其它字符,进入状态9;
10)状态12下,输入字母、数字继续保持状态12;状态12下输入空格,进入状态13;状态12下输入“,”,进入状态5;状态12下输入“)”,进入状态8;状态12下输入其它字符,进入状态9;
11)状态13下,输入空格继续保持状态13;状态13下输入“,”,进入状态5;状态13下输入“)”,进入状态8;状态13下输入其它字符,进入状态9;
12)状态22下,输入空格继续保持状态22;状态22下输入字母,进入状态11;状态22下输入“,”,进入状态5;状态22下输入“)”,进入状态8;状态22下输入其它字符,进入状态9。
步骤3:生成项目文件和源代码文件;
步骤3.1:用程序方式生成Mingw规范的项目文件;
步骤3.2:生成C语言源代码文件,源代码文件文件名由原始动态库文件名转换得到;并将该源代码文件加入到步骤3.1生成的项目中。
步骤4:为每一个外部函数在代码文件中生成符合Modelica使用规范的外部函数;
步骤4.1:在源代码文件中增加对原始动态库头文件的include包含;
步骤4.2:对由步骤2输出的每一个原始动态库导出函数原型,在源代码中生成一个新的C语言函数原型,新函数返回值类型为整数int类型;当原函数调用成功返回0;调用不成功返回一个指示错误代码的整数值;新函数名称由原始动态库对应的导出函数的名称转换得到;
功能有关的输入和输出参数统一放入新函数的参数列表中,其中对输入参数在变量前加const修饰;
步骤4.3:生成由大括号对构成的函数体;
步骤4.4:在函数体内,根据原始动态采用的编写语言类型,生成不同的执行语句,具体如下:
对C或Fortran语言编写的动态库,在函数体内用新生成函数的参数列表中的参数名称作为参数,按照调用约定和参数次序对原始动态库函数进行调用。根据具体应用可以约定若调用成功,新生成函数的返回值为0,否则返回值错误代码。
对C++语言编写的动态库,在函数体内,首先对原始动态库中的类进行实例化,然后根据导出的方法的参数次序,用新生成函数参数列表中的参数名称作为参数对方法进行调用。
步骤5:调用Mingw编译器,对新建的项目和源代码文件进行编译,生成新的动态库文件和静态库文件;
步骤6:建立外部语言函数对应的mo文件,将外部函数引入到Modelica函数中,生成Modelica组件,组件文件通过annnotation实现通过新建的动态库函数实现对原始动态库函数的调用;
步骤6.1:根据外部函数名生成Modelica语言函数名,为避免重名,按照一定规则生成函数名前缀;
步骤6.2:根据参数的输入、输出类型和数据类型,按照语言规范映射成Modelica语言的输入Input、输出Output及对应的数据类型;
步骤6.3:生成external引用的函数名称、动态库文件路径与头文件路径;将新的动态库文件,静态库文件、头文件和原始动态库文件与mo文件放在一起,即可以实现在Modelica语言模型中使用。
实施例中,在待封装的原始动态库文件夹下,准备图5所示的文本配置文件,配置文件中按照表1所示的格式写明文件夹下每一个动态库、对应的头文件以及使用的编译器。封装程序通过读取该配置文件,实现对同一文件夹下不同的编译器产生的动态库进行封装。
实施结果表明,本发明实现了C语言、Fortan语言、C++语言等多种程序语言外部函数在Modelica仿真***的集成仿真。
表1 配置文件格式表
Claims (6)
1.面向对象及面向过程语言的Modelica仿真组件生成方法,其特征在于,将动态库形式的面向对象语言或面向过程语言编写的外部函数制作成Modelica仿真组件,通过生成新的动态库对原始动态库函数进行封装,实现编译器兼容和接口转换;
所述方法包括以下步骤:
步骤1:从指定的文件夹中逐一获取待转换的动态库及外部函数;
步骤2:分析得到每个外部函数的返回值类型、函数名称、函数参数列表;
步骤3:生成项目文件和源代码文件;
步骤4:为每一个外部函数在代码文件中生成符合Modelica使用规范的外部函数;
步骤4.1:在源代码文件中增加对原始动态库头文件的include包含;
步骤4.2:对由步骤2输出的每一个原始动态库导出函数原型,在源代码中生成一个新的函数原型,新函数返回值为整数;新函数名称由原始动态库对应的导出函数的名称转换得到;新函数的参数列表由原函数的参数列表的基础上增加原函数的返回值参数形成;
步骤4.3:生成由大括号对构成的函数体;
步骤4.4:在函数体内,根据原始动态库采用的不同编写语言类型生成不同的执行语句;
步骤5:将步骤3生成的项目编译成动态库文件;
步骤6:建立外部语言函数对应的mo文件,将外部函数引入到Modelica函数中,生成Modelica组件。
2.根据权利要求1所述的Modelica仿真组件生成方法,其特征在于,步骤1采用默认模式或配置文件模式获取待转换的动态库及外部函数;
采用默认模式时,遍历指定文件夹中扩展名为dll的动态库文件,对每一个动态库文件,在当前文件夹中查找与动态库文件主文件名相同且扩展名为h的头文件,没有则记录错误,处理下一个动态库文件,直到所有动态库文件处理完后结束;
采用配置文件模式时,读取配置文件,根据配置文件中的记录的文件名,依次读取动态库文件和对应的头文件,对每一个头文件采用文本分析方式去掉注释,然后按照标识符提取状态转换图方式分析得到标识符列表,然后从列表中倒序读取获取外部函数原型。
3.根据权利要求2所述的Modelica仿真组件生成方法,其特征在于,步骤2包括:
步骤2.1:首先从标识符列表中获取函数的返回值类型和函数名称;
步骤2.2:由左括号开始,按照函数参数分析状态转换图确定函数包括参数类型和参数名称的参数列表。
4.根据权利要求3所述的Modelica仿真组件生成方法,其特征在于,步骤3包括:
步骤3.1:用程序方式生成Mingw规范的项目文件;
步骤3.2:生成C语言源代码文件,源代码文件文件名由原始动态库文件名转换得到;并将该源代码文件加入到步骤3.1生成的项目中。
5.根据权利要求4所述的Modelica仿真组件生成方法,其特征在于,步骤6包括:
步骤6.1:根据外部函数名生成Modelica语言函数名,按照一定规则生成函数名前缀,避免重名;
步骤6.2:根据参数的输入、输出类型和数据类型,按照语言规范映射成Modelica语言的输入Input、输出Output及对应的数据类型;
步骤6.3:生成external引用的函数名称、动态库文件路径与头文件路径,并生成XML格式的组件安装引导文件,相关的动态库文件、静态库文件、mo文件、xml文件统一输出到相同的文件夹并根据应用需要决定是否压缩打包。
6.根据权利要求1-5任意一项所述的Modelica仿真组件生成方法,其特征在于,步骤4.4中,对C或Fortran语言编写的动态库,在函数体内用新生成函数的参数列表中的参数名称作为参数,按照调用约定和参数次序对原始动态库函数进行调用;
对C++语言编写的动态库,在函数体内,首先对原始动态库中的类进行实例化,然后根据导出的方法的参数次序,用新生成函数参数列表中的参数名称作为参数对方法进行调用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210365983.3A CN114706592B (zh) | 2021-04-13 | 2021-04-13 | 面向对象及面向过程语言的Modelica仿真组件生成方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210365983.3A CN114706592B (zh) | 2021-04-13 | 2021-04-13 | 面向对象及面向过程语言的Modelica仿真组件生成方法 |
CN202110395230.2A CN113220309B (zh) | 2021-04-13 | 2021-04-13 | 多语言的Modelica组件批量生成***和方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110395230.2A Division CN113220309B (zh) | 2021-04-13 | 2021-04-13 | 多语言的Modelica组件批量生成***和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114706592A CN114706592A (zh) | 2022-07-05 |
CN114706592B true CN114706592B (zh) | 2024-04-19 |
Family
ID=77087133
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110395230.2A Active CN113220309B (zh) | 2021-04-13 | 2021-04-13 | 多语言的Modelica组件批量生成***和方法 |
CN202210365983.3A Active CN114706592B (zh) | 2021-04-13 | 2021-04-13 | 面向对象及面向过程语言的Modelica仿真组件生成方法 |
CN202210365973.XA Pending CN114721776A (zh) | 2021-04-13 | 2021-04-13 | Matlab语言的Modelica仿真组件生成方法 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110395230.2A Active CN113220309B (zh) | 2021-04-13 | 2021-04-13 | 多语言的Modelica组件批量生成***和方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210365973.XA Pending CN114721776A (zh) | 2021-04-13 | 2021-04-13 | Matlab语言的Modelica仿真组件生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (3) | CN113220309B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114722537B (zh) * | 2022-04-18 | 2024-06-04 | 成都工元科技有限公司 | 压力容器设计方法、设备及介质 |
CN115033232B (zh) * | 2022-04-30 | 2024-05-31 | 杭州电子科技大学 | 一种可编程逻辑控制器的开源库封装方法和*** |
CN117806852B (zh) * | 2024-03-01 | 2024-05-14 | 傲拓科技股份有限公司 | 一种接口调用方法、装置、存储介质及处理器 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5522079A (en) * | 1993-06-14 | 1996-05-28 | International Business Machines Corporation | Compiler merging new and preexisting modules while preserving function order |
CN102402638A (zh) * | 2011-12-20 | 2012-04-04 | 明媚 | 基于Modelica语言的液压起升机构仿真建模方法 |
CN106681726A (zh) * | 2016-12-30 | 2017-05-17 | 苏州同元软控信息技术有限公司 | Python模型转换为Modelica模型的方法 |
CN106681727A (zh) * | 2016-12-30 | 2017-05-17 | 苏州同元软控信息技术有限公司 | Modelica外部函数图形化编辑***及其实现方法 |
EP3336730A1 (de) * | 2016-12-16 | 2018-06-20 | dSPACE digital signal processing and control engineering GmbH | Verfahren zum erstellen eines mit einem simulationsgerät kompatiblen modells |
CN111414695A (zh) * | 2020-03-19 | 2020-07-14 | 苏州同元软控信息技术有限公司 | 一种基于Modelica的联合仿真***及其构建方法 |
CN112115604A (zh) * | 2020-09-14 | 2020-12-22 | 苏州同元软控信息技术有限公司 | Modelica模型与Simulink模型的联合仿真方法、***及电子设备 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840334B (zh) * | 2010-04-16 | 2013-04-17 | 中国电子科技集团公司第二十八研究所 | 一种软件构件服务化封装方法 |
US8769486B2 (en) * | 2011-01-06 | 2014-07-01 | The Mathworks, Inc. | Dynamically generating statically-typed proxies for dynamically-typed functions |
US10296313B2 (en) * | 2014-11-18 | 2019-05-21 | Roger James Poon | Safely consuming dynamically-typed code from a statically-typed programming language |
CN105335213A (zh) * | 2015-10-28 | 2016-02-17 | 苏州同元软控信息技术有限公司 | Word文件嵌入Modelica模型实现仿真报告自动生成方法 |
US10872027B2 (en) * | 2018-04-18 | 2020-12-22 | The Mathworks, Inc. | Run-time or compile-time error solutions for locating missing program elements in a programming environment |
-
2021
- 2021-04-13 CN CN202110395230.2A patent/CN113220309B/zh active Active
- 2021-04-13 CN CN202210365983.3A patent/CN114706592B/zh active Active
- 2021-04-13 CN CN202210365973.XA patent/CN114721776A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5522079A (en) * | 1993-06-14 | 1996-05-28 | International Business Machines Corporation | Compiler merging new and preexisting modules while preserving function order |
CN102402638A (zh) * | 2011-12-20 | 2012-04-04 | 明媚 | 基于Modelica语言的液压起升机构仿真建模方法 |
EP3336730A1 (de) * | 2016-12-16 | 2018-06-20 | dSPACE digital signal processing and control engineering GmbH | Verfahren zum erstellen eines mit einem simulationsgerät kompatiblen modells |
CN106681726A (zh) * | 2016-12-30 | 2017-05-17 | 苏州同元软控信息技术有限公司 | Python模型转换为Modelica模型的方法 |
CN106681727A (zh) * | 2016-12-30 | 2017-05-17 | 苏州同元软控信息技术有限公司 | Modelica外部函数图形化编辑***及其实现方法 |
CN111414695A (zh) * | 2020-03-19 | 2020-07-14 | 苏州同元软控信息技术有限公司 | 一种基于Modelica的联合仿真***及其构建方法 |
CN112115604A (zh) * | 2020-09-14 | 2020-12-22 | 苏州同元软控信息技术有限公司 | Modelica模型与Simulink模型的联合仿真方法、***及电子设备 |
Non-Patent Citations (4)
Title |
---|
一种基于Modelica语言的混合***DEVS模型架构;陈彬;张鹏;刘晓铖;;***仿真技术;20130128(01);全文 * |
基于多领域仿真的SQP并行优化算法;毛虎平;吴义忠;陈立平;;中国机械工程;20090810(15);全文 * |
复杂***建模仿真语言编译器的实现与应用;周文;迟鹏;李伯虎;宋晓;;***仿真学报;20160708(07);全文 * |
虚拟原型建模语言VPML;杨强, 李思昆, 郭阳, 彭宇行;计算机研究与发展;20010715(07);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114706592A (zh) | 2022-07-05 |
CN114721776A (zh) | 2022-07-08 |
CN113220309A (zh) | 2021-08-06 |
CN113220309B (zh) | 2022-05-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114706592B (zh) | 面向对象及面向过程语言的Modelica仿真组件生成方法 | |
JPS63201834A (ja) | オブジエクト・モジユール生成方法 | |
US20130152061A1 (en) | Full fidelity parse tree for programming language processing | |
CN110362792B (zh) | 将rn文件转换为小程序文件的方法、装置及转换设备 | |
Tassi | Deriving proved equality tests in Coq-elpi: Stronger induction principles for containers in Coq | |
CN113655996B (zh) | 一种基于需求模型的企业级***生成方法 | |
EP0520708A2 (en) | Method and apparatus for converting high level form abstract syntaxes into an intermediate form | |
CN115061772A (zh) | 一种多领域仿真模型集成方法及*** | |
CN111381828A (zh) | 生成代码文件的语法树的方法、装置及电子设备 | |
Waddington et al. | High-fidelity C/C++ code transformation | |
CN112115615A (zh) | 面向scr的安全关键***模型转换方法、装置和*** | |
CN111381826A (zh) | 生成代码文件的语法树的方法、装置及电子设备 | |
CN115268918A (zh) | 一种基于规则模板的c++代码向c代码的自动转化方法 | |
CN111158665A (zh) | 代码生成方法及装置、电子设备和存储介质 | |
Waddington et al. | High-fidelity C/C++ code transformation | |
CN111221519B (zh) | 一基于Python的CLI自动化导出方法 | |
CN113835688B (zh) | 一种科学计算语言解释器的对象封装方法 | |
CN115098076A (zh) | 一种用于Android***的代码生成方法 | |
JPH07182179A (ja) | オブジェクト指向データベース管理装置 | |
CN113608748A (zh) | C语言转换Java语言的数据处理方法、装置及设备 | |
CN111381827A (zh) | 生成代码文件的语法树的方法、装置及电子设备 | |
CN111381814A (zh) | 生成代码文件的语法树的方法、装置及电子设备 | |
Snelting | Experiences with the PSG—Programming System Generator | |
Zhou et al. | Generating Bindings in MPICH | |
CN117785213B (zh) | 基于Rust开发的前端构建工具及构建方法 |
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 |