1. 写在前面
    好多学习和使用wincc的朋友(包括本人)都对历史报表很伤神,网上的贴子五花八门,能用的很少。能用的也只是一个简单的查出一个变量的例子。更有可恨的上传一些假的文档来骗我们新人手里那本来就可怜的积分。经过学习和摸索,终于做出了完整的例子,分享出来,希望对大家有帮助。
  2. 运行环境
    软件: WINCC7.4 系统:Win7专业版64位
  3. 案例分享
    例子是一个供暖的历史时刻数据,将查出的数据按要求显示在报表中,并能导入到EXCEL中。
  4. 界面代码
    例子是在变量和归档都建好的条件下。

建立画面如下图

在画面的事件–>打开画面中添加如下代码(根据实际调整报表)

Dim msd,i
Set msd = ScreenItems("MSG")msd.Visible = 0
With msd.Cols = 21.AllowUserResizing = True.ColWidth(0) = 2000.ColWidth(1) = 1000.ColWidth(2) = 1000.ColWidth(3) = 1000.ColWidth(4) = 1000.ColWidth(5) = 1000.ColWidth(6) = 1000.ColWidth(7) = 1000.ColWidth(8) = 1000.ColWidth(9) = 1000.ColWidth(10) = 1500.ColWidth(11) = 1000.ColWidth(12) = 1000.ColWidth(13) = 1500.ColWidth(14) = 1000.ColWidth(15) = 1000.ColWidth(16) = 1000.ColWidth(17) = 1000.ColWidth(18) = 1000.ColWidth(19) = 1500.ColWidth(20) = 1500.RowHeight(0) = 500.ColAlignmentFixed = 4.ColAlignment = 4.TextMatrix(0,0) = "站名".TextMatrix(0,1) = "开阀面积".TextMatrix(0,2) = "温度目标".TextMatrix(0,3) = "二网供温".TextMatrix(0,4) = "二网回温".TextMatrix(0,5) = "二网供压".TextMatrix(0,6) = "二网回压".TextMatrix(0,7) = "一网供温".TextMatrix(0,8) = "一网回温".TextMatrix(0,9) = "一网流量".TextMatrix(0,10) = "流量累计".TextMatrix(0,11) = "一网热量".TextMatrix(0,12) = "热 负 荷".TextMatrix(0,13) = "热量累计".TextMatrix(0,14) = "前日热量".TextMatrix(0,15) = "一阀开度".TextMatrix(0,16) = "二阀开度".TextMatrix(0,17) = "水箱水位".TextMatrix(0,18) = "循环频率".TextMatrix(0,19) = "补水累计".TextMatrix(0,20) = "电量累计"End WithDim Gcols,Grows
For Grows = 1 To msd.Rows - 1For Gcols = 0 To msd.ColsIf 0 = Grows Mod 2 Thenmsd.Row = Growsmsd.Col = Gcolsmsd.CellBackColor = RGb(233,235,245)Elsemsd.Row = Growsmsd.Col = Gcolsmsd.CellBackColor = RGb(207,213,234)End IfNext
Next
msd.Visible = 1

在查询按钮里写入如下代码(查询历史时刻数据并按要求格式写入MSHFGrid中)

