查询过程值归档
原理
通过以下查询,可访问过程值归档。可使用过滤标准选择数据。查询通过命令对象转发到
数据库。
说明
ValueID 的长度可以不同。
● 对于在中央归档服务器 (CAS) 上处理的数据库,ValueID 为 8 字节长,并且包括 HI-DWORD
区域中的服务器 ID,以及 LO-DWORD 区域中由相应服务器分配的 ValueID。
● 对于所有其它数据库,ValueID 为 4 字节长,并且仅包括由 WinCC 服务器分配的唯一
ValueID。
为了保持兼容性,通过 TAG:R 的 4 字节请求仍然可用。 在 CAS 数据库的情况下,返回
的 4 字节 ValueID 不再唯一。
语法
请注意,查询不能包含任何空格。
8 字节长 ValueID 的请求:
WinCC/连通性软件包文档
3.4 通过 OLE DB 提供者进行访问
MDM - WinCC/Connectivity Pack
系统手册, 11/2008, 53
TAG_LLVID:R,
4 字节长 ValueID 的请求:
TAG:R,
[,
参数
参数 描述
ValueID 数据库表的值 ID
可以使用多个名称,例如
“TAG:R,(ValueID_1;ValueID_2;ValueID_x),
ValueName ValueName 的格式为“ArchiveName\Value_Name”。必须将参数
中。
可以使用多个名称,例如
“TAG:R,('ValueName_1';'ValueName_2';'ValueName_x'),
注释
请注意,编程语言如 Visual Basic、VBScript 或 VBA 仅允许在变量名称中存在以下字符:
“A...Z”、“a...z”、“0...9”以及“_”。
在 WinCC 中,如果在变量名称中使用特殊字符如“,”或“;”,则脚本将中止并出现错误消息。
这种情况下,可使用“变量 ID”访问其脚本名称中包含特殊字符的变量。
TimeBegin 开始时间,格式为:
“YYYY-MM-DD hh:mm:ss.msc”
使用
00:00:00.000”。
TimeEnd 结束时间,格式为:
“YYYY-MM-DD hh:mm:ss.msc”
SQL_Clause SQL 语法中的过滤标准:
[WHERE search_condition]
[ORDER BY {order_expression [ASC|DESC] } ]
“ORDER BY”标准仅可用于给出的排序顺序“{order_expression [ASC|DESC] }”。
实例:以下查询返回变量“ValueName_1”和“ValueName_2”的所有值,这些值小于 50 或大
于 100。
“TAG:R,('ValueName_1';'ValueName_2'),
100 OR RealValue < 50'”
WinCC/连通性软件包文档
3.4 通过 OLE DB 提供者进行访问
MDM - WinCC/Connectivity Pack
54 系统手册, 11/2008,
参数 描述
TimeStep 在声明的时间间隔中的值被汇总,从开始时间
格式: “TIMESTEP=x,y”
x = 时间间隔(以秒计)
y = 汇总类型(定义时间间隔结果)
下列值可用于汇总类型:
无插补 有插补 描述
1 (FIRST)
2 (LAST)
3 (MIN)
4 (MAX)
5 (AVG)
6 (SUM)
7 (COUNT)
257 (FIRST_INTERPOLATED)
258 (LAST_INTERPOLATED)
259 (MIN_INTERPOLATED)
260 (MAX_INTERPOLATED)
261 (AVG_INTERPOLATED)
262 (SUM_INTERPOLATED)
263 (COUNT_INTERPOLATED)
第一个值
最后一个值
最小值
最大值
中值
总和
值数目
无插补意味着: 如果在时间间隔中不存在任何值,则不返回时间间隔结果。
有插补意味着: 如果在时间间隔中不存在任何值,则将由非空的邻近时间间隔的结果线性
插补得出一个值。不使用外插法。
实例: 例如 TIMESTEP=60,257,对于每个 60 秒的时间间隔,将返回此时间间隔的第一个
值;如果此时间间隔中没有任何值,则返回邻近的时间间隔中第一个值的线性插补
值。
“TAG:R,1,'2004-07-09 09:03:00.000','0000-00-00 00:10:00.000','TIMESTEP=60,257'”
说明
为了提高性能,请在查询期间用参数“ValueID”代替“ValueName”。在“归档”表上可确定
“ValueID”。
某些应用程序不能以 1 ms 的步长处理过程值,这可能会导致结果不准确。
在“实例:使用 WinCC OLE DB 提供程序读取过程值归档”一章中,您将找到一个以
“SplitDateTimeAndMs”VB 脚本编写的实例,该实例用于删除过程值时间戳中的毫秒。在
演示项目“OpConPack”中,也实现了该脚本。
绝对时间间隔的选择
从开始时间
WinCC/连通性软件包文档
3.4 通过 OLE DB 提供者进行访问
MDM - WinCC/Connectivity Pack
系统手册, 11/2008, 55
实例 A1:
从开始时间 9:03 到结束时间 9:10 读取 ValueID 1 的值。
“TAG:R,1,'2004-07-09 09:03:00.000','2004-07-09 09:10:00.000'”
相对时间间隔的选择
从记录开始时读取:
读取到记录结束为止:
说明
使用以下格式,输入要在链接的归档数据库中进行查询的相对期间:
● 0000-00-DD hh:mm:ss.msc
如果以月表示时间范围,则其内容可能是错误的,因为一个月可包括 28 到 31 天。
实例 B1:
从“TimeBegin”到记录结束(即最后一个归档值)为止,读取绝对时间。
00:00:00.000'
实例 B2:
从“TimeBegin”开始连续 10 秒读取绝对时间。
00:00:10.000'
实例 B3:
从“TimeEnd”开始,反向连续 10 秒读取绝对时间。
12:00:00.000'
WinCC/连通性软件包文档
3.4 通过 OLE DB 提供者进行访问
MDM - WinCC/Connectivity Pack
56 系统手册, 11/2008,
实例 B4:
从多个 valueID (1;3;5;6) 的最后一个归档值开始,读取最后一小时的值。
“TAG:R,(1;3;5;6),'0000-00-00 01:00:00.000','0000-00-00
00:00:00.000'”
实例 B5:
从“ArTags”归档的“TAG_2”变量的最后一个归档值开始,读取最后五分钟的值。
“TAG:R,'ArTags\TAG_2','0000-00-00 00:05:00.000','0000-00-00
00:00:00.000'”
下图显示了此实例的可能结果。该查询通过连通性软件包演示项目实现。
对变量值使用过滤器进行多个返回值的查询
实例 C1:
以下查询也使用
大于 100 的变量值。
WinCC/连通性软件包文档
3.4 通过 OLE DB 提供者进行访问
MDM - WinCC/Connectivity Pack
系统手册, 11/2008, 57
“TAG:R,(3;6),
RealValue < 50'”
带参数
实例 C2:
以下查询使用
开始,直到 5 分钟后为止,时间间隔为“60”秒,汇总类型“5”=“无插补的平均值”。
“TAG:R,1,'2004-10-13 17:00:00.000','0000-00-00 00:05:00.000',
'TIMESTEP=60,5'”
下图显示了查询结果。左侧表格显示了在某个 30 秒的归档周期内归档的归档数据。右侧
表格显示了查询结果。它决定了“0”秒和“30”秒时的两个归档值的平均值,通过平均间隔的
第一个时间戳(即“0”秒)显示。
实例 C3:
以下查询使用
“TimeBegin”开始,直到 2 分钟后为止,时间间隔为“15”秒,汇总类型“261”=“有线性插补的
平均值”。
“TAG:R,(1;2),'2004-10-13 17:00:00.000','0000-00-00
00:02:00.000', 'TIMESTEP=15,261'”
下图显示了查询结果。左侧表格显示了在某个 30 秒的归档周期内归档的归档数据。右侧
表格显示了查询结果。对于在查询结果中显示的“0”秒和“30”秒时的归档值,其时间戳不变。
WinCC/连通性软件包文档
3.4 通过 OLE DB 提供者进行访问
MDM - WinCC/Connectivity Pack
58 系统手册, 11/2008,
“15”秒时,线性插补值由在“0”秒和“30”秒时的归档值形成。 “45”秒时,线性插补值取自同
一分钟的“30”秒时的归档值和下一分钟的“0”秒时的归档值。
可以使用 wincc 特有的访问函数读出指定时间段的历史数据,好像是叫 connectivity pack 的语法结构。如下有个西门子的文档,里面讲了vbs 访问历史数据的语法。可以参考下。
http://www.ad.siemens.com.cn/download/docMessage.aspx?Id=6034