一种跨平台的VB脚本执行方法及系统与流程

摘要: 本发明涉及工业自动化,特别涉及了一种跨平台的vb脚本执行方法及系统。背景技术:1、工程师在组态软件中绘制工艺流程,广泛使用vb脚本实现画面逻辑的扩展,包括图形元...
一种跨平台的VB脚本执行方法及系统与流程

本发明涉及工业自动化,特别涉及了一种跨平台的vb脚本执行方法及系统。

背景技术:

1、工程师在组态软件中绘制工艺流程,广泛使用vb脚本实现画面逻辑的扩展,包括图形元素属性读写、事件响应、流程控制等功能。

2、然而,vb脚本的执行严重依赖windows操作系统的com组件机制和vbscript引擎。随着工业控制系统国产化替代的推进,组态软件需要从windows平台迁移到国产linux平台。但现有的vb脚本跨平台执行方案中:基于windows vbscript引擎的脚本执行方案组态软件无法跨平台部署且存在com依赖,调试能力差;基于wine兼容层的vb脚本执行性能损耗大且兼容性不稳定;其他脚本语言替代vb脚本的方案成本高且存在功能差异。

3、专利cn116954711a一种跨平台多种类型脚本执行方法、系统及脚本管理工具,利用脚本管理工具来统一负责脚本的获取,将获取的脚本保存到第一共享库中,一方面,工具获取用户为作业执行流程中的具体作业指定的消费节点及脚本信息,为作业创建对应的定时任务,每一定时任务基于指定的消费节点以及脚本信息定时触发创建对应的作业任务并将创建的作业任务存入第二共享库,另一方面消费节点会轮询第二共享库中作业任务,当轮询到指定了自身的未执行的作业任务时,从第一共享库下载并执行作业任务所指定的脚本,从而实现跨平台多种类型脚本的统一管理和执行,降低脚本的维护成本。该方案虽然实现了脚本的跨平台执行,但该专利中的脚本为流程中的各个节点执行脚本,与vb脚本并不相同,vb脚本无法利用该方案实现跨平台执行,同样无法解决vb脚本的跨平台执行存在的问题。

技术实现思路

1、本发明的目的是解决现有技术中vb脚本跨平台执行方案兼容性不稳定,脚本执行效率低,系统耦合度高的问题,提供了一种跨平台的vb脚本执行方法及系统,提高了调用效率,执行效率高,兼顾跨平台兼容性和windows原生性能。

2、为了实现上述目的,本发明采用以下技术方案:

3、一种跨平台的vb脚本执行方法,包括下列步骤:

4、s1:对vb脚本进行词法分析和语法分析,生成抽象语法树;

5、s2:程序运行时加载组态文件,通过脚本对象名生成跨平台脚本对象,将跨平台脚本对象接口与运行时实际对象地址绑定;

6、s3:切换脚本引擎类型,生成对应的脚本实例;

7、s4:主程序调用脚本内容,结合对象名及接口名在抽象语法树中查找并调用;

8、s5:脚本内容调用主程序,通过脚本对象名及接口绑定的地址直接调用。

9、本发明提供的跨平台的vb脚本执行方法,能够在windows和linux操作系统上均执行vb脚本,且已有的vb脚本无需修改代码和重新编译即可在linux系统上运行,实现了跨平台的vb脚本执行。

10、作为优选,所述s2包括:程序运行时加载组态文件,遍历组态文件中的图形对象列表;对每个图形对象,根据其类型标识创建对应的跨平台脚本对象;将跨平台脚本对象的函数指针绑定运行时实际的原生对象接口指针。

11、作为优选,所述s3包括:定义脚本引擎类型枚举,根据配置的脚本引擎类型,在初始化时创建对应的引擎实例;所述引擎类型包括vbs脚本引擎和跨平台脚本引擎,vbs引擎创建组件对象模型脚本实例,跨平台脚本引擎创建跨平台脚本引擎实例;脚本引擎切换时,仅修改配置项中的脚本引擎类型。

12、作为优选,所述s4包括:主程序触发脚本执行事件时,将脚本执行事件传递给对应引脚本引擎;脚本引擎结合函数名,在生成的抽象语法树中查找对应的ast节点,创建执行上下文并遍历执行该函数的ast子树。

13、作为优选,所述s2中,创建的跨平台脚本对象继承自统一基类,并封装属性读取和属性写入两个核心虚接口。

14、作为优选,所述s1包括:对vb脚本源码进行逐字符扫描,识别关键字,标识符,运算符和字面量,生成词法单元序列;对词法单元序列进行递归下降解析,生成抽象语法树。

15、作为优选,所述s3包括在运行时动态切换脚本引擎:在应用程序运行过程中,通过api调用动态切换引擎模式,切换时销毁当前脚本引擎的脚本对象,使用新脚本引擎重新创建脚本对象。

16、作为优选,所述抽象语法树包括节点名和类型标识,节点类型包括表达式节点,语句节点以及代码块节点。

17、一种跨平台的vb脚本执行系统,包括:

