关于excel访问wincc变量归档的失败问题

分享到:
228
下一篇 >

菜鸟提问

我看了论坛那个关于EXCEL访问WINCC归档变量的PDF文档,用它提供的DEMO表格,把计算机名更改了一下,创建DEMO里的相应的内部变量,给这些变量做了变量记录。但是运行WINCC,整点没有读取到归档的数据、或者是读到的数据不是我想要的那个时间段的,下边是技术文档提供的本地采集的代码:

提供的脚本:

Subget_wincc_data()

'--GetDatabaseDSNname-----------------------------------

SetDSNName=CreateObject("CCHMIRuntime.HMIRuntime")

sDsn=DSNName.Tags("@DatasourceNameRT").Read

'--buildconnectionstring-----------------------------------

sPro="Provider=WinCCOLEDBProvider.1;"

sDsn="Catalog="&sDsn&";"

sSer="DataSource=ZHANGWinCC"

sCon=sPro&sDsn&sSer

Setconn=CreateObject("ADODB.Connection")

conn.ConnectionString=sCon

conn.CursorLocation=3

conn.Open

SetoRs=CreateObject("ADODB.Recordset")

SetoCom=CreateObject("ADODB.Command")

oCom.CommandType=1

SetoCom.ActiveConnection=conn

'查询启止时间

sStart=Year(DTPicker1.Value)&"-"&Month(DTPicker1.Value)&"-"&Day(DTPicker1.Value)&"00:00:00"

sStop=Year(DTPicker1.Value)&"-"&Month(DTPicker1.Value)&"-"&Day(DTPicker1.Value)&"23:00:00"

'转为UTC时间

sStart=DateAdd("h",-8,CDate(sStart))

sStop=DateAdd("h",-8,CDate(sStop))

'读取Fan1_T1

sSql="Tag:R,('ProcessValueArchiveFan1_T1'),'"&sStart&"','"&sStop&"'orderbydatetime"

oCom.CommandText=sSql

SetoRs=oCom.Execute

If(oRs.EOF)Then

oRs.Close

Else

oRs.MoveFirst

i=0

DoWhileNotoRs.EOF

Sheet1.Cells(i+4,2)=oRs.Fields("RealValue").Value

oRs.MoveNext

i=i+1

Loop

oRs.Close

EndIf

'读取Fan1_T2

sSql="Tag:R,('ProcessValueArchiveFan1_T2'),'"&sStart&"','"&sStop&"'orderbydatetime"

oCom.CommandText=sSql

SetoRs=oCom.Execute

If(oRs.EOF)Then

oRs.Close

Else

oRs.MoveFirst

i=0

DoWhileNotoRs.EOF

Sheet1.Cells(i+4,3)=oRs.Fields("RealValue").Value

oRs.MoveNext

i=i+1

Loop

oRs.Close

EndIf

'读取Fan1_P1

sSql="Tag:R,('ProcessValueArchiveFan1_P1'),'"&sStart&"','"&sStop&"'orderbydatetime"

oCom.CommandText=sSql

SetoRs=oCom.Execute

If(oRs.EOF)Then

oRs.Close

Else

oRs.MoveFirst

i=0

DoWhileNotoRs.EOF

Sheet1.Cells(i+4,4)=oRs.Fields("RealValue").Value

oRs.MoveNext

i=i+1

Loop

oRs.Close

EndIf

'读取Fan1_P2

sSql="Tag:R,('ProcessValueArchiveFan1_P2'),'"&sStart&"','"&sStop&"'orderbydatetime"

oCom.CommandText=sSql

SetoRs=oCom.Execute

If(oRs.EOF)Then

oRs.Close

Else

oRs.MoveFirst

i=0

DoWhileNotoRs.EOF

Sheet1.Cells(i+4,5)=oRs.Fields("RealValue").Value

oRs.MoveNext

i=i+1

Loop

oRs.Close

EndIf

SetoRs=Nothing

Setconn=Nothing

EndSub

PrivateSubDTPicker1_Change()

clear_cell'**已经填充的数据

get_wincc_data'读取WinCC历史数据

EndSub

关于这个问题我做了两天的测试,发现了技术文档的代码是貌似有一点漏洞的,直接引用的查询结果不正确,会丢数据。而且顺便解决了时间控件的大小会每次重启都改变的问题,如果需要相关代码可以联系我QQ

斑竹:

WinCCOLEDB我不记得是否支持orderbydatetime了,其实不需要orderbydatetime,归档本来就是按时间顺序存储的。

主要不是排序的问题,是时间的转换出了问题,本地时间到UTC的转换应该不只是简单的减去8个点吧。

你*好看看*后的查询表达式。

我觉得中间转换挺乱的,字符串型与时间型转换可以直接转换吗?

比如:sStart=DateAdd("h",-8,CDate(sStart))

结果应该是时间,可以直接加到查询语句中吗?&sStart

菜鸟:

这个转换的问题我都测试好了,需要把时间转成字符型,然后计算UTC时间,然后再转成时间,*后再转换成SQL的时间格式,才可以查询出正确的结果,否则的话要么没有数据,要么数据不完全。会丢掉其中几个点

发现了技术文档的代码有一点漏洞的,

不同的项目不同的电脑肯定不一样了啊

可能是因为电脑的不同吧很多人根据那个技术文档都没试出来,才来找我做的


你可能感兴趣: 工控菜鸟园 自动化系统 WinCC Panel WinCC
无觅相关文章插件,快速提升流量