西门子(中国)有限公司(SLC)

注册 登录

  签到   每日登录:+1西币 +1经验值我的支持中心

信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。

技术论坛


编辑推荐: 关闭

请填写推广理由:

excel读取wincc归档数据库

作者 主题
游士

经验值: 192
发帖数: 5
精华帖: 2
主题:【分享】excel读取wincc归档数据库
精华帖精华帖星级2级 推荐帖 推荐帖


只看楼主 只看精华 楼主 2018-01-07 12:29:43

 虽然这例子在西门子官方文档上已经有过例子,但作为刚刚接触这块的新手拿到官方的remote-xls还是有些摸不着头脑,不断报错自动化错误8000005,看了网上的例子可以通过WINCCOLEDB来完成,最后终于搞出来了,给大家分享一下,也是给自己加深记忆吧

我使用的wincc 7.0 Sp3的软件

第一步

 

 归档变量设为1分钟,可以按你需要的设,不影响

请注意一点要在wincc启动当中选择变量记录否则会报错invalid object name dbo.Achive

第二步在excel当中设置

2.1创建模板

 

日历控件通过插入控件 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东西太多了,需要在该领域不断探究学习



 
精华帖版主置评: 感谢分享经验,这个脚本再加上创建excel对象的部分,基本上也能用到WINCC里面了
推荐帖推荐理由: 可以作为”同学“者的操作指南 (推荐人:唐诗宋瓷)
分享帖版主置评: 感谢分享经验 (推荐人:RENHQ)
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:http://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=5&a_id=1452914

侠圣

经验值: 2953
发帖数: 443
精华帖: 3
回复:excel读取wincc归档数据库
推荐帖


只看楼主 只看精华 1楼 2018-01-07 13:06:44

好贴,先收藏。


坚持就能走的更远
以下网友喜欢您的帖子:

  
版主

经验值: 38847
发帖数: 5476
精华帖: 47
回复:excel读取wincc归档数据库
推荐帖


只看楼主 只看精华 2楼 2018-01-07 14:31:23


记得官方的例程就能实现的啊,您测试的官方的那个EXCEL 表格demo不行吗?


Q 187272190 Q 群:6141014
以下网友喜欢您的帖子:

  
侠圣

经验值: 3541
发帖数: 574
精华帖: 0
回复:excel读取wincc归档数据库
推荐帖


只看楼主 只看精华 3楼 2018-01-07 15:37:22


楼主,厉害,发现官方的错误!

知识都是在实践中积累的!!!


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2400
发帖数: 245
精华帖: 0
回复:excel读取wincc归档数据库
推荐帖


只看楼主 只看精华 4楼 2018-01-07 16:58:51

有用,谢谢!


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3763
发帖数: 495
精华帖: 0
回复:excel读取wincc归档数据库
推荐帖


只看楼主 只看精华 5楼 2018-01-07 18:24:03

给楼主点赞、感谢分享!


决不为短期利益而牺牲未来
以下网友喜欢您的帖子:

  
侠圣

经验值: 4921
发帖数: 670
精华帖: 0
回复:excel读取wincc归档数据库
推荐帖


只看楼主 只看精华 6楼 2018-01-07 22:57:02

正好准备要用到这个功能呢,谢谢楼主了。先收藏了。


我回来了!
以下网友喜欢您的帖子:

  
侠圣

经验值: 4782
发帖数: 931
精华帖: 0
回复:excel读取wincc归档数据库
推荐帖


只看楼主 只看精华 7楼 2018-01-08 08:12:23

感谢楼主分享,这个真心不好做。


邮箱 yongquancun@126.com
以下网友喜欢您的帖子:

  
侠圣

经验值: 2953
发帖数: 419
精华帖: 0
回复:excel读取wincc归档数据库
推荐帖


只看楼主 只看精华 8楼 2018-01-08 21:33:36


谢谢楼主分享


学无止境
以下网友喜欢您的帖子:

  
侠圣

经验值: 3028
发帖数: 456
精华帖: 1
回复:excel读取wincc归档数据库
推荐帖


