版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 5年中考3年模擬試卷初中道德與法治八年級(jí)下冊(cè)02第2課時(shí)基本政治制度
- 愛(ài)情小說(shuō)鑒賞課件
- 2024-2025高中物理奧賽解題方法:十 假設(shè)法含答案
- DB11-T 2021-2022 12345市民服務(wù)熱線服務(wù)與管理規(guī)范
- DB11-T 2006-2022 既有建筑加固改造工程勘察技術(shù)標(biāo)準(zhǔn)
- 倉(cāng)庫(kù)裝修材料采購(gòu)
- 冬季施工準(zhǔn)備工作
- 醫(yī)藥級(jí)?;愤\(yùn)輸合同范本
- 保健品國(guó)際物流合同模板
- FC條款建筑設(shè)備運(yùn)輸合同
- 醫(yī)院輸血管理委員會(huì)人員組成和工作職責(zé)制度及辦公室職責(zé)
- 數(shù)據(jù)安全治理白皮書5.0-行業(yè)數(shù)據(jù)安全治理實(shí)踐集-2023.05月
- 大眾標(biāo)準(zhǔn)目錄(中文)
- 善于休息增進(jìn)健康
- 全國(guó)中學(xué)生英語(yǔ)能力測(cè)試高三初評(píng)英語(yǔ)試題
- 《汽車專業(yè)英語(yǔ)》課程教學(xué)大綱
- 雷電的監(jiān)測(cè)和預(yù)警
- 中職英語(yǔ)基礎(chǔ)模塊2(高教版)教案:Unit4 Volunteer Work(全6課時(shí))
- 中國(guó)六大茶類(基本知識(shí)與品鑒)
- 大數(shù)據(jù)與人工智能概論
- 改進(jìn)維持性血液透析患者貧血狀況PDCA
評(píng)論
0/150
提交評(píng)論