面向过程的编译和解释环境在工控组态软件系统中的应用

上传人:mg****85 文档编号:33766237 上传时间:2018-02-17 格式:DOC 页数:5 大小:80KB
返回 下载 相关 举报
面向过程的编译和解释环境在工控组态软件系统中的应用_第1页
第1页 / 共5页
面向过程的编译和解释环境在工控组态软件系统中的应用_第2页
第2页 / 共5页
面向过程的编译和解释环境在工控组态软件系统中的应用_第3页
第3页 / 共5页
面向过程的编译和解释环境在工控组态软件系统中的应用_第4页
第4页 / 共5页
面向过程的编译和解释环境在工控组态软件系统中的应用_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《面向过程的编译和解释环境在工控组态软件系统中的应用》由会员分享,可在线阅读,更多相关《面向过程的编译和解释环境在工控组态软件系统中的应用(5页珍藏版)》请在金锄头文库上搜索。

1、精品文档面向过程的编译和解释环境在工控组态软件系统中的应用赵立伟 张春 施寅(北京交通大学 计算机与信息技术学院,北京 100044)摘 要 :本文分析了开放式工控组态软件系统的优势和不足,介绍了自定义的 Child-C 语言编译和解释系统。使用该系统可以较大地增强组态软件系统在流程控制和应急处理方面的能力。同时还引进了事件的概念。文章重点介绍了在解释执行环境中处理二进制可执行代码的一种有效方案。关键词:编译;解释执行;事件;COM;自动化;工控;组态The Application of Process faced Compiler and Interpreter in Industry Co

2、ntrol Configuration SoftwareZHAO Li-wei, ZHANG Chun ,Shi Yin(College of Computer Science & Information Technology, Beijing Jiaotong University, Beijing 100044, China)Abstract: The paper shows the advantages and deficiencies of open industry control configuration software. A system of Child-C languag

3、e compiler and interpreter were introduced. By the help of this system, the ability of process controlling and emergency handling can be elevated greatly. It also uses the concept of event. The paper mainly introduces a solution which shows how to carrying out binary executable code in interpreter l

4、anguage system.Key words: Compile; Interpret; Event; COM; Automatic; Industry Control; Configuration1 基于 COM 的工控组态软件的框架分析传统的工控组态软件 1一般可以分为两部分:组态设计系统和组态运行系统。组态设计系统可以按照实际工业流程的需要选择工控功能模块,设置各个模块间的关联和数据流向等系统参数,从而建立一套完整的控制系统。组态运行系统建立在组态设计系统基础之上,它按照设计系统设定的参数启动相应的工控功能模块,并负责模块之间数据的传输和并发控制等。基于 COM 的工控组态软件 2以面

5、向对象的柔性设计与控制理论为基础 3,将面向对象技术应用于控制领域,把控制领域中的功能模块和对应的控制数据抽象封装成 COM 组件,按照开放式软件平台的原则将这些 COM 组件以插件的形式被加载到软件系统中。COM 组件是与语言无关的二进制组件,使用任何语言开发的符合接口规定的 COM 组件都可以在组态软件系统中使用,因此提高了组态软件的开放性和收缩性,在系统设计阶段,设计人员可以像搭积木一样快速而直观的搭建出一条控制流水线。每个 COM 组件是被单独开发的高度抽象的功能模块,它偏重于数据的计算处理而缺乏对系统环境变化的应变能力,组件之间的数据交互能力也较差。它与系统和其它的控制组件的耦合性较

6、小,要完全同其它组件融合在一起并在大的系统环境中良好地运转和适度灵活的应变系统的变化是比较困难的。这就需要在组态设计系统中使用辅助控制语言对这些组件的活动加以控制,规范控制流程。如图 1 所示,在组态设计系统中引入事件(Event)的概念,在事件的响应函数中使用辅助控制语言规范控制流程和组件的活动,经过编译后生成中间代码提交给组态运行系统。相应地在组态运行系统中建立解释环境对中间代码进行解释执行,从而达到规范流程控制的目的。精品文档组态设计系统组件 1组件 n. .关联事件 1事件 2事件 m编译器中间代码 1中间代码 2中间代码 m组态运行系统解释器 组件 1组件 n. .事件槽图 1 编译

