摘要:针对工业使用中上位组态软件自带报表功能的不足,本文以污水处理厂为例,设计了基于Wincc与VBA的工业报表报表系统。通过对基本方法和过程的分析,详细说明该报表系统的稳定和便于移植性。
关键词:Wincc;VBA;access;工业报表系统
ABSTRACT:Beacuase the defect of the report using the Configuration Software,this article takes the sewage treatment as example,designing the industry report system based on Wincc and VBA.Through the analysis of the basic methods and processes, this article describes the stability and portability about the reporting system in detail.
KEY WORDS:Wincc,VBA,access,industrial report system
一、绪论
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.3 VBA来编写报表的优势
首先,利用数据库来保存数据,更具有稳定性,而excel强大的数据分析能力,充分利用VBA自动化编程,可以很方便的来制作报表的预览和保存。
其次,利用excel来设计报表,可以适应项目中各种报表要求,有更强的灵活性,这样制作出报表有很强的可定制性,通过VBA编程,查询数据库数据,几乎可以满足工业上的各种报表使用。
而且,相比组态软件自带的报表,利用excel VBA编写的报表,可以更方便的存档为excel文件,这样,在班组生产中,当需要某个报表,就可以直接联系中控室,中控存为excel后,利用局域网,比如利用飞鸽传书、飞秋等局域网通讯软件,直接传送给需要的班组,方便了生产管理。
所以,几种方法里,方法三更有优势,因此本文将利用方法三,来详细解说基于Wincc和VBA的工业报表使用。
1.1.4功能简介
在工业生产中,有各式各样的报表,比如日生产报表,还有具体划分班组的日报表等待。本系统结合污水厂项目中报表使用情况,介绍了最常用的日、月、年报表。
本报表系统利用VBA来编写、查询,实现了主要包括日报表、月报表、年报表的查询,任意区间时间的查询,各个报表的打印、预览与存档,以及报表系统的简要说明。
二、功能设计
2.1 access建立表和字段
(1)首先利用access建立数据库。
(2)建立表,注意设置各个字段的属性,其中编号设置为自动编号,日期和时间设置如下:
DATE:中日期、输入法关闭、默认值 Date()
TIME:短日期、输入法关闭、默认值 Time()
(3)建立查询
利用查询向导建立日、月、年才查询(这部分工作也可以excel的VBA中做查询时编写VBA代码来代替)。
如图所示:
2.2 WinccVBS脚本写入access
2.2.1 在ODBC中作链接
打开控制面板----管理工具-----数据源(ODBC)
打开ODBC,在系统DSN中,选择“Microsoft Access Driver(*.mdb)” ,添加数据源。
2.2.2 Wincc中编写VBS脚本
在VBS全局脚本中添加写入数据库的代码,连接ODBC:strConnectionString = "Provider=MSDASQL;DSN=Siwu;UID=;PWD=;"中Siwu为添加的ODBC数据源名称。
读取wincc中数据:
JS_FLOW = HMIRuntime.Tags("JS_FLOW ").Read
写入数据库:
strSQL = "INSERT INTO FCS(JS_FLOW,JS_PM,JS_COD, JS_BOD,JS_
SS,tag) VALUES ("& M1 & ","& M2 &","& M3 & ","& M4 &","& M5 & ","& M6 &");"
2.2.3定时采集
根据工艺要求,Wincc的VBS脚本触发器设置每小时采集一次。
2.3 excel读取access
2.3.1 excel窗体设计
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全名: ACTIVEX DATA OBJECTS,对于ADO的使用,首先要引用,这里引用Microsoft Activex Data Objects 2.8,然后创建ADO对象和记录集:
Dim conn As New adodb.Connection
Dim rs As New adodb.Recordset
打开联接:
conn.Open "Provider=Microsoft.Jet.Oledb.4.0;data Source=" & ThisWorkbook.Path & "\Data.mdb",其中Data为建立好的用于存储数据的本目录下的access数据库。
SQL查询:
SQL = "select FCSTime,M1,M2,M3,M4,M5,M6,M7,M8 from DayQuery where FCSDate=#" & a & "#",即查询已经联接的数据库中表DayQuery中的字段符合时间等于需要查询的时间的数据。
将需要查询数据放置到单元格区域:
Range("a3").CopyFromRecordset conn.Execute(SQL)
关闭联接:
Conn.Close
对象置空:
Set Conn = Nothing
月报表和年报表同理。
2.33建立区间查询
对于间隔查询,同样使用ADO方法,主要区别在于SQL查询语句:
SQL = "select FCSDate,FCSTime,M1,M2,M3,M4,M5,M6,M7,M8 from DayQuery where FCSDate between #" & a & "# and #" & b & "#"
其中,a和b分别为查询的时间间隔。
三、报表预览与保存
3.1预览和打印
设置居中打印:
With ActiveSheet.PageSetup
.CenterHorizontally = True
.CenterVertically = True
End With
ActiveSheet.[A1:I32].PrintPreview,其中A1:I32为需要打印的单元格区域。打印效果如图:
3.3存档
对于保存,就是在预览后,数据写入到了excel中,然后利用另存为,将当前表中数据存储到新建立的excel工作簿中。
ChDir FilePath
ActiveWorkbook.SaveAs FileName:=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数据库,具有可复制性,同样适用于组态王等其它组态软件,区别仅仅在于上位软件内部的写入数据库部分。利用excel VBA来实现报表的预览和保存,可以用来完成厂家要求的各种复杂报表,目前该报表系统已经用于污水处理厂,并在不断的升级和完善,反应效果良好。
参考文献
[1] Wincc帮助文档[K] .北京: 西门子, 2012.
[2] 赵志东.Excel VBA基础入门[M] .北京: 人民邮电出版社, 2006.
[3] Excle Home.Excel实战技巧精粹[M] .北京: 人民邮电出版社, 2010.
作者简介
王斌(1978—),男,工程师,长期从事市政工程自动化系统和SCADA系统的设计、调试工作。
谭伟杰(1989—),男,助理工程师,完成多个国内外水处理工程的设计、实施工作。
论文作者:王斌,谭伟杰
论文发表刊物:《基层建设》2018年第31期
论文发表时间:2018/12/17
标签:报表论文; 数据论文; 系统论文; 窗体论文; 数据库论文; 控件论文; 组态论文; 《基层建设》2018年第31期论文;