1. 程式人生 > >基於OPC技術的上位機與PLC之間的通訊

基於OPC技術的上位機與PLC之間的通訊

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

基於OPC技術的上位機與PLC之間的通訊

1 引言
現代工業控制系統通常以PC機為上位機,通過與現場工控裝置如PLC的資料交換與處理,實現對生產過程的自動控制。對於小型控制系統,採用專門的組態軟體成本太高,用VB設計監控系統則可以降低成本,但首先要解決上位機與PLC之間通訊問題。以往使用較多的程序間通訊方式是DDE(動態資料交換)方式,隨著OPC技術的發展和普及,它已成為工業過程控制的通訊標準。OPC伺服器有兩類介面,其中自動化介面主要用於VB、Delphi等開發工具。本文利用羅克韋爾公司提供的OPC介面,用VB編寫了客戶端應用程式,實現了上位機與AB可程式設計控制器之間的資料交換。

2 OPC技術簡介


OPC(OLE for Process Control—用於過程控制的物件連線與嵌入)是一套以微軟物件連線與嵌入OLE、元件物件模型COM、分散式元件物件模型DCOM(Distributed COM)技術為基礎,基於Windows操作平臺,為工業應用程式之間提供高效的資訊整合和互動功能的元件物件模型介面標準。OPC實際上是提供了一種機制,通過這種機制,系統能夠以伺服器/客戶端標準方式從伺服器獲取資料並將其傳遞給任何客戶應用程式。這樣,只要生產商開發一套遵循OPC規範的伺服器與資料進行通訊,其他任何客戶應用程式便能通過伺服器訪問裝置。

OPC伺服器有兩類介面:定製介面和自動化介面。定製介面為C++程式服務,自動化介面為VB這一類可使用自動化物件的程式服務。定製介面是服務商必須提供的,而自動化介面則是可選的,不過OPC基金會提供了一個叫做“自動化包裝器”的動態連線庫,用於在兩者間轉換。
OPC資料存取規範規定的基本物件有三類:伺服器(server)、組(group)和資料項(item)。伺服器物件包含伺服器的所有資訊,也是組物件的容器,一個伺服器對應於一個OPC server,即一種裝置的驅動程式。組物件除了包含它自身資訊外,還負責管理資料項。每一個數據項代表到資料來源的一個連線,但它沒有提供外部介面,客戶端程式無法對資料項直接進行操作,應用程式必須依靠資料項的容器組物件來對它進行操作。

3 通訊實現
3.1 RSLinx的配置
RSLinx是AB可程式設計控制器在Windows環境下建立工廠所用通訊方案的工具,它不僅提供了多種網路驅動程式,而且提供了最快速的OPC、DDE和Custom C/C++介面。本設計中上位機與Logix5550控制器採用RS-232串列埠方式連線,在RSLinx中要對DF1網路驅動程式組態,設定串列埠特性:COM1、波特率19200bps、一個停止位、無奇偶校驗、全雙工、BCC校驗碼。此外要使用RSLinx的OPC介面作為伺服器,還要在RSLinx中對OPC進行配置。

3.2 安裝OPC自動化介面服務
若要用VB開發OPC應用程式,必須安裝OPC自動化介面服務,保證計算機系統目錄下有OPCDAAuto.dll。OPC基金會提供了一個叫做“自動化包裝器”的動態連線庫,從OPC基金會的網站(

www.opcfoundation.org)可下載。在VB環境中,按“工程”的子選單“引用…”後,彈出對話方塊,選擇其中的“RSLinx OPC Automation 2.0”項,這樣才能使用自動化介面。

3.3 程式設計
用VB編寫了OPC客戶端應用程式,實現了上位機與Logix5550控制器之間的通訊。主要程式程式碼如下:

(1) 連線OPC伺服器
Dim WithEvents MyOPCServer As OPCServer ‘定義伺服器物件變數MyOPCServer
Dim WithEvents MyOPCGroup As OPCGroup ‘定義OPC組物件變數MyOPCGroup
Set MyOPCServer = New OPCServer
MyOPCServer.Connect "RSLinx OPC Server" ‘連線RSLinx 的OPC伺服器

(2) 新增OPC組物件
Set MyOPCGroup=MyOPCServer.OPCGroups.Add("Group1")
‘新增OPC組物件MyOPCGroup.IsSubscribed= True
‘設定該組資料為後臺重新整理
MyOPCGroup.IsActive = True
‘設定該組為啟用狀態


MyOPCGroup.UpdateRate=1000
‘設定資料重新整理時間為1000

(3) 新增資料項
Dim abItemIDs() As String
‘項識別符號
Dim abClientHandles() As Long
‘客戶端控制代碼
Dim abServerHandles() As Long
‘伺服器端控制代碼
Dim abErrors() As Long
Dim i As Long
ItemCount=5
Dim oOPCItem As RSLinxOPCAutomation.OPCItem
For i = 1 To 5
abItemIDs(i) = "[" & txtTopic & "]" & txtItem(i) ‘將Topic名和標籤名賦給項識別符號
abClientHandles(i) = i
‘給客戶端控制代碼賦值
Next i
MyOPCGroup.OPCItems.AddItems ItemCount, abItemIDs, abClientHandles, abServerHandles, abErrors
‘新增資料項操作

(4) 同步資料讀寫
OPC資料存取有同步方式和非同步方式兩種。非同步讀寫資料複雜,需要與事件結合使用,與同步相比速度慢但準確性高。同步讀寫資料簡單,直接使用OPCItem的方法即可。
Dim One As OPCItem
Dim Index As Long
‘Index為標籤順序號
Dim OneRead As String
Dim Xie As String
Set One = MyOPCGroup.OPCItems(Index)
One.Read OPCCache
OneRead = One.Value
‘讀資料
One.Write (Xie)
‘寫資料
若只讀取資料,可以使用DataChange事件,當控制器中所要訪問的資料一旦發生改變時將會觸發該事件,並將該資料自動讀到TxtValue文字框。
Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)
‘自動重新整理資料
Dim i As Long
For i = 1 To NumItems
txtValue(ClientHandles(i)) = ItemValues(i)
‘獲取項的值
txtTime(ClientHandles(i)) = TimeStamps(i)
‘獲取項的時間戳
txtQuantity(ClientHandles(i))=GetQualityString(Qualities(i))
‘獲取項的品質
Next i
End Sub

(5) 斷開OPC伺服器
MyOPCServer.OPCGroups.RemoveAll
‘移除所有OPC Group,空出資源
Set MyOPCGroup = Nothing
MyOPCServer.Disconnect
‘斷開連線

4 結束語
利用本文介紹的方法,在實驗室實現了上位機和PLC之間的通訊,圖1是OPC客戶端設定介面。此外我們還設計了城市供水監控系統,鑑於篇幅,監控介面不再一一列出。

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述