一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

将自动化语言程序转换为LUA语言程序的方法、系统、电子设备及存储介质与流程

2022-07-30 12:04:10 来源:中国专利 TAG:

将自动化语言程序转换为lua语言程序的方法、系统、电子设备及存储介质
技术领域
1.本发明涉及自动化控制算法开发领域,特别涉及一种将自动化语言程序转换为lua语言程序的方法、系统、电子设备及存储介质。


背景技术:

2.自动化语言程序,是专门为自动化控制算法所设计的配置文本,由一种适合自动化控制算法的语言wlang编写而成。
3.自动化控制算法由自动化设备控制系统的计算机系统来执行,负责实现由大量处理任务组成的完整控制逻辑。由于wlang语言内置了对自动化控制算法所需关键功能(串行、并发、同步控制、时序控制等)的表达方法,在自动化控制算法开发领域,该语言具有比通用语言更简单、便捷的优势,从而可以加快自动化控制算法的开发与调试工作。
4.但是,在计算机系统上实现自动化控制算法,需要将自动化语言程序转化为由脚本语言编写的程序来执行,脚本语言中,lua语言是执行速度最快的,因此,为保证以较快的解释方式执行自动化语言程序,需要实现从自动化语言程序到lua语言程序的转换。


技术实现要素:

5.以下是对本文详细描述的主题的概述。本概述并非是为了限制权利要求的保护范围。
6.本发明实施例提供了一种将自动化语言程序转换为lua语言程序的方法、系统、电子设备及存储介质,使得自动化语言程序可以被快速地执行,实现自动化控制算法对自动化设备的控制,保证了自动化控制算法被快速开发后能够落地实施。
7.第一方面,本发明实施例提供了一种将自动化语言程序转换为lua语言程序的方法,包括:
8.响应于程序转换请求,解析自动化语言程序,确定所述自动化语言程序包含的节点类型和所述节点类型对应的字段信息;
9.根据所述节点类型和所述节点类型对应的字段信息,生成语法树;
10.为所述语法树包含的所述节点类型选取对应的生成模板;
11.结合所述生成模板和所述字段信息,为所述语法树的根节点生成lua语言程序。
12.第二方面,本发明实施例提供了一种将自动化语言程序转换为lua语言程序的系统,其特征在于,包括:
13.解析模块,用于响应于程序转换请求,解析自动化语言程序,确定所述自动化语言程序包含的节点类型和所述节点类型对应的字段信息;存储模块,用于根据所述节点类型和所述节点类型对应的字段信息,生成语法树;
14.选取模块,用于为所述语法树包含的所述节点类型选取对应的生成模板;
15.生成模块,用于结合所述生成模板和所述字段信息,为所述语法树的根节点生成
lua语言程序。
16.第三方面,本发明实施例还提供了一种电子设备,所述电子设备包括处理器、存储器,以及一个或多个程序,所述一个或多个程序被存储在所述存储器中,并且被配置由所述处理器执行,所述程序被处理器执行实现上述第一方面的将自动化语言程序转换为lua语言程序的方法。
17.第四方面,本发明实施例还提供了一种计算机可读存储介质,其特征在于,存储有处理器可运行的程序指令,所述程序指令用于执行实现上述第一方面的将自动化语言程序转换为lua语言程序的方法。
18.本发明实施例至少包括以下有益效果:实施例中的将自动化语言程序转换为lua语言程序的方法,能够将自动化语言wlang转换为与wlang语法完全不同且无对应关系的lua语言。wlang语言的功能是宏观的,而lua是通用脚本语言,通过为wlang语言生成语法树,通过为语法树中的每种节点类型预先创建生成模板,再通过用与节点类型对应的生成模板和字段信息生成lua语言程序,能够利用lua语言实现wlang语言中的每个宏观功能。由于为实现每个宏观功能,利用wlang语言编写的代码比利用lua语言的少很多,因此,实现将wlang语言到lua语言的转换,能够使自动化控制算法的快速简单开发成为可能。
附图说明
19.图1为本发明实施例中一种将自动化语言程序转换为lua语言程序的方法流程图。
20.图2为本发明实施例中一种生成lua语言程序片段的示意图。
21.图3为本发明实施例中一种语法树的示意图。
22.图4为本发明实施例中一种将自动化语言程序转换为lua语言程序的系统示意图。
23.图5为本发明实施例中一种电子设备的结构图。
具体实施方式
24.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
25.需要理解的是,如果在说明书和权利要求书及上述附图中涉及到方位描述,例如上、下、前、后、左、右等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
26.需要说明的是,至少一个的含义是一个或者多个,多个的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述道第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
27.参照图1,为本发明实施例提供的一种将自动化语言程序转换为lua语言程序的方法流程图,包括但不限于以下步骤:
28.步骤s100:响应于程序转换请求,解析自动化语言程序,确定自动化语言程序包含
的节点类型和节点类型对应的字段信息。
29.本实施例中,为实现设备的自动化操作,需要开发对设备进行控制的软件,由于使用自动化语言wlang可以简单且快速地开发控制软件,因此先利用wlang语言编写该软件的自动化语言程序,再转换为可以被设备执行的脚本语言程序,即lua语言程序。自动化语言程序的特点是具备根据功能划分的节点类型,每种节点类型对应有不同种类的字段以及不同数量的字段,每个字段的值称为字段信息,如表1所示,展示了各种节点类型和各种节点类型所包含字段的汇总。通过解析自动化语言程序可以确定该程序包含哪些节点类型,和这些节点类型分别对应哪些字段,以及各个字段的值即字段信息。
[0030][0031]
表1
[0032]
进一步地,步骤s100中可以包括但不限于以下步骤:
[0033]
步骤s101:解析自动化语言程序,确定自动化语言程序包含的子程序段。
[0034]
作为一种示例,为实现晶圆缺陷检测设备的自动化操控,需要编写晶圆缺陷检测设备的控制软件,其中,晶圆缺陷检测设备包括:
[0035]
三维运动台,用于承载被测晶圆,在xyz三个方向的运动;
[0036]
相机子系统,用于负责对晶圆拍照,并传输到中央计算机;
[0037]
对焦子系统,用于负责镜头对焦,动作由中央计算机驱动;
[0038]
检测算法子系统,用于负责缺陷目标检测和目标个数统计。
[0039]
以下为利用自动化语言为控制软件编写的自动化语言程序,保存为demo.w:
[0040][0041]
解析上述自动化语言程序demo.w,根据每一条程序语句所实现的功能,可以将程序分为四部分不同功能的子程序段,分别为:
[0042]
子程序段1:move(“x”,100)//move(“y”,100)//move(“z”,10);
[0043]
子程序段2:img=snap();
[0044]
子程序段3:count=!inspect(img);
[0045]
子程序段4:if count《t then passed=1then passed=0end;
[0046]
子程序段1中符号“//”表示三条语句并发执行,即控制三维运动台在xyz三个方向同时起动,通过子程序段2控制对焦子系统的镜头对焦,和相机子系统对晶圆拍照,并将照片传输到中央计算机,接着通过子程序段3统计得到缺陷目标的个数,其中符号“!”表示该任务被分配给一个独立的中央处理器cpu运行,通过子程序段4判断晶圆是否符合标准。
[0047]
以上程序中调用的晶圆缺陷检测设备内置的任务函数,分别为:
[0048]
运动台运动控制函数:move(axix,position);
[0049]
相机采集图像函数:snap();
[0050]
检测算法函数:inspect()返回缺陷目标个数;
[0051]
用户自定义逻辑:缺陷目标数小于阈值(t)为合格,否则为不合格。
[0052]
步骤s102:解析子程序段,确定子程序段包含的节点类型和节点类型对应的字段信息。
[0053]
作为一种示例,通过初步分析自动化程序demo.w,可以确定其中包含的节点类型有程序段;进一步地,对照表1中的节点类型,可以确定程序段包含的子程序段1至4所对应的节点类型分别是:并发语句、赋值语句、赋值语句和分支;再进一步地,通过分析子程序段1至子程序段4,可以确定四个子程序段中各自包含的节点类型,以及各种节点类型对应的字段信息。具体地,对照表1中的节点类型,可以得到,如表2所示的上述自动化语言程序demo.w中包含的节点类型和节点类型对应的字段信息:
[0054][0055]
表2
[0056]
步骤s200:根据节点类型和节点类型对应的字段信息,生成语法树。
[0057]
本实施例中,语法树是一个树形结构,从根节点到叶子节点分别记录程序从宏观到具体的组成成分。
[0058]
进一步地,步骤s200可以包括但不限于以下步骤:
[0059]
步骤s201:根据节点类型,以树形结构存储节点类型对应的所述字段信息。
[0060]
作为一种示例,如图3所示,为根据表2中的节点类型和节点类型对应的字段信息所生成的语法树的示意图,具体的:
[0061]
根节点的节点类型为程序段,用于记录整个自动语言程序demo.w的组成成分,对照表2中程序段对应的字段信息,可以得知,根节点记录的数据结构分别指向四个子程序段,四个子程序段对应的节点类型分别为:并发语句、赋值语句1、赋值语句2和分支,语法树中根节点的四个子节点可以分别记录四个子程序段的组成成分。
[0062]
根据子程序段的执行顺序,第一个子节点的节点类型为并发语句,该节点可以记录子程序段1的组成成分,对照表中2中并发语句对应的字段信息,可以得知,该节点记录的数据结构依次指向三个任务,这三个任务是并发执行的无返回值的任务调用,所处节点的节点类型分别对应于表2中的任务调用1、任务调用2和任务调用3;第一个子节点可以分别指向三个节点类型为赋值语句的子节点,以该节点从左至右的第一个左子树为例,赋值语
句节点可以指向两个子节点,左子节点为空,代表没有需要赋值的变量,右子节点记录了子程序段1的部分组成成分,右子节点的节点类型为任务调用1,对照表2中任务调用1对应的字段信息,可以得知,右子节点记录有一个符号表,符号表中有两项,第一项符号名为“taskname”,指向记录有值“move”的左叶子节点,表示调用的任务名,第二项符号名为“args”,指向记录有值“x”和“100”的右叶子节点,表示输入参数;依次类推,第一个子节点可以依次指向第二个和第三个根节点为赋值语句的子树,记录程序段1的其他组成成分,叶子节点分别记录节点类型为任用调用2和任务调用3所对应的字段信息。
[0063]
根据子程序段的执行顺序,第二个子节点的节点类型为赋值语句1,该节点可以记录子程序段2的组成成分,对照表1中赋值语句1对应的字段,可以得知,该节点记录的字段有左值符号名和右值节点,对照表2中赋值语句1对应的字段信息,可以得知,赋值语句1节点记录有一个符号表,有两个项目,第一项为左值符号名“lv”,指向记录有值“img”的左叶子节点,第二项为右值节点“rv”,指向一个有返回值的函数调用任务节点,其节点类型为任务调用4,对照表2中任务调用4对应的字段信息,可以得知,任务调用4节点记录有一个符号表,有两个项目,第一项为任务名“taskname”,指向记录有值“snap”的左叶子节点,表示调用的任务名,第二项为输入参数“args”,指向值为空的右叶子节点,表示没有输入参数。
[0064]
根据子程序段的执行顺序,第三个子节点的节点类型为赋值语句2,该节点可以记录子程序段2的组成成分,对照表1中赋值语句2对应的字段,可以得知,该节点记录的字段有左值符号名和右值节点,对照表2中赋值语句2对应的字段信息,可以得知,赋值语句2节点记录有一个符号表,有两个项目,第一项为左值符号名“lv”,指向记录有值“count”的左叶子节点,第二项为右值节点“rv”,指向一个有返回值的函数调用任务节点,其节点类型为任务调用5,对照表2中任务调用5对应的字段信息,可以得知,任务调用5节点记录有一个符号表,有三个项目,第一项为独立cpu标志“独立cpu”,指向记录有值“是”的第一个叶子节点,第二项为任务名“taskname”,指向记录有值“inspect”的第二个叶子节点,表示调用的任务名,第二项为输入参数“args”,指向记录有值“img”的第三个叶子节点,表示输入参数。
[0065]
根据子程序段的执行顺序,第四个子节点的节点类型为分支,该节点可以记录子程序段4的组成成分,对照表1中分支对应的字段,可以得知,该节点记录的字段有算数逻辑表达式和程序段,对照表2中分支对应的字段信息,可以得知,分支节点记录有一个符号表,有三个项目,第一项为算数逻辑表达式“condition”,指向从左至右记录有值“count《t”的第一个子节点;第二项为程序段“stmt1”,指向节点类型为赋值语句3的第二个子节点;第三项为程序段“stmt2”,指向节点类型为赋值语句4的第三个子节点;对照表2中赋值语句3对应的字段信息,可以得知,赋值语句3节点记录有一个符号表,有两个项目,第一项为左值符号名“lv”,指向记录有值“passed”的左叶子节点,第二项为右值节点“rv”,指向记录有值“1”的右叶子节点;对照表2中赋值语句4对应的字段信息,可以得知,赋值语句4节点记录了一个符号表,有两个项目,第第一项为左值符号名“lv”,指向记录有值“passed”的左叶子节点,第二项为右值节点“rv”,指向记录有值“0”的右叶子节点。
[0066]
步骤s300:为语法树包含的节点类型选取对应的生成模板。
[0067]
本实施例中,生成模板是预先编写的程序片段。如表3所示,为各种节点类型在对应生成模板中的符号汇总;如表4所示,为本实施例中各种节点类型与对应的生成模板汇总。通过从表4中查找语法树包含的各种节点类型,确定这些节点类型所对应的生成模板。
[0068][0069]
表3
[0070][0071]
[0072]
表4
[0073]
在一些实施例中,步骤s300之前可以包括:
[0074]
根据自动化语言和lua语言之间的语法关系,针对自动化语言中的每一种节点类型,创建与节点类型对应的生成模板,其中,生成模板包括固定程序片段和可变程序片段。
[0075]
本实施例中,用特殊标记在生成模板中对可变程序片段进行注释,例如,用两个”$”包含一个标识符,如:$taskname$,其中taskname部分可以被替换。自动化语言程序所采用的wlang语言语法如下所示,lua语言为通用的脚本语言,在此不做介绍:
[0076]

