FactoryTalk View Site Edition的VBA基本應(yīng)用_第1頁(yè)
FactoryTalk View Site Edition的VBA基本應(yīng)用_第2頁(yè)
FactoryTalk View Site Edition的VBA基本應(yīng)用_第3頁(yè)
FactoryTalk View Site Edition的VBA基本應(yīng)用_第4頁(yè)
FactoryTalk View Site Edition的VBA基本應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、FactoryTalk View Site Edition的VBA基本應(yīng)用技術(shù)部 徐晟昕第一節(jié) 在VBA中標(biāo)簽的讀取和寫入本例要達(dá)到的目標(biāo)是通過(guò)FactoryTalk View Site Edition(以下簡(jiǎn)稱SE)的VBA來(lái)訪問(wèn)PLC中的下位標(biāo)簽,并實(shí)現(xiàn)標(biāo)簽的讀寫。1.準(zhǔn)備工作打開(kāi)SE,選擇應(yīng)用程序類型(本例是Site Edition Network),新建應(yīng)用程序(本例取名:test),之后在test下新建area(本例取名:area1),在area下新建HMI Server(本例取名:HMI1),以下為完成之后截圖:?jiǎn)?dòng)RSLogix Emulate 5000,并添加仿真CPU。啟動(dòng)R

2、SLogix 5000編程軟件,新建工程,與仿真PLC建立通訊(Topic名稱為:TestTopic),并編寫簡(jiǎn)單測(cè)試程序并下載到仿真PLC。在SE中新建OPC Data Server 新建一個(gè)畫面(名為:TestDispaly),并畫上一個(gè)圓形和一個(gè)普通按鈕將圓形與下位Tag2標(biāo)簽關(guān)聯(lián),并設(shè)置顏色改變;右鍵點(diǎn)擊按鈕,點(diǎn)擊Property Panel,出現(xiàn)屬性框,將Name項(xiàng)改為TestBtn、ExposeToVBA項(xiàng)改為VBA Control如圖: 2.編寫代碼并測(cè)試右鍵點(diǎn)擊按鈕,單擊VBA Code(或按Alt+F11)彈出Visual Basic編輯器,如圖添加如下代碼:On Error

3、 Resume NextDim TgGObj As TagGroup 標(biāo)簽組對(duì)象Dim TagObj As Tag 標(biāo)簽對(duì)象Set TgGObj = CreateTagGroup(Me.AreaName) 創(chuàng)建標(biāo)簽組實(shí)例TgGObj.Add (TestTopicTag1) 向標(biāo)簽組中添加標(biāo)簽Set TagObj = TgGObj.Item(TestTopicTag1) 創(chuàng)建標(biāo)簽實(shí)例If TagObj.Value = 1 Then 讀取標(biāo)簽的值如果標(biāo)簽的值為1 TagObj.Value = 0 則將0寫入標(biāo)簽, Else 反之則將1寫入標(biāo)簽 TagObj.Value = 1End IfSet T

4、agObj = NothingSet TgGObj = Nothing標(biāo)簽組是一組標(biāo)簽的集合體。在SE的VBA中,我們要想引用標(biāo)簽,需要先創(chuàng)建標(biāo)簽組,然后將本地標(biāo)簽或遠(yuǎn)程標(biāo)簽加入標(biāo)簽組,之后通過(guò)集合訪問(wèn)的方式引用標(biāo)簽組中的標(biāo)簽。值得注意的是,SE中的標(biāo)簽類型并不是變量而是對(duì)象,也就是說(shuō)我們需要用標(biāo)簽對(duì)象而不是普通變量去引用標(biāo)簽組中的單個(gè)標(biāo)簽。測(cè)試畫面,可以看到每次點(diǎn)擊按鈕,圓形的填充顏色都會(huì)發(fā)生變化,同時(shí)在RSLogix 5000中也能觀察到標(biāo)簽狀態(tài)的變化。如圖:在SE中:點(diǎn)擊按鈕后變?yōu)榫G色,再次點(diǎn)擊按鈕變?yōu)榧t色在RSLogix 5000中:第二節(jié) 運(yùn)用VBA來(lái)簡(jiǎn)單處理運(yùn)行歷史數(shù)據(jù)本例的操作過(guò)

