一种解析器的快速执行方法及快速执行系统与流程

文档序号:11620420阅读:291来源:国知局
一种解析器的快速执行方法及快速执行系统与流程

本发明属于计算机语言编译与解析处理领域,具体涉及一种解析型指令的快速执行方法及系统。



背景技术:

iec61131标准可提高工控制系统的开放性、标准性、统一性,已经在工控系统开发中获得了认可。其中结构化文本以纯文本的代码来实现程序的逻辑,可实现复杂的控制算法,得到了广泛应用。

结构化文本(st)是一种类似于pascal的高级编程语言,需要转换为装置可运行的目标文件才能运行。已有的实现方法有编译型和解析型两种。编译型需将st代码转换为目标机器码,执行速度快,但是可移植性不好,当更换硬件型号时,需重新开发编译器的后端模块。解析型是将st代码转为中间指令,具有灵活性高、跨平台支持好、可移植性强等优点,但是通常的解析执行方式,是根据指令类型做switch-case分支判断,在实时性要求高的场合往往达不到要求。也有文献提出类似中断查找表的执行方法,能够提高解析的速度,但是存在灵活性不够、功能裁剪不完全支持st功能等缺点,例如为了解决不同指令的操作数个数不一致的问题,通常进行简化,将操作数按照全局区域顺次划分,每个操作数都固定区域大小,而实际的st语言中有19种标准数据类型,数据类型并不相同,数据区域也分输入区、输出区、常量区、保持区等不同的区域,将所有操作数统一划分到全局区,并不符合iec61131标准的要求。此外,顺序执行的中断查找表不能支持jump、break等流程调转指令,这对st语言来说,功能就大打折扣,无法满足功能复杂的应用要求。故需要设计一种解析器的快速执行方法,在保证执行效率的同时,能完整支持st语言的功能,本案由此产生。



技术实现要素:

本发明的目的,在于提供一种解析器的快速执行方法及快速执行系统,在提高解析器的执行效率的同时,还能支持st语句的流程跳转语句和支持可变形参指令,保证解析器支持的st语言功能完整性。

为了达成上述目的,本发明的解决方案是:

一种解析器的快速执行方法,包括如下步骤:

步骤1,获取指令文件;

步骤2,构建指令数组,读取指令文件,根据指令类型编码,和预先编译的指令执行函数关联,按照指令个数动态创建指令数组;

步骤3,运行过程中调度执行指令数组,从0开始按照递增数组下标的顺序执行,当执行到jump、break指令,将当前执行的数组下标修改为jump、break指令记录的跳转目的标号,之后顺次执行从新下标起始对应的指令。

上述步骤1中,指令文件由数据区、指令区和可选的调试信息区组成,其中数据区细分全局数据区、常量数据区、保持变量区、局部变量区,调试信息区内记录变量名字符串和关联的数据区地址。

上述步骤1中,指令包括固定形参格式的指令类型和可变个数的形参类型。

上述步骤2中,指令数组的成员是个复合结构体,包括指令执行函数指针、指令标号、形参个数、形参在数据区的地址及下条待执行的指令标号。

上述指令包括指令标号、指令类型编码、形参个数、形参地址和形参变量类型信息。

上述步骤2中,指令文件通过网络或串口通信传输方式,从客户端软件传输到装置侧。

一种解析器的快速执行系统,包括:

指令获取模块,用于提供通信传输功能,将客户端的指令文件传输到待执行的装置;

指令函数模块,是预先编译的函数库,每条指令对应一个函数,并形成一个函数表,提供查找接口供指令构建模块调用,获取指令对应的执行函数指针;

指令构建模块,用于读取指令文件,根据指令类型编码和预先编译的函数指令执行关联,按照指令个数动态创建指令数组;以及,

指令调度模块,用于执行指令数组中函数指针,并根据指令类型,动态调整当前执行的数据下标,实现跳转指令的执行。

