引言:
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集成,以实现用户所要求的报表;同时,实现了数据灵活备份,解决了工程实际问题。目前该系统已投入运行,性能良好。
-
引用 zhtd2012 2018/5/12 2:46:05 发表于2楼的内容
-
引用 bsg2017 2018/5/12 3:01:05 发表于3楼的内容
-
引用 zqsoft 2018/5/12 3:14:32 发表于4楼的内容
-
引用 zhtd2012 2018/5/12 3:15:15 发表于5楼的内容
-
引用 hztobo 2018/5/12 3:15:19 发表于6楼的内容
-
引用 hztobo 2018/5/12 3:21:13 发表于7楼的内容
-
引用 bsg2017 2018/5/12 3:21:58 发表于8楼的内容
-
引用 bsg2017 2018/5/12 3:22:32 发表于9楼的内容
-
引用 bsg2017 2018/5/12 3:22:56 发表于10楼的内容
-
引用 zhtd2012 2018/5/12 3:31:01 发表于11楼的内容