CN103092747B - 一种控制程序的验证和测试方法及系统 - Google Patents

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

Info

Publication number
CN103092747B
CN103092747B CN201110332600.4A CN201110332600A CN103092747B CN 103092747 B CN103092747 B CN 103092747B CN 201110332600 A CN201110332600 A CN 201110332600A CN 103092747 B CN103092747 B CN 103092747B
Authority
CN
China
Prior art keywords
language
program
control program
intergrade
control
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
Application number
CN201110332600.4A
Other languages
English (en)
Other versions
CN103092747A (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.)
Siemens AG
Original Assignee
Siemens AG
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 Siemens AG filed Critical Siemens AG
Priority to CN201110332600.4A priority Critical patent/CN103092747B/zh
Publication of CN103092747A publication Critical patent/CN103092747A/zh
Application granted granted Critical
Publication of CN103092747B publication Critical patent/CN103092747B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明提供了一种控制程序的验证和测试方法,用以直接对工程语言编写的控制程序进行验证和测试,从而提高仿真效率以及准确度。该控制程序的验证和测试方法包括:分析步骤,对采用工程语言编写的第一控制程序进行语义分析,构建程序依赖图;转换步骤,根据所述程序依赖图,将所述第一控制程序转换为仿真模块所支持的采用通用的中间级语言表示的第二控制程序;以及仿真步骤,基于所述仿真模块对所述第二控程序进行仿真,以验证和测试所述第二控制程序的性能。本发明还提供了一种控制程序的验证和测试系统。

Description

