紫外工控论坛

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3618|回复: 2

[OPC技术] 基于OPC 技术的上位机与S7-200 系列PLC通讯的实现

[复制链接]
冰糖 发表于 2010-12-13 21:01:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
摘要:介绍了OPC 技术及其数据访问方式,在此基础上提出了基于OPC 技术开发监控软件的方案,并简单介绍了系统的组成。利用OPC 技术在VB 中实现了上位机与S7-200PLC 的实时通讯,并提供了详细的开发步骤及关键代码。该方法具有一定的代表性,已成功应用于某稀油站监控系统,目前系统运行可靠,效果良好。
  关键词:OPC;数据访问;VB;监控系统
  0 引言
  随着自动控制技术和计算机技术的进一步融合,计算机在自动控制系统中发挥着不可替代的作用。工业控制中的各种仪器、仪表、PLC 和单片机系统等都提供了与计算机的通讯协议,从而为计算机控制系统的设计提供了极大地方便。传统的计算机应用软件通过其内部的驱动程序来建立与现场设备的通讯从而存取设备数据信息,这就要求对每一种设备开发相应的驱动程序集成到应用软件中,造成应用软件规模的庞大,且不利于维护[1]。OPC 技术就是在这种背景下产生的。
  
  1 OPC 技术概述
  
  OPC 规范提出了一套统一的标准,它采用典型CLIENT/SERVER 模式,将软件开发分为客户端和服务器两部分。针对硬件设备的驱动程序由硬件厂商或专门的软件公司完成,并提供具有统一接口标准的SERVER 程序,软件厂商只需按照OPC 规范编写CLIENT 程序访问服务器程序,即可实现与硬件设备的通信[2]。OPC 技术为自动化层的现场设备与上位机应用程序之间的数据交换提供了一个理想的方法。客户与服务器的关系.
  在这种应用模式下,上位机应用程序只需要开发一个符合OPC 规范的客户端接口就可以与各种各样的硬件设备进行数据交换,不需要关心它们遵守的是何种通讯协议,以何种方式进行连接。
  OPC 客户端与OPC 服务器交互包括两个方面:客户端程序从服务器读取数据以及客户端向服务器写入数据。OPC 规范中数据访问方法有同步访问、异步访问两种方式。同步数据访问是OPC 服务器按照OPC 客户的要求得到数据访问结果作为方法的引数返回给OPC 客户,OPC 客户程序在结果返回之前一直处于等待状态。异步数据访问是OPC 服务器接到OPC 客户端的要求后,几乎立即将方法返回。当OPC服务器完成数据访问时,触发OPC 客户程序的异步访问完成事件,将数据访问结果传送给OPC 客户端。另外还有一种订阅式数据采集,这种方式实质是异步访问的一种方式。服务器按照一定的周期更新服务器数据缓冲区的数值,如果发现数值发生变化,就以数据变化事件通知OPC客户端,自动将数据回传到客户端。采用这种方式可以减轻OPC 服务器和客户端的负担,在实际中一般常用此方式。
  
  2 监控系统分析
  
  本文以某煤矿风机稀油站监控为实例基于OPC 技术开发上位机应用软件。控制系统由上位计算机、PLC、各种传感器构成,其中西门子S7-226PLC 作为主控制器,完成各种信号的控制、传递,实现手动和自动两种控制方式;模拟量输入模块EM235 实时采集稀油站油箱油压、油温、液位等模拟量信号。根据稀油站的监控要求,利用VB 编写OPC 客户端应用程序,建立友好的人机交互界面,在界面上实时显示系统各种参数,同时还可以对PLC进行操作以实现远程控制功能。
  系统中所用的OPC 服务器是S7-200 PC Access 软件,它是西门子公司推出的专为连接S7-200 系列PLC 而开发的OPC 服务器,它从现场数据源PLC 获取数据,然后向标准的OPC客户端提供数据信息。