5、程是在SE中新建本地內(nèi)存標(biāo)簽(標(biāo)簽名:TestTag),使其值隨時(shí)間(秒)自增,之后每按下一次存儲(chǔ)按鈕,實(shí)時(shí)的標(biāo)簽值和對(duì)應(yīng)時(shí)間戳都會(huì)被寫入數(shù)據(jù)庫(kù),然后我們可以在數(shù)據(jù)庫(kù)中查看結(jié)果。在SE中新建內(nèi)存(memory)標(biāo)簽TestTag,類型為analog。在第上一節(jié)中的test應(yīng)用程序中新建一個(gè)畫面,并取名為TestSimpleData,并畫出兩個(gè)字符串顯示控件和三個(gè)按鈕。如圖:屬性對(duì)應(yīng)關(guān)系:類型控件名是否暴露在VBA中所連標(biāo)簽標(biāo)題按鈕CreateTag是Create Tag Object按鈕DropTag是Drop Tag Object按鈕SaveData是Save字符串顯示StringDispl

6、ay1是SystemDateAndTimeString字符串顯示StringDisplay2否TestTag在MS SQL Server中新建test數(shù)據(jù)庫(kù),之后在test下新建simple表。其中各列屬性如下:列名數(shù)據(jù)類型描述TimeChar(20)時(shí)間字符串ValueSmallint標(biāo)簽值2.對(duì)數(shù)據(jù)庫(kù)連接與操作ADO是微軟公司提供的一個(gè)用于存取數(shù)據(jù)源的COM組件。它提供了編程語(yǔ)言和統(tǒng)一數(shù)據(jù)訪問(wèn)方式OLE DB的一個(gè)中間層,允許開(kāi)發(fā)人員編寫訪問(wèn)數(shù)據(jù)的代碼而不用關(guān)心數(shù)據(jù)庫(kù)是如何實(shí)現(xiàn)的,而只用關(guān)心到數(shù)據(jù)庫(kù)的連接。本例將使用ADO來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)相關(guān)操作。在VBA編輯器中選擇工具之后選擇引用彈出如下對(duì)

7、話框在左側(cè)的列表中找到Microsoft ActiveX Data Objects *.*(其中*.*號(hào)代表版本號(hào),選擇最新版本即可)。這樣我們就可以在之后的編程中引用ADO對(duì)象了。3.編寫代碼并測(cè)試在VBA編輯器中輸入以下代碼:Private OTag As TagPrivate OtagG As TagGroup創(chuàng)建ADO的Connection實(shí)例創(chuàng)建ADO的Recordset實(shí)例Private Sub CreateTag_Released()Set OtagG = CreateTagGroup(Me.AreaName)OtagG.Add (TestTag)m(1)Conn.Connect

8、ionString = provider=sqloledb; & _Data Source=127.0.0.1;Initial Catalog=test; & _指定數(shù)據(jù)庫(kù)主機(jī)地址、數(shù)據(jù)庫(kù)名User Id=sa;Password=0;指定用戶名、密碼連接數(shù)據(jù)庫(kù)Rs.CursorLocation = adUseServerRs.CursorType = adOpenStaticType = adLockOptimisticRs.Open select * from simple, Conn從數(shù)據(jù)庫(kù)返回?cái)?shù)據(jù)集End SubPrivate Sub SaveData_Released()在集中插入一條

9、記錄Rs.Fields.Item(0).Value = Date$ & & Time$將數(shù)據(jù)寫入數(shù)據(jù)庫(kù)End SubPrivate Sub StringDisplay1_Change()On Error Resume NextIf Not OtagG Is Nothing Then _OTag.Value = OTag.Value + 1當(dāng)StringDisplay1發(fā)生改變時(shí)TestTag自增1End SubPrivate Sub DropTag_Released()OTag.Value = 0Set OtagG = NothingEnd Sub測(cè)試運(yùn)行。先按下Create Tag Obje

10、ct按鈕創(chuàng)建對(duì)象為接下來(lái)的操作做準(zhǔn)備,然后隨機(jī)幾次按下Save按鈕將不同時(shí)刻的TestTag值連同時(shí)間寫入數(shù)據(jù)庫(kù),之后按Drop Tag Object按鈕關(guān)閉各對(duì)象釋放連接和內(nèi)存空間。下圖為程序運(yùn)行截圖:下圖為在數(shù)據(jù)庫(kù)中simple表中的結(jié)果??梢钥吹竭\(yùn)行數(shù)據(jù)已經(jīng)成功寫入數(shù)據(jù)表。第三節(jié) 具有普遍性的歷史數(shù)據(jù)處理方式本例在RSLogix 5000中編寫了一個(gè)簡(jiǎn)單交通燈演示程序。我們要達(dá)到的目的是將交通燈在工作過(guò)程中各個(gè)燈的亮滅情況記錄下來(lái),存入MS SQL Server中,并通過(guò)Excel提取存儲(chǔ)在MS SQL Server中的數(shù)據(jù)。1.準(zhǔn)備工作在RSLinx中建立Topic,名稱為“TL”,使

