紫外工控论坛

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3401|回复: 0

[OPC技术] S7 200 OPC与VB 通信程序

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

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

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

x
2.3 编写OPC客户端应用程序
    VB简单实用,是比较理想的OPC应用程序快速开发工具,若要用VB开发OPC应用程序,必须要使用OPC自动化包装器,这在前文已经提过,这种包装器一般由OPC服务器的供应商以DLL形式提供,下面就以SIEMENS提供的sopcdaauto.dll为例,介绍如何开发OPC应用程序,这也正是笔者在最近的工程中实际应用到的,这是基于DA2.0的版本。
首先,新建VB工程后,作图四所示的引用:

2.3.1 建立OPC对象




  1.    首先申明OPC对象:
  2. Option Base 1
  3. Dim WithEvents ServerObj As OPCServer  'OPC Server对象,连接OPC服务器
  4. Dim GroupsObj As OPCGroups          'OPC Groups对象,添加OPC组
  5. Dim WithEvents GroupObj As OPCGroup  'OPC Group对象
  6. Dim ItemsObj As OPCItems             'OPC Item集合
  7. Dim ServerHandles() As Long           '服务器端OPC Item的句柄
  8. Dim ClientHandles() as Long            '客户端OPC Item的句柄
  9. Dim ItemId(2) As String
  10. Dim Errors() As Long
  11. 接下来,生成各个对象:
  12. If ServerObj Is Nothing Then Set ServerObj = New OPCServer
  13. '连接OPC服务器
  14. If ServerObj.ServerState = OPCDisconnected Then
  15. ServerObj.Connect ("OPC.SimaticNET") '假设OPC服务器运行在本机
  16.   End If
  17. If GroupsObj Is Nothing Then Set GroupsObj = ServerObj.OPCGroups
  18. If GroupObj Is Nothing Then Set GroupObj = GroupsObj.Add
  19. If ItemsObj Is Nothing Then Set ItemsObj = GroupObj.OPCItems
  20. GroupObj.IsActive = True     '设置组为活动状态
  21. '假设有两个数据源,一个是8位开关量输入,一个是8位开关量输出
  22. ItemId(1) = "S7:[S7 connection_1]IB0"
  23. ItemId(2) = "S7:[S7 connection_1]QB0"
  24. ClientHandles(1) = 1
  25. ClientHandles(2) = 2
  26. '添加组项目,ServerHandles数组的值为各个OPC Item的服务器句柄,
  27. ' ClientHandles数组的值为各个OPC Item的客户端句柄,由应用程序设定
  28. Call ItemsObj.AddItems(2, ItemId, ClientHandles, ServerHandles, Errors)
  29.    
  30. 2.3.2异步数据读取
  31. ' OPC Item的服务器句柄,添加OPC Item时由服务器分配
  32. Dim TempServerHandles(1) As Long
  33. '事务标志符,由客户端产生,它包含的信息提供给OnReadComplete事件
  34. Dim TransactionID As Long
  35. '取消标志符,服务器端产生,用于操作需要被取消的时候
  36. Dim CancelID As Long
  37. '包含读取每个OPC Item时返回的信息     
  38. Dim ErrorNr() As Long
  39. TempServerHandles(1) = ServerHandles(1) '对应第一个OPC Item
  40. GroupObj.AsyncRead 1, TempServerHandles, ErrorNr, TransactionID, CancelID

  41.   第一个参数是要读的OPC Item的个数,这里只含有一个OPC Item。读取的结果由OPC服务器通过IconnectionPointContainer接口配合IOPCDataCallback接口反调用应用程序的事务处理程序:
  42. Private Sub GroupObj_AsyncReadComplete(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date, Errors() As Long)
  43. 这里的参数ClientHandles和AddItems方法中的ClientHandles是对应的,用于判断哪一个OPC Item在被读取。其它参数的说明如下:
  44. TransactionID:客户端自由使用,应用程序开发商自定义;
  45. NumItems:表示读取的OPC Item的个数;
  46. ItemValues():各个OPC Item连接的数据源的值,类型为Variant;
  47. Qualities():OPC Item的品质值;
  48. TimeStamps():时间戳;
  49. Errors():记录服务器返回的信息。
  50. 2.3.3 异步数据写入
  51. Dim TempServerHandles (1) As Long
  52. Dim VValue(1) As Variant
  53. Dim ErrorNr() As Long
  54. Dim TransactionID As Long
  55. Dim CancelID As Long
  56. TempServerHandles(1)=ServerHandles(2)
  57. VValue(1)=1'假设要将“1”写入ClientHandle为2的OPC Item
  58. GroupObj.AsyncWrite 1,TempServerHandles,VValue, ErrorNr, TransactionID, CancelID

  59.    同样,AsyncWrite也对应一个事务处理程序:
  60. Private Sub groupObj_AsyncWriteComplete(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, Errors() As Long)
  61. 它的参数的含义和AsuncReadComplete中的含义是类似的,这里一般需要处理的是写数据之后的返回状态,这里不再赘述。
  62. 2.3.4断开与服务器的连接
  63.    ItemsObj.Remove ItemsObj.Count,ServerHandles, Errors '清除OPC Item
  64.     Set ItemsObj = Nothing  '释放资源,下同
  65.     If Not GroupObj Is Nothing Then
  66.         GroupsObj.Remove  GroupObj.ServerHandle  '删除组
  67.     End If
  68.     If Not GroupsObj Is Nothing Then
  69.         Set GroupsObj = Nothing
  70.     End If
  71.     If Not ServerObj Is Nothing Then
  72.         If ServerObj.ServerState <> OPCDisconnected Then
  73.             ServerObj.Disconnect '断开与服务器的连接
  74.         End If
  75.         Set ServerObj = Nothing
  76.     End If
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


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

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

GMT+8, 2024-5-4 06:17 , Processed in 0.343750 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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