7、和解释运行原理图2 COM 组件和自动化对象COM 是用于开发分布式软件模型的组件化程序设计模型,它是建立在二进制可执行代码级基础上的。支持 IDispatch 接口的 COM 组件对象称为自动化对象,该接口允许将一个函数的名称以字符串的形式提交给组件,组件根据函数的名称自动调用相应的函数。该接口提供的这种机制可实现对 COM 组件的统一调度。本文介绍的编译器和解释器的工作就建立在该机制之上,它为如何在解释执行环境中启动二进制可执行代码提供了很好的解决方案。3 编译器和解释器体系的框架分析3.1 控制语言功能的选择C 语言功能丰富,表达能力强,目标程序效率高,可移植性好,控制灵活,普及面广,非

8、常适用于工业控制领域。C 语言功能强,语法规则也很庞大,但是要构造一个完整的 C 语言编译器用于流程的控制则显得过于浪费。我们构造了 C 语言语法规则的一个子集Child-C,该子集保留了 C语言的分支、循环、赋值、常量和变量的定义以及函数调用等基本语法规则,去掉了汇编语言的处理能力。3.2 中间代码编译器与二进制代码编译器边界的划分由上面的分析可以看出,整个控制系统要实现的功能代码要经过中间代码编译器与二进制代码编译器两种编译器共同编译。如图 2 所示,我们可以把完整编译器所具备的功能看成是一个大的集合,在这个集合中可以找到一条分界线:分界线左边的功能是中间代码编译器必须具备的,它需要我们自

9、己设计实现;分界线右边的功能是二进制代码编译器所具备的,可以编译出高效的具有数据运算处理等功能的二进制机器码,它不需要我们动手实现。这条分界线是可以移动的,我们需要尽量使它向左移动,压缩中间代码编译器的功能,从而减少开发的工作量。把复杂的数据处理能力和底层访问能力放到右边。循环、分支、函数调用等底层 I/O、数学处理等分界线中间代码编译器 二进制代码编译器器图 2 两类编译器的分界精品文档3.3 运行时存储空间组织Child-C 能够处理的数据类型除了 C 语言中传统的长短整形、浮点、实数、字符、数组、指针和结构体外还有 COM 对象。如图 3a 所示,它描述了操作系统、组态软件运行系统和解释

10、器运行时三者存储空间之间的关系。它们是包含的关系,解释器是被组态软件运行系统建立的,所以它实际上属于组态软件运行系统的一部分。如图 3b 所示,解释器运行时存储空间可以分为 6 部分。第一部分占 64 个字节,它存储了两组共 16 个虚拟寄存器,名称为 R0,R1,R2依次类推。第一组包含 8个寄存器,它用来完成除了变长字符串之外的所有中间指令数据操作。第二组包含 8 个寄存器,它专门用来完成变长字符串相关指令的操作。第二部分占 12 个字节,它存储了 3 个 32 位的无符号整数,分别记录了全局堆基址、全局变量基址和运行时堆基址。第三部分是 COM 组件地址映像区,该区的作用将在后面详细描述

11、。第四部分是全局堆存储区,它用来存储 Child-C 代码中用 new 操作符动态申请的数据空间以及所有的变长字符串数据,该区的大小是在解释器启动前设定的,解释器一但运行该值就不能改变。第五部分为全局变量存储区,该区存储的是可以被所有函数访问的全局参数,如控制环境的平均温度和湿度等。第六部分为运行时栈存储区,Child-C 编写的函数全部运行在这个空间之上,它不但存储函数体定义的形参、变量和返回值,还要存储过程调用和返回时所需的控制链数据。a b 图 3 存储空间关系图(a)和运行时存储空间示意图(b) 3.4 中间代码操作数的定义Child-C 程序被编译成中间代码指令被解释器执行,如以下的