11、其指向仿真PLC。本下位程序中提供的標(biāo)簽及相關(guān)描述:標(biāo)簽名(布爾型)描述GreenLight1Range南北向交通燈綠燈長(zhǎng)亮范圍GreenLight2Range東西向交通燈綠燈長(zhǎng)亮范圍GreenLight1FlashRange南北向交通燈綠燈閃爍范圍GreenLight2FlashRange東西向交通燈綠燈閃爍范圍GreenLight南北向交通燈綠燈長(zhǎng)亮狀態(tài),與上位圖形關(guān)聯(lián)GreenLight2東西向交通燈綠燈長(zhǎng)亮狀態(tài),與上位圖形關(guān)聯(lián)YellowLight南北向交通燈黃燈長(zhǎng)亮狀態(tài),與上位圖形關(guān)聯(lián)YellowLight2東西向交通燈黃燈長(zhǎng)亮狀態(tài),與上位圖形關(guān)聯(lián)RedLight南北向交通燈紅燈長(zhǎng)亮

12、狀態(tài),與上位圖形關(guān)聯(lián)RedLight2東西向交通燈紅燈長(zhǎng)亮狀態(tài),與上位圖形關(guān)聯(lián)DataUpdate數(shù)據(jù)寫入觸發(fā)注:DataUpdate標(biāo)簽的作用:為了減輕上位以太網(wǎng)的網(wǎng)絡(luò)負(fù)載壓力,本程序設(shè)計(jì)為實(shí)時(shí)采集數(shù)據(jù),但每隔較長(zhǎng)周期,向數(shù)據(jù)庫(kù)中批量寫入數(shù)據(jù)而不是實(shí)時(shí)寫入。在MS SQL Server中的test數(shù)據(jù)庫(kù)中新建數(shù)據(jù)表tutorial,其中各列屬性如下:表列名數(shù)據(jù)類型描述IDSmallInt自增列TimeDateTime時(shí)間戳GreenLight1CharGreenLight2CharYellowLight1CharYellowLight2CharRedLight1CharRedLight2Ch

13、ar在第一節(jié)中的test應(yīng)用程序中新建一個(gè)畫面,并取名為TestDatabase。依照下圖畫出各圖形:參照表一,將各代表交通燈的圓形與相應(yīng)下位標(biāo)簽對(duì)應(yīng)。在Property Panel中將Start Scan按鈕的Name改為StartScBtn,ExposeToVBA改為VBA Control;將Stop Scan按鈕的Name改為StopScBtn,ExposeToVBA改為VBA Control。由于運(yùn)行時(shí)下位標(biāo)簽每秒鐘變化一次,為了使上位畫面的顯示正常,我們需要將上位畫面的刷新率(默認(rèn)為1秒)加快。右鍵點(diǎn)擊畫面空白處,在彈出的下拉菜單上選擇Display Settings,然后將Maxi

14、mum Tag Update Rate改為小于1的值,例如0.25。2.事件驅(qū)動(dòng)我們知道Visual Basic是事件驅(qū)動(dòng)的編程機(jī)制,其中的控件都是通過(guò)事件觸發(fā)而運(yùn)行事件代碼的。在SE的VBA中,提供了對(duì)標(biāo)簽對(duì)象和標(biāo)簽組對(duì)象的事件支持。我們先來(lái)做一個(gè)簡(jiǎn)單的實(shí)驗(yàn)。新建一個(gè)畫面,取名為VBA_Event。畫出兩個(gè)按鈕和一個(gè)文本控件(text)并將他們的ExposeToVBA屬性設(shè)為VBA Control。如圖:之后打開(kāi)VBA編輯器,將下面的代碼加入Private WithEvents OTagG As TagGroup聲明標(biāo)簽組對(duì)象,并使能對(duì)象的事件Private OTag As TagPriva

15、te Sub Button1_Released()Set OTagG = CreateTagGroup(Me.AreaName)OTagG.Add (systemDateAndTimeString)Set OTag = OTagG.Item(systemDateAndTimeString)OTagG.Active = True開(kāi)啟對(duì)標(biāo)簽組對(duì)象的事件監(jiān)視End SubPrivate Sub OTagG_Change(ByVal TagNames As IGOMStringList)標(biāo)簽組中標(biāo)簽的值發(fā)生改變時(shí)將調(diào)用該過(guò)程End SubPrivate Sub Button2_Released()OT