Dim ed,et,de1,de2,de3
Set ed = ScreenItems("sDate")
Set et = ScreenItems("sTime")
de1 = DateValue(ed.Value) & " " & TimeValue(et.Value)
HMIRuntime.Tags("SDTime").Write de1
de2 = UTCA(de1)
de3 = Dateadd("n",1,de2)Dim DSNName,m,i,k,ts,te,msd,wai
Dim sPro,sDsn,sSer,sCon
Dim conn,sSql,oRs,oComSet wai = ScreenItems("swait")
Set msd = ScreenItems("MSG")
DSNName = HMIRuntime.Tags("@DatasourceNameRT").Read
sPro = "Provider=WinCCOLEDBProvider.1;"
sDsn = "Catalog=" & DSNName & ";"
sSer = "Data Source=HS09\WinCC"
sCon = sPro + sDsn + sSer
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = sCon
conn.CursorLocation = 3
conn.Openmsd.Visible = 0
wai.Visible = 1For k = 6 To 11sSql = "Tag:R,('Nuit_" &k& "\TT24_" &k& "';'Nuit_" &k& "\TT21_" &k& "';'Nuit_" &k& "\TT22_" &k& "';"'sSql = sSql + "'Nuit_" &k& "\PT21_" &k& "';'Nuit_" &k& "\PT22_" &k& "';'Nuit_" &k& "\TT11_" &k& "';"sSql = sSql + "'Nuit_" &k& "\TT12_" &k& "';'Nuit_" &k& "\Flow11_" &k& "';'Nuit_" &k& "\Flow12_" &k& "';"sSql = sSql + "'Nuit_" &k& "\Heat11_" &k& "';'Nuit_" &k& "\Heat13_" &k& "';'Nuit_" &k& "\Heat12_" &k& "';"sSql = sSql + "'Nuit_" &k& "\Heat121_" &k& "';'Nuit_" &k& "\ECV102_" &k& "';'Nuit_" &k& "\ECV202_" &k& "';"sSql = sSql + "'Nuit_" &k& "\WLevel_" &k& "';'Nuit_" &k& "\CP21_" &k& "';'Nuit_" &k& "\Flow22_" &k& "';'Nuit_" &k& "\Elec12_" &k& "'),'" & de2 & "','" & de3 & "',TimeStep=60,1'"Set oRs = CreateObject("ADODB.Recordset")Set oCom = CreateObject("ADODB.Command")oCom.CommandType = 1Set oCom.ActiveConnection = connoCom.CommandText = sSqlSet oRs = oCom.Executem = oRs.RecordCountIf (m > 0) ThenoRs.movefirstmsd.TextMatrix(k-5,0) = HMIRuntime.Tags("un"&k).Readmsd.TextMatrix(k-5,1) = HMIRuntime.Tags("Area12_"&k).ReadFor i = 1 To m        msd.TextMatrix(k-5,i+1) = Formatnumber(ors.fields(2).value,2,-1,,0)ors.movenextIf oRs.Eof ThenExit ForEnd IfNextoRs.CloseSet oRs = NothingEnd If
Nextwai.Visible = 0
msd.Visible = 1
'Set oRs = Nothingconn.Close
Set conn = Nothing

加入排序代码,我用的是在MSHFGrid的双击里

Dim msd
Set msd = ScreenItems("MSG")
msd.Visible = 0
msd.Sort = 1
Dim Gcols,Grows
For Grows = 1 To msd.Rows - 1For Gcols = 0 To msd.ColsIf 0 = Grows Mod 2 Thenmsd.Row = Growsmsd.Col = Gcolsmsd.CellBackColor = RGb(233,235,245)Elsemsd.Row = Growsmsd.Col = Gcolsmsd.CellBackColor = RGb(207,213,234)End IfNext
Next
msd.Visible = 1

导出至EXCEL代码

Dim msd,oex,spa
Dim i,m,k,stSet msd = ScreenItems("MSG")If "" = msd.TextMatrix(1,0) ThenMsgbox "无导出内容!"
ElseSet oex = CreateObject("Excel.Application")oex.Visible = Falsespa = HMIRuntime.ActiveProject.Path & "\moban.xlsx"oex.WorkBooks.open spax = HMIRuntime.Tags("SDTime").Readst = "查询时间:" & xoex.Cells(2,1) = stm = msd.RowsFor i = 0 To m-1For k = 0 To msd.Cols-1oex.Cells(i+3,k+1).Value = msd.TextMatrix(i,k)NextNextspa = sPath(x)oex.DisplayAlerts = False '对打开的文件,直接保存时,避免弹出对话框窗口,而是直接覆盖oex.activeworkbook.saveAs spaoex.workbooks.closeoex.quitSet oex = NothingMsgbox "成功导出至" & spa & "!"
End If

运行图片

缺点:查询速度慢。 感觉是代码执行有问题,应该可以优化。本人能力有限。请路过的大神提点一下,加快查询速度,造福同行。

