一种控制程序的验证和测试方法及系统的制作方法

文档序号:6436669阅读:157来源:国知局
专利名称:一种控制程序的验证和测试方法及系统的制作方法
技术领域
本发明涉及自动控制领域,尤其涉及一种控制程序的验证和测试方法及系统。
背景技术
随着自动化行业的迅速发展,自动化市场出现了越来越多的大型自动控制系统,以及越来越多的新技术或新设备。同时,随着自动化设备或系统的使用者提出的要求越来越多,控制系统所采用的控制算法的设计面临以下挑战:更多的针对不同方面的性能要求,例如,系统稳定性以及效率;新的技术或设备的引入对控制算法的复杂度要求更高;政府或工业系统指定的标准使得对控制算法的性能要求更高。目前,大部分自动控制系统的设计者在设计简单的控制算法时,完全凭借经验进行设计,而并不进行仿真验证,并且,对控制算法进行修改也是现场进行的。因此,尽管在开发阶段花费了大量的时间和精力,但是控制算法的性能却无法得到保证。在另一种设计方案中,控制策略开发者使用仿真工具或仿真平台(例如Matlab中的Simulink仿真平台)设计控制算法,通过仿真对控制算法的性能进行验证和测试。该设计方案中,进行仿真时是由虚拟的控制器模型结合其它的控制对象模型执行控制算法,控制算法是由仿真平台所支持的语言编写。而在实际控制系统(例如楼宇控制器)中所执行的是采用工程语言编写的控制算法,这就需要将仿真后的控制算法转换为工程语言。其中,一种方法是人工转换,即由设计人员基于仿真后的控制算法重新采用工程语言进行编写,该方法浪费时间和精力,且容易出错;另一种方法是采用自动转换模块将控制器模型自动转换为工程语言,例如,Matlab/Simulink中的PLC代码转换模块。但是,现有的自动转换模块并不能将工程语言编写的程序转换为控制器模型,因此,若对采用工程语言编写的控制程序进行修改,则在进行仿真时,还需要人工修改仿真时所需的控制算法,以及对虚拟的控制器模型进行升级,这就降低了仿真效率,且容易出现错误。

发明内容
为改进现有技术中存在的问题,本发明提出一种控制程序的验证和测试方法及系统,用以直接对工程语言编写的控制程序进行验证和测试,从而保证控制算法的性能,提高仿真效率以及准确度。本发明提出的控制程序的验证和测试方法,包括:分析步骤,对采用工程语言编写的第一控制程序进行语义分析,构建程序依赖图;转换步骤,根据所述程序依赖图,将所述第一控制程序转换为仿真模块所支持的采用通用的中间级语言表示的第二控制程序;以及仿真步骤,基于所述仿真模块对所述第二控制程序进行仿真,以验证和测试所述第二控制程序的性能。根据本发明实施例提供的上述验证和测试方法,通过将工程语言编写的控制程序转换为仿真模块支持的通用中间级语言,再由仿真模块基于该中间级语言表示的控制程序进行验证和测试,从而能够对工程语言编写的程序进行仿真,在仿真通过后,可直接将该工程语言编写的控制程序下载至硬件设备,且在仿真过程中,可直接对工程语言编写的控制程序进修改,在保证控制算法性能的同时提高了仿真效率以及准确度。其中,所述分析步骤包括:逐行分析所述第一控制程序中的操作码和操作数,得到符号表、语法树、控制流图以及基本程序块的集合;根据所述符号表、语法树和控制流图识别所述基本程序块之间的数据依赖关系和控制依赖关系;以及根据所述数据依赖关系和控制依赖关系构建所述程序依赖图。其中,所述转换步骤包括:复制预定义的中间级语言的源文件和头文件;根据所述基本程序块的集合进行中间级语言函数的转换;根据所述程序依赖图生成条件控制语句或流控制语句;以及将所述第一控制程序逐条语句转换为中间级语言代码。其中,将所述第一控制程序逐条语句转换为中间级语言代码后,将转换后的中间级语言代码组织为具有标准接口的软件模块。其中,所述中间级语言为C语言、C++语言或Java语言中任一。其中,所述工程语言符合国际电工委员会IEC制定的工业控制编程语言标准IEC61131-3。其中,所述仿真模块为Matlab、Trnsys或Mathematica中任一。本发明提出的控制程序的验证和测试系统,包括:分析模块,用于对采用工程语言编写的第一控制程序进行语义分析,构建程序依赖图;转换模块,用于根据所述程序依赖图,将所述第一控制程序转换为仿真模块所支持的采用通用的中间级语言表示的第二控制程序;以及仿真模块,用于对所述第二控制程序进行仿真,以验证和测试所述第二控制程序的性能。根据本发明实施例提供的上述验证和测试装置,通过分析模块对采用工程语言编写的控制程序进行语义分析后,由转换模块将工程语言编写的控制程序转换为仿真模块支持的通用中间级语言,再由仿真模块基于该中间级语言表示的控制程序进行验证和测试,从而能够对工程语言编写的程序进行仿真,在仿真通过后,可直接将该工程语言编写的控制程序下载至硬件设备,且在仿真过程中,可直接对工程语言编写的控制程序进修改,在保证控制算法性能的同时提高了仿真效率以及准确度。其中,所述分析模块具体用于逐行分析所述第一控制程序中的操作码和操作数,得到符号表、语法树、控制流图以及基本程序块的集合,根据所述符号表、语法树和控制流图识别所述基本程序块之间的数据依赖关系和控制依赖关系,并根据所述数据依赖关系和控制依赖关系构建所述程序依赖图。其中,所述转换模块具体用于复制预定义的中间级语言的源文件和头文件,根据所述基本程序块的集合进行中间级语言函数的转换,根据所述程序依赖图生成条件控制语句或流控制语句,以及将所述第一控制程序逐条语句转换为中间级语言代码。其中,所述转换模块还用于在转换后的中间级语言代码组织为具有标准接口的软件模块。
其中,所述中间级语言为C语言、C++语言或Java语言中任一。其中,所述工程语言符合国际电工委员会IEC制定的工业控制编程语言标准IEC61131-3。其中,所述仿真模块为Matlab、Trnsys或Mathematica中任一。


