论文部分内容阅读
摘要: 本文主要介绍了OPC技术原理,DX发射机的A-B PLC与工控机进行硬件连接的方法,以及在RSlinx中设置OPC服务器配置的过程,并在此基础上列举了VB编程语言开发OPC客户端的具体实现。
关键词: OPC RSlinx AB PLC DX中波发射机 vb
1、引言
随着计算机和通信技术的发展,计算机在工业自动化领域中发挥着越来越重要的作用,各种工业智能仪器、仪表在工业自动化领域中的应用也越来越广泛。近年来,我们局大力推进自动化和信息化建设,台里的发射机和天线交换系统都实现了自动化,在实现自动化的过程中中,我们都用到了AB PLC(罗克韦尔公司生产的可编程控制器)這一核心控制部件。DX 中波数字调幅发射机的合成控制单元(TCU)中使用的SLC5/04可编程控制器,支持DH+协议与上位机通讯;天线交换开关系统使用的是logix 5000系列可编程控制器,采用网络模块与上位机通讯,虽然两种PLC采用的底层协议不同,但是。 AB PLC提供了RSLinx软件包与其它计算机软件进行通讯,在RSLinx软件中, 提供了罗克韦尔公司相应的OPC服务器作为PLC与其它程序的通讯接口, 从而实现外部程序对PLC的实时数据读取和控制。下面就将我们对所维护的发射机进行自动化改造过程中, 与计算机相关的OPC技术的应用做一介绍。
2、OPC技术的工作原理
OPC是Object Linking and Embed-ding (OLE) for Process Control的缩写, 它是微软公司的对象链接和嵌入技术在过程控制方面的应用。OPC以OLE/COM/DCOM技术为基础, 采用客户/服务器模式为工业自动化软件面向对象的开发提供了统一的标准, 这个标准定义了应用Micro-soft操作系统在基于PC的客户机之间交换自动化实时数据的方法。
OPC 数据存取规范规定的基本对象有三类 : 服务器 (server) 、 组 (group) 和数据项 (item) 。 服务器对象包含服务器的所有信息 , 也是组对象的容器 , 一个服务器对应于一个 OPC server , 即一种设备的驱动程序 。 组对象除了包含它自身信息外 , 还负责管理数据项 。 每一个数据项代表到数据源的一个连接,但它没有提供外部接口,客户端程序无法对数据项直接进行操作 , 应用程序必须依靠数据项的容器组对象来对它进行操作。
OPC 服务器有两类接口 : 定制接口和自动化接口。定制接口为 C++ 程序服务,自动化接口 为VB ,Delphi等可使用自动化对象的程序服务 。如图1:
图1自定义接口和自动化接口与opc服务器通信方式示意图
OPC 客户端与 OPC 服务器交互包括两个方面 : 一个是客户端程序从服务器读取数据 ;一个是客户端向服务器写入数据 . 客户端程序读取数据有四种基本方法 : 同步读、异步读 、订阅和刷新 ; 客户端向服务器写数据有两种方式 : 同步写和异步写。也就是说 ,OPC 服务器与PC 客户端的交互存在4种方式 : 同步、异步、订阅和刷新。
同步通讯时,OPC客户端向OPC服务器进行请求时,OPC 客户端必须等到OPC服务器对应的响应全部完成以后才能返回,在此期间OPC客户端一直处于等待状态 ,若进行读操作 ,那么必须等待OPC服务器响应后才返回。因此在同步通讯时,如果有大量数据进行操作或者有很多OPC客户端对OPC服务器进行读操作,必然造成OPC客户端的阻塞现象。因此同步通讯适用于OPC客户端较少,数据量较小时的场合。
异步通讯时,OPC客户端向OPC服务器进行请求时,OPC客户端程序请求后立刻返回,不用等待OPC服务器的响应,可以进行其他操作。OPC服务器完成响应后再通知OPC客户端程序。若进行读操作, OPC 客户端程序通知OPC服务器后立刻返回,不等待 OPC服务器的读完成,而OPC服务器读完后,会自动通知OPC客户程序,把读到的结果传给OPC客户程序。因此相对于同步通讯,异步通讯的效率更高。
订阅方式时,OPC客户端程序对服务器进行请求时OPC客户端程序操作后立刻返回 ,不用等待OPC服务器的操作,可以进行其他操作,OPC服务器的Group组在组内的有数据发生改变时,自动根据更新周期刷新相应的客户端数据。客户端向OPC服务器发送一次请求,之后不再对服务器请求。
3、 硬件连接与系统配置
DX 中波数字调幅发射机的PLC 系统提供了对外输出的接口
有三个,一个RS232 口被 触摸屏占去, 还有一个编程口和一个DH+口。编程口主要用于编程使用,它通过1784-U2DHP模块也可以实现对plc的监控,但是采用RS232 DF1协议传输距离比较近,所以最终我们采用厂家提供的DH+485数据线将上位机通讯卡与A-B PLC CPU模块的DH+接口直接连接。
DH+协议:DH+ 协议是AB公司自己开发的数据通信协议, 为两线制,类似于RS485 协议,但数据传输速率可达57.6K波特,传送距离最大可达10000英尺,最大可接94个接点, 两两相串,终端接150欧的反射电阻,作为AB PLC而言,是远程监控组网的最佳传输协议。
3.1、通讯卡连接方式
1、安装通讯卡并连线。
Allen-Bradley 1784-PKTX卡是KT系列通讯卡的PCI版本, 专用于在DH+网络下32位PCI总线计算机和PLC传送数据, 也适用于在DH-485网络下SLC处理器的编程和数据采集, 可在3.3V或5V两种信号电平下工作, 可在64位插槽下工作, 但不支持64 位操作系统。将所购的1784-PKTX卡安装在要作为上位监控计算机的PCI 插槽内, 启动计算机后, 计算机会提示发现新硬件,然后插入RSlinx安装盘, 自动寻找到RSlinx对1784-PKTX卡的驱动,完成驱动的安装。 3.2、使用RSLinx连接A-B PLC的通讯网络。
运行RSLinx Classic软件。点击菜单中“通信”选项,在下拉列表中选择“配置驱动程序”,弹出如图2所示页面。
图2 配置驱动程序
在下拉列表中选择1784-KT/KTX(D)/PKTX(D)/PCMK for DH+/DH485 devices后,单击“新增…”按钮,出现“新增RSLINX CLASSIC驱动程序”对话框,选择系统默认值按“确定”出现“配置 1784-PKTX/PKTXD”对话框,在“值”下拉列表中选择PKTX(D)选项,点击“确定”后,RSLinx配置完成。
3.3、进行DDE服务的配置
在菜单栏中打开“DDE/OPC”菜单并选择“主题组态”对话框(如图3):
图3 主题组态
点击新建,新建一个主题,然后在右边选中你要利用的物理设备,数据采集和高级通讯会自动选择合适的通讯协议,点击完成,这样在RSLinx软件中对A-B PLC的通信配置就完成了。
4、利用vb开发OPC客户端
VB作为编程语言,本身对OPC没有特别的支持,但是OPC技术规范为VB提供了自动化接口。通过自动化接口,程序员无需了解接口内部的详细机制,而能轻松使用接口实现数据的访问。用VB开发OPC应用程序和AB PLC通信,必须安装RSLinx Classic Profressional软件。在VB环境中,按“工程”的子菜单“引用…”后,弹出对话框,选择其中的“Rockwell Software OPC Automatic”项,这样就可以使用自动化接口。
(1) 连接 OPC 服务器
Private WithEvents MyOPCServer As RsiOPCAuto.OPCServer
‘ 定義服务器对象变量 MyOPCServer
Private WithEvents MyOPCGroup As RsiOPCAuto.OPCGroup
‘ 定义 OPC 组对象变量 MyOPCGroup
Set MyOPCServer = New RsiOPCAuto.OPCServer
MyOPCServer.Connect "RSLinx OPC Server"
‘ 连接 RSLinx 的 OPC 服务器
(2) 添加 OPC 组对象
Set MyOPCGroup = MyOPCServer.OPCGroups.Add("OPCSample")
‘ 添加 OPC 组对象
MyOPCGroup.IsSubscribed= True
‘ 设置该组数据为后台刷新
MyOPCGroup.IsActive = True
‘ 设置该组为激活状态。
只有处于活动状态的OPC才进行定期的数据更新。非活动状态的OPC组,除了在接到显然的数据读写要求外,并不收集任何数据。
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 RsiOPCAuto.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) 同步数据读写
MyOPCGroup.SyncRead nSource, ItemCount, lServerHandles, vtItemValues, lErrors
‘ 同步读取
for i= 1 to ItemCount
msgbox vtItemValues(i)’
读取的数可以根据自己的需要,灵活使用。
next i
MyOPCGroup.SyncWrite 1, lHandle(), vtItemValues, lErrors
‘ 同步写入
若只读取数据,可以使用 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) 异步数据读写
MyOPCGroup.AsyncRead ItemCount, TempServerHandles, ErrorNr, TransactionID, CancelID
‘ 异步读取
读取的结果由OPC服务器通过IconnectionPointContainer接口配合IOPCDataCallback接口反调用应用程序的事务处理程序:
Private Sub MyOPCGroup_AsyncReadComplete(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date, Errors() As Long)
這里的参数ClientHandles和AddItems方法中的ClientHandles是对应的,用于判断哪一个OPC Item在被读取。TransactionID:客户端自由使用,应用程序开发商自定义;Errors():记录服务器返回的信息。
MyOPCGroup.AsyncWrite 1,TempServerHandles,VValue, ErrorNr, TransactionID, CancelID
‘ 异步写入
同样,AsyncWrite也对应一个事务处理程序:
Private Sub MyOPCGroup_AsyncWriteComplete(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, Errors() As Long)
(6) 断开 OPC 服务器
MyOPCServer.OPCGroups.RemoveAll
‘ 移除所有 OPC Group
Set MyOPCGroup = Nothing
‘空出资源
MyOPCServer.Disconnect
‘ 断开连接
5、结束语
通过OPC技术,软件开发者可以无需了解硬件的实质和操作过程,只要遵循OPC规范进行客户端的开发,就能够读写OPC服务器中的数据。利用该技术,软件开发者可以充分发挥自己的特长,把更多的精力投入到程序功能的开发上, 从而大大简化了整个软件系统的开发过程, 提高了开发效率, 并且系统的可靠性、 稳定性和灵活性也得到了充分的保障。
【参考文献】
1 崔丽丽. 徐进学.基于OPC 技术的客户端数据采集软件包设计[J]. 沈阳工业大学学报. 2005. 27 (5):553-557.
2 童爱红.Visual Basic 6.0程序员指南[M].清华大学出版社. 2008:35-94
3 Allen-Bradley SLC500TM模块化硬件结构.安装使用手册.
关键词: OPC RSlinx AB PLC DX中波发射机 vb
1、引言
随着计算机和通信技术的发展,计算机在工业自动化领域中发挥着越来越重要的作用,各种工业智能仪器、仪表在工业自动化领域中的应用也越来越广泛。近年来,我们局大力推进自动化和信息化建设,台里的发射机和天线交换系统都实现了自动化,在实现自动化的过程中中,我们都用到了AB PLC(罗克韦尔公司生产的可编程控制器)這一核心控制部件。DX 中波数字调幅发射机的合成控制单元(TCU)中使用的SLC5/04可编程控制器,支持DH+协议与上位机通讯;天线交换开关系统使用的是logix 5000系列可编程控制器,采用网络模块与上位机通讯,虽然两种PLC采用的底层协议不同,但是。 AB PLC提供了RSLinx软件包与其它计算机软件进行通讯,在RSLinx软件中, 提供了罗克韦尔公司相应的OPC服务器作为PLC与其它程序的通讯接口, 从而实现外部程序对PLC的实时数据读取和控制。下面就将我们对所维护的发射机进行自动化改造过程中, 与计算机相关的OPC技术的应用做一介绍。
2、OPC技术的工作原理
OPC是Object Linking and Embed-ding (OLE) for Process Control的缩写, 它是微软公司的对象链接和嵌入技术在过程控制方面的应用。OPC以OLE/COM/DCOM技术为基础, 采用客户/服务器模式为工业自动化软件面向对象的开发提供了统一的标准, 这个标准定义了应用Micro-soft操作系统在基于PC的客户机之间交换自动化实时数据的方法。
OPC 数据存取规范规定的基本对象有三类 : 服务器 (server) 、 组 (group) 和数据项 (item) 。 服务器对象包含服务器的所有信息 , 也是组对象的容器 , 一个服务器对应于一个 OPC server , 即一种设备的驱动程序 。 组对象除了包含它自身信息外 , 还负责管理数据项 。 每一个数据项代表到数据源的一个连接,但它没有提供外部接口,客户端程序无法对数据项直接进行操作 , 应用程序必须依靠数据项的容器组对象来对它进行操作。
OPC 服务器有两类接口 : 定制接口和自动化接口。定制接口为 C++ 程序服务,自动化接口 为VB ,Delphi等可使用自动化对象的程序服务 。如图1:
图1自定义接口和自动化接口与opc服务器通信方式示意图
OPC 客户端与 OPC 服务器交互包括两个方面 : 一个是客户端程序从服务器读取数据 ;一个是客户端向服务器写入数据 . 客户端程序读取数据有四种基本方法 : 同步读、异步读 、订阅和刷新 ; 客户端向服务器写数据有两种方式 : 同步写和异步写。也就是说 ,OPC 服务器与PC 客户端的交互存在4种方式 : 同步、异步、订阅和刷新。
同步通讯时,OPC客户端向OPC服务器进行请求时,OPC 客户端必须等到OPC服务器对应的响应全部完成以后才能返回,在此期间OPC客户端一直处于等待状态 ,若进行读操作 ,那么必须等待OPC服务器响应后才返回。因此在同步通讯时,如果有大量数据进行操作或者有很多OPC客户端对OPC服务器进行读操作,必然造成OPC客户端的阻塞现象。因此同步通讯适用于OPC客户端较少,数据量较小时的场合。
异步通讯时,OPC客户端向OPC服务器进行请求时,OPC客户端程序请求后立刻返回,不用等待OPC服务器的响应,可以进行其他操作。OPC服务器完成响应后再通知OPC客户端程序。若进行读操作, OPC 客户端程序通知OPC服务器后立刻返回,不等待 OPC服务器的读完成,而OPC服务器读完后,会自动通知OPC客户程序,把读到的结果传给OPC客户程序。因此相对于同步通讯,异步通讯的效率更高。
订阅方式时,OPC客户端程序对服务器进行请求时OPC客户端程序操作后立刻返回 ,不用等待OPC服务器的操作,可以进行其他操作,OPC服务器的Group组在组内的有数据发生改变时,自动根据更新周期刷新相应的客户端数据。客户端向OPC服务器发送一次请求,之后不再对服务器请求。
3、 硬件连接与系统配置
DX 中波数字调幅发射机的PLC 系统提供了对外输出的接口
有三个,一个RS232 口被 触摸屏占去, 还有一个编程口和一个DH+口。编程口主要用于编程使用,它通过1784-U2DHP模块也可以实现对plc的监控,但是采用RS232 DF1协议传输距离比较近,所以最终我们采用厂家提供的DH+485数据线将上位机通讯卡与A-B PLC CPU模块的DH+接口直接连接。
DH+协议:DH+ 协议是AB公司自己开发的数据通信协议, 为两线制,类似于RS485 协议,但数据传输速率可达57.6K波特,传送距离最大可达10000英尺,最大可接94个接点, 两两相串,终端接150欧的反射电阻,作为AB PLC而言,是远程监控组网的最佳传输协议。
3.1、通讯卡连接方式
1、安装通讯卡并连线。
Allen-Bradley 1784-PKTX卡是KT系列通讯卡的PCI版本, 专用于在DH+网络下32位PCI总线计算机和PLC传送数据, 也适用于在DH-485网络下SLC处理器的编程和数据采集, 可在3.3V或5V两种信号电平下工作, 可在64位插槽下工作, 但不支持64 位操作系统。将所购的1784-PKTX卡安装在要作为上位监控计算机的PCI 插槽内, 启动计算机后, 计算机会提示发现新硬件,然后插入RSlinx安装盘, 自动寻找到RSlinx对1784-PKTX卡的驱动,完成驱动的安装。 3.2、使用RSLinx连接A-B PLC的通讯网络。
运行RSLinx Classic软件。点击菜单中“通信”选项,在下拉列表中选择“配置驱动程序”,弹出如图2所示页面。
图2 配置驱动程序
在下拉列表中选择1784-KT/KTX(D)/PKTX(D)/PCMK for DH+/DH485 devices后,单击“新增…”按钮,出现“新增RSLINX CLASSIC驱动程序”对话框,选择系统默认值按“确定”出现“配置 1784-PKTX/PKTXD”对话框,在“值”下拉列表中选择PKTX(D)选项,点击“确定”后,RSLinx配置完成。
3.3、进行DDE服务的配置
在菜单栏中打开“DDE/OPC”菜单并选择“主题组态”对话框(如图3):
图3 主题组态
点击新建,新建一个主题,然后在右边选中你要利用的物理设备,数据采集和高级通讯会自动选择合适的通讯协议,点击完成,这样在RSLinx软件中对A-B PLC的通信配置就完成了。
4、利用vb开发OPC客户端
VB作为编程语言,本身对OPC没有特别的支持,但是OPC技术规范为VB提供了自动化接口。通过自动化接口,程序员无需了解接口内部的详细机制,而能轻松使用接口实现数据的访问。用VB开发OPC应用程序和AB PLC通信,必须安装RSLinx Classic Profressional软件。在VB环境中,按“工程”的子菜单“引用…”后,弹出对话框,选择其中的“Rockwell Software OPC Automatic”项,这样就可以使用自动化接口。
(1) 连接 OPC 服务器
Private WithEvents MyOPCServer As RsiOPCAuto.OPCServer
‘ 定義服务器对象变量 MyOPCServer
Private WithEvents MyOPCGroup As RsiOPCAuto.OPCGroup
‘ 定义 OPC 组对象变量 MyOPCGroup
Set MyOPCServer = New RsiOPCAuto.OPCServer
MyOPCServer.Connect "RSLinx OPC Server"
‘ 连接 RSLinx 的 OPC 服务器
(2) 添加 OPC 组对象
Set MyOPCGroup = MyOPCServer.OPCGroups.Add("OPCSample")
‘ 添加 OPC 组对象
MyOPCGroup.IsSubscribed= True
‘ 设置该组数据为后台刷新
MyOPCGroup.IsActive = True
‘ 设置该组为激活状态。
只有处于活动状态的OPC才进行定期的数据更新。非活动状态的OPC组,除了在接到显然的数据读写要求外,并不收集任何数据。
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 RsiOPCAuto.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) 同步数据读写
MyOPCGroup.SyncRead nSource, ItemCount, lServerHandles, vtItemValues, lErrors
‘ 同步读取
for i= 1 to ItemCount
msgbox vtItemValues(i)’
读取的数可以根据自己的需要,灵活使用。
next i
MyOPCGroup.SyncWrite 1, lHandle(), vtItemValues, lErrors
‘ 同步写入
若只读取数据,可以使用 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) 异步数据读写
MyOPCGroup.AsyncRead ItemCount, TempServerHandles, ErrorNr, TransactionID, CancelID
‘ 异步读取
读取的结果由OPC服务器通过IconnectionPointContainer接口配合IOPCDataCallback接口反调用应用程序的事务处理程序:
Private Sub MyOPCGroup_AsyncReadComplete(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date, Errors() As Long)
這里的参数ClientHandles和AddItems方法中的ClientHandles是对应的,用于判断哪一个OPC Item在被读取。TransactionID:客户端自由使用,应用程序开发商自定义;Errors():记录服务器返回的信息。
MyOPCGroup.AsyncWrite 1,TempServerHandles,VValue, ErrorNr, TransactionID, CancelID
‘ 异步写入
同样,AsyncWrite也对应一个事务处理程序:
Private Sub MyOPCGroup_AsyncWriteComplete(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, Errors() As Long)
(6) 断开 OPC 服务器
MyOPCServer.OPCGroups.RemoveAll
‘ 移除所有 OPC Group
Set MyOPCGroup = Nothing
‘空出资源
MyOPCServer.Disconnect
‘ 断开连接
5、结束语
通过OPC技术,软件开发者可以无需了解硬件的实质和操作过程,只要遵循OPC规范进行客户端的开发,就能够读写OPC服务器中的数据。利用该技术,软件开发者可以充分发挥自己的特长,把更多的精力投入到程序功能的开发上, 从而大大简化了整个软件系统的开发过程, 提高了开发效率, 并且系统的可靠性、 稳定性和灵活性也得到了充分的保障。
【参考文献】
1 崔丽丽. 徐进学.基于OPC 技术的客户端数据采集软件包设计[J]. 沈阳工业大学学报. 2005. 27 (5):553-557.
2 童爱红.Visual Basic 6.0程序员指南[M].清华大学出版社. 2008:35-94
3 Allen-Bradley SLC500TM模块化硬件结构.安装使用手册.