2023年11月30日发(作者:)

基于OPC技术的上位机与PLC之间的通信

1 引言

现代工业控制系统通常以PC机为上位机,通过与现场工控设备如PLC

的数据交换与处理,实现对生产过程的自动控制。对于小型控制系统,

采用专门的组态软件成本太高,VB设计监控系统则可以降低成本,

但首先要解决上位机与PLC之间通信问题。以往使用较多的进程间通

信方式是DDE(动态数据交换)方式,随着OPC技术的发展和普及,它

已成为工业过程控制的通信标准。OPC服务器有两类接口,其中自动

化接口主要用于VBDelphi等开发工具。本文利用罗克韦尔公司提

供的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的配置

RSLinxAB可编程控制器在Windows环境下建立工厂所用通信方案

的工具,它不仅提供了多种网络驱动程序,而且提供了最快速的OPC

DDECustom C/C++接口。本设计中上位机与Logix5550控制器采用

RS-232串口方式连接,在RSLinx中要对DF1网络驱动程序组态,设

置串口特性:COM1、波特率19200bps、一个停止位、无奇偶校验、全

双工、BCC校验码。此外要使用RSLinxOPC接口作为服务器,还

要在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