下面将通过参照附图详细描述本发明的优选实施例,使本领域的普通技术人员更清楚本发明的上述及其它特征和优点,附图中:图1是本发明优选实施例中对控制程序进行验证和测试的系统架构图;图2是本发明优选实施例中控制程序的验证和测试系统的结构示意图;图3是本发明优选实施例中控制程序的验证和测试的方法流程图;图4是本发明优选实施例中生成符号表、语法树和控制流图的过程示意图;图5是本发明优选实施例中生成标记流和语法树的举例;图6是本发明优选实施例中生成标记流和符号表的举例;图7是本发明优选实施例中将工程语言编写的控制程序转换为中间级语言的举例;图8为本发明优选实施例中SCL语言进行验证和测试的结构示意图。
具体实施例方式下面结合附图来对本发明优选的实施例进行详细说明。如附图1所示,本发明所提供的用于对控制程序进行验证和测试的整体系统架构中涉及控制程序的验证和测试系统11、工程语言编写的控制程序12和控制器13,其中,控制程序的验证和测试系统11用于对采用工程语言编写的控制程序12进行语义分析,构建程序依赖图,并根据该程序依赖图将工程语言编写的控制程序12转换为采用通用的中间级语言表示的控制程序,再对该中间级语言表示的控制程序进行仿真,以验证和测试该控制程序的性能;在该控制程序验证和测试系统11验证通过后,再将工程语言编写的控制程序12下载至控制器13中运行。如附图2所示,本发明所提供的控制程序的验证和测试系统11,包括分析模块201、转换模块202和仿真模块203,其中,分析模块201,用于对采用工程语言编写的第一控制程序进行语义分析,构建程序依赖图;转换模块202,用于根据该程序依赖图,将第一控制程序转换为仿真模块203所支持的采用通用的中间级语言表示的第二控制程序;以及仿真模块203,用于对第二控制程序进行仿真,以验证和测试第二控制程序的性倉泛。本发明提供的控制程序的验证和测试系统可以直接对工程语言编写的控制程序进行验证和测试,避免了手动将工程语言编写的控制程序转换为仿真软件所支持的中间级语言,从而提高了仿真效率,并提高了准确度。并且,在需要对控制算法进行调整时,可直接调整工程语言编写的控制程序,避免了手动对仿真平台支持的中间级语言编写的控制程序进行修改再手动将该中间级语言编写的控制程序转换为工程语言,在保证控制算法性能的同时进一步提高了仿真效率和准确度。如附图3所示,本发明所提供的控制程序的验证和测试的详细方法流程如下:步骤301:对采用工程语言编写的第一控制程序的进行语义分析,构建程序依赖图。其中,对采用工程语言编写的第一控制程序的进行语义分析,构建程序依赖图的具体过程为:逐行分析第一控制程序中的操作码和操作数,得到符号表、语法树、控制流图以及基本程序块的集合;根据符号表、语法树和控制流图识别基本程序块之间的数据依赖关系和控制依赖关系;以及根据数据依赖关系和控制依赖关系构建程序依赖图。如附图4所示,得到符号表、语法树和控制流图具体为:对采用工程语言编写的第一控制程序401进行词法分析402 (Lexical analysis)形成符号表403 (Symbol Table)和标记流(token stream),并基于该标记流进行语法分析404 (Syntax analysis)得到语法树(Syntax tree)和控制流图405 (Control Flow),再基于符号表403、控制流图405和语法树转换为与第一控制程序401相应的采用通用的中间级语言表示的第二控制程序406。例如,附图5所示为对源工程语言501进行词法分析形成标记流502,再进行语法分析得到语法树503的示意,附图6所示为对源工程语言601进行词法分析形成标记流602和符号表603的示意。其中,基本程序块的集合可以通过识别第一控制程序中的关键字获得。步骤302:根据该程序依赖图,将第一控制程序转换为仿真模块所支持的采用通用的中间级语言表示的第二控制程序。其中,根据程序依赖图将第一控制程序转换为仿真模块所支持的采用通用的中间级语言表示的第二控制程序的具体过程为:复制预定义的中间级语言的源文件和头文件,根据基本程序块的集合进行中间级语言函数的转换,根据程序依赖图生成条件控制语句或流控制语句,以及将第一控制程序逐条语句转换为中间级语言代码。优选地,将第一控制程序逐条语句转换为中间级语言代码后,将转换后的中间级语言代码组织为具有标准接口的软件模块。优选地,中间级语目为C语目、C++语目或Java语目中任一。实际应用中,也可以是其他仿真平台能够支持的通用中间级语言,例如,在Matlab中也可以是m语言。优选地,本发明中的工程语言符合国际电工委员会(IEC)制定的工业控制编程语言标准 IEC61131-3。例如,如附图7显示了一个将工程语言编写的控制程序转换为中间级语言的示例,具体如下:步骤701:获取符合IEC61131-3的工程语言代码;步骤702:逐行读取工程语言代码后进行分析,即依次识别操作码、行、基本程序块和结构;步骤703:判断是否读取到工程语言代码的最后一行,若为最后一行,则执行步骤704,否则,执行步骤702 ;步骤704:读取并分析所有工程语言代码后,基于识别的操作码、行、基本程序块和结构构建程序依赖图;步骤705:添加C语言的源文件和头文件,进行指令和变量转换得到C程序,并组织为C函数,得到C程序;步骤706:将C程序下载至仿真平台进行验证;步骤707:在仿真平台上输出虚拟控制器t旲型。步骤303:基于仿真模块对第二控制程序进行仿真,以验证和测试第二控制程序的性能。优选地,本发明中的仿真模块可以是Matlab、Trnsys或Mathematica中任一。此处仅为举例,并不用于限制本发明,若还存在其他仿真平台用于对控制算法进行仿真,也可以用于本发明。实际应用中,仿真模块基于第二控制程序生成虚拟控制器模型,再基于该虚拟控制器模型进行仿真。实际应用中,若仿真模块为Matlab,可将实现本发明中对工程语言编写的控制程序进行语义分析,以及将工程语言转换为中间级语言的分析与转换模块以S函数的形式重新封装,并嵌入到Matlab软件平台中,在对工程语言编写的第一控制程序进行仿真时,直接将该第一控制程序下载至以S函数表示的分析与转换模块中即可。在一个具体实施例中,如附图8所示,仿真平台为Matlab的仿真环境(Matlab/Simulink),采用的工程语言为结构化控制语言(Structure Control Language, SCL),分析与转换模块以S函数的形式进行封装后嵌入Matlab仿真平台800中。将SCL语言编写的控制程序801下载至分析与转换模块802中,该分析与转换模块802将SCL语言转换为Matlab仿真平台支持的中间语言,分析与转换模块802还连接在有Matlab仿真平台中构建的输入模块803和输出模块804,从而形成完整的SCL控制程序验证和测试平台。其中,SCL语言编写的程序可以通过Matlab内置的编辑器或已有的独立的工程语言编辑器(如Siemens Step7)生成。尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下,可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
权利要求
1.一种控制程序的验证和测试方法,其特征在于,包括: 分析步骤,对采用工程语言编写的第一控制程序进行语义分析,构建程序依赖图; 转换步骤,根据所述程序依赖图,将所述第一控制程序转换为仿真模块所支持的采用通用的中间级语言表示的第二控制程序;以及 仿真步骤,基于所述仿真模块对所述第二控制程序进行仿真,以验证和测试所述第二控制程序的性能。
2.按权利要求1所述的方法,其中,所述分析步骤包括: 逐行分析所述第一控制程序中的操作码和操作数,得到符号表、语法树、控制流图以及基本程序块的集合; 根据所述符号表、语法树和控制流图识别所述基本程序块之间的数据依赖关系和控制依赖关系;以及 根据所述数据依赖关系和控制依赖关系构建所述程序依赖图。
3.按权利要求2所述的方法,其中,所述转换步骤包括: 复制预定义的中间级语言的源文件和头文件; 根据所述基本程序块的集合进行中间级语言函数的转换; 根据所述程序依赖图生成条件控制语句或流控制语句;以及 将所述第一控制程序逐条语句转换为中间级语言代码。
4.按权利要求3所述的方法,其中,将所述第一控制程序逐条语句转换为中间级语言代码后,将转换后的中间级语言代码组织为具有标准接口的软件模块。
5.按权利要求1所述的方法,其中,所述中间级语言为C语言、C++语言或Java语言中任一。
6.按权利要求1-5任一项所述的方法,其中,所述工程语言符合国际电工委员会IEC制定的工业控制编程语言标准IEC61131-3。
7.按权利要求1所述的方法,其中,所述仿真模块为Matlab、Trnsys或Mathematica中任一。
8.一种控制程序的验证和测试系统,其特征在于,包括: 分析模块,用于对采用工程语言编写的第一控制程序进行语义分析,构建程序依赖图; 转换模块,用于根据所述程序依赖图,将所述第一控制程序转换为仿真模块所支持的采用通用的中间级语言表示的第二控制程序;以及 仿真模块,用于对所述第二控制程序进行仿真,以验证和测试所述第二控制程序的性倉泛。
9.按权利要求8所述的系统,其中,所述分析模块具体用于逐行分析所述第一控制程序中的操作码和操作数,得到符号表、语法树、控制流图以及基本程序块的集合,根据所述符号表、语法树和控制流图识别所述基本程序块之间的数据依赖关系和控制依赖关系,并根据所述数据依赖关系和控制依赖关系构建所述程序依赖图。
10.按权利要求9所述的系统,其中,所述转换模块具体用于:复制预定义的中间级语言的源文件和头文件,根据所述基本程序块的集合进行中间级语言函数的转换,根据所述程序依赖图生成条件控制语句或流控制语句,以及将所述第一控制程序逐条语句转换为中间级语言代码。
11.按权利要求10所述的系统,其中,所述转换模块还用于在转换后的中间级语言代码组织为具有标准接口的软件模块。
12.按权利要求8所述的系统,其中,所述中间级语言为C语言、C++语言或Java语言中任一。
13.按权利要求8-12任一项所述的系统,其中,所述工程语言符合国际电工委员会IEC制定的工业控制编程语言标准IEC61131-3。
14.按权利要求8所述的系统,其中,所述仿真模块为Matlab、Trnsys或Mathematica中 任一。
全文摘要
本发明提供了一种控制程序的验证和测试方法,用以直接对工程语言编写的控制程序进行验证和测试,从而提高仿真效率以及准确度。该控制程序的验证和测试方法包括分析步骤,对采用工程语言编写的第一控制程序进行语义分析,构建程序依赖图;转换步骤,根据所述程序依赖图,将所述第一控制程序转换为仿真模块所支持的采用通用的中间级语言表示的第二控制程序;以及仿真步骤,基于所述仿真模块对所述第二控程序进行仿真,以验证和测试所述第二控制程序的性能。本发明还提供了一种控制程序的验证和测试系统。
文档编号G06F11/36GK103092747SQ201110332600
公开日2013年5月8日 申请日期2011年10月27日 优先权日2011年10月27日
发明者龙飞, 介鸣, 潘莉 申请人:西门子公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1