1.多语言的Modelica组件批量生成系统,其特征在于,包括批量提取部件、函数分析部件、项目生成部件、函数生成部件、项目编译部件、Modelica组件生成部件;
批量提取部件,从文件夹中批量获取待处理的动态库和头文件原始文件;
函数分析部件,从待处理的头文件中分析得到对应动态库的每个导出函数的返回值类型、函数名称、函数参数列表,函数参数列表包括参数的输入输出类型、参数数据类型、参数名称;
项目生成部件,生成一个新的符合Modelica规范的外部动态库项目,该项目实现对原始动态库的封装调用;
函数生成部件,生成一个符合Modelica使用规范的外部函数,根据原始动态库采用的不同的语言,生成的外部函数具有不同的原型和函数实现代码;
项目编译部件,自动调用系统编译器将新生成的项目及源代码文件编译成符合Modelica使用规范的动态库,完成对动态库工程和源码的编译;
Modelica组件生成部件,为外部函数建立对应的mo文件,生成Modelica组件。
2.如权利要求1所述系统的批量生成方法,其特征在于,包括以下步骤:步骤1:从指定的文件夹中逐一获取待转换的动态库及外部函数;
步骤2:分析得到每个外部函数的返回值类型、函数名称、函数参数列表;
步骤3:生成项目文件和源代码文件;
步骤4:为每一个外部函数在代码文件中生成符合Modelica使用规范的外部函数;
步骤5:将步骤3生成的项目编译成动态库文件;
步骤6:建立外部语言函数对应的mo文件,将外部函数引入到Modelica函数中,生成Modelica组件。
3.根据权利要求2所述的批量生成方法,其特征在于,步骤2包括:步骤2.1:首先从标识符列表中获取函数的返回值类型和函数名称;
步骤2.2:由左括号开始,按照函数参数分析状态转换图确定函数包括参数类型和参数名称的参数列表。
4.根据权利要求3所述的批量生成方法,其特征在于,步骤3包括:步骤3.1:用程序方式生成Mingw规范的项目文件;
步骤3.2:生成C语言源代码文件,源代码文件文件名由原始动态库文件名转换得到;并将该源代码文件加入到步骤3.1生成的项目中。
5.根据权利要求4所述的批量生成方法,其特征在于,步骤4包括:步骤4.1:在源代码文件中增加对原始动态库头文件的include包含;
步骤4.2:对由步骤2输出的每一个原始动态库导出函数原型,在源代码中生成一个新的函数原型,新函数返回值为整数;新函数名称由原始动态库对应的导出函数的名称转换得到;新函数的参数列表由原函数的参数列表的基础上增加原函数的返回值参数形成;
步骤4.3:生成由大括号对构成的函数体;
步骤4.4:在函数体内,根据原始动态库采用的不同编写语言类型生成不同的执行语句。
6.根据权利要求5所述的批量生成方法,其特征在于,步骤6包括:步骤6.1:根据外部函数名生成Modelica语言函数名,按照一定规则生成函数名前缀,避免重名;
步骤6.2:根据参数的输入、输出类型和数据类型,按照语言规范映射成Modelica语言的输入Input、输出Output及对应的数据类型;
步骤6.3:生成external引用的函数名称、动态库文件路径与头文件路径,并生成XML格式的组件安装引导文件,相关的动态库文件、静态库文件、mo文件、xml文件统一输出到相同的文件夹并根据应用需要决定是否压缩打包。
7.根据权利要求5或6所述的批量生成方法,其特征在于,步骤4.4中,对C或Fortran语言编写的动态库,在函数体内用新生成函数的参数列表中的参数名称作为参数,按照调用约定和参数次序对原始动态库函数进行调用;
对C++语言编写的动态库,在函数体内,首先对原始动态库中的类进行实例化,然后根据导出的方法的参数次序,用新生成函数参数列表中的参数名称作为参数对方法进行调用;
对Matlab语言编写的采用mwArray数据类型的动态库,在函数体内首先为新生成函数参数列表中的每一个参数,生成一个mwArray类型的临时变量,并根据参数组合类型,为新生成的临时变量用不同赋值方式赋值;用临时变量对原始动态库函数进行调用,对调用结果为mwArray类型变量,将mwArray逆向转换为函数原型的参数类型后返回。