转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
用VB编写OPC客户端访问WINCC         ★★★★

用VB编写OPC客户端访问WINCC

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1311 更新时间:2009/4/23 18:59:38
Private Sub MyOPCGroupOut_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)

''''产生要通知下一级的数据变化,根椐不再的控件有不同的处理

 

   For ii = 1 To NumItems

    WatchDataWriteValue(ClientHandles(ii) - 1) = ItemValues(ii) ''''对改变的值读入本数组

   Next ii

End Sub

对OPC的写可以有同步与异步之分,对于大量的数据传输,异步是更佳的选择,但对少量的数据传输,同步表现得更好。

   要进行数据传输,先要将值数据进行赋值,注意:值数据要由0开始,也就是说,值数组与标签数据不是一、一对应,值要比标签前一位,这一点,在WINCC说明中没有,但在我的实际的使用中一直要这样,不然数据就产生错位,看下面程序。

这是一个拔号完毕后返回的数据进行OPC传递的程序。包含解包过程,

Private Sub showSuccess(msg As String)

    Dim location As String

    Dim nowTime As String

    Dim logStr As String

    Dim Value() As String

    Dim ii, temp As Integer

    Dim isPack As Boolean

    Dim sHead, sDelimited, sTail As String

   

    location = xProfile.GetValue(WatchPoint(nowRunID), "LOCATION")

    nowTime = Now

    logStr = "拔" & location & "取数成功" & msg

    xLog1.log logStr

    logStr = " " & msg

    xLog2.log logStr               ''''记录数据

    ''''数据上传

    ''''如果有包结构,则显示包结构,

    isPack = xProfile.GetValue(WatchPoint(nowRunID), "ISRECHEAD")

    If WatchPointRBegin(nowRunID) < 0 Then Exit Sub

    If isPack Then

       sHead = xProfile.GetValue(WatchPoint(nowRunID), "RECHEAD")

       sDelimited = xProfile.GetValue(WatchPoint(nowRunID), "RECDELIMITER")

       sTail = xProfile.GetValue(WatchPoint(nowRunID), "RECEND")

        Value = Split(msg, sDelimited)

        For ii = 0 To UBound(Value) - 1

           temp = WatchPointRBegin(nowRunID) + ii

           If temp > WatchPointREnd(nowRunID) Then Exit For

           WatchDataReadValue(temp - 1) = Value(ii + 1)                       ''''VALUE要从0开始,比ITEM少1,所以减一。  有包头,占去一位,向后延一

        Next ii

    Else

        WatchDataReadValue(WatchPointREnd(nowRunID) - 1) = msg

    End If

    MyOPCGroupIn.SyncWrite ReadItemIdex, ServerHandlesIn, WatchDataReadValue, ErrorsIn          ''''数据上传

    ''''记录上次成功执行的时间

    xProfile.SetValue WatchPoint(nowRunID), "LASTTIME", nowTime

End Sub

三、OPC连接断开。

OPC客户端连接后要占用服务器资源,所以如果不需要使用OPC时,必须进行OPC连接断开。

断开的程序相当简单,释放资源即可。如下,

Sub StopClient()

    On Error Resume Next

 

  ''''----------- 释放组和服务器对象

 

  MyOPCGroupColl.RemoveAll

 

  ''''----------- 与服务器断开连接并且清除

 

  MyOPCServer.Disconnect

 

  Set MyOPCItemCollIn = Nothing

  Set MyOPCItemCollOut = Nothing

 

  Set MyOPCGroupIn = Nothing

  Set MyOPCGroupOut = Nothing

 

  Set MyOPCGroupColl = Nothing

 

  Set MyOPCServer = Nothing

 

End Sub

但在实际的使用中发现,频繁的连接与断开,将使服务器的资源被大量的消耗,最终让服务器出错。所以尽量减少无谓的OPC连接与断开。

结语:

   OPC的使用是作为一个DCOM在使用,所以OPC客户端可以网络上任一计算机运行,但你必须配置DCOM的访问权限,如果你不想费神,把服务器与客户端都用相同的用户名与密码登录就成了。如果想配置DCOM,请参看DCOM的配置。

 

 

参考资料:

  《WinCC在线帮助》

     

 

作者简介:

顾恺,高级程序员,湖南大学毕业,曾从事过LINUX的内核研究,从事过企业信息化平台的开发,当前从事SCADA的开发,主要将各种不同类型的远程设备通过同一手段进行数据采集,并集成到企业信息化平台中去。喜欢将工作中的一些积累形成文字。

上一页  [1] [2] 


[VB.NET程序]利用ODBC访问WINCC的历史数据库  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台