一种控制程序的验证和测试方法及系统
技术领域
本发明涉及自动控制领域,尤其涉及一种控制程序的验证和测试方法及系统。
背景技术
随着自动化行业的迅速发展,自动化市场出现了越来越多的大型自动控制系统,以及越来越多的新技术或新设备。同时,随着自动化设备或系统的使用者提出的要求越来越多,控制系统所采用的控制算法的设计面临以下挑战:更多的针对不同方面的性能要求,例如,系统稳定性以及效率;新的技术或设备的引入对控制算法的复杂度要求更高;政府或工业系统指定的标准使得对控制算法的性能要求更高。
目前,大部分自动控制系统的设计者在设计简单的控制算法时,完全凭借经验进行设计,而并不进行仿真验证,并且,对控制算法进行修改也是现场进行的。因此,尽管在开发阶段花费了大量的时间和精力,但是控制算法的性能却无法得到保证。
在另一种设计方案中,控制策略开发者使用仿真工具或仿真平台(例如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(Lexicalanalysis)形成符号表403(SymbolTable)和标记流(tokenstream),并基于该标记流进行语法分析404(Syntaxanalysis)得到语法树(Syntaxtree)和控制流图405(ControlFlow),再基于符号表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:在仿真平台上输出虚拟控制器模型。
步骤303:基于仿真模块对第二控制程序进行仿真,以验证和测试第二控制程序的性能。
优选地,本发明中的仿真模块可以是Matlab、Trnsys或Mathematica中任一。此处仅为举例,并不用于限制本发明,若还存在其他仿真平台用于对控制算法进行仿真,也可以用于本发明。
实际应用中,仿真模块基于第二控制程序生成虚拟控制器模型,再基于该虚拟控制器模型进行仿真。
实际应用中,若仿真模块为Matlab,可将实现本发明中对工程语言编写的控制程序进行语义分析,以及将工程语言转换为中间级语言的分析与转换模块以S函数的形式重新封装,并嵌入到Matlab软件平台中,在对工程语言编写的第一控制程序进行仿真时,直接将该第一控制程序下载至以S函数表示的分析与转换模块中即可。
在一个具体实施例中,如附图8所示,仿真平台为Matlab的仿真环境(Matlab/Simulink),采用的工程语言为结构化控制语言(StructureControlLanguage,SCL),分析与转换模块以S函数的形式进行封装后嵌入Matlab仿真平台800中。将SCL语言编写的控制程序801下载至分析与转换模块802中,该分析与转换模块802将SCL语言转换为Matlab仿真平台支持的中间语言,分析与转换模块802还连接在有Matlab仿真平台中构建的输入模块803和输出模块804,从而形成完整的SCL控制程序验证和测试平台。其中,SCL语言编写的程序可以通过Matlab内置的编辑器或已有的独立的工程语言编辑器(如SiemensStep7)生成。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下,可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。

Claims (10)

1.一种控制程序的验证和测试方法,其特征在于,包括:
分析步骤,对采用工程语言编写的第一控制程序进行语义分析,构建程序依赖图;
转换步骤,根据所述程序依赖图,将所述第一控制程序转换为仿真模块所支持的采用通用的中间级语言表示的第二控制程序;以及
仿真步骤,基于所述仿真模块对所述第二控制程序进行仿真,以验证和测试所述第二控制程序的性能;
其中,所述分析步骤包括:
逐行分析所述第一控制程序中的操作码和操作数,得到符号表、语法树、控制流图以及基本程序块的集合;
根据所述符号表、语法树和控制流图识别所述基本程序块之间的数据依赖关系和控制依赖关系;以及
根据所述数据依赖关系和控制依赖关系构建所述程序依赖图;
所述转换步骤包括:
复制预定义的中间级语言的源文件和头文件;
根据所述基本程序块的集合进行中间级语言函数的转换;
根据所述程序依赖图生成条件控制语句或流控制语句;以及
将所述第一控制程序逐条语句转换为中间级语言代码。
2.如权利要求1所述的方法,其中,将所述第一控制程序逐条语句转换为中间级语言代码后,将转换后的中间级语言代码组织为具有标准接口的软件模块。
3.如权利要求1所述的方法,其中,所述中间级语言为C语言、C++语言或Java语言中任一。
4.如权利要求1-3任一项所述的方法,其中,所述工程语言符合国际电工委员会IEC制定的工业控制编程语言标准IEC61131-3。
5.如权利要求1所述的方法,其中,所述仿真模块为Matlab、Trnsys或Mathematica中任一。
6.一种控制程序的验证和测试系统,其特征在于,包括:
分析模块,用于对采用工程语言编写的第一控制程序进行语义分析,构建程序依赖图;
转换模块,用于根据所述程序依赖图,将所述第一控制程序转换为仿真模块所支持的采用通用的中间级语言表示的第二控制程序;以及
仿真模块,用于对所述第二控制程序进行仿真,以验证和测试所述第二控制程序的性能;
其中,所述分析模块具体用于逐行分析所述第一控制程序中的操作码和操作数,得到符号表、语法树、控制流图以及基本程序块的集合,根据所述符号表、语法树和控制流图识别所述基本程序块之间的数据依赖关系和控制依赖关系,并根据所述数据依赖关系和控制依赖关系构建所述程序依赖图;
所述转换模块具体用于:复制预定义的中间级语言的源文件和头文件,根据所述基本程序块的集合进行中间级语言函数的转换,根据所述程序依赖图生成条件控制语句或流控制语句,以及将所述第一控制程序逐条语句转换为中间级语言代码。
7.如权利要求6所述的系统,其中,所述转换模块还用于将转换后的中间级语言代码组织为具有标准接口的软件模块。
8.如权利要求6所述的系统,其中,所述中间级语言为C语言、C++语言或Java语言中任一。
9.如权利要求6-8任一项所述的系统,其中,所述工程语言符合国际电工委员会IEC制定的工业控制编程语言标准IEC61131-3。
10.如权利要求6所述的系统,其中,所述仿真模块为Matlab、Trnsys或Mathematica中任一。
CN201110332600.4A 2011-10-27 2011-10-27 一种控制程序的验证和测试方法及系统 Active CN103092747B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110332600.4A CN103092747B (zh) 2011-10-27 2011-10-27 一种控制程序的验证和测试方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110332600.4A CN103092747B (zh) 2011-10-27 2011-10-27 一种控制程序的验证和测试方法及系统

Publications (2)

Publication Number Publication Date
CN103092747A CN103092747A (zh) 2013-05-08
CN103092747B true CN103092747B (zh) 2016-06-22

Family

ID=48205348

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110332600.4A Active CN103092747B (zh) 2011-10-27 2011-10-27 一种控制程序的验证和测试方法及系统

Country Status (1)

Country Link
CN (1) CN103092747B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104091013A (zh) * 2014-07-02 2014-10-08 中国科学院软件研究所 一种Simulink图形模型的形式验证方法
CN107193745B (zh) * 2017-05-26 2019-10-29 中国人民解放军信息工程大学 PLC程序到NuSMV输入模型的自动化构建方法
CN109143953B (zh) * 2018-06-26 2020-04-24 华东师范大学 一种基于中间语言的plc程序验证方法
CN109117362B (zh) * 2018-06-26 2020-08-25 华东师范大学 一种基于中间语言的plc程序验证系统
CN110990293B (zh) * 2019-12-17 2023-08-11 北京同有飞骥科技股份有限公司 自动校验测试方法及系统
CN112416320A (zh) * 2020-11-18 2021-02-26 上海肇观电子科技有限公司 运行数据流图的方法、电子电路、电子设备和介质
CN115328811B (zh) * 2022-10-11 2022-12-16 北京安帝科技有限公司 用于工控网络仿真的程序语句测试方法、装置、电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101004676A (zh) * 2006-01-18 2007-07-25 大同股份有限公司 高阶程序语言自动转换成活动图的方法
CN101719096A (zh) * 2009-12-29 2010-06-02 北京航空航天大学 一种提高实时嵌入式系统测试脚本执行速度的方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5045666B2 (ja) * 2006-02-20 2012-10-10 富士通株式会社 プログラム解析方法、プログラム解析装置およびプログラム解析プログラム
CN101251823B (zh) * 2008-03-17 2010-08-25 北京天碁科技有限公司 Dsp汇编语言程序验证方法及其装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101004676A (zh) * 2006-01-18 2007-07-25 大同股份有限公司 高阶程序语言自动转换成活动图的方法
CN101719096A (zh) * 2009-12-29 2010-06-02 北京航空航天大学 一种提高实时嵌入式系统测试脚本执行速度的方法

Also Published As

Publication number Publication date
CN103092747A (zh) 2013-05-08

Similar Documents

Publication Publication Date Title
CN103092747B (zh) 一种控制程序的验证和测试方法及系统
CN106371813B (zh) 一种基于Simulink的电动汽车电机控制器软件生成方法
KR100744886B1 (ko) 아사달 : 휘처 기반 소프트웨어 제품라인 개발 환경을제공하는 시스템
EP1855194B1 (en) Synchronization of a graphical program and a robot program
CN103279418B (zh) 一种组态控制信息的测试方法和装置
CN104391791B (zh) 嵌入式控制算法的测试方法及装置
KR20080065936A (ko) 동적 피드백 제어 시스템 시뮬레이팅 방법, 시뮬레이션동적 피드백 제어 시스템 준비 방법 및 동적 피드백 제어시스템 시뮬레이팅 시스템
Soliman et al. Transformation of function block diagrams to Uppaal timed automata for the verification of safety applications
CN108197026A (zh) 风力发电机组仿真软件测试方法、装置、设备及存储介质
CN107346249A (zh) 一种基于模型的计算机软件开发方法
CN106021816A (zh) 一种基于行为树的分布式系统行为仿真分析工具的实现方法
Abalov et al. Using the SimInTech dynamic modeling environment to build and check the operation of automation systems
Preuße et al. Closed-loop system modeling, validation, and verification
CN105700934A (zh) 一种智能编译方法和智能编译系统
Barth et al. Object-oriented engineering data exchange as a base for automatic generation of simulation models
Oppelt et al. Capability-analysis of co-simulation approaches for process industries
CN106021109A (zh) 一种面向程序结构分析自动化框架模型
CN107340995A (zh) 一种牵引控制应用软件开发系统
KR20190094779A (ko) Plc 명령어 컴파일러 테스트케이스 자동 생성 장치
CN113448571B (zh) 一种基于matlab的数字信号处理器代码快速生成方法
Yoo et al. An integrated software development framework for PLC & FPGA based digital I&Cs
KR20070049126A (ko) 아사달 : 휘처 기반 소프트웨어 제품라인 개발 환경을제공하는 시스템
KR20140141941A (ko) 인버터 기능 시험장치 및 시험방법
CN110532177A (zh) 一种面向plc程序的自动化测试用例生成系统
JP2009515243A (ja) ホストコンピュータ上で実行可能なシミュレーションプログラムを生成する方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant