组态王接口通信研究

时间:2022-09-03 09:16:25

组态王接口通信研究

摘要:本文对组态王软件的接口驱动进行了介绍,对组态王的采集机制进行了研究对于广大组态王的用户有很好的借鉴意义。

关键词:组态王 组态王接口 数据采集机制

中图分类号:TP273 文献标识码:A 文章编号:1007-9416(2012)05-0032-01

1、组态王接口驱动简介

组态王驱动采用Windows标准COM组件,组态王把每一台与其通讯的下位机都看作是外部设备,把每一个设备的驱动程序作为外部设备与组态王的通讯接口。在组态王运行时,外部设备通过接口驱动程序与上位机组态王进行数据交互,实现数据的采集功能和指令、数据的下发功能。每个外部设备的驱动程序都作为一个COM对象,这样外部设备、驱动程序和组态王就构成了一个完整的控制系统。

2、组态王IO驱动采集机制

2.1 IO驱动在组态王中的处理过程

驱动程序在运行过程中,与组态王的至少两个线程相关联,一个是数据采集线程,一个是主线程,其中数据采集线程还可能包含多个线程。数据采集线程如果在在包队列空的情况下会每隔50ms扫描会此线程里的所有变量,扫描周期最快为50ms,对于到达采集周期的变量,组态王会依据驱动中订制的打包规则进行变量的打包,形成一个包队列,组态王依次处理这些包队列,直到包队列的每个元素都处理完毕。处理完毕后组态王会判断扫描周期是否达到,如果扫描周期到达了,就进行下一次扫描。

2.2 包处理机制在组态王中的规定

所谓包,就是为了高效的进行数据采集和发送,定义的一种变量的集合体,同一类变量在采集和发送过程中合成一个整体共同处理,减少了因反复处理单个变量所消耗的时间。组态王处理数据都是以包的形式进行的,组态王订制了包的各种属性,规定在读数据和写数据共存的包队列里,写属性包相对于读包有更高的优先级,即写包是插在包队列中的第一个读包之前的,这样就保证了每个写属性包都会优先进行处理。打包完毕后,组态王会调用每一个包处理函数来处理每一个包中的数据写入或采集,直至把包处理完毕,再进行下一次处理。

2.3 通讯失败的处理

对于一般的驱动程序来说,一个包队列中所有包的处理过程是依次进行的,也就是说只有在当前包中变量的写入或采集完成以后,包处理函数运行结束并且返回值为TRUE后,组态王才会调用下一个包的处理函数。如果前一个包的处理函数返回FALSE,即认为组态王与设备通讯出现了问题,有可能发生了数据发送失败,也有可能数据接收失败,或设备没有响应等情况,这时组态王暂时不会再次发送或接收导致失败的命令和数据,组态王会按照驱动中写入的规则重新组织命令结构,并调用重连函数对设备尝试连接,如果外部设备能够正常响应命令或上发数据,则表示尝试连接成功,组态王则又会调用包的处理函数来继续完成数据的采集;如果设备仍然没有正确响应,则认为尝试连接再次失败,组态王会再一次调用重连函数,重复上述过程,如果三次调用重连都连接失败,这种情况组态王就会认为与外部设备的通讯失败,监视画面上会显示“???”以提示用户通信失败。

3、组态王软件的数据采集研究

3.1 组态王数据采集规则和流程

整个数据采集按上面说的过程依次处理数据包,并把采集上来的变量值保存在变量队列中,变量队列是一个大小为8K的结构体,用来存储变量数据。组态王主线程会以运行系统基准频率来采集变量队列中的各个值,并做相应处理,比如:画面的动画更新,后台命令语言的执行,历史数据库的记录等等。组态王所能支持的最快基准频率为55ms。

3.2 变量采集频率与运行系统基准频率的关系

采集线程每隔50ms扫描所有变量,并在所有变量中分辨出到达采集频率的变量。扫描频率之所以设置为50ms是基于以下考虑:因为普通人眼一秒最多能分辨20帧也就是50ms数据的变化,组态王监控画面是一种人机界面软件,是留给用户监测控制的,所以50ms的扫描速度完全可以满足画面监控的要求。从上图我们也可以看出,变量采集频率最快就是扫描频率50ms。一般变量采集频率应设为50ms的整数倍。

运行系统基准频率的含义是:组态王数据词典中的变量值,也就是所说的实时库,在变量队列中的更新频率。变量队列每更新一次,变量队列中的数据清空,接下来会触发曲线、动画连接和数据库等所有与之相关的操作,使之得到相应的更新,组态王默认的运行系统基准频率为500ms。运行系统基准频率一般应该慢于变量采集频率,但由于变量队列容量有限(8K),在变量比较多的时候,运行系统基准频率最好不要慢于变量采集频率的10倍,否则变量队列里的值有可能会溢出。

3.3 变量采集速度的理论算法

一个变量包的处理速度一般与以下四个因素有关:

(1)代码处理时间。

(2)链路传输时间。

对于不同链路的设备,传输速度不同,消耗的时间也是不一样的。一般来说,以太网的传输速度要快于串口的传输速度。

(3)设备反应时间。

(4)线程调度时间。组态王工程浏览器中设备下的每个条目都代表运行系统中的一个线程。一般情况下,各个线程中的数据采集是并行的,不会相互影响。但是当系统负荷过大时,比如组态王的工程过于复杂、点数过大,或者Windows系统本身的负荷过大时,这些线程之间的调度时间可能会成为影响数据采集速度的主要因素。

从上面的公式,可以看出:

如果当前线程包队列中的所有变量的处理时间总和小于 50*(采集频率var/50)+((采集频率var%50)>0?50:0),单个变量的实际采集周期Cvar=50*(采集频率var/50)+((采集频率var%50)>0?50:0)。

如果当前线程包队列中的所有变量的处理时间总和大于50*(采集频率var/50)+((采集频率var%50)>0?50:0),单个变量的实际采集周期Cvar=当前线程包队列中的所有变量的处理时间总和。

参考文献

[1] 北京亚控科技发展有限公司.组态王Version 6.53 用户手册[M].北京:北京亚控科技发展有限公司,2007.

上一篇:SAP业务数据传输的实现 下一篇:业扩报装的流程的规范对优质服务深化的意义与...