最簡單的訪問OPC服務器方法_第1頁
最簡單的訪問OPC服務器方法_第2頁
最簡單的訪問OPC服務器方法_第3頁
最簡單的訪問OPC服務器方法_第4頁
最簡單的訪問OPC服務器方法_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 最簡單的訪問OPC服務器 在網(wǎng)上搜了很多關于VB.NET編寫客戶端訪問OPC服務器的資料,同時也根據(jù)KEPWARE提供的案例源代碼,同時進行研究,最后花了一個星期的時間進行研究,才粗略有了一點頭緒,現(xiàn)共享出來,希望后來的初學者有所幫助。一 要建一個OPC服務器1)安裝OPC服務器軟件,KEPware是大家比較常用的,我使用的是Kepware OPC V4.54。如圖,添加CHANNEL,添加TAG.把Plc的點位添加進去,我建了6個變量(item)。具體添加的方法需要自行去學習。我添加的三菱Q系列的PLC,PLC采用以太網(wǎng)通訊的方式,在局部網(wǎng)就可以訪問了。 2)設置DCOM,這個步驟很重要,

2、具體的設置方法,網(wǎng)上很多資料,按步驟設置就可以。我原來按照組態(tài)王提供的方法,總是不成功,后來上了微軟網(wǎng)站,按微軟提供的方法設置肯定可以成功。 完成了以上兩步,你的電腦就變成OPC服務器了。二 訪問服務器1.利用組態(tài)軟件訪問OPC服務器。如果用組態(tài)王訪問,那就太簡單了,左邊列表,選opc服務器,點擊添加服務器,就會彈出一個窗口,把本機的OPC服務器列成清單。在清單里面就可以發(fā)現(xiàn)KEPSERVER的名稱:KEPware.KEPserverEx.V4,選擇,然后按確定,就完成了添加服務器。 在組態(tài)王的數(shù)據(jù)詞典,新建變量,I/O變量,連接設備選擇OPC服務器,寄存器可以看到KEPserver的變量(i

3、tem),建立之后,就可以利用組網(wǎng)王,開發(fā)監(jiān)控應用,組態(tài)軟件的使用在此就不贅述了,總之,利用組態(tài)軟件訪問OPC是最簡單的。2.用VB.NET開發(fā)客戶端訪問 訪問opc服務器,必須使用OPC基金會提供的OPCdaauto.dll。 學習過程,最好下載說明書,OPC_20_Automation_Interface,網(wǎng)上可以下載。1) 注冊OPCdaauto.dll。 這個動態(tài)連接庫文件可以網(wǎng)上下載??截惖紺:WINDOWSSYSTEM32目錄, 打開運行輸入框,輸入:regsvr32 C:WINDOWSSYSTEM32OPCDAAUTO.DLL如果是64位windows,則拷貝在C:WINDOWS

4、 syswow64。輸入: regsvr32 C:WINDOWS syswow64OPCDAAUTO.DLL。2) VS2015,新建一個項目。在項目-點擊“添加引用”,使用瀏覽,在COM,可以找到opc da automation的選項,點擊確認,及完成添加。 添加成功,則資源管理器,應用,可以看到OPCautomation的項目。3)編寫程序的過程 最簡單的一個案例,如下圖,實現(xiàn)搜索服務器,連接服務器后,獲取ITEM的實時值。A) 查找服務器點擊“查找服務器”按鈕,地址不填,則列出本機的OPC服務器。如果填寫另一臺服務器地址,則列出另一臺電腦的服務器清單 如何知道計算機名?看網(wǎng)絡鄰居,至少

5、你應該知道那臺電腦裝了OPC服務器。 Public Class Form1 Inherits System.Windows.Forms.Form Dim WithEvents AnOPCServer As OPCAutomation.OPCServer '用于搜索服務器,連接服務器 Dim WithEvents ConnectedGroup As OPCAutomation.OPCGroup '對應后面添加組和項 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Su

6、b '以下程序:搜索OPC服務器,顯示在列表框上面 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CONNET.Click Try AnOPCServer = New OPCAutomation.OPCServer ListBox1.Items.Clear() Dim AllOPCServers As Object AllOPCServers = AnOPCServer.GetOPCServers(TextBox1.Text) '以括號用

