西安航天自动化股份有限公司710065
摘要:针对工业使用中上位组态软件自带报表功能的不足,本文以污水处理厂为例,设计了基于Wincc与VBA的工业报表报表系统。通过对基本方法和过程的分析,详细说明该报表系统的稳定和便于移植性。
关键词:Wincc;VBA;access;工业报表系统
ABSTRACT:BeacuasethedefectofthereportusingtheConfigurationSoftware,thisarticletakesthesewagetreatmentasexample,designingtheindustryreportsystembasedonWinccandVBA.Throughtheanalysisofthebasicmethodsandprocesses,thisarticledescribesthestabilityandportabilityaboutthereportingsystemindetail.
KEYWORDS:Wincc,VBA,access,industrialreportsystem
一、绪论
1.1现状及意义
1.1.1污水厂报表的重要性
随着技术的发展,近年来,我国对污水处理十分重视,随着“水十条”的出台,政府对污水处理有了更高的要求,污水处理进入快速发展期。对于城镇污水处理厂污染物排放标准,国家也有了更严格的规定,BOD、COD、SS等数据环保局都要求污水厂严格控制在一定的标准范围内。比如BOD,即生物需氧量,反映了污水被有机物污染的程度,BOD越高说明水中有机污染物质越多,污染越严重,因此BOD需要保证在一定范围,作为水质的重要参考数据。又比如,设备运行时间,可以用来计算折旧率。
因此对于这些数据的监测,利用报表对数据进行采集和存档,并随时查询,观测一定周期内数值的变化就尤为重要。
1.1.2工业报表现状
工业使用中,报表时常令大家烦恼,上位组态软件报表功能的不足和不便利,使得大家必须在熟悉Wincc、VB、数据库的基础上开发适合工业使用的报表。对于Wincc上位报表,一般主要有一下三种方式:
(1)利用Wincc的用户归档,直接在归档中设置,然后制作报表画面。这样的优点是简单、方便。缺陷是,报表功能比较简单,不能进行复杂的运行,更不方便数据存档。
(2)利用Wincc的VBS全局脚本,将数据写入excel,设置好excel模板,然后根据模板写入数据到根据模板生产的新的excel报表,这样的优点是可以方便的生成每天的报表。缺点是,excel相对于access等数据库,更多的是用在数据分析,而不擅长于数据管理。而且,access处理大量数据的能力强于excel。
(3)excel更擅长数据分析,所以我们就可以考虑把数据存于类似access等数据库,利用excel来筛选、查询。
除此之外,还可以利用水晶报表、FineReport等,这些也有其强大之处,不过在与excel交互方面不那么方便,而且相比开发和操作方面也更复杂。
1.1.3VBA来编写报表的优势
首先,利用数据库来保存数据,更具有稳定性,而excel强大的数据分析能力,充分利用VBA自动化编程,可以很方便的来制作报表的预览和保存。
其次,利用excel来设计报表,可以适应项目中各种报表要求,有更强的灵活性,这样制作出报表有很强的可定制性,通过VBA编程,查询数据库数据,几乎可以满足工业上的各种报表使用。
而且,相比组态软件自带的报表,利用excelVBA编写的报表,可以更方便的存档为excel文件,这样,在班组生产中,当需要某个报表,就可以直接联系中控室,中控存为excel后,利用局域网,比如利用飞鸽传书、飞秋等局域网通讯软件,直接传送给需要的班组,方便了生产管理。
所以,几种方法里,方法三更有优势,因此本文将利用方法三,来详细解说基于Wincc和VBA的工业报表使用。
1.1.4功能简介
在工业生产中,有各式各样的报表,比如日生产报表,还有具体划分班组的日报表等待。本系统结合污水厂项目中报表使用情况,介绍了最常用的日、月、年报表。
本报表系统利用VBA来编写、查询,实现了主要包括日报表、月报表、年报表的查询,任意区间时间的查询,各个报表的打印、预览与存档,以及报表系统的简要说明。
二、功能设计
2.1access建立表和字段
(1)首先利用access建立数据库。
(2)建立表,注意设置各个字段的属性,其中编号设置为自动编号,日期和时间设置如下:
DATE:中日期、输入法关闭、默认值Date()
TIME:短日期、输入法关闭、默认值Time()
(3)建立查询
利用查询向导建立日、月、年才查询(这部分工作也可以excel的VBA中做查询时编写VBA代码来代替)。
如图所示:
2.2WinccVBS脚本写入access
2.2.1在ODBC中作链接
打开控制面板----管理工具-----数据源(ODBC)
打开ODBC,在系统DSN中,选择“MicrosoftAccessDriver(*.mdb)”,添加数据源。
2.2.2Wincc中编写VBS脚本
在VBS全局脚本中添加写入数据库的代码,连接ODBC:strConnectionString="Provider=MSDASQL;DSN=Siwu;UID=;PWD=;"中Siwu为添加的ODBC数据源名称。
读取wincc中数据:
JS_FLOW=HMIRuntime.Tags("JS_FLOW").Read
写入数据库:
strSQL="INSERTINTOFCS(JS_FLOW,JS_PM,JS_COD,JS_BOD,JS_
SS,tag)VALUES("&M1&","&M2&","&M3&","&M4&","&M5&","&M6&");"
2.2.3定时采集
根据工艺要求,Wincc的VBS脚本触发器设置每小时采集一次。
2.3excel读取access
2.3.1excel窗体设计
Excel的窗体作为用户的操作界面,在查询的过程中excel工作簿后台隐藏。窗体的设计效果如图,首先是日报表、月报表、年报表:
其次,是间隔查询:
窗体设计中,利用DTPicker日期控件来显示和查询日期。而对于月和年的DTPicker控件个人设置UpDown属性位True,当然也可以不设置,而直接如日报表的控件,需要注意的是设置默认格式,月报表的日期控件为yyyy/mm,在控件的CustomFormat属性中设置。
对于间隔查询,同样使用DTPicker日期控件。
2.3.2建立报表查询
首先是Workbook_Open程序中添加默认设置,并打开窗体。窗体名称为report,初始设置日期控件默认时间,在Workbook_Open程序中report.DTPicker1.Value=Now(),即打开报表系统后,初始化默认时间为系统当前时间。然后利用report.show显示窗体。我们可以在Workbook_Open程序中添加代码,来实现弹出窗体后,隐藏工作簿:Application.Visible=False。
接下来,对于excel查询数据库中数据,本系统利用ADO方法来实现,ADO全名:ACTIVEXDATAOBJECTS,对于ADO的使用,首先要引用,这里引用MicrosoftActivexDataObjects2.8,然后创建ADO对象和记录集:
DimconnAsNewadodb.Connection
DimrsAsNewadodb.Recordset
打开联接:
conn.Open"Provider=Microsoft.Jet.Oledb.4.0;dataSource="&ThisWorkbook.Path&"\Data.mdb",其中Data为建立好的用于存储数据的本目录下的access数据库。
SQL查询:
SQL="selectFCSTime,M1,M2,M3,M4,M5,M6,M7,M8fromDayQuerywhereFCSDate=#"&a&"#",即查询已经联接的数据库中表DayQuery中的字段符合时间等于需要查询的时间的数据。
将需要查询数据放置到单元格区域:
Range("a3").CopyFromRecordsetconn.Execute(SQL)
关闭联接:
Conn.Close
对象置空:
SetConn=Nothing
月报表和年报表同理。
2.33建立区间查询
对于间隔查询,同样使用ADO方法,主要区别在于SQL查询语句:
SQL="selectFCSDate,FCSTime,M1,M2,M3,M4,M5,M6,M7,M8fromDayQuerywhereFCSDatebetween#"&a&"#and#"&b&"#"
其中,a和b分别为查询的时间间隔。
三、报表预览与保存
3.1预览和打印
设置居中打印:
WithActiveSheet.PageSetup
.CenterHorizontally=True
.CenterVertically=True
EndWith
ActiveSheet.[A1:I32].PrintPreview,其中A1:I32为需要打印的单元格区域。打印效果如图:
3.3存档
对于保存,就是在预览后,数据写入到了excel中,然后利用另存为,将当前表中数据存储到新建立的excel工作簿中。
ChDirFilePath
ActiveWorkbook.SaveAsFileName:=PathFile
其中PathFile为设置好的目录,可以设置为当前目录,也可以根据需求设置为专门的目录。比如PathFile=ThisWorkbook.Path&"\"&MyStr&".xls",其中MyStr=InputBox("请输入文件名","文件名"),即为输入的文件名。当然也可以设置为当前系统时间+名称的形式,比如PathFile=ThisWorkbook.Path&"\"&Format(Now(),"yyyy.mm.dd")&"污水厂报表.xls"
具体可以根据自己需求选择是手动输入,还是规定格式。
四、报表系统说明
对于报表系统说,则是插入了word文档对象:=EMBED("Word.Document.8","")。在这里,可以对该系统或者一些注意事项加以说明。简要说明如下:
(1)本系统适用于污水厂日、月和年报表的统计分析,使用前确保开启宏。
(2)如需要导出报表,需要先选择预览,然后另存。
(3)默认设置页面纸张为A4,如果打印预览不能完整显示,调整表格列宽。
(4)报表可以在不设定保存路径的情况下导出到本目录。
当然,还可以通过编辑增减注意事项。
结束语
本系统基于Wincc上位组态软件,因为是利用VBA和access数据库,具有可复制性,同样适用于组态王等其它组态软件,区别仅仅在于上位软件内部的写入数据库部分。利用excelVBA来实现报表的预览和保存,可以用来完成厂家要求的各种复杂报表,目前该报表系统已经用于污水处理厂,并在不断的升级和完善,反应效果良好。
参考文献
[1]Wincc帮助文档[K].北京:西门子,2012.
[2]赵志东.ExcelVBA基础入门[M].北京:人民邮电出版社,2006.
[3]ExcleHome.Excel实战技巧精粹[M].北京:人民邮电出版社,2010.
作者简介
王斌(1978—),男,工程师,长期从事市政工程自动化系统和SCADA系统的设计、调试工作。
谭伟杰(1989—),男,助理工程师,完成多个国内外水处理工程的设计、实施工作。