2023年11月30日发(作者:)
基于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自动化接口服务,保证
计算机系统目录下有。OPC基金会提供了一个叫做“自
动化包装器”的动态连接库,从OPC基金会的网站
()可下载。在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
t "RSLinx OPC Server" ‘连接RSLinx 的OPC
服务器
(2) 添加OPC组对象
Set MyOPCGroup=("Group1")
‘添加OPC组对象cribed= True
‘设置该组数据为后台刷新
ve = True
‘设置该组为激活状态
Rate=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 m
For i = 1 To 5
(4) 同步数据读写
OPC数据存取有同步方式和异步方式两种。异步读写数据复杂,需要
与事件结合使用,与同步相比速度慢但准确性高。同步读写数据简单,
直接使用OPCItem的方法即可。
Dim One As OPCItem
Dim Index As Long
‘Index为标签顺序号
Dim OneRead As String
Dim Xie As String
Set One = ms(Index)
OPCCache
OneRead =
‘读数据
(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


发布评论