程序段
[0077]
stmt1
[0078]
stmt2
[0079]

[0080]
stmt n
[0081]
stmt1、stmt2、stmtn表示不同语句。程序段由多条语句组成,用换行符分隔。程序段的执行方式为:从stmt1开始执行,执行完毕后,执行stmt2,以此类推。
[0082]

任务定义
[0083]
task()stmts end
[0084]
stmts为任意程序段。
[0085]

任务调用表达式
[0086]
a)task(in)
[0087]
b)!task(in)
[0088]
task为任务名,由用户自定,英文字母组成,in为该任务输入的名字。在任务名前加!,表示独立cpu运行,即该任务会被分配一个独立的cpu核心运行。
[0089]

赋值语句
[0090]
var=expression
[0091]
var为任意自定义符号,expression为任意表达式。
[0092]

并发执行语句
[0093]
o1=t1(a1)//o2=t2(a2)
[0094]
由多个用双斜线连接的“任务调用”赋值语句组成。2个任务同时执行(并发),全部任务都执行完毕后,此语句执行完毕。
[0095]

分支
[0096]
if condition then stmt1 else stmt2 end
[0097]
condition为算术逻辑表达式,stmt1和stmt2为程序段.当condition不为零时执行stmt1,否则执行stmt2。
[0098]

