WinCC里用什么函数能把SQL里某一时刻的历史归档数值调出来,赋值给一个变量?

 我来答
a1575714
2013-08-03 · TA获得超过170个赞
知道小有建树答主
回答量:321
采纳率:0%
帮助的人:127万
展开全部
查询过程值归档
原理
通过以下查询,可访问过程值归档。可使用过滤标准选择数据。查询通过命令对象转发到
数据库。
说明
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,<ValueID 符
ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]
4 字节长 ValueID 的请求:
TAG:R,<ValueID 符 ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>]
[,<TimeStep>]
参数
参数 描述
ValueID 数据库表的值 ID
可以使用多个名称,例如
“TAG:R,(ValueID_1;ValueID_2;ValueID_x),<TimeBegin>,<TimeEnd>”
ValueName ValueName 的格式为“ArchiveName\Value_Name”。必须将参数 <ValueName> 括在单引号
中。
可以使用多个名称,例如
“TAG:R,('ValueName_1';'ValueName_2';'ValueName_x'), <TimeBegin>,<TimeEnd>”
注释
请注意,编程语言Visual Basic、VBScript 或 VBA 仅允许在变量名称中存在以下字符:
“A...Z”、“a...z”、“0...9”以及“_”。
在 WinCC 中,如果在变量名称中使用特殊字符如“,”或“;”,则脚本将中止并出现错误消息。
这种情况下,可使用“变量 ID”访问其脚本名称中包含特殊字符的变量。
TimeBegin 开始时间,格式为:
“YYYY-MM-DD hh:mm:ss.msc”
使用 <TimeStep> 时,必须将 <TimeBegin> 指定为绝对时间。禁止使用相对语句“0000-00-00
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'),<TimeBegin>,<TimeEnd>, 'WHERE RealValue >
100 OR RealValue < 50'”
WinCC/连通性软件包文档
3.4 通过 OLE DB 提供者进行访问
MDM - WinCC/Connectivity Pack
54 系统手册, 11/2008,
参数 描述
TimeStep 在声明的时间间隔中的值被汇总,从开始时间 <TimeBegin> 开始
格式: “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'”

说明
<TimeBegin> 和 <TimeEnd> 不得同时为“零”,即“0000-00-00 00:00:00.000”。
为了提高性能,请在查询期间用参数“ValueID”代替“ValueName”。在“归档”表上可确定
“ValueID”。
某些应用程序不能以 1 ms 的步长处理过程值,这可能会导致结果不准确。
在“实例:使用 WinCC OLE DB 提供程序读取过程值归档”一章中,您将找到一个以
“SplitDateTimeAndMs”VB 脚本编写的实例,该实例用于删除过程值时间戳中的毫秒。在
演示项目“OpConPack”中,也实现了该脚本。

绝对时间间隔的选择
从开始时间 <TimeBegin> 开始读取,到结束时间 <TimeEnd> 为止。
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'”
相对时间间隔的选择
从记录开始时读取:
<TimeBegin> = '0000-00-00 00:00:00.000'
读取到记录结束为止:
<TimeEnd> = '0000-00-00 00:00:00.000'
<TimeBegin> 和 <TimeEnd> 不得同时为“零”,即“0000-00-00 00:00:00.000”。
说明
使用以下格式,输入要在链接的归档数据库中进行查询的相对期间:
● 0000-00-DD hh:mm:ss.msc
如果以月表示时间范围,则其内容可能是错误的,因为一个月可包括 28 到 31 天。
实例 B1:
从“TimeBegin”到记录结束(即最后一个归档值)为止,读取绝对时间。
<TimeBegin> = '2003-02-02 12:00:00.000', <TimeEnd> = '0000-00-00
00:00:00.000'
实例 B2:
从“TimeBegin”开始连续 10 秒读取绝对时间。
<TimeBegin> = '2003-02-02 12:00:00.000', <TimeEnd> = '0000-00-00
00:00:10.000'
实例 B3:
从“TimeEnd”开始,反向连续 10 秒读取绝对时间。
<TimeBegin> = '0000-00-00 00:00:10.000', <TimeEnd> = '2003-02-02
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:
以下查询也使用 <SQL_Clause> 参数,并且返回所有包含 ValueID“3”、“6”并且小于 50 或
大于 100 的变量值。
WinCC/连通性软件包文档
3.4 通过 OLE DB 提供者进行访问
MDM - WinCC/Connectivity Pack
系统手册, 11/2008, 57
“TAG:R,(3;6),<TimeBegin>,<TimeEnd>,'WHERE RealValue > 100 OR
RealValue < 50'”
带参数 <TimeStep> 的查询
实例 C2:
以下查询使用 <TimeStep> 参数,并且返回所有 ValueID“1”的值,从开始时间“TimeBegin”
开始,直到 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:
以下查询使用 <TimeStep> 参数,并且返回所有 ValueID“1”和“2”的值,从开始时间
“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”秒时的归档值。
felixliu2008
2013-07-25 · TA获得超过295个赞
知道小有建树答主
回答量:337
采纳率:100%
帮助的人:195万
展开全部
可以使用 wincc 特有的访问函数读出指定时间段的历史数据,好像是叫 connectivity pack 的语法结构。如下有个西门子的文档,里面讲了vbs 访问历史数据的语法。可以参考下。
http://www.ad.siemens.com.cn/download/docMessage.aspx?Id=6034
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式