采用上述方案后,本发明中的解析器在初始化过程中读取指令文件,获取指令类型、形参地址、指令标号等信息。每个类型的指令对应1个已经编译的任务函数,根据实际指令类型、形参个数、形参在数据区的地址等信息,形成动态分配的指令数组。指令数据包括对应的任务函数指针、实际形参信息、指令标号等内容。在周期运行过程中,传入实际形参,执行指令数据中的函数指针,对于跳转和返回指令,根据指令标号,修改当前执行的数组下标。本发明一方面在提高执行效率的同时,还支持执行可变形参指令、流程控制指令,解决了线性指令表结构顺序执行时无法支持跳转的问题。本发明在工业控制的应用开发中进行了应用,可显著提高61131标准的st语言的执行速度,并支持跳转和流程控制指令,提高了系统的灵活性和适用范围。

附图说明

图1是本发明的流程图;

图2是本发明的指令数组结构图;

图3是本发明中解析器的系统结构图。

具体实施方式

以下将结合附图,对本发明的技术方案进行详细说明。

如图1所示,本发明提供一种解析器的快速执行方法,包括如下步骤:

步骤1,获取指令文件,其中,指令文件由指令信息构成,每条指令包括指令标号、指令类型编码、形参个数、形参地址、形参变量类型信息;

其中,所述的指令文件由数据区、指令区、调试信息区(可选)组成,其中数据区细分全局数据区、常量数据区、保持变量区、局部变量区,调试信息区内记录变量名字符串和关联的数据区地址。

步骤2,构建指令数组。读取指令文件,根据指令类型编码,和预先编译的指令执行函数关联,按照指令个数动态创建指令数组。指令数组的成员是个复合结构体,包括指令执行函数指针、指令标号、形参个数、形参在数据区的地址、下条待执行的指令标号等信息;

步骤3,运行过程中调度执行指令数组。从0开始按照递增数组下标的顺序执行,当执行到jump、break指令,将当前执行的数组下标修改为jump、break指令记录的跳转目的标号,之后顺次执行从新下标起始对应的指令。

以下将结合具体实施例说明本发明快速执行方法的具体内容。

1)定义指令格式,编写每条指令对应的c/c++实现函数,形成lib库和解析器其它模块共同链接为可执行程序。并按照指令类型编码序号,填写形成对应的函数指针数组,提供查找接口,根据指令类型,返回对应的实现函数指针。

优选地,指令包括固定形参格式的指令类型和可变个数的形参类型。固定形参格式的指令类型以三地址码为原型,包括二元运算、赋值、跳转jump、break等指令。可变形参个数的指令包括call函数调用指令、逻辑与、逻辑或等指令。

2)获取指令文件,指令文件由数据区、指令区、调试信息区(可选)组成。其中数据区细分全局数据区、常量数据区、保持变量区、局部变量区,调试信息区内记录变量名字符串和关联的数据区地址。其中每条指令包括指令标号、指令类型编码、形参个数、形参地址、形参变量类型信息。优选地,指令文件通过网络或串口通信传输方式,从客户端软件传输到装置侧。

3)构建指令数组。读取指令文件,根据指令类型编码,和预先编译的指令执行函数关联,按照指令个数动态创建指令数组。指令数组的成员是个复合结构体,包括指令执行函数指针、指令标号、形参个数、形参在数据区的地址、下条待执行的指令标号等信息。优选地,指令数据成员结构体定义如下:

根据指令个数,动态创建指令数组:

stopcode*opcode=newstopcode[opnum];

图2是构建的指令数组示例。

4)运行过程中调度执行指令数组。设置当前执行的指令下标current_oplabel=0,从0开始按照递增数组下标(current_oplabel++)的顺序执行,当执行到jump、break指令,将当前执行的数组下标修改为jump、break指令记录的跳转目的标号(current_oplabel=next_label),之后顺次执行从新下标起始对应的指令。

结合以上快速执行方法,本发明还提供一种解析器的快速执行系统,如图3所示,该系统包括指令获取模块、指令函数模块、指令构建模块和指令调度执行模块,下面分别介绍。

所述的指令获取模块,用于提供通信传输功能,将客户端的指令文件传输到待执行的装置,在本实施例中指指令构建模块。

所述的指令函数模块,是预先编译的函数库,每条指令对应一个函数,并形成一个函数表,提供查找接口供指令构建模块调用,获取指令对应的执行函数指针。

所述的指令构建模块,用于读取指令文件,根据指令类型编码和预先编译的函数指令执行关联,按照指令个数动态创建指令数组。

所述的指令调度模块,用于执行指令数组中函数指针,并根据指令类型,动态调整当前执行的数据下标,实现跳转指令的执行。

以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1