卓盛杰,王博強(qiáng)(天津賽象科技股份有限公司,天津 300384)
FactoryTalk View SE中實(shí)現(xiàn)Access數(shù)據(jù)庫(kù)記錄與查詢
卓盛杰,王博強(qiáng)
(天津賽象科技股份有限公司,天津 300384)
FactoryTalk View SE是Rockwell Automation公司推出的監(jiān)控組態(tài)軟件,它可以用映射工廠和過(guò)程的方式來(lái)分配應(yīng)用項(xiàng)目的各個(gè)部分,在數(shù)據(jù)監(jiān)控,畫(huà)面顯示等方面具有強(qiáng)大的功能,然而在數(shù)據(jù)報(bào)表、處理方面卻表現(xiàn)出弱點(diǎn)。利用其內(nèi)嵌的VBA可以擴(kuò)展軟件功能。本文結(jié)合FactoryTalk View SE內(nèi)嵌的VBA,調(diào)用事先做好的Excel表格,讀取軟件通過(guò)ODBC接口記錄到Access中的數(shù)據(jù),然后生成報(bào)表。
數(shù)據(jù)庫(kù);報(bào)表;Excel;VBA;FactoryTalk View SE;Access
FactoryTalk View Supervisory Edition是Rockwell Automation公司組態(tài)軟件,是與公司自動(dòng)化產(chǎn)品結(jié)合最佳的可視化軟件產(chǎn)品,提供了強(qiáng)大的數(shù)據(jù)監(jiān)控能力,方便用戶進(jìn)行上位機(jī)的畫(huà)面組態(tài)。FactoryTalk View SE內(nèi)嵌VBA,它為自定義及擴(kuò)展FactoryTalk View SE功能提供了完整的開(kāi)發(fā)環(huán)境。
現(xiàn)在愈來(lái)愈多的輪胎生產(chǎn)企業(yè)為了保證產(chǎn)品的質(zhì)量而要求對(duì)擠出生產(chǎn)線的一些重要的數(shù)據(jù)參數(shù)進(jìn)行保存與查詢而FactoryTalk View SE和其他組態(tài)軟件一樣,本身報(bào)表生成、處理能力比較弱。為了實(shí)現(xiàn)數(shù)據(jù)記錄與報(bào)表查詢功能,本文使用FactoryTalk View SE內(nèi)嵌的VBA,與Access、Excel相結(jié)合,利用Access的數(shù)據(jù)記錄功能與Excel強(qiáng)大制表功能,實(shí)現(xiàn)數(shù)據(jù)記錄以及報(bào)表查詢功能。
通過(guò)日志模型設(shè)置,F(xiàn)actoryTalk View SE從PLC采集實(shí)時(shí)數(shù)據(jù),通過(guò)ODBC接口存儲(chǔ)到Access數(shù)據(jù)庫(kù)中,利用FactoryTalk View SE內(nèi)嵌的VBA開(kāi)發(fā),訪問(wèn)Access數(shù)據(jù)庫(kù),調(diào)用Excel,將Access數(shù)據(jù)庫(kù)中的數(shù)據(jù)讀取到Excel中,在進(jìn)行處理,形成報(bào)表。系統(tǒng)解決方案框圖如圖1所示。
圖1 報(bào)表解決方案框圖
Excel對(duì)象封裝了Microsoft Excel的全部元素,利用Excel對(duì)象提供的屬性、方法和事件,就可以在應(yīng)用程序中生成Excel報(bào)表。
Excel對(duì)象模型描述了Excel對(duì)象之間的結(jié)構(gòu)關(guān)系,如圖2所示。
(1)Application對(duì)象
圖2 Excel對(duì)象模型
Application對(duì) 象 表 示Excel應(yīng) 用 程 序, 在Excel 讀象模型中該對(duì)象處于模型的頂端,通過(guò)使用Application對(duì)象可以訪問(wèn)模型中其他對(duì)象,從而控制Excel應(yīng)用程序的外觀和功能。
(2)Workbook對(duì)象
Workbook對(duì)象表示Excel中的工作簿,即對(duì)應(yīng)一個(gè)Excel文件,通過(guò)使用Workbook對(duì)象就可以實(shí)現(xiàn)對(duì)Excel工作簿的各種控制。
(3)Worksheet對(duì)象
Worksheet對(duì)象表示Excel中的工作表,通過(guò)使用Worksheet對(duì)象就可以實(shí)現(xiàn)對(duì)Excel工作表中的各種控制。
(4)Range對(duì)象
Range對(duì)象表示Excel中的區(qū)間,可以表示Excel中的單元格、幾個(gè)單元格、行、列或一個(gè)選中的區(qū)域,使用Range對(duì)象可以實(shí)現(xiàn)對(duì)Excel單元格或選中區(qū)域的各種操作。
通過(guò)讀取標(biāo)簽中的單條秤重量、連續(xù)秤重量、測(cè)寬1、測(cè)寬2、一線設(shè)定速度、二線設(shè)定速度、一線實(shí)際速度、二線實(shí)際速度、收縮比、裁斷長(zhǎng)度設(shè)定值,在報(bào)表中體現(xiàn)出記錄日期和數(shù)值。下面將具體介紹如何實(shí)現(xiàn)報(bào)表。
(1)將Excel、Access對(duì)象庫(kù)加載到當(dāng)前VBA程序中
為了能夠在程序中調(diào)用Access數(shù)據(jù)庫(kù)以及Excel對(duì)象,為Access與Excel連接、互相嵌入使用做準(zhǔn)備,必須在VBA程序中加載Excel、Access對(duì)象庫(kù)。在VBA編程環(huán)境下,單擊“Tools”菜單中的“Reference”命令,在彈出的對(duì)話框、中選中Microsoft Access 11.0 Object Library和 Microsoft Excel 11.0 Object Library兩項(xiàng),點(diǎn)擊“確定”后退出,這樣就完成了Excel、Access對(duì)象庫(kù)在VBA程序中的加載。
(2)創(chuàng)建Access數(shù)據(jù)庫(kù)
創(chuàng)建記錄用Access數(shù)據(jù)庫(kù),分別命名好如下字段:編號(hào)、日期、時(shí)間、單條秤重量、連續(xù)秤重量、測(cè)寬1、測(cè)寬2、一線設(shè)定速度、二線設(shè)定速度、一線實(shí)際速度、二線實(shí)際速度、收縮比、裁斷長(zhǎng)度設(shè)定值。
(3)讀取數(shù)據(jù)庫(kù)實(shí)際地址
打開(kāi)管理工具中的數(shù)據(jù)源(ODBC),在系統(tǒng)DSN選項(xiàng)卡中添加數(shù)據(jù)庫(kù)驅(qū)動(dòng),鏈接創(chuàng)建好的數(shù)據(jù)庫(kù)。
(4)在FactoryTalk View中編寫(xiě)代碼,將PLC數(shù)據(jù)寫(xiě)入Access數(shù)據(jù)庫(kù)中
為了將我們需要記錄的PLC數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)中,需要將FactoryTalk View中的標(biāo)簽與VB代碼中聲明的變量對(duì)接,這樣才能將我們想要記錄的PLC數(shù)據(jù)寫(xiě)入Access數(shù)據(jù)庫(kù)中,如圖3所示。
圖3 PLC數(shù)據(jù)寫(xiě)入Access數(shù)據(jù)庫(kù)示意圖
編寫(xiě)代碼如下:
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()
聲明標(biāo)簽變量
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")
將標(biāo)簽變量與FactoryTalk View中的標(biāo)簽對(duì)接
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] ([日期 ],[時(shí)間],[單條秤重量],[連續(xù)秤重量],[測(cè)寬1],[測(cè)寬2],[一線設(shè)定速度],[二線設(shè)定速度],[一線實(shí)際速度],[二線實(shí)際速度],[收縮比],[裁斷長(zhǎng)度設(shè)定值])values('" & Date & "','" & Time() & "'," & O1Tag.Value & ",'" & O2Tag.Value & "'," & O3Tag.Value & ",'" & O4Tag.Value & "'," & O5Tag.Value & ",'" & O6Tag.Value & "'," & O7Tag.Value & ",'" & O8Tag.Value & "'," & O9Tag.Value & ",'" & O10Tag.Value & "')"
插入數(shù)據(jù)庫(kù)字段名,以及對(duì)應(yīng)的標(biāo)簽變量。
End Sub
(5)創(chuàng)建Excel表格
為了使用Excel查詢Access數(shù)據(jù)庫(kù)生成報(bào)表,必須事先建立Excel表格,新建一個(gè)Excel文件用以存儲(chǔ)從Access數(shù)據(jù)庫(kù)中讀取的數(shù)據(jù),并使用VB代碼建立查詢模塊將Access數(shù)據(jù)庫(kù)中的記錄按照日期查詢條件寫(xiě)入表格,從而形成我們所需要的報(bào)表。下面的VBA程序語(yǔ)句實(shí)現(xiàn)了在Excel中導(dǎo)入Access數(shù)據(jù)庫(kù)記錄的方法。
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.編號(hào),GZTM.日期,GZTM.時(shí)間,GZTM.單條秤重量,GZTM.連續(xù)秤重量,GZTM.測(cè)寬1,GZTM.測(cè)寬2,GZTM.一線設(shè)定速度,GZTM.二線設(shè)定速度,GZTM.一線實(shí)際速度, GZTM.二線實(shí)際速度, GZTM.收縮比,GZTM.裁斷長(zhǎng)度設(shè)定值" & Chr(13) & "" & Chr(10) & "FROM GZTM" & _
" where (日期 >= #" & date1 & " 00:00:00# and日期 <= #" & date2 & " 23:59:59#)")
.Name = "查詢來(lái)自 SE_Data"
寫(xiě)入從Access查詢的數(shù)據(jù)
.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
寫(xiě)好代碼后在條件工作表中調(diào)用。
在查詢條件工作簿添加按鈕以及如下代碼:
Private Sub CommandButton1_Click()
Call QueryFun
End Sub
可以使按鈕調(diào)用之前編寫(xiě)的模塊。
(6)在FactoryTalk View SE項(xiàng)目中查詢報(bào)表
為了在FactoryTalk View SE項(xiàng)目中查詢報(bào)表,我們需要建立一個(gè)查詢報(bào)表按鈕,可以使全局按鈕,也可以在任意畫(huà)面新建按鈕。然后使用AppStart命令,并在參數(shù)中定義Excel的執(zhí)行程序路徑以及之前建立好的查詢表格路徑。這樣就可以卓盛杰直接打開(kāi)之前創(chuàng)建好的查詢表格,并通過(guò)表格查詢想要的時(shí)間段的記錄數(shù)據(jù)了。
與大部分組態(tài)軟件相似,F(xiàn)actoryTalk View SE在數(shù)據(jù)監(jiān)控、畫(huà)面組態(tài)功能較強(qiáng),但在報(bào)表生成、處理能力較弱。此方法實(shí)現(xiàn)復(fù)雜的生產(chǎn)報(bào)表,開(kāi)發(fā)周期短,可操作性強(qiáng),完全滿足工業(yè)的生產(chǎn)要求,在此基礎(chǔ)上,完全可實(shí)現(xiàn)班報(bào)、周報(bào)、月報(bào)、年報(bào)等。
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年起進(jìn)入賽象科技股份有限公司工作,在2010年正式開(kāi)始負(fù)責(zé)調(diào)試擠出聯(lián)動(dòng)線,對(duì)擠出聯(lián)動(dòng)線有比較深刻的認(rèn)識(shí)。
2015-04-21