7、文本框輸入,確定OPC服務器的路徑,空白表示搜索本機,如果搜索內部網(wǎng)其他電腦,則寫電腦的名稱,例如:電腦名稱 Dim i As Short For i = LBound(AllOPCServers) To UBound(AllOPCServers) ListBox1.Items.Add(AllOPCServers(i) Next i Catch ex As Exception MessageBox.Show("List OPC servers failed with exception: " + ex.Message, "SimpleOPCInterface Ex

8、ception", MessageBoxButtons.OK) '用于顯示執(zhí)行結果,如果失敗,則可以顯示失敗的原因。 End Try End SubB) 連接服務器、添加項和組 代碼如下: Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click '以下程序連接服務器連接 Try AnOPCServer.Connect(ListBox1.Text, TextBox1.Text) '第一個是參數(shù)是opc服務器名稱,第二個是電腦名稱。直接填寫也可以,例如:

9、AnOPCServer.Connect(“KEPware.KEPserverEx.V4”,“newPI”) Catch ex As Exception MessageBox.Show("OPC server 連接失敗 : " + ex.Message, "OPCSample", MessageBoxButtons.OK) End Try '以下程序添加group和item Try AnOPCServer.OPCGroups.DefaultGroupIsActive = True '使其活動,照抄就行。 AnOPCServer.OPCGro

10、ups.DefaultGroupDeadband = 0 '照抄就行。 ConnectedGroup = AnOPCServer.OPCGroups.Add("GROUP1") '添加GROUP,名稱自己隨便填。 ConnectedGroup.UpdateRate = 100 '更新速率,我實驗過,值越小,獲取ITEM值越靈敏。 ConnectedGroup.IsSubscribed = True '采用訂閱的方式,后面用DATACHANGE的事件獲取item值,與此對應。 ConnectedGroup.OPCItems.AddItem(&q

11、uot;CHANNEL2.DEVICE1.綠燈", 1) ConnectedGroup.OPCItems.AddItem("CHANNEL2.DEVICE1.產(chǎn)量", 2) ConnectedGroup.OPCItems.AddItem("CHANNEL2.DEVICE1.黃燈", 3) ConnectedGroup.OPCItems.AddItem("CHANNEL2.DEVICE1.省電", 4) ConnectedGroup.OPCItems.AddItem("CHANNEL2.DEVICE1.產(chǎn)量1&quo

12、t;, 5) ConnectedGroup.OPCItems.AddItem("CHANNEL2.DEVICE2.產(chǎn)量", 6) 'ADDITEM和ADDITEMS,兩種命令的格式不同,這里僅用最簡單的additem命令,用最土的辦法添加了6個ITEM,兩個參數(shù),第一個是item名稱,必須和KEPSERVER建立的ITEM完全一致,第二個參數(shù)是CLIENTHANDLES,句柄。6個ITEM,我給的是1-6,隨便數(shù)字都可以,不重復即可。這個跟后面獲取值有直接關系! Catch ex As Exception MessageBox.Show("添加組和項失敗

13、: " + ex.Message, "OPCSample", MessageBoxButtons.OK) End Try End SubC)獲取 前面提到的訂閱的方式, 是OPC服務器主動的方式,把有變化的ITEM,發(fā)送給客戶端。 需要使用DataChange的事件來獲取item值,OPC_20_Automation_Interface58頁。 假設兩個OPC服務器有2個item發(fā)生改變(綠燈,產(chǎn)量),那么會返回2個ITEMS, 返回的, 其中ITEMVALUES是返回的ITEM實際值,ClientHandles是返回的句柄值,句柄值和添加ITEM時定義的句柄對應

14、。前面添加的"CHANNEL2.DEVICE2.產(chǎn)量",我定義的ClientHandles是6。如果數(shù)值發(fā)生變化,那么服務器返回的的值也是6。 實際返回值: NumItems=2ClientHandles(1)= 1,ITEMVALUES(1)=true ItemValues(1)=trueClientHandles(2)= 6,ITEMVALUES(2)= 65 ItemValues(2)=65 因為返回的是數(shù)組,那么需要定義一個字符串的數(shù)組去接受ITEM值。 添加事件的方法: 源代碼如下: Private Sub ConnectedGroup_DataChange(Tr

15、ansactionID As Integer, NumItems As Integer, ByRef ClientHandles As Array, ByRef ItemValues As Array, ByRef Qualities As Array, ByRef TimeStamps As Array) Handles ConnectedGroup.DataChange Dim val(10) As String '用于接收ITEM值 Dim I As Integer '用于循環(huán) Dim k As Integer '用于循環(huán)的方式給TEXTBOX賦值,如果是textbox2-TEXTBOX7,有規(guī)律。就可以實現(xiàn) F

溫馨提示

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

評論

0/150

提交評論