1 引言
現(xiàn)代工業(yè)控制系統(tǒng)通常以PC機(jī)為上位機(jī),通過與現(xiàn)場(chǎng)工控設(shè)備如PLC的數(shù)據(jù)交換與處理,實(shí)現(xiàn)對(duì)生產(chǎn)過程的自動(dòng)控制。對(duì)于小型控制系統(tǒng),采用專門的組態(tài)軟件成本太高,用VB設(shè)計(jì)監(jiān)控系統(tǒng)則可以降低成本,但首先要解決上">

      技術(shù)頻道

      基于OPC技術(shù)的上位機(jī)與PLC之間的通信

      基于OPC技術(shù)的上位機(jī)與PLC之間的通信

      1 引言
      現(xiàn)代工業(yè)控制系統(tǒng)通常以PC機(jī)為上位機(jī),通過與現(xiàn)場(chǎng)工控設(shè)備如PLC的數(shù)據(jù)交換與處理,實(shí)現(xiàn)對(duì)生產(chǎn)過程的自動(dòng)控制。對(duì)于小型控制系統(tǒng),采用專門的組態(tài)軟件成本太高,用VB設(shè)計(jì)監(jiān)控系統(tǒng)則可以降低成本,但首先要解決上位機(jī)與PLC之間通信問題。以往使用較多的進(jìn)程間通信方式是DDE(動(dòng)態(tài)數(shù)據(jù)交換)方式,隨著OPC技術(shù)的發(fā)展和普及,它已成為工業(yè)過程控制的通信標(biāo)準(zhǔn)。OPC服務(wù)器有兩類接口,其中自動(dòng)化接口主要用于VB、Delphi等開發(fā)工具。本文利用羅克韋爾公司提供的OPC接口,用VB編寫了客戶端應(yīng)用程序,實(shí)現(xiàn)了上位機(jī)與AB可編程控制器之間的數(shù)據(jù)交換。

      2 OPC技術(shù)簡介


      OPC(OLE for Process Control—用于過程控制的對(duì)象連接與嵌入)是一套以微軟對(duì)象連接與嵌入OLE、組件對(duì)象模型COM、分布式組件對(duì)象模型DCOM(Distributed COM)技術(shù)為基礎(chǔ),基于Windows操作平臺(tái),為工業(yè)應(yīng)用程序之間提供高效的信息集成和交互功能的組件對(duì)象模型接口標(biāo)準(zhǔn)。OPC實(shí)際上是提供了一種機(jī)制,通過這種機(jī)制,系統(tǒng)能夠以服務(wù)器/客戶端標(biāo)準(zhǔn)方式從服務(wù)器獲取數(shù)據(jù)并將其傳遞給任何客戶應(yīng)用程序。這樣,只要生產(chǎn)商開發(fā)一套遵循OPC規(guī)范的服務(wù)器與數(shù)據(jù)進(jìn)行通信,其他任何客戶應(yīng)用程序便能通過服務(wù)器訪問設(shè)備。

      OPC服務(wù)器有兩類接口:定制接口和自動(dòng)化接口。定制接口為C++程序服務(wù),自動(dòng)化接口為VB這一類可使用自動(dòng)化對(duì)象的程序服務(wù)。定制接口是服務(wù)商必須提供的,而自動(dòng)化接口則是可選的,不過OPC基金會(huì)提供了一個(gè)叫做“自動(dòng)化包裝器”的動(dòng)態(tài)連接庫,用于在兩者間轉(zhuǎn)換。
      OPC數(shù)據(jù)存取規(guī)范規(guī)定的基本對(duì)象有三類:服務(wù)器(server)、組(group)和數(shù)據(jù)項(xiàng)(item)。服務(wù)器對(duì)象包含服務(wù)器的所有信息,也是組對(duì)象的容器,一個(gè)服務(wù)器對(duì)應(yīng)于一個(gè)OPC server,即一種設(shè)備的驅(qū)動(dòng)程序。組對(duì)象除了包含它自身信息外,還負(fù)責(zé)管理數(shù)據(jù)項(xiàng)。每一個(gè)數(shù)據(jù)項(xiàng)代表到數(shù)據(jù)源的一個(gè)連接,但它沒有提供外部接口,客戶端程序無法對(duì)數(shù)據(jù)項(xiàng)直接進(jìn)行操作,應(yīng)用程序必須依靠數(shù)據(jù)項(xiàng)的容器組對(duì)象來對(duì)它進(jìn)行操作。

      3 通信實(shí)現(xiàn)
      3.1 RSLinx的配置
      RSLinx是AB可編程控制器在Windows環(huán)境下建立工廠所用通信方案的工具,它不僅提供了多種網(wǎng)絡(luò)驅(qū)動(dòng)程序,而且提供了最快速的OPC、DDE和Custom C/C++接口。本設(shè)計(jì)中上位機(jī)與Logix5550控制器采用RS-232串口方式連接,在RSLinx中要對(duì)DF1網(wǎng)絡(luò)驅(qū)動(dòng)程序組態(tài),設(shè)置串口特性:COM1、波特率19200bps、一個(gè)停止位、無奇偶校驗(yàn)、全雙工、BCC校驗(yàn)碼。此外要使用RSLinx的OPC接口作為服務(wù)器,還要在RSLinx中對(duì)OPC進(jìn)行配置。

      3.2 安裝OPC自動(dòng)化接口服務(wù)
      若要用VB開發(fā)OPC應(yīng)用程序,必須安裝OPC自動(dòng)化接口服務(wù),保證計(jì)算機(jī)系統(tǒng)目錄下有OPCDAAuto.dll。OPC基金會(huì)提供了一個(gè)叫做“自動(dòng)化包裝器”的動(dòng)態(tài)連接庫,從OPC基金會(huì)的網(wǎng)站(www.opcfoundation.org)可下載。在VB環(huán)境中,按“工程”的子菜單“引用…”后,彈出對(duì)話框,選擇其中的“RSLinx OPC Automation 2.0”項(xiàng),這樣才能使用自動(dòng)化接口。

      3.3 程序設(shè)計(jì)
      用VB編寫了OPC客戶端應(yīng)用程序,實(shí)現(xiàn)了上位機(jī)與Logix5550控制器之間的通信。主要程序代碼如下:

      (1) 連接OPC服務(wù)器
      Dim WithEvents MyOPCServer As OPCServer ‘定義服務(wù)器對(duì)象變量MyOPCServer
      Dim WithEvents MyOPCGroup As OPCGroup ‘定義OPC組對(duì)象變量MyOPCGroup
      Set MyOPCServer = New OPCServer
      MyOPCServer.Connect "RSLinx OPC Server" ‘連接RSLinx 的OPC服務(wù)器

      (2) 添加OPC組對(duì)象
      Set MyOPCGroup=MyOPCServer.OPCGroups.Add("Group1")
      ‘添加OPC組對(duì)象MyOPCGroup.IsSubscribed= True
      ‘設(shè)置該組數(shù)據(jù)為后臺(tái)刷新
      MyOPCGroup.IsActive = True
      ‘設(shè)置該組為激活狀態(tài)


      MyOPCGroup.UpdateRate=1000
      ‘設(shè)置數(shù)據(jù)刷新時(shí)間為1000

      (3) 添加數(shù)據(jù)項(xiàng)
      Dim abItemIDs() As String
      ‘項(xiàng)標(biāo)識(shí)符
      Dim abClientHandles() As Long
      ‘客戶端句柄
      Dim abServerHandles() As Long
      ‘服務(wù)器端句柄
      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名和標(biāo)簽名賦給項(xiàng)標(biāo)識(shí)符
      abClientHandles(i) = i
      ‘給客戶端句柄賦值
      Next i
      MyOPCGroup.OPCItems.AddItems ItemCount, abItemIDs, abClientHandles, abServerHandles, abErrors
      ‘添加數(shù)據(jù)項(xiàng)操作

      (4) 同步數(shù)據(jù)讀寫
      OPC數(shù)據(jù)存取有同步方式和異步方式兩種。異步讀寫數(shù)據(jù)復(fù)雜,需要與事件結(jié)合使用,與同步相比速度慢但準(zhǔn)確性高。同步讀寫數(shù)據(jù)簡單,直接使用OPCItem的方法即可。
      Dim One As OPCItem
      Dim Index As Long
      ‘Index為標(biāo)簽順序號(hào)
      Dim OneRead As String
      Dim Xie As String
      Set One = MyOPCGroup.OPCItems(Index)
      One.Read OPCCache
      OneRead = One.Value
      ‘讀數(shù)據(jù)
      One.Write (Xie)
      ‘寫數(shù)據(jù)
      若只讀取數(shù)據(jù),可以使用DataChange事件,當(dāng)控制器中所要訪問的數(shù)據(jù)一旦發(fā)生改變時(shí)將會(huì)觸發(fā)該事件,并將該數(shù)據(jù)自動(dòng)讀到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)
      ‘自動(dòng)刷新數(shù)據(jù)
      Dim i As Long
      For i = 1 To NumItems
      txtValue(ClientHandles(i)) = ItemValues(i)
      ‘獲取項(xiàng)的值
      txtTime(ClientHandles(i)) = TimeStamps(i)
      ‘獲取項(xiàng)的時(shí)間戳
      txtQuantity(ClientHandles(i))=GetQualityString(Qualities(i))
      ‘獲取項(xiàng)的品質(zhì)
      Next i
      End Sub

      (5) 斷開OPC服務(wù)器
      MyOPCServer.OPCGroups.RemoveAll
      ‘移除所有OPC Group,空出資源
      Set MyOPCGroup = Nothing
      MyOPCServer.Disconnect
      ‘?dāng)嚅_連接

      4 結(jié)束語
      利用本文介紹的方法,在實(shí)驗(yàn)室實(shí)現(xiàn)了上位機(jī)和PLC之間的通信,圖1是OPC客戶端設(shè)置界面。此外我們還設(shè)計(jì)了城市供水監(jiān)控系統(tǒng),鑒于篇幅,監(jiān)控界面不再一一列出。

      文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。

      主站蜘蛛池模板: 久久91精品国产一区二区| 国产av一区二区三区日韩| 视频一区二区三区免费观看| 在线播放精品一区二区啪视频| 国产丝袜美女一区二区三区| 亚洲国产精品一区二区久久| 一区二区视频在线播放| 无码人妻一区二区三区免费| 日韩一区二区三区不卡视频| 岛国精品一区免费视频在线观看 | 色天使亚洲综合一区二区| 亚洲欧美国产国产一区二区三区 | 精品亚洲福利一区二区| av在线亚洲欧洲日产一区二区| 亚洲无线码一区二区三区| 亚洲欧美国产国产一区二区三区| 免费无码一区二区| 亚洲综合一区二区| 精品中文字幕一区二区三区四区| 性色A码一区二区三区天美传媒| 国产一区二区不卡老阿姨| 亚洲AV成人精品日韩一区18p| 久久久久成人精品一区二区| 成人精品视频一区二区三区尤物| 国产成人精品久久一区二区三区av| 国产午夜精品免费一区二区三区| 日本一区免费电影| 亚洲日本一区二区三区| 日韩精品一区二区三区不卡| 亚洲午夜在线一区| 香蕉在线精品一区二区| 日韩精品一区二区三区在线观看l| 精品一区二区三区四区| 国产日韩精品一区二区在线观看播放| 丰满爆乳一区二区三区| 日本免费精品一区二区三区| 91国偷自产一区二区三区| 国产亚洲无线码一区二区| 国产一区在线视频观看| 国产福利微拍精品一区二区| 中文字幕在线一区二区三区|