只看楼主 只看精华 9楼 2018-01-08 22:13:55


,感谢分享。


永无止境!
以下网友喜欢您的帖子:

  
侠士

经验值: 1528
发帖数: 221
精华帖: 0
回复:excel读取wincc归档数据库


只看楼主 只看精华 10楼 2018-01-09 11:39:48

感谢楼主的分享


 
以下网友喜欢您的帖子:

  
侠客

经验值: 954
发帖数: 113
精华帖: 0
回复:excel读取wincc归档数据库


只看楼主 只看精华 11楼 2018-01-09 14:40:53


感谢分享,有时间试试看


努力学好自动化
以下网友喜欢您的帖子:

  
lzm
奇侠

经验值: 5358
发帖数: 1058
精华帖: 7
回复:excel读取wincc归档数据库


只看楼主 只看精华 12楼 2018-01-09 15:10:43


无私分享值得称赞


Querer es poder! 修福粒米藏日月 持慧毫芒有乾坤
以下网友喜欢您的帖子:

  
游民

经验值: 69
发帖数: 2
精华帖: 0
回复:excel读取wincc归档数据库


只看楼主 只看精华 13楼 2018-01-09 15:14:42


感谢分享,点赞


 
以下网友喜欢您的帖子:

  
侠客

经验值: 685
发帖数: 59
精华帖: 2
回复:excel读取wincc归档数据库


只看楼主 只看精华 14楼 2018-01-10 13:55:26

    Set DSNName = CreateObject("CCHMIRuntime.HMIRuntime")
     sDsn = DSNName.Tags("@DatasourceNameRT").Read'读取当前使用数据库,一定要加两句脚本,官方文档就没有

官方的代码是在WINCC的脚本编辑器中编写的,自己识别该对象,你是在EXCEL VBA中编写的代码。

这行代码也不是必须的,只要因引用了 WinCC  HMIRuntime 1.0 Type Library 就可象在WinCC 的VBS脚本编辑器中一样使用该对象 HMIRuntime。第一行代码可以省去,第二行代码做下面需改:

sDsn =HMIRuntime.Tags("@DatasourceNameRT").Read   也可以。

加第一行代码是你的文档如果拷贝给别人,别人不需要再引用该对象库,实际上就是你加了这行代码,别人的电脑中没有该对象库也是没办法用的。



 
以下网友喜欢您的帖子:

  
游民

经验值: 141
发帖数: 17
精华帖: 0
回复:excel读取wincc归档数据库


只看楼主 只看精华 15楼 2018-05-03 11:28:27


马上试一下


你经历的坑,都会给你一个惊喜
以下网友喜欢您的帖子:

  
侠士

经验值: 1235
发帖数: 253
精华帖: 2
回复:excel读取wincc归档数据库


只看楼主 只看精华 16楼 2018-07-23 15:53:45

感谢楼主分享,正需要那,谢谢!


每天进步一点点,成功源于积累!
以下网友喜欢您的帖子:

  
侠士

经验值: 1024
发帖数: 139
精华帖: 2
回复:excel读取wincc归档数据库


只看楼主 只看精华 17楼 2018-07-31 08:07:15

 官方的时间转换部分貌似有问题的,还是用专用的转换函数来做比较靠谱,在某个时令会出现丢数据的情况


wincc报表全套教材书+视频教程+实例:2606352062
以下网友喜欢您的帖子:

  
游侠

经验值: 563
发帖数: 34
精华帖: 0
回复:excel读取wincc归档数据库


只看楼主 只看精华 18楼 2018-09-11 23:11:15


正在研究这个方式,demo没有实现呢


 
以下网友喜欢您的帖子:

  
游侠

经验值: 563
发帖数: 34
精华帖: 0
回复:excel读取wincc归档数据库


只看楼主 只看精华 19楼 2018-09-11 23:31:22

我测试了下,变量记录里有记录,但是不能读到值,得到空的集合,不知道为啥


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
扫描打开手机版
您收到0封站内信:
×
×