12、 Child-C 语句执行相加操作:int a,b,c; a=b+c;它被编译为如下几条中间代码指令:LOD R0 Ox00000010 4; - 加载变量 a 到寄存器 R0,Ox00000010 是变量 a 在运行时堆存储区内的偏移地址,4 表示加载的数据为 4 个字节LOD R1 Ox00000014 4; - 加载变量 b 到寄存器 R1ADD - R1R0R2,三个寄存器的意义是固定的STR R2 Ox00000018 将寄存器 R2 的值保存到变量 c 中其中指令的 ADD 指令是二元操作数指令,但是它的操作数固定为 R0 和 R1 寄存器,计算结果也固定放到 R3 中。3.5 字

13、符串的兼容和特殊处理C 语言中的字符串是通过字符数组进行处理的,Child-C 继承了这种字符串处理方法。字符数组是长度固定的字符串,而在使用 Child-C 与 COM 组件交互时经常要处理 COM 标准的 BSTR 类型变全局堆基址组态软件系统存储区虚拟寄存器组全局变量基址运行时堆基址COM 地址映像区全局堆存储区全局变量存储区运行时堆存储区COM 存储区运行时存储空间操作系统存储区0x000000000x000000400x0000004C精品文档长字符串,为了兼容该数据类型,在 Child-C 中增加了 bstr 类型的变长字符串数据类型。bstr 由头尾两部分组成:头部信息由 hea

14、d 和 len 两个 32 位无符号整形组成,头部信息代表了字符串实体,它可以作为局部和全局变量存储,head 是一个指针,它指向字符数据在全局堆中的首地址,len 记录了字符串的长度。尾部信息保存在全局堆存储区中,字符信息在该区中并不是连续的,这也适应了字符串长度变化的需要。bstr 可以直接代替 BSTR 类型,中间代码指令集中有专门的转换指令COMTOC 和 CTOCOM 进行数据转换。当需要将 bstr 转换成 BSTR 时,编译器自动添加 COMTOC 指令,该指令根据 bstr 的头信息读取字符数据组装成 BSTR 数据提交给 COM 组件,而 CTOCOM 是一个逆过程。这两条指

15、令使用特设的第二组虚拟寄存器进行转换操作。3.6 COM 组件的访问COM 对象的访问需要进行特殊处理,它是在解析运行环境建立之前就已经存在的。如图 3a 所示,它存储在组态软件系统的存储空间中,它不会随着解释运行环境的消亡而消亡。而除此之外的数据都存储在解释器的存储空间中,它们会随着解释运行环境的消亡而消亡。为了便于编译器和解释器统一存储空间的处理,需要将 COM 组件映像到解释器存储空间中,图 3b 中的 COM 组件地址映像区就用来保存 COM 组件地址的映像。在编译器和解释器的运行过程中,所有对 COM 组件的访问都被映像到该区域,从而避免了存储空间的交叉访问。3.7 解释器环境中对

16、COM 组件方法的调用COM 组件的各种函数已经被编译成可被计算机直接执行的机器代码,自动化 COM 对象允许使用IDispatch 接口的统一调度函数 Invoke()调用组件的函数,被执行的函数可以当作一个字符串参数被传送。因此在构造的中间代码指令集中有一条 INVOKE 指令,该指令格式为:INVOKE ComOffset FuncOffset ParaOffset;该指令有三个操作数:ComOffset 为要访问的 COM 组件在 COM 组件地址映像区的偏移,FuncOffset 为被调用函数的名称 bstr 变量地址,ParaOffset 是该函数参数的个数和参数的存储单元地址,该存储区之后是一个 4 字节的单元,它用来保存 Invoke()函数执行的返回值。就是说,对 COM 组件的所有操作,解释器只需通过执行 Invoke()函数就能完成。4 事件体系的构造ChildC 函数是通过事件触发而被

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号