3 OPC 客户端接口程序开发
  
  3.1 开发环境
  
  无论开发者还是最终使用者都必须安装OPC 代理/存根(Proxy/Stub)DLL 文件[4],并进行环境设置。这些文件(opc_aeps.dll,opccomn_ps.dll,opchda_ps.dll,opcproxy.dll,aprxdist.exe,opcenum.exe)可以从OPC 基金会网站下载。建立VB 项目之后,首先要在VB 开发环境中,在菜单的“项目”→“引用”中添加OPC 自动化包装库OPC Automation 2.0。
  
  3.2 开发流程及关键代码
  
  1.   第一步:变量声明
  2. Option Explicit ‘所有变量需要显式声明
  3. ‘关键字WithEvents 表明对象支持事件
  4. Dim WithEvents ServerObj As OPCServer
  5. Dim objGroups As OPCGroups ‘组集合对象,用于添加OPC 组集合
  6. Dim WithEvents objGroup As OPCGroup ‘组对象,创建OPC 组实例
  7. Dim objItems As OPCItems ‘项集合对象,用于添加OPC 项集合
  8. Dim lServerHandles() As Long ‘定义数组保存OPC 项的服务器句柄
  9. Dim lTransID_Rd As Long ‘异步用的事务标识符,用于读取
  10. Dim lTransID_Wt As Long ‘异步用的事务标识符,用于写入

  11.   第二步:连接OPC 服务器和建立OPC 组
  12. Sub Connect(strProglD As String,Optional strNode As String)
  13. If Serverobj Is Nothing Then
  14. Set Serverobj=New OPCServcr ‘创建一个OPC 服务器对象
  15. End If
  16. If Serverobj.ServerState=OPCDinsconnected Then
  17. Serverobj.Connect S7200.OPCServer ‘连接本地OPC 服务器S7200.OPCServer
  18. End If
  19. If objGroups Is Nothing Then
  20. Set objGroups=Serverobj.OPCGroups ‘创建一个OPC 组集合
  21. End If
  22. If objGroup Is Nothing Then
  23. Set Groupobj=objGroups.Add(”MyGroup”) ‘添加一个OPC 组对象
  24. End If

  25.   第三步:添加OPC 项
  26. 对服务器进行访问前,必须先在OPC 组里添加要访问的OPC 项。本例子中,程序按照
  27. 需求从OPC 服务器中浏览标签项,并添加到已建立的组MyGroup 中。
  28. Sub AddItem()
  29. Dim strItemIDs(8) As String
  30. Dim lClientHandles(8) As Long
  31. Dim lErrors() As Long
  32. Dim I As Integer
  33. objGroup.IsActive = True ‘设置组活动状态
  34. objGroup.IsSubscribed = False ‘取消组异步通知
  35. Set objItems = objGroup.OPCItems ‘建立OPC 标签集合
  36. For I = 1 To 8 ‘生成从TAG1 到TAG8 的项标识符
  37. strItemIDs(I) = "TAG" & I
  38. lClientHandles(I) = I
  39. Next I
  40. ‘添加OPC 标签项
  41. Call objItems.AddItems(8, strItemIDs, _lClientHandles, lServerHandles, lErrors)
  42. End Sub

  43.   第四步:数据读写
  44. 在进行异步访问前,必须建立异步用的通信通路。使用这个通信通路,OPC 服务器可
  45. 以回调OPC 应用程序的事件处理程序,以通知数据访问的结果。通信通路的建立方法是改
  46. 变OPC 组的属性,把OPC 组的“IsSubscribed”属性设置为True,即objGroup.IsSubscribed
  47. = True
  48. Sub Async_Read() ‘异步读取数据
  49. Dim lErrors() As Long
  50. lTransID_Rd = lTransID_Rd + 1
  51. objTestGrp.AsyncRead 8, lServerHandles, _lErrors, lTransID_Rd, lCancelID_Rd
  52. End Sub
  53. Sub Async_Write() ‘异步写入数据
  54. Dim lHandle() As Long
  55. lTransID_Wt = lTransID_Wt + 1
  56. objTestGrp.AsyncWrite 1, lHandle(), vtItemValues, _lErrors, lTransID_Wt, lCancelID_Wt
  57. End Sub
  58. 为了使订阅方式的数据采取有效,必须将OPC 组以及OPC 标签的“IsActive”属性设
  59. 置为True,然后在程序中加入如下代码:
  60. Private Sub objTestGrp_DataChange(ByVal TransactionID As Long, _ByVal NumItems As
  61. Long, ClientHandles() As Long, ItemValues() As Variant, _Qualities() As Long, TimeStamps()
  62. As Date)

  63.   第五步:断开OPC 服务器
  64. 退出前必须先断开与服务器连接,否则OPC 服务器使用的计算机资源不会被释放,这
  65. 样的问题反复发生,连续运转的系统会使计算机资源逐渐枯竭从而发生严重问题[5]。
  66. Sub Disconnect()
  67. Itemobjs.Remove ‘清除所有OPC 项对象
  68. Set ItemObjs = Nothing
  69. GroupActive.Enabled = False ‘组活动状态设为不活动
  70. ServerObj.OPCGroups.RemoveAll ‘清除所有的OPC 组对象
  71. Set Groupobjs=Nothing
  72. ServerObj.Disconnect ‘调用Disconnect 方法,断开与服务器的连接
  73. Set Serverobj=Nothing
  74. End sub
复制代码
  
游客,如果您要查看本帖隐藏内容请回复
  5 结束语
  
  OPC 协议是一种通用的标准协议,可以很方便地连入其他综合监控系统,增强了系统的灵活性和可扩充性,并可节约软件成本。实际应用表明,基于OPC 技术的监控系统实时性好,可靠性高,组态灵活方便,并且可以通过局域网甚至Internet 实现多台上位机的监控,极大地扩展了监控系统的使用范围。

本计算机论文来自专业的理工论文网,如需转载请保留连接:计算机专业毕业论文

[参考文献] (References)
[1]郭会娟,王涛等. OPC 技术在小型监控系统中的应用[J]. 控制系统,2009, 25(5),46-47.
[2] OPC Foundation. Data Access Custom Interface Standard, Version 3.00 March 4, 2003.
[3]周晓平,姜建芳等. S7-200 系列PLC 与监控计算机通信实现的研究[J]. 微计算机信息,
[4] 潘武平. 基于OPC 协议的数据通信[D]. 北京:北京化工大学, 2004.
[5]周新民,涂铮. 基于OPC 技术的PC 与S7-200PLC 的实时通信[J]. 武汉理工大学学报,2008,32(2), 354-357.
[6]石林锁,王涛,刘顺波. 基于OPC 规范的客户应用程序实现[J]. 微计算机信息, 2003, 19 (5), 68-70.

siwd23 发表于 2012-9-16 15:56:44 | 显示全部楼层
OPC对于PLC初学者一般是比较陌生的  我来支持一下
心跳 发表于 2013-8-29 15:43:22 | 显示全部楼层
大神有没有V#开发pc access的源代码啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


--------------------------------------------------------------------------------------------------------------------
本站是工控技术交流站点,论坛内容均为网络收集或会员所发表,并不代表本站立场,会员拥有该内容的所有权力及责任!
本站内容如有侵犯您的版权,请按下面方式联系本站管理员,我们将及时删除处理
管理员:冰糖 QQ:5483695(请直击主题), Mail:admin#ziwai.net(#改成@) 其它非本人.
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!

QQ|Archiver|手机版|小黑屋|紫外工控论坛. ( 苏ICP备11032118号-1 )

GMT+8, 2024-4-19 17:43 , Processed in 0.375002 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表