您的位置:控制工程论坛网论坛 » 自动化软件 » 用VB实现WinCC归档数据的复杂报表

sweect

sweect   |   当前状态:在线

总积分:5941  2024年可用积分:0

注册时间: 2007-11-07

最后登录时间: 2023-08-21

空间 发短消息加为好友

用VB实现WinCC归档数据的复杂报表

sweect  发表于 2018/4/15 8:37:43      1148 查看 0 回复  [上一主题]  [下一主题]

手机阅读

引言:

Siemens公司的WinCC是一个优秀的工控组态软件,广泛应用于各种工业控制系统的数据采集及监控,具有良好的人机界面、灵活的组态功能。WinCC本身也具有报表和曲线处理功能,但 WinCC V6.0以前的版本没有嵌入VB脚本功能,且其归档数据不能直接被SQL server数据库所用。对于一些较复杂的数据处理功能(如数据查询、数据备份、报表打印等)用WinCC实现就显得力不从心。同时,WinCC在处理报表时不能对历史数据进行任意查询和过滤,且报表格式设计也不够灵活方便,无法满足项目要求。

1.系统概述

  本系统是将WinCC从PLC采集过来的过程数据通过VB编程进行归档、查询、过滤、报表打印。在每次试验前,先要清空WinCC归档数据库和Access临时数据库,以保证每一次试验数据的有效性和完整性。试验结束后,可立即进行数据处理(备份、查询、过滤、打印)。也可对备份的历史数据进行查询和报表打印。由于Excel实现报表功能非常强大,且VB的可扩展性强,可以利用Excel作为OLE服务器,实现VB与Excel的集成,所以各种复杂的报表可以很容易的实现。系统主要界面如下 :

图一:新试验起始画面

图二:数据查询画面

2.  ODBC的配置连接和DAO

2.1 ODBC(Open Database Connectivity)配置

   ODBC是一个用于访问数据库的统一标准接口,是Microsoft Windows的开放服务体系WOSA(Windows OpenServices Architecture)中有关数据库的一个组成部分。ODBC需要连接数据源,选择相应的驱动程序。本系统数据源配置在ODBC Config 对话框中进行,配置数据库文件名(此处输入Siemens组态软件Wincc自动生成存档的过程数据库<项目名>RT.DB)和路径。并在类型(Description)中输入Wincc5.0 。在Access中通过“获取外部数据“连接到在ODBC 管理器中建立的数据源。这样即使Wincc退出后,Access仍然与过程数据库保持后台动态连接。

2.2 DAO(data accessobjects)

VB访问数据库的方法有多种,访问的数据库类型也有多种。DAO(data access objects)是一种基于Jet 数据库引擎的面向对象接口,它提供了完整的管理一个关系型数据库所需的全部操作属性和方法。DAO可以识别ODBC数据库。

3. VB创建数据库和Excel报表

3.1创建数据库、添加记录

Siemens组态软件Wincc自动生成归档的过程数据库<项目名>RT.DB,每一个标签变量对应一个表,需将若干个表汇总成为一个总表,另外需建一个包含变量名称、代号、允许值等字段的表。上述过程采用VB编程,用前面介绍的的DAO创建数据库、创建表、添加字段等来完成。并将Access中不同的采样周期对应数据添加到临时数据库中,然后进行备份、查询和报表处理等。主要程序如下:

SetWs = DBEngine.Workspaces(0)

Set dataBase = Ws.CreateDatabase(dataBasePath,dbLangGeneral, dbVersion60)

Set Table = dataBase.CreateTableDef(TableName)

Do Until recordTemp.EOF

   Rs.AddNew:Rs(1) = recordTemp(0)

    Rs.Update:recordTemp.MoveNext   

     Loop   

3.2数据查询和过滤

    使用SQL语句实现时间段和数据过滤时间的子查询,并将查询结果放在建立的临时查询表中,再将临时查询表的记录显示。

Set queryTemp =db.CreateQueryDef("", "SELECT * FROM 运行数据 WHERE  时间 IN ( SELECT 时间 From  运行数据 WHERE 时间 between #" & strStart & "# and #" &strEnd & "# ) and Val(序号) Mod " & Tim& "=" & numMod & " ORDER BY 时间 ")


3.3生成Excel报表   

由于生成的报表比较复杂,所以先在Excel中按照用户的要求作好一个模板(后缀为.xlt),对于报表中不固定的部分,需要VB程序动态生成。由于本项目过程变量数目及采样值较多,在VB程序中需同时控制Excel的Sheet和Page。整个过程都是后台调用Excel。

1)启动Excel、复制模板:

SetobjNew = New Excel.Application

SetobjNew = CreateObject("Excel.application")

FileCopystrS, strD  ‘复制模板

SetobjEW = objNew.Workbooks.Open(strD) objNew.Visible = False

2)按要求将查询结果送到Excel的各个Range或Cells中:

Fori = 3 To 16

objEW.Sheets(1).Cells(4+ k * 33, i) = c(i - 2, 1): Next I

3)删除多余的模板:

objEW.Sheets(1).Range("A"& Trim$(Str$(k)) & ":" & "P660").Select   objNew.Selection.EntireRow.Delete

Selection.DeleteShift:=xlUp

4)设置纸张、打印预览和打印:

objEW.ActiveSheet.PageSetup.Orientation= xlLandscape   '设置纸张方向为横向

objEW.ActiveSheet.PageSetup.PaperSize= xlPaperA4        '设置纸张尺寸为A4

objNew.Visible= True

objEW.Sheets(1).PrintPreview

objNew.Visible= False

objEW.Sheets(1).PrintOut

objNew.DisplayAlerts= False: objNew.Quit         objNew.DisplayAlerts= True:

SetobjNew = Nothing

KillApp.Path + "\temp1.xls" ‘删除临时模板

4.结束语:

   本系统将WinCC从PLC采集过来的过程数据,通过VB编程进行归档、查询、过滤、报表打印,以及对历史数据查询、过滤、报表打印。系统充分利用Excel非常强大的报表处理功能,以及VB的可扩展性强,将VB与Excel集成,以实现用户所要求的报表;同时,实现了数据灵活备份,解决了工程实际问题。目前该系统已投入运行,性能良好。


1楼 0 0 回复