FactoryTalk View SE中实现Access数据库记录与查询
2015-10-12卓盛杰王博强天津赛象科技股份有限公司天津300384
卓盛杰,王博强(天津赛象科技股份有限公司,天津 300384)
FactoryTalk View SE中实现Access数据库记录与查询
卓盛杰,王博强
(天津赛象科技股份有限公司,天津 300384)
FactoryTalk View SE是Rockwell Automation公司推出的监控组态软件,它可以用映射工厂和过程的方式来分配应用项目的各个部分,在数据监控,画面显示等方面具有强大的功能,然而在数据报表、处理方面却表现出弱点。利用其内嵌的VBA可以扩展软件功能。本文结合FactoryTalk View SE内嵌的VBA,调用事先做好的Excel表格,读取软件通过ODBC接口记录到Access中的数据,然后生成报表。
数据库;报表;Excel;VBA;FactoryTalk View SE;Access
FactoryTalk View Supervisory Edition是Rockwell Automation公司组态软件,是与公司自动化产品结合最佳的可视化软件产品,提供了强大的数据监控能力,方便用户进行上位机的画面组态。FactoryTalk View SE内嵌VBA,它为自定义及扩展FactoryTalk View SE功能提供了完整的开发环境。
现在愈来愈多的轮胎生产企业为了保证产品的质量而要求对挤出生产线的一些重要的数据参数进行保存与查询而FactoryTalk View SE和其他组态软件一样,本身报表生成、处理能力比较弱。为了实现数据记录与报表查询功能,本文使用FactoryTalk View SE内嵌的VBA,与Access、Excel相结合,利用Access的数据记录功能与Excel强大制表功能,实现数据记录以及报表查询功能。
1 实现原理
通过日志模型设置,FactoryTalk View SE从PLC采集实时数据,通过ODBC接口存储到Access数据库中,利用FactoryTalk View SE内嵌的VBA开发,访问Access数据库,调用Excel,将Access数据库中的数据读取到Excel中,在进行处理,形成报表。系统解决方案框图如图1所示。
图1 报表解决方案框图
2 Excel对象模型
Excel对象封装了Microsoft Excel的全部元素,利用Excel对象提供的属性、方法和事件,就可以在应用程序中生成Excel报表。
Excel对象模型描述了Excel对象之间的结构关系,如图2所示。
(1)Application对象
图2 Excel对象模型
Application对 象 表 示Excel应 用 程 序, 在Excel 读象模型中该对象处于模型的顶端,通过使用Application对象可以访问模型中其他对象,从而控制Excel应用程序的外观和功能。
(2)Workbook对象
Workbook对象表示Excel中的工作簿,即对应一个Excel文件,通过使用Workbook对象就可以实现对Excel工作簿的各种控制。
(3)Worksheet对象
Worksheet对象表示Excel中的工作表,通过使用Worksheet对象就可以实现对Excel工作表中的各种控制。
(4)Range对象
Range对象表示Excel中的区间,可以表示Excel中的单元格、几个单元格、行、列或一个选中的区域,使用Range对象可以实现对Excel单元格或选中区域的各种操作。
3 应用实例
通过读取标签中的单条秤重量、连续秤重量、测宽1、测宽2、一线设定速度、二线设定速度、一线实际速度、二线实际速度、收缩比、裁断长度设定值,在报表中体现出记录日期和数值。下面将具体介绍如何实现报表。
(1)将Excel、Access对象库加载到当前VBA程序中
为了能够在程序中调用Access数据库以及Excel对象,为Access与Excel连接、互相嵌入使用做准备,必须在VBA程序中加载Excel、Access对象库。在VBA编程环境下,单击“Tools”菜单中的“Reference”命令,在弹出的对话框、中选中Microsoft Access 11.0 Object Library和 Microsoft Excel 11.0 Object Library两项,点击“确定”后退出,这样就完成了Excel、Access对象库在VBA程序中的加载。
(2)创建Access数据库
创建记录用Access数据库,分别命名好如下字段:编号、日期、时间、单条秤重量、连续秤重量、测宽1、测宽2、一线设定速度、二线设定速度、一线实际速度、二线实际速度、收缩比、裁断长度设定值。
(3)读取数据库实际地址
打开管理工具中的数据源(ODBC),在系统DSN选项卡中添加数据库驱动,链接创建好的数据库。
(4)在FactoryTalk View中编写代码,将PLC数据写入Access数据库中
为了将我们需要记录的PLC数据写入数据库中,需要将FactoryTalk View中的标签与VB代码中声明的变量对接,这样才能将我们想要记录的PLC数据写入Access数据库中,如图3所示。
图3 PLC数据写入Access数据库示意图
编写代码如下:
Private OTag As Tag
Private O1Tag As Tag
Private O2Tag As Tag
Private O3Tag As Tag
Private O4Tag As Tag
Private O5Tag As Tag
Private O6Tag As Tag
Private O7Tag As Tag
Private O8Tag As Tag
Private O9Tag As Tag
Private O10Tag As Tag
Private WithEvents OtagG As TagGroup
Private Conn As New ADODB.Connection
Private Rs As New ADODB.Recordset
Private Sub Display_AnimationStart()
声明标签变量
On Error Resume Next
Set OtagG = CreateTagGroup(Me.AreaName)
OtagG.Add ("SampleTime")
OtagG.Add ("Weight1")
OtagG.Add ("Weight2")
OtagG.Add ("Width1")
OtagG.Add ("Width2")
OtagG.Add ("Line1Speed_Preset")
OtagG.Add ("Line2Speed_Preset")
OtagG.Add ("Line1Speed_Actual")
OtagG.Add ("Line2Speed_Actual")
OtagG.Add ("ShrinkRatio")
OtagG.Add ("CutLength_Preset")
将标签变量与FactoryTalk View中的标签对接
Set OTag = OtagG.Item(1)
Set O1Tag = OtagG.Item(2)
Set O2Tag = OtagG.Item(3)
Set O3Tag = OtagG.Item(4)
Set O4Tag = OtagG.Item(5)
Set O5Tag = OtagG.Item(6)
Set O6Tag = OtagG.Item(7)
Set O7Tag = OtagG.Item(8)
Set O8Tag = OtagG.Item(9)
Set O9Tag = OtagG.Item(10)
Set O10Tag = OtagG.Item(11)
OtagG.Active = True
Conn.ConnectionString = "DSN=GZTM"
Conn.Open
End Sub
Private Sub Display_BeforeAnimationStop() Conn.Close
Set Conn = Nothing
Set OTag = Nothing
Set O1Tag = Nothing
Set O2Tag = Nothing
Set O3Tag = Nothing
Set O4Tag = Nothing
Set O5Tag = Nothing
Set O6Tag = Nothing
Set O7Tag = Nothing
Set O8Tag = Nothing
Set O9Tag = Nothing
Set O10Tag = Nothing
Set OtagG = Nothing
End Sub
Private Sub OtagG_Change(ByVal TagNames As IGOMStringList)
On Error Resume Next
Conn.Execute "insert into [GZTM] ([日期 ],[时间],[单条秤重量],[连续秤重量],[测宽1],[测宽2],[一线设定速度],[二线设定速度],[一线实际速度],[二线实际速度],[收缩比],[裁断长度设定值])values('" & Date & "','" & Time() & "'," & O1Tag.Value & ",'" & O2Tag.Value & "'," & O3Tag.Value & ",'" & O4Tag.Value & "'," & O5Tag.Value & ",'" & O6Tag.Value & "'," & O7Tag.Value & ",'" & O8Tag.Value & "'," & O9Tag.Value & ",'" & O10Tag.Value & "')"
插入数据库字段名,以及对应的标签变量。
End Sub
(5)创建Excel表格
为了使用Excel查询Access数据库生成报表,必须事先建立Excel表格,新建一个Excel文件用以存储从Access数据库中读取的数据,并使用VB代码建立查询模块将Access数据库中的记录按照日期查询条件写入表格,从而形成我们所需要的报表。下面的VBA程序语句实现了在Excel中导入Access数据库记录的方法。
Public Sub QueryFun()
声明模块
Dim date1 As String, date2 As String
date1 = Worksheets("condition").Cells(2, 1).Value
date2 = Worksheets("condition").Cells(2, 2).Value
读取日期条件
Worksheets("results").Select
Worksheets("results").Cells.Select
Selection.ClearContents
With Worksheets("results").QueryTables. Add(Connection:=Array(Array( _
"O D B C;D S N=G Z T M;D B Q=C:G Z T M. mdb;DriverId=2" _
), Array("5;FIL=MS Access;MaxBufferSize=204 8;PageTimeout=5;")), Destination:= _
Range("A1"))
.CommandText = Array("SELECT GZTM.编号,GZTM.日期,GZTM.时间,GZTM.单条秤重量,GZTM.连续秤重量,GZTM.测宽1,GZTM.测宽2,GZTM.一线设定速度,GZTM.二线设定速度,GZTM.一线实际速度, GZTM.二线实际速度, GZTM.收缩比,GZTM.裁断长度设定值" & Chr(13) & "" & Chr(10) & "FROM GZTM" & _
" where (日期 >= #" & date1 & " 00:00:00# and日期 <= #" & date2 & " 23:59:59#)")
.Name = "查询来自 SE_Data"
写入从Access查询的数据
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
Worksheets("results").Range("A1").Select
End Sub
写好代码后在条件工作表中调用。
在查询条件工作簿添加按钮以及如下代码:
Private Sub CommandButton1_Click()
Call QueryFun
End Sub
可以使按钮调用之前编写的模块。
(6)在FactoryTalk View SE项目中查询报表
为了在FactoryTalk View SE项目中查询报表,我们需要建立一个查询报表按钮,可以使全局按钮,也可以在任意画面新建按钮。然后使用AppStart命令,并在参数中定义Excel的执行程序路径以及之前建立好的查询表格路径。这样就可以卓盛杰直接打开之前创建好的查询表格,并通过表格查询想要的时间段的记录数据了。
4 结论
与大部分组态软件相似,FactoryTalk View SE在数据监控、画面组态功能较强,但在报表生成、处理能力较弱。此方法实现复杂的生产报表,开发周期短,可操作性强,完全满足工业的生产要求,在此基础上,完全可实现班报、周报、月报、年报等。
Access database records and query implemented in FactoryTalk View SE
TQ330.493
1009-797X(2015)17-0044-04
B DOI:10.13520/j.cnki.rpte.2015.17.012
卓盛杰,自2006年起进入赛象科技股份有限公司工作,在2010年正式开始负责调试挤出联动线,对挤出联动线有比较深刻的认识。
2015-04-21