一种辅助生成ADPSS用户自定义功能框插件的方法
技术领域
本发明属于电力系统仿真技术领域,具体涉及一种辅助生成ADPSS用户自定义功能框插件的方法。
背景技术
ADPSS是中国电力科学研究院开发的一种全数字实时电力系统仿真装置。为了满足仿真模型多样化和定制化的需求,ADPSS给用户提供了一种自定义建模的方法,用户自定义模型通过功能框插件的方式予以实现。功能框插件则通过动态库和XML文件进行设定。动态库中,模型用C++的类进行刻画,ADPSS通过约定的三个接口函数调用动态库。XML文件对模型输入端子和输出端子的数量及类型、模型参数、动态库的调用方式等信息进行描述。因此,在ADPSS中,建立1个自定义功能框插件的通常步骤包括:建立1个DLL工程,建立ADPSS规定的接口AdpssItf.h及其实现AdpssItf.cpp、DLL程序入口点dllmain.cpp、编译平台所需的头文件及其实现,编写刻画用户自定义模型的C++类代码;建立1个描述模型信息的XML文件。
随着大量的新能源、新设备接入电力系统,仿真技术人员往往需要对仿真模型进行定制。当需要定制的模型较多时,ADPSS提供的建立自定义功能框插件的方式可能比较繁琐,用户会花费较多的时间和精力在编写动态库代码方面。
因此,如何减少用户建立自定义功能框插件的时间,使用户更加方便的建立自定义功能框插件成为了本领域技术人员急需解决的问题。
发明内容
针对上述现有技术的不足,本发明的目的是提供一种辅助生成ADPSS用户自定义功能框插件的方法,从而帮助ADPSS用户提高建立自定义模型的效率,有效提升ADPSS的商业和工程实用价值。
为了解决上述技术问题,本发明采用了如下的技术方案:
一种辅助生成ADPSS用户自定义功能框插件的方法,所述方法包括如下步骤:
S1、建立用于编译和描述自定义插件的配置文件;
S2、自动生成动态库代码模板;
S3、自动生成ADPSS可读取的XML文件。
优选地,所述配置文件包括编译自定义插件所需的信息,以及创建自定义插件时需被ADPSS读取的XML文件中所包含的信息。
优选地,编译自定义插件所需的信息包括动态库工程文件所在目录、编译模式、自定义插件所需参数在模型代码中对应的变量名。
优选地,所述自动生成动态库代码模板包括:
S201、读取用于编译和描述自定义插件的配置文件;
S202、基于配置信息自动生成自定义插件所链接动态库的C/C++代码模板,所述代码模板包括ADPSS规定的接口AdpssItf.h及其实现AdpssItf.cpp、DLL程序入口点dllmain.cpp、自定义插件对应模型的C++类定义及其实现、编译DLL时编译平台所需的头文件及其实现;
S203、基于配置文件自动生成自定义插件所链接动态库的Visual Studio工程文件,所述工程文件包括后缀名为vcxproj和vcxproj.filters的文件。
与现有技术相比,本发明具有以下有益效果:
(1)本发明提供的辅助生成ADPSS用户自定义功能框插件的方法,通过程序自动生成自定义模型所链接动态库的通用代码模板,大量减少了重复性的手工编码量。
(2)本发明提供的辅助生成ADPSS用户自定义功能框插件的方法,具有可操作性强、考虑因素全面、方案合理等优点,具有较高的工程实用价值。
附图说明
为了使发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步的详细描述,其中:
图1是本发明公开的一种辅助生成ADPSS用户自定义功能框插件的方法的一种具体实施方式的示意图。
具体实施方式
下面结合附图对本发明作进一步的详细说明。
如图1所示,本发明公开了一种辅助生成ADPSS用户自定义功能框插件的方法,所述方法包括如下步骤:
S1、建立用于编译和描述自定义插件的配置文件;
配置文件可以采用Excel表格、JSON(JavaScript Object Notation)或者其它易于程序读取的文件格式。所述配置文件格式包括但不限于Excel表格数据格式和JSON格式。
采用Excel表格时,将配置信息分类存储在“动态库”、“模型基本信息”、“输入输出端口”、“参数”4个工作簿中。以光伏电池阵列为例,表1至表4展示了相应的工作簿样式及内容。
表1“动态库”工作簿示例
表2“模型基本信息”工作簿示例
表3“输入输出端口”工作簿示例
表4“参数”工作簿示例
S2、自动生成动态库代码模板;
生成动态库代码模板的具体操作如下:
1)读取表4所示“参数”工作簿中的模型名,将模型名转换为全小写的名称后,将其作为模型类定义及其实现文件的文件名;根据表1所示“动态库”工作簿中的“工程目录”列,在相应文件夹下创建模型类定义及其实现的文件。
以光伏电池阵列为例,也即是创建pvarray.h和pvarray.cpp。
2)在模型类定义文件中,把表4所示“参数”工作簿中的模型名作为模型的类名,定义描述模型的类,具体操作如下:
定义构造函数和释放函数,在函数声明后添加注释;
读取表3所示“输入输出端口”工作簿,统计输入端口的数量;若输入端口的数量大于1,则定义代表输入变量数组的成员变量input[N],N为具体的数值,表示输入端口的数量,并在变量声明后添加注释,注释对输入变量数组中各变量的含义进行说明,各变量的含义取自表3“备注”列;若输入端口的数量等于1,则定义代表输入变量的成员变量input,并在变量声明后添加注释,注释对输入变量的含义进行说明,变量的含义取自表3“备注”列;
读取表3所示“输入输出端口”工作簿,统计输出端口的数量;若输出端口的数量大于1,则定义代表输出变量数组的成员变量output[N],N为具体的数值,表示输出端口的数量,并在变量声明后添加注释,注释对输出变量数组中各变量的含义进行说明,各变量的含义取自表3“备注”列;若输出端口的数量等于1,则定义代表输出变量的成员变量output,并在变量声明后添加注释,注释对输出变量的含义进行说明,变量的含义取自表3“备注”列;
定义代表输入变量个数的成员变量in_num,并在变量声明后添加内容为“输入变量个数”的注释;
定义代表输出变量的成员变量out_num,并在变量声明后添加内容为“输出变量个数”的注释;
定义代表仿真步长的成员变量step,并在变量声明后添加内容为“步长”的注释;
读取表4所示“参数”工作簿中第5-6列,即“参数类型”和“参数在模型代码中对应的变量名”两列,定义代表参数的成员变量,其中,成员变量名与工作簿中“参数在模型代码中对应的变量名”一列相对应;成员变量的类型由工作簿中的“参数类型”列所决定,若工作簿中相应的单元格值为“浮点型”时,则成员变量被定义为double型,若工作簿中相应的单元格值为“整型”时,则成员变量被定义为int型;在每个代表参数的成员变量声明后添加注释,注释内容取自表4所示“参数”工作簿中“参数名”一列。
以光伏电池阵列为例,根据表1-4所示的配置信息,pvarray.h中,程序自动生成的光伏阵列模型的类定义如下:
3)在模型类的实现文件中,添加对模型类定义文件的引用以及构造函数和释放函数的实现代码,具体操作如下:
添加对模型类定义文件的引用;
添加构造函数的实现代码,将表3所示“输入输出端口”工作簿中统计得到的输入端口、输出电口分别数量赋值给成员变量in_num、out_num;
添加释放函数的实现代码。
仍以光伏电池阵列为例,pvarray.cpp中,程序自动生成的代码如下:
4)根据表1所示“动态库”工作簿中的“工程目录”列,在相应文件夹下生成ADPSS规定的接口文件AdpssItf.h。
生成ADPSS规定的接口文件AdpssItf.h的具体操作包括:生成预处理指令;生成ADPSS规定的三个接口函数声明。
5)根据表1所示“动态库”工作簿中的“工程目录”列,在相应文件夹下生成ADPSS规定的接口实现文件AdpssItf.cpp。
生成ADPSS规定的接口实现文件AdpssItf.cpp的具体操作如下:生成预处理指令;生成ADPSS规定的三个接口函数的实现。其中,生成初始化接口函数的实现时,将ADPSS传入的参数赋给模型类中描述模型的相应成员变量;生成运行接口函数的实现时,将ADPSS传入的输入变量值赋给模型类中描述输入变量的相应成员变量;生成终止接口函数的实现时,调用模型的释放函数。
6)根据表1所示“动态库”工作簿中的“工程目录”列,在相应文件夹下生成编译DLL时编译平台所需的头文件及其实现。Visual Studio编译平台下,所需的头文件及其实现包括stdafx.h、stdafx.cpp、targetver.h、dllmain.cpp等。
7)读取表1所示“动态库”工作簿,根据其中的编译选项,生成可被Visual Studio编译平台直接打开的工程文件,包括后缀名为vcxproj和vcxproj.filters的文件。这两个文件也创建在表1所示“动态库”工作簿中的“工程目录”下。
S3、自动生成ADPSS可读取的XML文件。
根据表1-4所示的配置信息,自动生成ADPSS可读取的XML文件的具体操作如下:
生成XML文件头;
生成XML根节点“boot”;
生成XML子节点“DLLGroup”,其“Dllname”属性值取自表1所示“动态库”工作簿中“动态库名”列;
生成子节点“DLLGroup”的子节点“ModelGroup”,其“ModelName”、“DialogName”、“Model_Type”、“Call_Type”、“Store_Size”、“Enable_Snapshot”、“Snapshot_Size”取自表2所示“模型基本信息”工作簿中第2-8列。
生成子节点“ModelGroup”的子节点“InPortGroup”,统计表3所示“输入输出端口”工作簿中输入端口的数量,对每一个输入端口生成1个子节点“InP”。对每一个子节点“InP”,其“Name”、“HotName”属性值取自表3所示“输入输出端口”工作簿中的第4、5列;“id”属性值由程序设定并自动递增。
生成子节点“ModelGroup”的子节点“OutPortGroup”,统计表3所示“输入输出端口”工作簿中输出端口的数量,对每一个输出端口生成1个子节点“YP”。对每一个子节点“YP”,其“Name”、“HotName”属性值取自表3所示“输入输出端口”工作簿中的第4、5列;“id”属性值由程序设定并自动递增。
生成子节点“ModelGroup”的子节点“ParGroup”,统计表4所示“参数”工作簿中参数的数量,对每一个参数生成1个子节点“ParG”。对每一个子节点“ParG”,其“Name”、“value”、“Datatype”属性值取自表4所示参数工作簿中的第3-5列;“id”属性值由程序设定并自动递增。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管通过参照本发明的优选实施例已经对本发明进行了描述,但本领域的普通技术人员应当理解,可以在形式上和细节上对其作出各种各样的改变,而不偏离所附权利要求书所限定的本发明的精神和范围。