CN109271237B - 仿真控制方法和装置 - Google Patents
仿真控制方法和装置 Download PDFInfo
- Publication number
- CN109271237B CN109271237B CN201811196316.7A CN201811196316A CN109271237B CN 109271237 B CN109271237 B CN 109271237B CN 201811196316 A CN201811196316 A CN 201811196316A CN 109271237 B CN109271237 B CN 109271237B
- Authority
- CN
- China
- Prior art keywords
- parameters
- simulation control
- script file
- script
- memory space
- 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
Images
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
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B17/00—Systems involving the use of models or simulators of said systems
- G05B17/02—Systems involving the use of models or simulators of said systems electric
-
- 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/445—Program loading or initiating
- G06F9/44557—Code layout in executable memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Automation & Control Theory (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供了一种仿真控制方法和装置,应用于工业仿真平台,该方法包括:获取用户输入的用于指示仿真控制逻辑的脚本文件;解析该脚本文件中各个参数之间的逻辑关系;根据解析出的脚本文件中各个参数之间的逻辑关系,确定该脚本文件中各个参数各自对应的偏移地址;分配用于执行该仿真控制逻辑的内存空间;根据解析出的各个参数之间的逻辑关系,在该内存空间中执行仿真控制;根据该脚本文件中各个参数各自对应的偏移地址以及分配的该内存空间,从该内存空间中获取该仿真控制所得到的输出参数的参数值。本申请的方案可以降低工业仿真控制的复杂度。
Description
技术领域
本申请涉及工业控制技术领域,尤其涉及一种仿真控制方法和装置。
背景技术
工业仿真控制是指对工业控制***的流程以及工艺的仿真,主要用于工业控制***的流程验证以及主要工艺的模拟。在工业仿真控制中经过需要通过控制器(如,逻辑运算控制器、比例-积分-微分控制器等)来实现自动化控制。例如,如果需要在阀门1和阀门2同时开启的情况下,控制阀门3开启,则需要在工业仿真控制***中配置用于实现与运算的逻辑控制器(俗称的AND控制器)。
然而,工业仿真控制中,常见的控制器的控制逻辑都是固定的,且控制逻辑较为简单,只能实现特定的控制功能。如果需要实现较为复杂的逻辑控制,则需要依据当前所需的控制逻辑开发一个专门的控制器,且,如果控制逻辑稍微有一点改变,用户就必须重新调整控制器的内部代码,这样必然大大增加了工业仿真控制的复杂度。
发明内容
有鉴于此,本申请提供了一种仿真控制方法和装置,以降低工业仿真控制的复杂度。
为实现上述目的,一方面,本申请提供了一种仿真控制方法,应用于工业仿真平台,所述方法包括:
获取用户输入的用于指示仿真控制逻辑的脚本文件;
解析所述脚本文件中各个参数之间的逻辑关系;
根据解析出的脚本文件中各个参数之间的逻辑关系,确定所述脚本文件中各个参数各自对应的偏移地址;
分配用于执行所述仿真控制逻辑的内存空间;
根据解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制;
根据所述脚本文件中各个参数各自对应的偏移地址以及分配的所述内存空间,从所述内存空间中获取所述仿真控制所得到的输出参数的参数值。
优选的,在所述根据解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制之前,还包括:
获取所述工业仿真平台模拟出的输入参数的参数值;
将所述输入参数的参数值存储到所述内存空间;
所述根据解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制,包括:
根据解析出的各个参数之间的逻辑关系以及所述内存空间中存储的所述输入参数的参数值,在所述内存空间中执行仿真控制。
优选的,所述解析所述脚本文件中各个参数之间的逻辑关系,包括:
解析所述脚本文件,以生成表征所述脚本文件中各个参数之间逻辑关系的抽象语法树;
所述根据解析出的脚本文件中各个参数之间的逻辑关系,确定所述脚本文件中各个参数各自对应的偏移地址,包括:
根据所述抽象语法树中各个参数之间的逻辑关系,确定所述脚本文件中各个参数各自对应的偏移地址。
优选的,所述解析所述脚本文件,以生成表征所述脚本文件中各个参数之间逻辑关系的抽象语法树,包括:
运行预置的脚本编译程序;
通过所述脚本编译程序解析所述脚本文件,以生成表征所述脚本文件中各个参数之间逻辑关系的抽象语法树。
优选的,在生成所述抽象语法树之后,还包括:
根据预置的语义规则,对所述抽象语法树进行语义检测;
当检测到所述抽象语法树中存在语义错误时,输出检测到的语义错误。
优选的,所述分配用于执行所述仿真控制逻辑的内存空间,包括:
为预置的脚本执行程序分配执行所述仿真控制逻辑所需的内存空间;
所述根据解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制,包括:
调用并运行所述预置的脚本执行程序;
利用所述脚本执行程序按照解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制。
另一方面,本申请还提供了一种仿真控制装置,应用于工业仿真平台,所述装置包括:
脚本获取单元,用于获取用户输入的用于指示仿真控制逻辑的脚本文件;
脚本解析单元,用于解析所述脚本文件中各个参数之间的逻辑关系;
地址确定单元,用于根据解析出的脚本文件中各个参数之间的逻辑关系,确定所述脚本文件中各个参数各自对应的偏移地址;
内存分配单元,用于分配用于执行所述仿真控制逻辑的内存空间;
脚本执行单元,用于根据解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制;
输出获取单元,用于根据所述脚本文件中各个参数各自对应的偏移地址以及分配的所述内存空间,从所述内存空间中获取所述仿真控制所得到的输出参数的参数值。
优选的,还包括:
输入读取获取单元,用于脚本执行单元在所述内存空间中执行仿真控制之前,获取所述工业仿真平台模拟出的输入参数的参数值;
输入存储单元,用于将所述输入参数的参数值存储到所述内存空间;
所述脚本执行单元,具体用于,根据解析出的各个参数之间的逻辑关系以及所述内存空间中存储的所述输入参数的参数值,在所述内存空间中执行仿真控制。
优选的,所述脚本解析单元,包括:
脚本解析子单元,用于解析所述脚本文件,以生成表征所述脚本文件中各个参数之间逻辑关系的抽象语法树;
所述地址确定单元,包括:
地址确定子单元,用于根据所述抽象语法树中各个参数之间的逻辑关系,确定所述脚本文件中各个参数各自对应的偏移地址。
优选的,所述脚本解析子单元,包括:
编译程序启动子单元,用于运行预置的脚本编译程序;
编译程序解析子单元,用于通过所述脚本编译程序解析所述脚本文件,以生成表征所述脚本文件中各个参数之间逻辑关系的抽象语法树。
由以上可知,与现有工业仿真平台直接配置编写有特定控制逻辑的控制器不同,在本申请实施例中,在工业仿真平台可以对用户输入的脚本文件进行解析编译,且,工业仿真平台会根据解析结果确定脚本文件中各个参数对应的偏移地址,并分配用于执行仿真控制的内存空间,从而使得工业仿真平台可以根据解析结果,在分配的内存空间执行该脚本文件对应的仿真控制,并最终根据参数的偏移地址,从该内存空间取得仿真控制所得到的结果。可见,当用户希望在工业仿真平台实现某种仿真控制时,只需编写用于指示该种仿真控制逻辑的脚本文件并输入到该工业仿真平台,该工业仿真平台便可以实现相应的仿真控制,从而无需针对每种控制逻辑单独编写具有相应控制逻辑的控制器代码,有利于提高工业仿真控制的便捷性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1示出了本申请一种仿真控制方法一个实施例的流程示意图;
图2a-图2c示出了本申请实施例中抽象语法树的示例图;
图3示出了本申请一种仿真控制方法又一个实施例的流程示意图;
图4示出了本申请一种仿真控制装置一个实施例的组成结构示意图;
图5示出了本申请一种仿真控制装置又一个实施例的组成结构示意图。
具体实施方式
本申请实施例的仿真控制方法和装置适用于工业仿真平台(也称为工业仿真控制平台),该工业仿真平台可以为部署有工业仿真控制软件的计算机设备,或者是部署有一套工业仿真控制软件的多设备集成***,本申请对于工业仿真平台的具体形式不加以限制。
发明人经过研究发现,工业仿真平台常用的AND控制器、PID控制器等控制器中控制逻辑是固定的,这样,如果每次想要实现一种控制逻辑就需要重新编写一套相应控制器的代码,从而使得工业控制复杂度较高。而发明人想,如果开发出一套能够兼容任意控制逻辑的控制器,则可以基于该控制器实现不同控制逻辑的仿真控制。基于此,如果工业仿真平台可以对用户输入的包含控制逻辑的脚本文件进行编译、执行,并最终可以获取到仿真执行结果,就可以基于仿真执行结果模拟出的其他工业设备的仿真控制,因此,本申请相当于开发出一套控制器程序,该控制器程序可以编译并执行用户输入的用于实现不同控制逻辑的脚本文件,这样,工业仿真平台通过运行该控制器程序就可以实现对于不同控制逻辑的仿真控制。
下面结合附图进行详细介绍。
如,参见图1,其示出了本申请一种工业仿真控制方法一个实施例的流程示意图,本实施例的方法可以应用于工业仿真平台,本实施例的方法可以包括:
S101,获取用户输入的用于指示仿真控制逻辑的脚本文件。
在本申请实施例中,用户只需要根据仿真控制的需求,编写出相应的脚本文件,而无需关心编写控制器的代码。
其中,该脚本文件包含用于实现仿真控制逻辑的源代码。具体的,该脚本文件中可以包含多个参数之间以及参数之间的关系。
S102,解析该脚本文件中各个参数之间的逻辑关系。
解析脚本文件的目的是为了使得工业仿真平台可以识别出脚本文件中所包含的各个参数以及参数之间的关系。该逻辑关系可以包括:脚本中各个参数的类型、参数之间的函数关系等等信息。
可以理解的是,解析脚本文件的具体方式可以有多种,只要是能够确定出脚本文件中的参数以及参数之间逻辑关系即可。
如,在一种实现方式中,可以解析该脚本文件,以生成表征该脚本文件中各个参数之间逻辑关系的抽象语法树(abstract syntax tree,AST)。该抽象语法树实际上就该是脚本文件中源代码的抽象语法结构的树状表现形式,该抽象语法树每个节点都表示源代码中的一种结构。
为了便于理解,举例说明:
如果脚本文件中一条源代码的语句为if-else语句,则该源代码的语句所转换出的抽象语法树的示例结构可以参见附图2a所示,由附图2a示出的抽象语法树可以看出,该源代码是一条if-else语句,且在该抽象语法树中不同节点分别表征了该语句中条件表达式、语句块以及else-if语句。
如果脚本文件中一条源代码语句为while语句,则该语句所转换出的抽象语法树的示例结构可以参见附图2b。相应的,如果源代码语句为FOR语句,则转换出的抽象语法树的示例结构可以参见附图2c。
当然,对于源代码中语句为其他语句的情况下,所转换出的抽象语句树的具体结构也会有所不同,在此不再一一列举。
可选的,仿真开发平台可以预先获取编写的脚本编译程序的代码,并在仿真开发平台中内置该脚本编译程序的代码,这样,通过运行该脚本编译程序的代码,使得该仿真开发平台部署有该脚本编译程序对应的脚本编译器(或者称为脚本解析器)。相应的,通过运行该脚本编译程序(或者说脚本编译器),可以通过该脚本编译程序编译该脚本文件,并生成脚本文件对应的抽象语法树。
可以理解的是,为了避免脚本文件中出现语法错误,而导致后续仿真控制过程出错或者无法正常执行,在对脚本文件进行解析之后,还可以按照预设的语法规则检测脚本文件中是否存在语义错误。如,在将脚本文件转换为抽象语法树的情况中,可以按照预置的语法规则,对该抽象语法树进行语义检测;当检测到该抽象语法树中存在语义错误时,可以输出检测到的语义错误。其中,输出语义错误可以是输出错误提示信息,以提示用户存在语义错误,以便用户修改脚本文件中的代码。其中,在该错误提示信息中可以具体错误原因以及存在语义错误的具体信息。
S103,根据解析出的脚本文件中各个参数之间的逻辑关系,确定该脚本文件中各个参数各自对应的偏移地址。
其中,偏移地址就是计算机设备里的内存分段后,在段内某一地址相对于段首位地址的偏移量。
可以理解的是,脚本文件在被之前,分配用于运行脚本地址的内存空间的首地址是不确定的,但是脚本文件中各个参数相当于首地址的偏移地址是固定的,通过解析该脚本文件可以得到各个参数的偏移地址。此处的偏移地址就是参数在全局表中的偏移位置。
可选的,在生成抽象语法树的前提下,可以根据该抽象语法树中各个参数之间的逻辑关系,确定该脚本文件中各个参数各自对应的偏移地址。
在实际应用中,仿真开发平台也可以构建偏移地址表,在偏移地址表中可以存储确定出的各个参数各自对应的偏移地址。
S104,分配用于执行该仿真控制逻辑的内存空间。
可以理解的是,解析脚本文件之后,为了实现仿真控制,需要执行解析后的脚本文件,为了保证解析后的脚本文件的执行,需要分配执行解析后的脚本文件所需的内存空间,也就是分配用于执行该脚本文件对应的仿真控制逻辑的内存空间。
S105,根据解析出的各个参数之间的逻辑关系,在该内存空间中执行仿真控制。
根据对脚本文件的解析结果,可以在分配的内存空间执行解析后的脚本文件,从而实现相应的仿真控制。
可选的,基于解析后的脚本文件执行工业仿真可以通过预置的脚本执行程序(即俗称的脚本执行器)来实现。具体的,可以预先编写用于脚本执行程序的代码,则可以调用并运行预置的脚本执行程序。相应的,步骤S104中可以是为该脚本执行程序分配运行所需的内存空间。在此基础上,可以通过该脚本执行程序基于解析出的各个参数的逻辑关系,在分配的内存空间中执行仿真控制。
其中,编写脚本执行程序可以按照预先定义的词法,使用开源的开发工具编写脚本执行程序,如,利用开源的flex或者bison等开发工具编写脚本执行程序。相应的,前面提到的脚本编译程序也可以采用开源的开发工具编写,具体不加以限制。
可选的,在S102将脚本文件转换为抽象语法树的前提下,该步骤S105可以是基于抽象语法树,在内存空间中执行抽象语法树所表征的控制逻辑。
S106,根据该脚本文件中各个参数各自对应的偏移地址以及分配的该内存空间,从该内存空间中获取该仿真控制所得到的输出参数的参数值。
可以理解的是,基于脚本文件执行仿真控制之后会得到仿真控制的输出参数,而这些输出参数是作为工业仿真平台中其他模拟设备的输入参数,以模拟对其他模拟设备的工业控制过程,因此,在内存空间执行了解析后的脚本文件之后,还需要获取从该内存空间获取本次执行所得到的输出参数的参数值。
其中,在用于执行仿真控制逻辑的内存空间确定,且该脚本文件中各个参数的偏移地址确定的情况下,就可以确定出各个参数在该内存空间的存储地址。相应的,根据各个参数在该内存空间中的存储地址,就可以从内存空间中取出仿真控制过程中各个参数的具体取值,从而获取到作为输出参数的各个参数在内存空间中的参数值。
可以理解的是,在工业控制过程中,有时候还需要获取本次仿真控制中输入参数的参数值,该输入参数的参数值可以为工业仿真平台中模拟出的一台或者多台设备的输出参数的参数值。相应的,可以将获取到的输入参数的参数值存储到该分配的内存空间中,这样,可以根据解析出的各个参数之间的逻辑关系以及该内存空间中存储的输入参数的参数值,在内存空间中执行仿真控制。
为了便于理解,举例说明,仍以工业仿真平台的仿真控制场景为,依据模拟出的阀门1和阀门2的开关状态,来控制模拟的阀门3的开关状态为例。假设阀门1和阀门2均处于开启状态时,控制开启阀门3,则在该工业仿真控制场景中,输入参数包括:表征阀门1的开关状态的第一参数的参数值,以及表征阀门2的开关状态的第二参数的参数值。而脚本文件的仿真控制逻辑就是对第一参数和第二参数的参数值进行与运算,而与运算的结果就是仿真控制的输出结果,而该输出结果的值会输出到模拟的阀门3,以实现阀门3的开启或者关闭。例如,假设第一参数与第二参数的取值均为1,且1表示阀门开启,那么第一参数与第二参数进行与运算的输出参数的取值为1。将输出参数的取值1输入到模拟的阀门3,则可以控制阀门3处于开启状态。
由以上可知,与现有工业仿真平台直接配置编写有特定控制逻辑的控制器不同,在本申请实施例中,在工业仿真平台可以对用户输入的脚本文件进行解析编译,且,工业仿真平台会根据解析结果确定脚本文件中各个参数对应的偏移地址,并分配用于执行仿真控制的内存空间,从而使得工业仿真平台可以根据解析结果,在分配的内存空间执行该脚本文件对应的仿真控制,并最终根据参数的偏移地址,从该内存空间取得仿真控制所得到的结果。可见,当用户希望在工业仿真平台实现某种仿真控制时,只需编写用于指示该种仿真控制逻辑的脚本文件并输入到该工业仿真平台,该工业仿真平台便可以实现相应的仿真控制,从而无需针对每种控制逻辑单独编写具有相应控制逻辑的控制器代码,有利于提高工业仿真控制的便捷性。
另外,由于工业仿真平台可以独立解析并执行用户输入的脚本文件,从而无需在与外部其他设备或者跨进程与工业仿真平台中其他模块进行数据交互的前提下,就可以实现仿真控制,有利于减少由于数据传输交互而导致的资源耗费,也有利于提高仿真控制的效率。
为了便于理解本申请的方案,下面以一种实施例为例对本申请的方案进行详细介绍,参见图3,其示出了本申请一种仿真控制方法又一个实施例的流程示意图,本实施例的方法应用于如上所述的工业仿真平台,本实施例的方法可以包括:
S301,获取用户输入的用于指示仿真控制逻辑的脚本文件。
S302,调用并运行预置的脚本编译程序,通过该脚本编译程序解析该脚本文件,以生成表征该脚本文件中各个参数之间逻辑关系的抽象语法树。
以上步骤可以参见前面实施例的相关介绍,在此不再赘述。
其中,生成抽象语法树可以根据预置的语法规则生成。
可选的,在生成抽象语法树之前,可以根据语法规则对脚本文件进行语法检测,如果检测到语法错误,则提示相应的语法错误。
S303,根据预置的语义规则,对所述抽象语法树进行语义检测。
其中,语义规则用于检测抽象语法树是否存在语义错误,进而分析出脚本文件的源代码中是否存在语法错误。
如,定义语法规则:类型名变量名‘=’变量名‘;’。
对于语句int a=b,根据以上语法规则,语句的语法是正确的,该条语句可以根据以上语法规则生成抽象语法树。但是该语句的语义却不正确,因为脚本执行程序(脚本执行器)并不知道b是什么,所以无法执行这条语句。
S304,当检测到该抽象语法树中存在语义错误时,输出检测到的语义错误。
其中,当检测到语义错误时,可以输出具体检测到的语义错误,以便提示用户修正该脚本文件中的代码;而如果未检测到语义错误,则可以执行基于抽象语法树进行仿真控制的过程。
当然,以上步骤S303和步骤S304为可选步骤,可以根据需要选择执行或者不执行这两个步骤。
S305,当抽象语法树中不存在语义错误时,根据该抽象语法树中各个参数之间的逻辑关系,确定该脚本文件中各个参数各自对应的偏移地址。
其中,通过分析抽象语法树可以得到各个参数之间的逻辑关系。
S306,为预置的脚本执行程序分配用于执行该抽象语法树的内存空间。
其中,该内存空间也就是分配给该脚本执行程序,以用于执行该脚本文件对应的仿真控制逻辑所需的内存空间。
S307,将该输入参数的参数值存储到该内存空间。
如,根据步骤S305中各个参数对应的偏移地址,确定输入参数对应的偏移地址,然后根据输入参数的偏移地址,确定输入参数在内存空间的存储地址,从而将输入参数的参数值存储到内存空间的该存储地址中。
S308,调用并运行该脚本执行程序,利用该脚本执行程序在该内存空间中遍历该抽象语法树,以在该内存空间中执行抽象语法树所表征的仿真控制。
其中,通过脚本执行程序遍历该抽象语法树的过程就是基于该抽象语法树所表征的仿真控制逻辑执行仿真控制的过程。具体的,可以依次遍历抽象语法树中各个节点(也称为结点),解释各个节点的意义。且,在执行节点前,会为节点分配栈空间和全局表空间,脚本执行程序的地址空间就是这两个空间。
其中,部分节点的解析如下:
作用域开始,分配栈空间,只需增栈指针即可;
作用域结束,释放栈空间,只需减少栈指针即可。
为了便于理解,下面结合几种场景语句对应的抽象语法树,对遍历抽象语法树的过程进行介绍。
如,对于if-else语句对应的附图2a所示的抽象语法树而言,脚本执行程序在执行到该抽象语法树中的“IF”节点之后,会先执行条件表达式这一节点,并读取条件表达式的值。如果条件表达式的值为0(条件表达式的值为0,则说明条件表达式对应的条件不成立),则会执行抽象语法树中ELSE-IF语句;如果条件表达式的值为1(说明条件表达式对应的条件成立),则会执行该抽象语法树中IF语句块的节点。
又如,对于while语句对应的附图2b所示的抽象语法树,脚本执行程序遍历到该抽象语法树的“While”节点时,执行逻辑为:执行表达式节点,遍历表达式节点对应的子树。如果读取到表达式节点的值为0,则跳到“While”节点的父节点;如果表达式节点的值为1,则执行语句块的节点,遍历该语句块节点对应的子树,并返回“While”节点。
又如,对于for语句对应的附图2c所示的抽象语法树,脚本执行程序执行到该抽象语法树的FOR节点后,执行逻辑为:脚本执行程序执行初始化表达式,遍历初始化表达式对应的子树,并返回FOR节点;然后,执行条件表达式节点,遍历条件表达式节点对应的子树,并返回FOR节点;读取条件表达式的值,如果条件表达式的值为0,则返回FOR节点的父节点;如果条件表达式的值为1,则执行语句块节点,遍历语句块节点对应的子树,并返回FOR节点;然后,执行迭代表达式节点,遍历迭代表达式节点对应的子树,并返回FOR,以重现执行初始化表达式节点,直至调回到FOR节点的父节点。
又如,对于do-while语句的抽象语法树,其与while语句的情况类似,只不过脚本执行程序对节点遍历顺序颠倒了下而已。
又如,对于break语句的抽象语法树,可以从该break节点向上执行直到遇到循环节点,执行过程中释放局部变量空间,释放循环节点的作用域,跳转到该循环节点的父节点
又如,对于continue语句的抽象语法树,脚本执行程序从该continue结点向上执行直到遇到循环结点,执行过程中释放局部变量空间,执行到循环结点的下一个需要遍历的子树。
当然,实际应用中,还有其他语句对应的抽象语法树,对于其他语句的抽象语法树过程类似,在此不再赘述。
可以理解的是,脚本文件一般会包含多条语句,因此,以上提到的一种或者多种语句对应的抽象语法树有可能仅仅是脚本文件转换出的抽象语法树的部分子树,也就是说脚本文件转换出的抽象语法树实际上可以由以上一种或多种语句对应的抽象语法树组成。
为了便于理解,举例说明:
以脚本文件中的语句“for(int i=0;i<100;s+=i,i+=1)”为例说明,该语句转换出的抽象语法树的结构如图4所示。
基于图4所示的抽象语法树,脚本执行程序执行过程为:
脚本执行程序先从主声明Statements走到For节点。
首先,从For节点走到第一声明节点,并分别执行第一声明节点的3个子节点,以执行将i的值设为0,再返回到For结点。
其次,会遍历到到“<”节点,并执行表达式i<100。如果该表达式的最后结果为0,则返回For的父结点,即主声明节点;如果该表达式的最后结果为1,则遍历到第二声明节点,并分别执行S+=i和i+=1这两个节点,再返回For结点。
最后,继续遍历到“<”节点,并继续重复以上过程直到返回主声明节点结束,并读取出内存中s的值,s的值就是输出参数的参数值。
S309,根据该脚本文件中各个参数各自对应的偏移地址,从该内存空间中获取仿真控制所得到的输出参数的参数值。
S310,将输出参数的参数值输入给该脚本文件指示的仿真控制逻辑中对应的模拟被控设备端。
对应本申请的一种仿真控制方法,本申请还提供了一种仿真控制装置。如,参见图5,其示出了本申请一种仿真控制装置一个实施例的组成结构示意图,本实施例的装置应用于工业仿真平台,该装置包括:
脚本获取单元501,用于获取用户输入的用于指示仿真控制逻辑的脚本文件;
脚本解析单元502,用于解析所述脚本文件中各个参数之间的逻辑关系;
地址确定单元503,用于根据解析出的脚本文件中各个参数之间的逻辑关系,确定所述脚本文件中各个参数各自对应的偏移地址;
内存分配单元504,用于分配用于执行所述仿真控制逻辑的内存空间;
脚本执行单元505,用于根据解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制;
输出获取单元506,用于根据所述脚本文件中各个参数各自对应的偏移地址以及分配的所述内存空间,从所述内存空间中获取所述仿真控制所得到的输出参数的参数值。
在一种可能的实现方式中,该装置还可以包括:
输入读取获取单元,用于脚本执行单元在所述内存空间中执行仿真控制之前,获取所述工业仿真平台模拟出的输入参数的参数值;
输入存储单元,用于将所述输入参数的参数值存储到所述内存空间;
所述脚本执行单元,具体用于,根据解析出的各个参数之间的逻辑关系以及所述内存空间中存储的所述输入参数的参数值,在所述内存空间中执行仿真控制。
可选的,所述脚本解析单元,包括:
脚本解析子单元,用于解析所述脚本文件,以生成表征所述脚本文件中各个参数之间逻辑关系的抽象语法树;
所述地址确定单元,包括:
地址确定子单元,用于根据所述抽象语法树中各个参数之间的逻辑关系,确定所述脚本文件中各个参数各自对应的偏移地址。
可选的,所述脚本解析子单元,包括:
编译程序启动子单元,用于运行预置的脚本编译程序;
编译程序解析子单元,用于通过所述脚本编译程序解析所述脚本文件,以生成表征所述脚本文件中各个参数之间逻辑关系的抽象语法树。
可选的,该装置还可以包括:
语义检测单元,用于在所述脚本解析子单元生成所述抽象语法树之后,根据预置的语义规则,对所述抽象语法树进行语义检测;
错误提示单元,用于当检测到所述抽象语法树中存在语义错误时,输出检测到的语义错误。
可选的,所述内存分配单元,具体为,用于为预置的脚本执行程序分配执行所述仿真控制逻辑所需的内存空间;
所述脚本执行单元,包括:
执行程序启动子单元,用于调用并运行所述预置的脚本执行程序;
脚本程序执行子单元,用于利用所述脚本执行程序按照解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种仿真控制方法,其特征在于,应用于工业仿真平台,所述方法包括:
获取用户输入的用于指示仿真控制逻辑的脚本文件;
解析所述脚本文件中各个参数之间的逻辑关系;
根据解析出的脚本文件中各个参数之间的逻辑关系,确定所述脚本文件中各个参数各自对应的偏移地址;
分配用于执行所述仿真控制逻辑的内存空间;
根据解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制;
根据所述脚本文件中各个参数各自对应的偏移地址以及分配的所述内存空间,从所述内存空间中获取所述仿真控制所得到的输出参数的参数值。
2.根据权利要求1所述的仿真控制方法,其特征在于,在所述根据解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制之前,还包括:
获取所述工业仿真平台模拟出的输入参数的参数值;
将所述输入参数的参数值存储到所述内存空间;
所述根据解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制,包括:
根据解析出的各个参数之间的逻辑关系以及所述内存空间中存储的所述输入参数的参数值,在所述内存空间中执行仿真控制。
3.根据权利要求1所述的仿真控制方法,其特征在于,所述解析所述脚本文件中各个参数之间的逻辑关系,包括:
解析所述脚本文件,以生成表征所述脚本文件中各个参数之间逻辑关系的抽象语法树;
所述根据解析出的脚本文件中各个参数之间的逻辑关系,确定所述脚本文件中各个参数各自对应的偏移地址,包括:
根据所述抽象语法树中各个参数之间的逻辑关系,确定所述脚本文件中各个参数各自对应的偏移地址。
4.根据权利要求3所述的仿真控制方法,其特征在于,所述解析所述脚本文件,以生成表征所述脚本文件中各个参数之间逻辑关系的抽象语法树,包括:
运行预置的脚本编译程序;
通过所述脚本编译程序解析所述脚本文件,以生成表征所述脚本文件中各个参数之间逻辑关系的抽象语法树。
5.根据权利要求3或4所述的仿真控制方法,其特征在于,在生成所述抽象语法树之后,还包括:
根据预置的语义规则,对所述抽象语法树进行语义检测;
当检测到所述抽象语法树中存在语义错误时,输出检测到的语义错误。
6.根据权利要求1所述的仿真控制方法,其特征在于,所述分配用于执行所述仿真控制逻辑的内存空间,包括:
为预置的脚本执行程序分配执行所述仿真控制逻辑所需的内存空间;
所述根据解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制,包括:
调用并运行所述预置的脚本执行程序;
利用所述脚本执行程序按照解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制。
7.一种仿真控制装置,其特征在于,应用于工业仿真平台,所述装置包括:
脚本获取单元,用于获取用户输入的用于指示仿真控制逻辑的脚本文件;
脚本解析单元,用于解析所述脚本文件中各个参数之间的逻辑关系;
地址确定单元,用于根据解析出的脚本文件中各个参数之间的逻辑关系,确定所述脚本文件中各个参数各自对应的偏移地址;
内存分配单元,用于分配用于执行所述仿真控制逻辑的内存空间;
脚本执行单元,用于根据解析出的各个参数之间的逻辑关系,在所述内存空间中执行仿真控制;
输出获取单元,用于根据所述脚本文件中各个参数各自对应的偏移地址以及分配的所述内存空间,从所述内存空间中获取所述仿真控制所得到的输出参数的参数值。
8.根据权利要求7所述的仿真控制装置,其特征在于,还包括:
输入读取获取单元,用于脚本执行单元在所述内存空间中执行仿真控制之前,获取所述工业仿真平台模拟出的输入参数的参数值;
输入存储单元,用于将所述输入参数的参数值存储到所述内存空间;
所述脚本执行单元,具体用于,根据解析出的各个参数之间的逻辑关系以及所述内存空间中存储的所述输入参数的参数值,在所述内存空间中执行仿真控制。
9.根据权利要求7所述的仿真控制装置,其特征在于,所述脚本解析单元,包括:
脚本解析子单元,用于解析所述脚本文件,以生成表征所述脚本文件中各个参数之间逻辑关系的抽象语法树;
所述地址确定单元,包括:
地址确定子单元,用于根据所述抽象语法树中各个参数之间的逻辑关系,确定所述脚本文件中各个参数各自对应的偏移地址。
10.根据权利要求9所述的仿真控制装置,其特征在于,所述脚本解析子单元,包括:
编译程序启动子单元,用于运行预置的脚本编译程序;
编译程序解析子单元,用于通过所述脚本编译程序解析所述脚本文件,以生成表征所述脚本文件中各个参数之间逻辑关系的抽象语法树。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811196316.7A CN109271237B (zh) | 2018-10-15 | 2018-10-15 | 仿真控制方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811196316.7A CN109271237B (zh) | 2018-10-15 | 2018-10-15 | 仿真控制方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109271237A CN109271237A (zh) | 2019-01-25 |
CN109271237B true CN109271237B (zh) | 2020-04-17 |
Family
ID=65196743
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811196316.7A Active CN109271237B (zh) | 2018-10-15 | 2018-10-15 | 仿真控制方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109271237B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112612471B (zh) * | 2020-11-19 | 2021-11-09 | 北京鸿渐科技有限公司 | 代码处理方法、装置、设备及存储介质 |
CN117389569B (zh) * | 2023-10-26 | 2024-06-14 | 重庆猪哥亮科技有限责任公司 | 一种程序解释执行方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103257925A (zh) * | 2013-04-28 | 2013-08-21 | 株洲南车时代电气股份有限公司 | 列车运行监控记录软件自动测试装置、***及其方法 |
CN103455476A (zh) * | 2012-05-29 | 2013-12-18 | 阿里巴巴集团控股有限公司 | 网络信息的处理方法和抽象语法树的建立方法及其装置 |
CN105809309A (zh) * | 2014-12-30 | 2016-07-27 | 国家电网公司 | 一种电力***安控策略仿真***及其仿真方法 |
CN106681169A (zh) * | 2015-11-10 | 2017-05-17 | 中国电力科学研究院 | 一种电力***安控仿真一体化平台及其仿真方法 |
CN106781810A (zh) * | 2017-02-06 | 2017-05-31 | 北京四方继保自动化股份有限公司 | 基于3d虚拟仿真***的风力发电机对中维护操作方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090089234A1 (en) * | 2007-09-28 | 2009-04-02 | Rockwell Automation Technologies, Inc. | Automated code generation for simulators |
-
2018
- 2018-10-15 CN CN201811196316.7A patent/CN109271237B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103455476A (zh) * | 2012-05-29 | 2013-12-18 | 阿里巴巴集团控股有限公司 | 网络信息的处理方法和抽象语法树的建立方法及其装置 |
CN103257925A (zh) * | 2013-04-28 | 2013-08-21 | 株洲南车时代电气股份有限公司 | 列车运行监控记录软件自动测试装置、***及其方法 |
CN105809309A (zh) * | 2014-12-30 | 2016-07-27 | 国家电网公司 | 一种电力***安控策略仿真***及其仿真方法 |
CN106681169A (zh) * | 2015-11-10 | 2017-05-17 | 中国电力科学研究院 | 一种电力***安控仿真一体化平台及其仿真方法 |
CN106781810A (zh) * | 2017-02-06 | 2017-05-31 | 北京四方继保自动化股份有限公司 | 基于3d虚拟仿真***的风力发电机对中维护操作方法 |
Non-Patent Citations (1)
Title |
---|
全***模拟器配置与仿真控制机制设计;叶利达;《中国优秀硕士学位论文全文数据库 信息科技辑》;20180215;第2018年卷(第2期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109271237A (zh) | 2019-01-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112100054B (zh) | 一种面向数据管控的程序静态分析方法和*** | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
WO2019237701A1 (zh) | 跨语言编程 | |
Mernik | An object-oriented approach to language compositions for software language engineering | |
CN108595334B (zh) | 一种计算Java程序动态切片的方法、装置及可读存储介质 | |
US20090328016A1 (en) | Generalized expression trees | |
US11294665B1 (en) | Computerized software version control with a software database and a human database | |
CN115639980A (zh) | 一种低代码平台可拖拽的前端逻辑编排方法及装置 | |
CN114721667B (zh) | 将ST代码编译为WebAssembly代码的方法及装置 | |
CN109271237B (zh) | 仿真控制方法和装置 | |
Tuong et al. | Deeply integrating C11 code support into Isabelle/PIDE | |
US20170075668A1 (en) | Methods and Systems for Generating Client-Server Applications for Target Devices | |
Birken | Building code generators for DSLs using a partial evaluator for the Xtend language | |
Bettini | A DSL for writing type systems for Xtext languages | |
US11714609B2 (en) | Automatic generation of source code implementing a regular expression | |
Walter et al. | ACL2s systems programming | |
Visser | Understanding software through linguistic abstraction | |
Oorschot | VCLLVM: A Transformation Tool for LLVM IR programs to aid Deductive Verification | |
Quinlan et al. | Rose user manual: A tool for building source-to-source translators draft user manual (version 0.9. 11.115) | |
JP2006338190A (ja) | 実装コード開発システム、及び実装コード開発プログラム | |
Zaytsev | Understanding Metalanguage Integration by Renarrating a Technical Space Megamodel. | |
Geisseler et al. | GslAtorPtr-C++ core guidelines pointer checker and support library refactorings | |
Palanisamy et al. | Modelica based parser generator with good error handling | |
Andersen et al. | Rios | |
CN114329492A (zh) | 一种针对Go语言链码的漏洞检测方法 |
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 |