循环
[0099]
while condition do stmt end
[0100]
condition为算术逻辑表达式,stmt为程序段,当condition不为零时循环执行stmt。
[0101]

算术逻辑表达式
[0102]
具体语法与lua语言相同,但参与运算的只能是符号,不可以是任务调用。例如:a
b/2是对的,a t1(b)是错的。
[0103]

单量表达式
[0104]
单一常量或变量,例如:10,x和var。
[0105]

表达式
[0106]
分为3种:任务调用、单量表达式、算术逻辑表达式。
[0107]
触发信号语句
[0108]-》signal
[0109]
与等待信号语句配合使用,用于实现并发任务之间的同步功能,一个任务利用该语句产生信号,另一个任务执行等待信号语句等待该信号的产生。
[0110]
等待信号
[0111]
@signal
[0112]
与触发信号语句配合使用,用于实现并发任务之间的同步功能,一个任务执行该语句等待某信号的产生,另一个任务利用触发信号语句产生信号。
[0113]
复位时钟语句
[0114]
reset clock
[0115]
clock为用户自定义符号。该语句创建并复位时钟变量clock。
[0116]
等待时钟语句
[0117]
@clock》expression
[0118]
clock为时钟名,expression为算术表达式,表示时间,单位为毫秒。当clock小于等于expression时等待。
[0119]
步骤s400:结合生成模板和字段信息,为语法树的根节点生成lua语言程序。
[0120]
本实施例中,根节点表征了整个自动化语言程序,为根节点生成lua语言程序也就是为整个自动化语言程序转换成了根节点类型。根节点记录有节点列表,根据节点列表指向的子节点,沿节点路径依次访问子节点,可以依次获取被访问节点的节点类型。如图2所示,为利用生成模板和字段信息生成lua程序片段的示意图,其中,图2中的生成模板对应于根节点的节点类型,节点的字段值由用户输入所得,即上述表2的字段信息一栏中每项表达式右侧的部分。在生成代码时,可变部分用输入的文本替代,其他部分直接复制到目标区。
[0121]
作为一种示例,通过步骤s400可以生成自动化语言程度demo.w的语法树根节点的lua语言程序:
[0122]
object={}
[0123]
para(move,{“x”,100},move,{“y”,100},move{“z”,10})
[0124]
img=snap()
[0125]
_res=run(inspect,{img})
[0126]
res.wait()
[0127]
count=_res.get()
[0128]
其中,object={}表示全局变量表为空。
[0129]
在一些实施例中,步骤s400之后还可以包括:
[0130]
创建文本存储区,文本存储区包括初始化区和代码区;
[0131]
将lua语言程序拆分为第一程序片段和第二程序片段,将第一程序片段存储于初始化区,将第二程序片段存储于代码区。
[0132]
其中,第一程序片段可以是用于初始化的程序片段,第二程序片段可以是第一程序片段之外的程序片段。
[0133]
本实施例中,文本存储区用于保存生成的lua语言程序,文本存储区可以是计算机中的文件,也可以是计算机的内存,在此不作限定,可以根据需要选择。
[0134]
本发明实施例提供的一种将自动化语言程序转换为lua语言程序的方法,还可以包括:
[0135]
当节点类型为触发信号、等待信号、复位时钟和等待时钟其中的至少一种时,创建全局对象表以存储节点类型对应的字段信息;
[0136]
在执行为语法树的根节点生成lua语言程序时,读取全局对象表中节点类型对应的字段信息。
[0137]
本实施例中,自动化语言程序的全局对象表用于存储必须的内部对象。若全局对象表非空,在生成lua语言程序时,需要读取全局对象表中的节点类型,选取对应的模板,结合字段信息生成全局对象表中内容所对应的lua语言语句。
[0138]
本发明实施例提供的一种将自动化语言程序转换为lua语言程序的方法,还可以包括:
[0139]
通过编译工具生成自动化语言程序的语法分析程序;
[0140]
通过语法分析程序解析自动化语言程序,生成语法树。
[0141]
在本实施例中,利用lex和yacc编译工具生成用于解析自动化语言wlang的语法分析程序wparser,再利用wparser对wlang语言程序进行解析,生成语法树。
[0142]
本发明实施例至少包括以下有益效果:能够将自动化语言wlang转换为与wlang语法完全不同且无对应关系的lua语言。wlang语言的功能是宏观的,而lua是通用脚本语言,通过为wlang语言生成语法树,通过为语法树中的每种节点类型预先创建生成模板,再通过用与节点类型对应的生成模板和字段信息生成lua语言程序,能够利用lua语言实现wlang语言中的每个宏观功能。由于为实现每个宏观功能,利用wlang语言编写的代码比利用lua语言的少很多,因此,实现将wlang语言到lua语言的转换,能够使自动化控制算法的快速简单开发成为可能。
[0143]
参照图4,本发明实施例提供了一种将自动化语言程序转换为lua语言程序的系统示意图,包括但不限于:
[0144]
解析模块401,用于响应于程序转换请求,解析自动化语言程序,确定自动化语言程序包含的节点类型和节点类型对应的字段信息;
[0145]
存储模块402,用于根据节点类型和节点类型对应的字段信息,生成语法树;
[0146]
选取模块403,用于为语法树包含的节点类型选取对应的生成模板;
[0147]
生成模块404,用于结合生成模板和字段信息,为语法树的根节点生成lua语言程序。
[0148]
本发明实施例提供了一种电子设备,如图5所示,该电子设备包括存储器501和处理器502;存储器501,用于存放一个或多个计算机程序;处理器502,用于执行存储器501上所存放的程序时,实现本发明实施例提供的将自动化语言程序转换为lua语言程序的方法。
[0149]
本发明实施例提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行本发明实施例提供的将自动化语言程序转换为lua语言程序的方法。
[0150]
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字调节人员线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
[0151]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0152]
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于电子设备和计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0153]
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献