18、上层调用者,所述上层调用者连接有脚本引擎控制器,所述脚本引擎控制器分别连接有跨平台脚本引擎和vbs脚本引擎,所述脚本引擎控制器根据配置的引擎类型创建对应的脚本实例,并在主程序触发脚本执行事件时,将所述脚本执行事件传递给对应的脚本引擎;跨平台脚本引擎维护所有跨平台脚本对象名与脚本对象成员函数指针的全局映射表。

19、作为优选,所述vbs脚本引擎包括com组件对象,所述com组件对象连接有idispatch接口;所述跨平台脚本引擎包括词法分析器,所述词法分析器连接有语法分析器,所述语法分析器连接有ast执行引擎;所述语法分析器进行多级运算符优先级解析,并通过前瞻判断消歧赋值语句与函数调用语句,同时将属性访问转换为属性读取/写入调用。

20、因此,本发明具有如下有益效果:

21、1、实现vb脚本的跨平台执行:提供了一种在windows和linux操作系统上均可执行vb脚本的方法,使已有的vb脚本无需修改即可在linux系统上运行,保护用户在存量脚本上的投资。

22、2、现脚本引擎的可配置切换:在windows平台上,通过配置即可在跨平台脚本引擎和windows自带的vbscript引擎之间切换,切换过程无需修改代码和重新编译,兼顾跨平台兼容性和windows原生性能。

23、3、提高脚本执行效率:通过ast缓存和执行优化技术,避免脚本重复解析,提高脚本执行效率,满足工业实时控制的要求。

24、4、降低系统耦合度:通过动态接口绑定机制替代com组件机制,实现脚本与宿主程序的解耦,使脚本引擎不依赖特定操作系统的组件技术。

1.一种跨平台的vb脚本执行方法,其特征在于,包括:

2.根据权利要求1所述的一种跨平台的vb脚本执行方法,其特征在于,所述s2包括:程序运行时加载组态文件,遍历组态文件中的图形对象列表;对每个图形对象,根据其类型标识创建对应的跨平台脚本对象;将跨平台脚本对象的函数指针绑定运行时实际的原生对象接口指针。

3.根据权利要求1或2所述的一种跨平台的vb脚本执行方法,其特征在于,所述s3包括:定义脚本引擎类型枚举,根据配置的脚本引擎类型,在初始化时创建对应的引擎实例;所述引擎类型包括vbs脚本引擎和跨平台脚本引擎,vbs引擎创建组件对象模型脚本实例,跨平台脚本引擎创建跨平台脚本引擎实例;脚本引擎切换时,仅修改配置项中的脚本引擎类型。

4.根据权利要求1所述的一种跨平台的vb脚本执行方法,其特征在于,所述s4包括:主程序触发脚本执行事件时,将脚本执行事件传递给对应引脚本引擎;脚本引擎结合函数名,在生成的抽象语法树中查找对应的ast节点,创建执行上下文并遍历执行该函数的ast子树。

5.根据权利要求2所述的一种跨平台的vb脚本执行方法,其特征在于,所述s2中,创建的跨平台脚本对象继承自统一基类,并封装属性读取和属性写入两个核心虚接口。

6.根据权利要求1所述的一种跨平台的vb脚本执行方法,其特征在于,所述s1包括:对vb脚本源码进行逐字符扫描,识别关键字,标识符,运算符和字面量,生成词法单元序列;对词法单元序列进行递归下降解析,生成抽象语法树。

7.根据权利要求1或2或4或5或6所述的一种跨平台的vb脚本执行方法,其特征在于,所述s3包括在运行时动态切换脚本引擎:在应用程序运行过程中,通过api调用动态切换引擎模式,切换时销毁当前脚本引擎的脚本对象,使用新脚本引擎重新创建脚本对象。

8.根据权利要求1或4或6所述的一种跨平台的vb脚本执行方法,其特征在于,所述抽象语法树包括节点名和类型标识,节点类型包括表达式节点,语句节点以及代码块节点。

9.一种跨平台的vb脚本执行系统,采用权利要求1-8任意一项权利要求所述的一种跨平台的vb脚本执行方法,其特征在于,包括:上层调用者,所述上层调用者连接有脚本引擎控制器,所述脚本引擎控制器分别连接有跨平台脚本引擎和vbs脚本引擎,所述脚本引擎控制器根据配置的引擎类型创建对应的脚本实例,并在主程序触发脚本执行事件时,将所述脚本执行事件传递给对应的脚本引擎;跨平台脚本引擎维护所有跨平台脚本对象名与脚本对象成员函数指针的全局映射表。

10.根据权利要求9所述的一种跨平台的vb脚本执行系统,其特征在于,所述vbs脚本引擎包括com组件对象,所述com组件对象连接有idispatch接口;所述跨平台脚本引擎包括词法分析器,所述词法分析器连接有语法分析器,所述语法分析器连接有ast执行引擎;所述语法分析器进行多级运算符优先级解析,并通过前瞻判断消歧赋值语句与函数调用语句,同时将属性访问转换为属性读取/写入调用。