用VB开发OPC客户端程序的步骤与实现 点击:5235 | 回复:16



opcfan

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:62帖 | 58回
  • 年度积分:0
  • 历史总积分:667
  • 注册:2004年9月29日
发表于:2007-02-12 12:36:00
楼主
(1)建立新工程或项目,在“工程”菜单下选择“引用”,如图5-3所示。只有引用OPCDAAuoto.DLL后,在程序中才能创建服务器对象,然后进行一系列的操作。
 
(2)在弹出的引用窗口里单击“浏览(B)…”按钮,弹出添加引用窗口,选择OPCDAAuoto.DLL文件。

(3)在引用窗口里的OPC Automation 2.0前面打钩,按“确定”按钮。

(4)定义全局变量,这样可以在窗体的任何方法的代码内应用。变量类型应该指定为对象型。这些对象最好在窗体的通用部分声明加上“Option Explicit”语句,表示模块里的所有变量都需要显式声明。由于OPC自动化接口的数组的索引要求必须从1开始,而系统默认是从0开始,为了避免错误最好在代码的最初加上“Option Base 1”语句。为了使对象可以处理事件,必须将objTestGrp和objServer的声明中加上“WithEvents”语句,表示声明的对象可以响应事件。
Option Explicit
Option Base 1
Dim WithEvents objServer As OPCServer
Dim objGroups As OPCGroups
Dim WithEvents objTestGrp As OPCGroup
Dim objItems As OPCItems

(5)连接OPC服务器和建立OPC组
考虑到代码的可反复使用性,采用子程序进行编程。
Sub Connect(strProgID As String, Optional strNode As String)
    If objServer Is Nothing Then
        ' 建立一个OPC服务器对象
        Set objServer = New OPCServer
    End If
服务器状态ServerState属性一共有OPCRunning、OPCFailed、OPCNoconfig、OPCSuspended、OPCTest和OPCDisconnected六个值,分别表示正在运行、失败、没有配置、暂停、测试和没有连接六种OPC服务器当前的状态。如果OPC服务器没有连接,我们才执行objServer.Connect strProgID, strNode语句。strProgID就是ProgID,strNode就是用于远程通信的IP地址。
If objServer.ServerState = OPCDisconnected Then
        ' 连接OPC服务器
        objServer.Connect strProgID, strNode
   End If
在Visual Basic中,通过执行一个Set操作实现调用其它接口的方法。
   If objGroups Is Nothing Then
        ' 建立一个OPC组集合
        Set objGroups = objServer.OPCGroups
    End If
    If objTestGrp Is Nothing Then
        ' 添加一个OPC组
        Set objTestGrp = objGroups.Add("Group")
    End If
End Sub

(6)添加OPC标签
对服务器进行访问前,必须先在OPC组里添加要访问的OPC标签。OPC客户端程序要按照用户指定的标签或者从组态文件里读取需要添加的OPC标签。
Sub AddItem()
    Dim strItemIDs(17) As String
    Dim lClientHandles(17) As Long
    Dim lErrors() As Long
    Dim I As Integer
    If objTestGrp Is Nothing Then
        Exit Sub
    End If    
    If Not objItems Is Nothing Then
        If objItems.Count > 0 Then
            Exit Sub
        End If
    End If
    ' 设置组活动状态。只有处于活动状态的OPC才进行定期的数据更新。非活动状态的OPC组,除了在接到显然的数据读写要求外,并不收集任何数据。
    If mnuSubscribtion.Checked = True Then
        objTestGrp.IsActive = True
    Else
        objTestGrp.IsActive = False
    End If
    ' 启动组异步通知。进行订阅的OPC组可以自动收到从服务器送来的数据变化通知。
    objTestGrp.IsSubscribed = True
    ' 建立OPC项集合
    Set objItems = objTestGrp



jdclang_1

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 8回
  • 年度积分:0
  • 历史总积分:18
  • 注册:2007年5月08日
发表于:2007-12-18 18:14:00
1楼
hao hao  hao 

tigermu

  • 精华:6帖
  • 求助:0帖
  • 帖子:175帖 | 5410回
  • 年度积分:0
  • 历史总积分:19807
  • 注册:2003年1月19日
