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

-回复 -浏览
楼主 2019-01-16 03:44:58
举报 只看此人 收藏本贴 楼主

最近在看WinCC如何做外部报表,网上找了一篇文章,供大家参考。

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


摘要:本文主要讨论了将Siemens组态软件Wincc归档的过程数据,通过Access数据库的ODBC连接,利用VB生成Access数据库,较好地解决了Wincc归档数据灵活备份和复杂报表打印的问题。

关键词:WinCC、Access数据库、ODBC、Excel报表

Abstract:This Paper mainly discusses how toimport the Wincc process data to Microsoft Access via ODBC ,and implement complicateddata report based on Excel using VB program .This solves commendably theproblems of complicated data report and database copy freely.

Key words: WinCC、Access database、ODBC、Excel report

 

引言:

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. Siemens《Simatic WinCC V5.0》

2. 《精通Visual Basic 6.0 中文版》  电子工业出版社

3. 《Visual Basic 数据库编程》科学出版社

4. 《SQL Server 2000》人民邮电出版社


我要推荐
转发到