故事作者:RENHQ

最近创作

看看TA的故事

【内行说】用变量归档实现报表二--Spreadsheet 控件单元格填充方式显示数据

已锁定

RENHQ

西门子1847工业学习平台

  • 帖子

    12108
  • 精华

    59
  • 被关注

    1921

论坛等级:至圣

注册时间:2008-12-28

钻石 钻石 如何晋级?

【内行说】用变量归档实现报表二--Spreadsheet 控件单元格填充方式显示数据

711

2

2022-07-03 18:57:40

4.4 使用 Spreadsheet 控件显示数据--单元格填充方式

下面就是用微软的 EXCEL 表格控件 Spreadsheet 进行数据的显示,在比较早之前,我也是用用户归档做的报表,不过当时做的报表,没有针对报表建立专门的归档数据,是在原变量记录归档周期 500ms 的基础上,进行数据查询然后显示的,显示的方式也是单元格填充的方式。之前的脚本有些复杂,这里进行简化一下,所以也用单元格填充的方式做出来,测试一下数据刷新的时间看看是多少。 在新版本的 OFFICE 安装之后,默认没有了 Spreadsheet 控件,此时你可以下载 OWC11 进行安装,安装后,相关的 office 控件就都能显示出来了。

Spreadsheet 控件和 DPTicker 控件的使用可能需要购买授权注册才能正常使用

控件在 HMI 画面上创建之后,根据需要可以设置一下保护、显示隐藏的参数,如果表格一直显示,可以先设置一个表格模版,然后另存为 XML 格式的表格,在表格控件属性的导入选项卡,选择 XML 格式的模版文件,点击立即导入,就能在表格文件中显示出来表格模版,脚本只负责填充数据部分即可。

剩下的内容就是脚本来实现了,显示的时候,也分两种,一是表格一直显示这,看着数据挨个单元格的进行填充刷新,另一种是把数据部分隐藏起来,待数据刷新完毕后,再进行完整显示。

先是第一种方法,控件表格打开后一直完整显示表格,点击查询按钮之后,执行填充的过程完全显示出来。 下面是完整的脚本  


HMIRuntime.Trace vbCRLF & "now=" & Now '测试脚本运行时间,正常运行时可以删除
  Dim sPro,sDsn,sSer,sCon,conn
  Dim oRs,oCom,sSql
  Dim sBTime,sETime,sTagList
  Dim DT,CO_EX,m
  Set CO_EX = ScreenItems("C0_EXCEL")
  CO_EX.ActiveWorkbook.Worksheets("Sheet1").Select
  Set DT = ScreenItems("DATA_ST") '开始日期对象
    sPro = "Provider=WinCCOLEDBProvider.1;" '设置OLE DB 提供程序的名称
    sDsn = "Catalog=" & HMIRuntime.Tags("@DatasourceNameRT").Read & ";" '设置WinCC 数据库的名称
    sSer = "Data Source=" & HMIRuntime.Tags("@ServerName").Read &"\WinCC" '设置服务器名称
    sCon = sPro + sDsn + sSer
    sBTime = UTC_SQLTIME(DateValue(DT.Value) & " 00:00:00")'查询起始时间
    sETime =  NOW2UTC(DateADD("d",1,sBTime))'查询结束时间
    sTagList = "'baobiao\出水NH3N';'baobiao\出水PH';'baobiao\出水SS';'baobiao\出水流量';'baobiao\进厂COD';'baobiao\进水NH3N';'baobiao\进水PH';"
    sTagList = sTagList & "'baobiao\进水SS';'baobiao\进水流量';'COD\厌氧区氧化还原电位值';'COD\厌氧区污泥浓度';'COD\好氧区污泥浓度';'COD\好氧区溶解氧值';'COD\缺氧区氧化还原电位';" _
      & "'liuliang\嚗气量';'yewei\事故池液位';'yewei\泵房水液位';'yewei\盐酸罐液位';'yewei\硫酸亚铁池液位';'yewei\碱池液位';'yewei\调节池液位';'yewei\集水池液位')"
    sSql = "Tag:R,('baobiao\出水流量';"& sTagList &",'" & sBTime & "','" & sETime & "'"
  ' HMIRuntime.Trace vbCRLF & "sSql=" & sSql
  Set conn = CreateObject("ADODB.Connection") '设置对象
    conn.ConnectionString = sCon '设置数据连接的ConnectionString属性
    conn.CursorLocation = 3
    conn.open '打开数据库连接,也可以不设置ConnectionString,直接使用conn.open sCon方式
  Set oRs = CreateObject("ADODB.Recordset") '创建记录集对象
  Set oCom = CreateObject("ADODB.Command") '创建查询对象
    oCom.CommandType = 1 '设置Command类型 1:按命令或存储过程调用的文本定义计算 CommandText
  Set oCom.ActiveConnection = conn '设置定义连接
    oCom.CommandText = sSql '设置包含提供者(provider)命令的字符串值。默认值为 ""(零长度字符串)。
  Set oRs = oCom.Execute '执行SQL查询
    m = oRs.RecordCount '查询的记录集的数目
    HMIRuntime.Trace vbCRLF & "m=" & m
    Dim x,y,i,j,tagid
    tagid=0
    x=2
    y=1
    CO_EX.ActiveSheet.range("A2:A25").NumberFormat="yyyy-MM-dd HH:mm:ss" '设置单元格格式
    CO_EX.ActiveSheet.range("B2:X25").NumberFormat="0.00"
  If (m > 0) Then
    oRs.MoveFirst
    Do While Not oRs.EOF '数据输出
      If tagid <> oRs.Fields(0).Value Then
        y=y+1
        x=2
      End If
      If y=2 Then
        CO_EX.ActiveSheet.Cells(x,y-1).Value = UTC2NOW(oRs.Fields(1).Value)
      End If
      CO_EX.ActiveSheet.Cells(x,y).Value = oRs.Fields(3).Value
      x=x+1
      tagid = oRs.Fields(0).Value
      oRs.MoveNext
    Loop
  Else
    Msgbox "所选日期内没有数据记录!"
  End If
    oRs.Close '关闭对象
    conn.Close
  Set oRs = Nothing '释放资源
  Set oCom = Nothing
  Set conn = Nothing
  HMIRuntime.Trace vbCRLF & "now=" & Now  '测试脚本运行时间,正常运行时可以删除


此时的数据刷新效果如下图

数据的刷新显示效果还是挺好的,但是由于每个单元格填充后,控件还要显示出来,控件的刷新时间确实较慢,一天数据 552 个,在视图中还没有完全显示出来,数据的填充过程就需要 11 秒。


下面采取另一种方法:在脚本执行时,把表格的高度设置成 70,待脚本执行完,高度再设置成 500,添加两行脚本如下:


......

Set CO_EX = ScreenItems("C0_EXCEL")
CO_EX.Height = 70 '刷新之前先隐藏数据
CO_EX.ActiveWorkbook.Worksheets("Sheet1").Select
...
...
Set conn = Nothing
CO_EX.Height = 500 '刷新完成恢复视图
HMIRuntime.Trace vbCRLF & "now=" & Now  '测试脚本运行时间,正常运行时可以删除


然后再看一下效果

额,刷新速度还是挺快的,也就在 3-4 秒左右,上面设置的高度是为了查看数据填充的效果,实际使用中,你可以着这样做:在数据刷新的时候也可以把表格先隐藏,待数据刷新完成后再进行显示。效果更好一些。这就是一个很好的选择呢


【内行说】用变量归档实现报表二--Spreadsheet 控件单元格填充方式显示数据 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3227条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。