
第一步归档变量设置
归档变量设为1分钟,可以按你需要的设,不影响
请注意一点要在wincc启动当中选择变量记录否则会报错invalid object name dbo.Achive
第二步在excel当中设置
创建模板
日历控件通过插入控件 Microsoft Date and picker 来完成的,注意某些office 没有工具箱控件,需要在文件下的选项中插入开发工具来完成
在开发工具下的Visual Basic编辑器中sheet1插入以下脚本
Dim sPro, sDsn, sSer, sCon, sSql
Dim conn, oRs, oCom
Dim DSNName
Dim i As Integer
Dim sStart, sStop As String
'---声明
Sub get_wincc_data()
Set DSNName = CreateObject("CCHMIRuntime.HMIRuntime")
sDsn = DSNName.Tags("@DatasourceNameRT").Read'读取当前使用数据库,一定要加两句脚本,官方文档就没有
'--Get Database DSN name-----------------------------------
'--build connection string-----------------------------------
sPro = "Provider=WinCCOLEDBProvider.1;" '安装connectivity pack后使用wincc OLE-DB进行连接数据
sDsn = "Catalog=" & sDsn & ";" '从sdsn为前面获取的数据库
sSer = "Data Source=.WinCC" '本地计算机为.Wincc 远程可参考官方文档
sCon = sPro & sDsn & sSer '通讯内容为协议+数据库+计算机名
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = sCon
conn.CursorLocation = 3
conn.Open
Set oRs = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1
Set oCom.ActiveConnection = conn
'查询启止时间 ,由于本地添加了Date time picker控件,所以下面调用控件函数,0和23不需要改
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))
'读取归档变量
sSql = "Tag:R,('ProcessValueArchiveNewTag'),'" & sStart & "','" & sStop & "' order by datetime"
oCom.CommandText = sSql '把text值放入需要通信的包中
Set oRs = oCom.Execute ’执行通信包
If (oRs.EOF) Then '如果检测到空行,则oRs关闭
oRs.Close
Else
oRs.MoveFirst
i = 0
Do While Not oRs.EOF
Sheet1.Cells(i + 4, 2) = oRs.Fields("RealValue").Value '从第四行第二列开始赋值,行数不断递增
oRs.MoveNext
i = i + 1
Loop ' do while ... loop循环
oRs.Close
End If
Set oRs = Nothing '释放资源
Set conn = Nothing '关闭通信
End Sub
Private Sub DTPicker1_Change() '如果日历控件改变日期则开始运行函数
clear_cell '清除已经填充的数据
get_wincc_data '读取WinCC历史数据
End Sub
Sub clear_cell()
For i = 4 To 27 '清空第4行到27行,因为1天24小时,后面28行到30行设为最大值最小值,平均值
For j = 2 To 5 '清空第二列到第五列
Cells(i, j) = ""
Next j
Next i
End Sub
在workbook页中添加脚本
Private Sub workbook_Open()
Sheet1.DTPicker1.Height = 16
Sheet1.DTPicker1.Width = 120
Sheet1.DTPicker1.Value = Now
End Sub
注意一点
因为前面引用函数HMIRuntime
“Set DSNName = CreateObject("CCHMIRuntime.HMIRuntime")
sDsn = DSNName.Tags("@DatasourceNameRT").Read'”
必须在VB编辑器中引用HMIRuntime库控件
结果如下
以上是步骤流程,希望大家能派上用场,有什么不明白的大家一起交流学习,wincc用上sql server东西太多了,需要在该领域不断探究学习