发表于:2007-12-18 21:16:00
2楼
不错,不知道OPCDAAuoto.DLL这个文件是vb自带的还是需要在哪里下载?

youhm

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 709回
  • 年度积分:0
  • 历史总积分:2593
  • 注册:2005年2月16日
发表于:2007-12-19 08:40:00
3楼
下面引用由tigermu在 2007-12-18 21:16:00 发表的内容:
  不错,不知道OPCDAAuoto.DLL这个文件是vb自带的还是需要在哪里下载?
--------------------------------------------------------------------------------------------
这个VB当然不会带了,一般安装OPC类软件都有,也可直接安装OPC环境,就是这些必须的库

tigermu

  • 精华:6帖
  • 求助:0帖
  • 帖子:175帖 | 5410回
  • 年度积分:0
  • 历史总积分:19807
  • 注册:2003年1月19日
发表于:2007-12-19 21:34:00
4楼
哦,是这样。那么直接安装OPC环境怎么安装呢?是在OPC的网站有吗?不熟悉这个,见谅!

昆仑摩勒

  • 精华:1帖
  • 求助:1帖
  • 帖子:32帖 | 446回
  • 年度积分:0
  • 历史总积分:1058
  • 注册:2004年11月22日
发表于:2007-12-20 09:42:00
5楼
你去搜索一个opc need 是一个压缩包,里面有谢dll,运行里面批处理就可以安装opc环境了

ranranplay

  • 精华:1帖
  • 求助:0帖
  • 帖子:18帖 | 382回
  • 年度积分:0
  • 历史总积分:773
  • 注册:2005年9月27日
发表于:2007-12-23 11:27:00
6楼
在OPC基金网站上有下载

龙志明

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 91回
  • 年度积分:0
  • 历史总积分:381
  • 注册:2006年5月03日
发表于:2008-02-26 22:28:00
7楼
谢谢了,正好学习一下

lzwwell

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2008年3月17日
发表于:2009-01-07 10:52:38
8楼
mnuSubscribtion是什么东西啊?

FDD1997

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 935回
  • 年度积分:0
  • 历史总积分:1082
  • 注册:2008年12月20日
发表于:2009-01-07 11:24:10
9楼

学习了,没看懂?有详细的资料吗?

Hitin

  • 精华:0帖
  • 求助:2帖
  • 帖子:53帖 | 1291回
  • 年度积分:0
  • 历史总积分:2115
  • 注册:2006年12月30日
发表于:2009-01-09 14:03:55
10楼

收藏了                    

赵久发

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 81回
  • 年度积分:0
  • 历史总积分:317
  • 注册:2004年10月13日
发表于:2009-01-09 14:08:13
11楼
学习了,那天照着你这个写个看能不能用,使用OPC开发上位软件就是方便啊,不用知道协议~~~

mengshujin

  • 精华:0帖
  • 求助:0帖
  • 帖子:15帖 | 170回
  • 年度积分:0
  • 历史总积分:802
  • 注册:2003年4月22日
发表于:2009-01-13 17:00:17
12楼
hao hao vb

[明月夜]

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2009-05-07 15:49:54
13楼

OPCDAAuoto.DLL  上开发OPC客户端,我用C++BUILDER6编过,结果别人的OPC SERVER是S7-200的PC ACCESS1。0,

失败了,令我傻眼了,但用KEPWARE的OPC通用客户程序却能成功了,为何我的没有通用性呢?

我发现,原来有的OPC SERVER厂家,不一定用OPCDAAuoto.DLL ,是失败的原因,我不得不重新找别人的

OPC 客户程序模拟,终于成功了。

cjrong

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 22回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2009年12月13日
发表于:2010-05-25 13:51:09
14楼

学习了,不过我一般用串行通信

sssaaa900

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 75回
  • 年度积分:0
  • 历史总积分:106
  • 注册:2018年11月29日
发表于:2018-11-29 11:01:16
15楼

学习OPC中,有资源必下

Kione

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 16回
  • 年度积分:0
  • 历史总积分:105
  • 注册:2019年4月17日
发表于:2019-04-17 16:28:05
16楼

请问OPCDAAuoto.DLL在哪可以下载呢?


热门招聘
相关主题

官方公众号

智造工程师