《工业控制计算机》2008 年 21 卷第 6 期
77
基于 S7- 400 PLC 及 WinCC 的高速数据采集系统的设计
S7- 400 PLC and WinCC Hig h Sp eed Data Gathering Sys tem
(1 长沙航空职业技术学院,湖南 长沙 410124;2 华中科技大学光电子科学与工程学院,湖北 武汉 430074)
刘悦音 1,2
描述 WinCC 端利用原始数据方式,S7- 400 PLC 端使用数据块作为数据缓冲区,实现高速数据采集的方法。数据采集
摘 要
周期达到 10ms 。
关键词:PLC 机制,WinCC 组态,数据采集,缓冲区,动态效果
Abs tract
This paper des cribes the WinCC end us e primary data way,SIMATICS7- 400 the PLC end us e block data has taken the
data buffer,the realization high s peed data gathering method.The data acquis ition cycle achieves 10ms .
Keywords :PLC mechanis m,WinCC configuration,data acquis ition,buffer,dynamic effect
在使用 PLC 机制实现控制的领域,大多使用 WinCC 等组
态工具实现对现场信号的采集功能并将数据存储到上位机数据
库,但由于受到通讯性能等原因的限制,通常的方法所能实现的
数据采集周期局限于秒级。对于一般意义的现场信号,对它的测
控所要求的数据周期要求并不高,通常 1~2s 的采集周期,就足
以满足我们对现场信号的监控精度。但在某些特定领域,譬如快
速反应系统,其整个反应过程小于 5s ,要分析了解其在整个反
应过程中的参数变化情况,即便以 500ms 的采集周期,数据采
集量仍然太少,分析结果仍然不够精确。而在此情况下,上位机
用于与控制器通讯的系统资源耗费已经非常高,再加上数据处
理、画面、数据库等任务,在变量规模尚不算多的情况下,上位机
的负荷已经不堪重负。
1 PLC+WinCC 模式下的高速数据采集系统设计
对以上情况的数据处理,通常的解决方案是使用带高速处
理功能的数据采集板卡,数据卡插在计算机插槽中,通过板卡提
供的驱动程序接口,使用高级语言如 C++等编程实现。但同时,
此解决方案的缺点又是非常明显的,首先,整个系统的规模受到
非常大的限制。即便系统的其他控制对象均为普通信号,但由于
计算机的扩展插槽数量受限制,导致能实现的点数往往仅限于
最多不超过几十个点。这样,如果面对的是稍大规模的项目,数
据采集卡的模式就无能 为 力 了 。 因 而 我 们 尝 试 使 用 PLC +
WinCC 模式下问题的解决方法。
在数据采集卡中,根据数据采集的周期不同,会分为普通采
集卡和高速采集卡,而在高速采集卡的性能指标中,非常重要的
就是它提供的缓存区的容量。许多采集卡会有如 1KB 或者 2KB
的数据缓冲区,用于实现高速采集数据的缓存。采集卡从现场获
得信号并进行 A/D 转换之后,将数据存储在缓存区中,而 PC
通过它的扩展 PCI 插槽从板卡获取数据。这个过程说到底其实
也是一种通讯的过程。同时为了保证数据采集的连续性,通常的
方法是设定一个缓冲区半满的标志,或者说将整个缓冲区分成
两部分,采集来的数据,首先堆栈到缓冲区 1 中,当缓冲区 1 存
满,则发出一个半满标志到计算机,计算机收到这个半满信号,
则启动读取程序,将缓冲区 1 内的数据读取到计算机内存中。当
数据读取结束,清空缓冲区 1 内的数据,而在此期间,高速采集
的数据,缓存在缓冲区 2 中。同样的道理,当缓冲区 2 满之后,同
样发出半满信号,数据从缓冲区 2 转移到计算机。如此形成循
环。整个逻辑实现的基础就是,数据的集中通讯比分散通讯的效
率高得多,在远远低于数据堆满一个缓冲区的时间内,已满数据
能够有充分的时间转移到计算机中。根据缓冲区大小的不同,在
缓冲区比较小的情况下,为了保证数据半满之后,能够尽快将数
据读出,以满足下一个周期的使用,半满信号往往需要较高的优
先级,在计算机内以中断的方式,通知后续的处理过程。但如果
缓冲区尺寸能够提供得比较大,留给主机与板卡通讯的查询时
间能够足够长,那么即便是用普通 I/O 方式来处理半满信号,也
同样可行。基于上述思想同样的思路,我们可以应用到 WinCC+
S7- 400 PLC 的系统中来。
2 PLC+WinCC 模式下的高速数据采集系统的实现
2.1 在 WinCC 中连续数据的读取
在 WinCC 中可以建立原始数据类型的变量。所谓的原始数
据类型,就是在 WinCC 中定义变量的时候,只需要指定数据在
PLC 中的开始地址和长度,而具体数据的排列方式定义,可以由
用 户 自 行 定 义 。 而 同 时 在 WinCC 的 趋 势 变 量 记 录 中 支 持
AR_SEND 功能块的原始数据类型,它分别设计了趋势变量记
录可以接受的将近十种原始数据类型的结构,这些数据结构原
理大同小异,无非所定义的变量数不同,有针对一个采集数的,
也有针对多个采集数的。时间标签的记录方式也不同,有不带时
间标签的,也有带时间标签的,有的每条记录均带时间标签,而
有的仅仅首条记录带有时间标签,后续的记录以相同的时间间
隔平移后推。
只对一个归档变量进行记录,同时,为了节省数据存储的空
间和节省通讯耗时,我们选择其中的第二种数据类型,即“具有
等间隔时间标志的过程值”。这种数据类型的描述如下:
1)DB 块地址内容
0.0 报文类型=1
2.0 年 月
4.0 日 小时
6.0 分钟 秒
8.0 0.1s 0.01s 001s 工作日
10.0 周期=10
14.0 单元(类型)=1 单位(范围)=3
16.0 AR_ID 子编号=0
18.0 过程数据:数据类型
20.0 过程值数量=2000
24.0 过程值 1
78
28.0 过程值 2
其中 22.0 之前的 22 个 BYTE 存放的报文头,之后为实质
的数据序列。
2)报文头的各参数含义如下:
报头类型=1
报头类型定义了报头中所包含的信息的类型。
报头类型 时间标志 AR_ID 子编号
0 不带时间标志的报头 不带 AR_ID 子编号的报头
1 带时间标志的报头 不带 AR_ID 子编号的报头
8 不带时间标志的报头 带 AR_ID 子编号的报头
9 带时间标志的报头 带 AR_ID 子编号的报头
3)时间标志
时 间 标 志 包 含 SIMATIC S7 BCD 格 式 的 日 期 和 时 间 。
WinCC 不使用工作日条目。
周期=10
在周期中读取过程值。该参数是在单位(范围)处指定的时间
单位的因子。数据长度:双字。
“周期”=10;“单位(范围)”=3 意思是:过程值读取周期=10ms
单元(类型)=1
指定时间信息的类型并修改参数“过程值的数目”。
根据以上的定义,我们在 S7 - 400 PLC 中建立数据块
DB10,分别在 Step7 和 WinCC 中做相应的调用。建立 FB37 调
用 SFC37 AR_SEND 函数发送数据。其中 MW14=8022,表示
整个发送数据区长度为 8022 个字节,除了包含 22 个报文头之
外,我们建立 2000 个 REAL 型的数据,长度 8000 个字节。所使
用的变量 M10.0 即为归档的使能位,使能之后 PLC 主动与
WinCC 进行通讯,完成后 M10.2=1。在 OB1 调用的 FC 块中调
用 FB37,自动分配 AR_ID=16#1。然后在 WinCC 中建立一个
RAW DATA TYPE 的变量,变量记录中,选择过程变量,并制定
AR_ID 一致。这样,通过使能位 M10.0 的控制命令,就可以将数
据区中的 2000 个数据发送到 WinCC 数据库中。这里的数据区
尚没有任何数据,需要我们编程实现数据序列。
2.2 双缓冲区模式实现连续记录的过程
(1)生成信号
正常应用时,数据大多直接从模拟量模块采集,实验中为了
方便检查效果,在 OB35(10ms )
中生成争弦曲线,周期为 20s ,2000 个数据。采集的数据放
在 MD404 中,实数形式。
(2)数据记录到缓冲区
首先建立长度 4000 个 REAL 的数据块 DB400,作为我们
的双缓冲区:
基于 S7- 400 PLC 及 WinCC 的高速数据采集系统的设计
OB35 中使用间接寻址编程,每采集一个数据,依次放入缓
冲区,并在指针分别达到 2000 和 4000 的时候,生成半满信号。
M495.0 和 M495.1 分别为缓冲区 1 和缓冲区 2 的满标志,当缓
冲区 2 满的同时,切换指针回 0。另外,在每个缓冲区记录首行
数据的时候,记录下当前的系统时间。
(3)数据从缓冲区发送到 WinCC
在 OB1 调用的 FC 中编程实现:根据半满标志位状态,分
别完成的工作:记录开始时间值送到数据区 8 个字节。2000 个
数据送到数据区 8000 个字节。指定数据长度 2000,使能通讯标
志。完成后此半满标志复位。
2.3 调试效果
在 WinCC 的趋势图画面中添加对此归档的监视,可以看到
动态效果,每过 20s ,图像刷新一次,一个完整的正弦曲线周期
被添加,2000 个数据记录被保存。
每条记录之间的时间间隔为足够精确的 10ms ,说明所有按
照设计精度记录的数据,全都没有丢失的被记录下来了。
3 结束语
由于高速数据采集所站用的系统资源较多,采集来的数据
占用空间也很大,所以通常情况下,这种高速数据的采集应当有
一个开关,就是只有在需要的时候才进行数据采集。所以程序还
需要做一些相应的处理,使用一个 WinCC 能控制的中间量作
为触发开关。在触发的上升沿,数据指针指向首行,下降沿时,判
断指针位置,判断在缓冲区 1 还是缓冲区 2,并且在缓冲区中的
有效数据数量,在发送任务中根据实际的数量,而不是正常半满
下的 2000。
使用 S7- 400 PLC 配合 WinCC,我们成功实现了高速数据
的采集,采集周期达到了 10ms ,而且通过不同的通讯协议接口,
也做了耗时统计,结果在使用 MPI 接口 187.5kbit /s 时,当数据
量为 6000 个时,写入时间大概要 10s ,而使用 10M 工业以太网
ISO 协议,需要的时间大概为 600ms 。可见在高速采集情况下,
工业以太网的效果要好得多,应当尽量采用工业以太网。参数设
置表中,也可以使用比 10ms 更小的周期,理论上的最高限能达
到 1ms ,但这时除了 PLC 的定时中断需要使用 1ms 周期,从而
占用了 PLC 更大的运行资源之外,缓冲区的尺寸设计也需要非
常谨慎。
参考文献
[1]杨路明,雷亚军.组态软件 WinCC 在自动监控系统中的应用[J ].计
算技术与自动化,2003,22(4)
[2]区益善.计算机网络工程手册[Z].北京:电子工业出版社,1993
[收稿日期:2007.7.10]
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
NI 为交互式动手课程引入新版原型开发平台
6 月,NI 发布了 NI ELVIS II 硬件,它是设计与原型开发平台的最新版本,被全球众多教师应用于动手实验和项目学习中。NI
ELVIS II 基于强大的 LabVIEW 图形化系统设计软件,为教师提供了 12 种新型 USB 即插即用仪器。它与用于 SPICE 仿真的 Mul-
tis im 10.1 软件的完全整合,简化了电路设计教学。此外,教师可以将 NI ELVIS II 与第三方板卡以及课程资源套件结合在一起使
用,教授控制设计、通信以及微控制器的概念。
NI 院校关系部门副总裁 Ray Almgren 说:“NI ELVIS II、LabVIEW 图形化系统设计软件以及它们与 Multis im 10.1 的紧密整
合将最尖端的硬件和软件技术结合在一起,为科学和工程实验室创建了理想的动手平台。NI ELVIS II 汇总了来自世界各地教师的
宝贵意见,按照教师的需求演示课堂教学中的理论概念,同时为学生提供了使用 LabVIEW 和 Multis im 在交互式环境中对概念进行
探索和设计的机会。”
全新的 NI ELVIS II 包括对过去版本的向下兼容特性、USB 即插即用连接的友好特性以及较小的外形尺寸,从而可以简化安
装与实验室维护。NI ELVIS II 还在低成本、简单易用的平台中包含了工程和科学实验室中最为常用的 12 种仪器,包括示波器、函
数发生器、可变电源以及隔离式数字万用表。由于 NI ELVIS II 基于 LabVIEW 软件,教师还能方便地自定义 12 种仪器,或使用提供
的源代码创建他们自己的仪器。