WINCC历史报表(归档查询)实例相关推荐

  1. Java Web 后台中餐饮业报表系统开发实例

    本期葡萄城公开课,我们诚邀石家庄品智技术有限公司,高级软件工程师--刘永政先生,为大家在线分享餐饮业报表系统设计模式,以及在 HTML5 报表浏览器.Java 架构中跨平台使用ActiveReport ...

  2. SAP MM 为MB51报表增加查询字段

    SAP MM 为MB51报表增加查询字段 比如想按照'抬头文本'字段来查询, 找到'凭证抬头文本',勾选'选择字段'即可,如下图: 2019-02-25 写于苏州市

  3. python连接mongodb进行查询_Python中的MongoDB基本操作:连接、查询实例

    MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可护展的高性能数据存储解决方案.它的特点是高性能.易部署.易使用,存储数据非常方便. MongoDB 简单使用 联 ...

  4. xadmin oracle 查询,Django admin 实现search_fields精确查询实例

    我就废话不多说了,还是直接看代码吧! search_fields = (u'gift_rule_id',u'user_id', u'activity_id',) //默认的查询集合 def get_q ...

  5. AJAX for Java简单表数据查询实例

    AJAX for Java简单表数据查询实例<?XML:NAMESPACE PREFIX = O /> AJAX WebShop 3对Java开发具有良好的支持,同时也提供了各种层次的后台 ...

  6. mysql mongo关联查询语句_MySQL与Mongo简单的查询实例代码 筋斗云网络

    简介 本文通过一个实例给大家用MySQL和mongodb分别写一个查询,本文图片并茂给大家介绍的非常详细,感兴趣的朋友参考下吧 首先在这里我就不说关系型数据库与非关系型数据库之间的区别了(百度上有很多 ...

  7. Solr学习之三:Solr各种查询实例

    文档里的查询实例可以应对一些普通的solr查询,复杂的solr查询还得自己再继续添加代码,自己也在学习中.先贴出完整代码,后再做说明. 注意:在运行如下查询实例前你得先向solr Admin中添加了你 ...

  8. 股票历史数据-股票历史行情数据查询

    股票历史数据-股票历史行情数据查询 共享一个股票历史行情数据查询的工具,股票历史行情数据查询的是从股票成立到最近一天的所有历史数据,亲测手机就能查询股票历史行情数据.下载股票历史行情数据 亲测获取步骤 ...

  9. 股票历史数据-股票价格查询,股票历史交易价格查询

    共享一个股票价格查询的工具,可以在线股票价格查询,查询的股票历史交易价格的是:股票从成立到最近一天的所有股票历史价格数据,亲测手机在线就能查询所有个股的股票价格数据,A股.港股.美股所有个股的股票历史 ...

最新文章

  1. 阿里飞猪个性化搜索排序探索实践
  2. 根据时间比较选择数据
  3. 两台服务器安装redis集群_Redis Cluster搭建高可用Redis服务器集群
  4. 递归方法:对于树形结构的表,根据当前数据获取无限极的父级名称
  5. selenium+chromedriver爬取淘宝美食信息保存到MongoDB
  6. I2C总线以及GPIO模拟I2C
  7. RabbitMQ是如何运转的?
  8. 动手学CV-目标检测入门教程4:模型结构
  9. SQL Server中的查询优化技术:数据库设计和体系结构
  10. 创建一个cocos2d-x工程添加一个自定义Scene并显示
  11. linux 7.4ip配置,新手进阶 Ubuntu7.10中配置IP地址
  12. ueditor java_编辑器ueditor1.4.3 JAVA环境使用
  13. CC2530单片机精确延时的时间分析
  14. win7下MyEclipse装Nutch1.7
  15. js replace 中文分号_关于js分号的问题?
  16. 栈:后进先出的线性表
  17. OrCAD导出BOM表的方法
  18. python 知识点视频,Python超详细入门教程-Python基础视频教程-千锋教育视频资源库...
  19. MIUI12 for OnePlus 7T 使用钱包app 的尝试
  20. SE14造成表丢失后找回数据

热门文章

  1. 站在PoS兴起的前夜 | 专访Hash Quark李晨
  2. 如何在Springboot实现条件查询
  3. 字节跳动2019春招研发部分编程题汇总(Python版本)
  4. 能够作图的软件都有哪些
  5. 出现高并发的几种问题
  6. Delphi的方向?
  7. 2. 在JavaScript中使用变量,输出个人基本信息(学号、姓名、性别等)
  8. windows8系统如何换win7之thinkpad E430 WIN8改WIN7必做事项
  9. 奇迹mu win10 驱动_给数字漫画迷的10个奇迹无限提示
  10. dreamweaver制作php动态网页,用Dreamweaver创建PHPmysql动态网站