16、agG.Active = FalseSet OTagG = NothingEnd Sub測(cè)試運(yùn)行,可以看到當(dāng)點(diǎn)擊On Scan按鈕后,Text控件將顯示當(dāng)前的日期時(shí)間,并且它是動(dòng)態(tài)變化的。這是因?yàn)闀r(shí)間日期的變化會(huì)觸發(fā)標(biāo)簽組對(duì)象的Change事件并調(diào)用相應(yīng)過(guò)程來(lái)更新Text控件的顯示值,從而我們觀察到Text控件實(shí)時(shí)地顯示日期時(shí)間。3.編寫代碼并測(cè)試在RSLogix 5000中編寫下位程序,之后將程序下載到仿真PLC中。在SE中的打開(kāi)VBA編輯器,引用Microsoft ActiveX Data Objects,之后添加如下代碼:Private WithEvents TgG As TagGrou

17、pPrivate WithEvents TgG2 As TagGroupPrivate TempStr(6) As StringPrivate Sub StartScBtn_Released()Conn.ConnectionString = provider=sqloledb; & _Data Source=127.0.0.1;Initial Catalog=test; & _User Id=sa;Password=0;Rs.CursorLocation = adUseServerRs.CursorType = adOpenStaticRs.LockType = adLockBatchOpti

18、misticRs.Open Source:=tutorial, ActiveConnection:=Conn, options:=adCmdTableSet TgG = CreateTagGroup(Me.AreaName)Set TgG2 = CreateTagGroup(Me.AreaName)TgG.Add (TLGreenLight1Range)TgG.Add (TLGreenLight2Range)TgG.Add (TLGreenLight1FlashRange)TgG.Add (TLGreenLight2FlashRange)TgG.Add (TLYellowLight)TgG.A

19、dd (TLYellowLight2)TgG.Add (TLRedLight)TgG.Add (TLRedLight2)TgG2.Add (TLDataUpdate)TgG.Active = TrueTgG2.Active = TrueEnd SubPrivate Sub StopScBtn_Released()Set TgG = NothingSet TgG2 = NothingEnd SubPrivate Sub TgG_Change(ByVal TagNames As IGOMStringList)On Error Resume NextTempStr(0) = Date$ & & Ti

20、me$If TgG.Item(1).Value = 1 Then TempStr(1) = OnElseIf TgG.Item(3).Value = 1 Then TempStr(1) = FlashElseIf TgG.Item(1).Value = 0 And TgG.Item(3).Value = 0 Then TempStr(1) = OffEnd IfIf TgG.Item(2).Value = 1 Then TempStr(2) = OnElseIf TgG.Item(4).Value = 1 Then TempStr(2) = FlashElseIf TgG.Item(2).Va

21、lue = 0 And TgG.Item(4).Value = 0 Then TempStr(2) = OffEnd IfDim i As Integer If TgG.Item(i).Value = 1 Then TempStr(i - 2) = On Else TempStr(i - 2) = Off End IfNextFor i = 0 To 6 Rs.Fields(i + 1).Value = TempStr(i)NextEnd SubPrivate Sub TgG2_Change(ByVal TagNames As IGOMStringList)End Sub說(shuō)明:TgG2集合中只引用了一個(gè)標(biāo)簽TLDataUpdate,此標(biāo)簽組發(fā)生變化(也就是TLDataUpdate發(fā)生變化)會(huì)導(dǎo)致運(yùn)行數(shù)據(jù)批量寫入數(shù)據(jù)庫(kù)的動(dòng)作發(fā)生。在下位中該標(biāo)簽被設(shè)計(jì)為每隔30秒發(fā)生一次翻轉(zhuǎn)。也就是說(shuō)以30秒為周期,在這30秒中發(fā)生的燈的變化情況都會(huì)被臨時(shí)地記錄在本地,當(dāng)一個(gè)周期結(jié)束時(shí),這些臨時(shí)的記錄會(huì)被統(tǒng)一發(fā)送回?cái)?shù)據(jù)庫(kù),更新數(shù)據(jù)表,完成真正的寫入動(dòng)作。運(yùn)行中點(diǎn)擊Start Scan按鈕,實(shí)時(shí)數(shù)據(jù)就會(huì)被采集下來(lái)并寫入數(shù)據(jù)庫(kù)。當(dāng)點(diǎn)擊Stop Scan按鈕則停止數(shù)據(jù)采集。下圖為運(yùn)行時(shí)截圖:存放在數(shù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論