知方号

知方号

WinCC如何做外部报表

WinCC如何做外部报表

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

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

引言:

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(dataaccessobjects)

VB访问数据库的方法有多种,访问的数据库类型也有多种。DAO(dataaccess 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 + “ emp1.xls” ‘删除临时模板

4.结束语:

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。