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

分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

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客户端设置界面。此外我们还设计了城市供水监控系统,鉴于篇幅,监控界面不再一一列出。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

原文地址:https://www.cnblogs.com/sownchz/p/10500195.html

时间: 2024-11-10 10:57:51

基于OPC技术的上位机与PLC之间的通信的相关文章

上位机与机器人之间如何利用Ethernet/IP进行数据交互,包括寄存器信息和IO信息

请教下,上位机与机器人之间如何利用Ethernet/IP进行数据交互,包括寄存器信息和IO信息. 我按提示封装的CIP报文 返回的信息有错: request:  读取寄存器的值(也不知道是不是这样读的) response:  返回信息提示 Path  destination unknown (我查了错误代码,意思是request path 有错) 请大神指教,获取寄存器的方法有错吗

最新发布: 9台PLC之间Modbus通信实例(1主8从)

这是[PLC无线通讯专家]团队为用户提供的一个西门子S7-200PLC的通讯程序,该用户需要进行9台S7-200之间的MODBUS协议通讯,他对通讯不太熟悉,为了尽快交付工程,请求我们工程师为其编写参考程序,我们协助客户对此程序进行了现场调试.考虑到许多用户会在项目中遇到类似问题,我们免费分享这个程序,希望能为您的工程节约大量时间.关于源程序文档密码请参阅以下内容. 第一部分.场景描述 在工厂内方圆500米范围内,分布有9台S7-200的PLC,我想实现它们之间的相互通信.因为设备是小车,一直在

基于webRTC技术 音频和视频,IM解

由于原来的文章 http://blog.csdn.net/voipmaker  转载注明出处. 基于WebRTC技术可实现点对点音视频.即时通信.视频会议.最新的系统组件包含: TeleICE NAT 穿越server: 基于标准的NAT穿越协议 ICE,实现NAT穿越,音视频p2p传输 单台机器支持上万并发 TeleMCU 视频会议server: 实现webrtc 视频会议server能力 同一个会议可接入sip视频client. webrtcclient.pstn 线路. TeleMedia

基于webRTC技术的 音视频,IM解决方案

本文原创自 http://blog.csdn.net/voipmaker  转载注明出处. 基于WebRTC技术可实现点对点音视频.即时通信.视频会议,最新的系统组件包括: TeleICE NAT 穿越服务器: 基于标准的NAT穿越协议 ICE,实现NAT穿越,音视频p2p传输 单台机器支持上万并发 TeleMCU 视频会议服务器: 实现webrtc 视频会议服务器能力 同一个会议可接入sip视频客户端. webrtc客户端,pstn 线路. TeleSwitch  webrtc网关服务器: 负

关于OPC连接读写下位机PLC(转)

原文转自:http://blog.csdn.net/u012252959/article/details/49736285?locationNum=11 开发OPC客户端程序时,首先应该生成OPC服务器支持的OPC对象,然后就可以使用OPC对象支持的属性和方法,对其进行各种操作.这样使得客户程序可以像使用自己支持的数据和功能一样,去使用服务器对象支持的数据和功能.在VisualBasic6.0里,是以对象为单位对OPC服务器进行访问的.通过OPC自动化服务器的对象模型,可以得知OPC自动化接口由

[自娱自乐] 4、超声波测距模块DIY笔记(四)——终结篇·基于C#上位机软件开发

前言 上一节我们已经基本上把超声波硬件的发射和接收模块全部做好了,接下来我们着手开发一个软硬结合的基于C#的平面定位软件! 目录 一.整体思路 二.效果提前展示 2-1.软件部分展示 2-2.硬件部分展示 三.基于C#的客户端软件说明 3-1.整体框架介绍: 3-2.部分技术细节介绍 3-2-1.串口操作 3-2-2.JiSuan函数说明及核心算法介绍 四.阶段小结 五.相关链接 一.整体思路 >_<" 如下图,利用我们上三节开发的超声波发射与接收设备构成一个:2固定接收头+1可移动

基于uFUN开发板的心率计(三)Qt上位机的实现

前言 上两周利用周末的时间,分别写了基于uFUN开发板的心率计(一)DMA方式获取传感器数据和基于uFUN开发板的心率计(二)动态阈值算法获取心率值,介绍了AD采集传感器数据和数据的滤波处理获取心率值.这篇文章主要是介绍Qt上位机如何实现波形的显示,串口数据的解析,以及一些小细节实现.这篇文章写完,uFUN心率计这个小项目就算结束了,最近又做了个uFUN开发板的扩展板,在微信群里的朋友都已经看到了,后面会做一些好玩的东西,大家要保持关注哈! 关于Qt Qt是一个1991年由Qt Company开

基于FPGA的测频系统+上位机

[1]本设计的要求: 利用FPGA实现频率计,要求2秒内测出外部频率,并且2秒更新一次值: 实现100MHz频率的测量: 测量结果通过串口921600bps发送给PC: 发送格式为:FFCB0176543210,其中FFCB01为帧头,76543210(即0x76543210)为频率值,数据在上位机中转换成十进制并用合适的单位(MHz.KHz.Hz)表示: 完善上位机. [2]现在就来说说我是如何实现上述条件的.对于第一个条件"2秒内测出频率并2秒更新一次",很明显这是连续.实时的测量

基于CAN总线的汽车诊断协议UDS(上位机开发驱动篇)

本篇作为UDS上位机的驱动开发篇,从市面上多见的CAN分析仪着手介绍UDS上位机驱动开发和移植的一般过程,目的是使UDS上位机软件能适应多家CAN分析仪,降低使用者的硬件成本. 一:广成CAN分析仪的驱动开发 首先创建ECANDLL类,从广成提供的二次开发包中获取ECANVCI.dll文件,将DLL文件放置与生成程序的目录中,如下类中创建了CAN常用的控制函数. public static class ECANDLL { [DllImport("ECANVCI.dll", EntryP