用户登录用户注册 我要留言繁體中文
设为首页
加入收藏
联系我们
您当前的位置:PLC家园 -> PLC教程首页 ->AB PLC -> 教程内容
用VB编写OPC客户端通过RSLINX访问SLC
作者:plczone  来源:本站整理  发布时间:2011-12-1 22:07:10  发布人:admin
OPC是一个工业标准,它是由一些世界上著名的自动化系统和硬件、软件公司和Microsoft(微软)紧密合作而建立的。O代表OLE(对象链接和嵌入)P (process过程)C (control控制)OLE已从面向对象重新定义为基于对象并更名为Active XOPC的使用是作为一个DCOM在使用,所以OPC客户端可以网络上任一计算机运行,但你必须配置DCOM的访问权限,如果你不想费神,把服务器与客户端都用相同的用户名与密码登录就成了。如果想配置DCOM,请参看DCOM的配置。RSlinx集成的OPC(OLE for process control)服务器使得过程数据可由其它应用程序(OPC客户机)访问。在安装RSlinx时提供了OPC的客户端控件: Rockwell Software OPC Automation(C:\Program Files\Common Files\Rockwell\RsiOPCAuto.dll)本例就是用VB通过对这个控件进行操作,来实现对SLC内存标签的读写访问。 本例编写如下测试梯形图:

在RSlinx中建立驱动,配置OPC服务器,见下图,并让以上梯形图运行。

 

VB程序如下:

'OPC是一个工业标准,它是由一些世界上著名的自动化系统和硬件、软件公司和Microsoft(微软)紧密合作而建立的。
'O代表OLE(对象链接和嵌入),P (process过程),C (control控制)。OLE已从面向对象重新定义为基于对象并更名为Active X。
'OPC的使用是作为一个DCOM在使用,所以OPC客户端可以网络上任一计算机运行,但你必须配置DCOM的访问权限,
'如果你不想费神,把服务器与客户端都用相同的用户名与密码登录就成了。如果想配置DCOM,请参看DCOM的配置。

'RSlinx集成的OPC(OLE for process control)服务器使得过程数据可由其它应用程序(OPC客户机)访问。
'RSlinx在安装时提供了OPC的客户端控件: Rockwell Software OPC Automation(C:\Program Files\Common Files\Rockwell\RsiOPCAuto.dll)
'这个控件就是我们在VB中要用到的控件。

'一、OPC的连接
'   先在工程中"引用" Rockwell Software OPC Automation,然后开始定义全局变量。
'我们要首先定义OPC服务类型与计算机结点名。定义OPC组与OPC标签组。并定义OPC的标签数组与值数,注意,值数组一定要设为Variant。

Const ServerName = "RSLINX OPC Server"              'OPC的类型
Const NodeName = "SMZ"                              '结点名,即计算机名
Dim WithEvents MyOPCServer As OPCServer             'OPC服务
Dim MyOPCGroups As OPCGroups
Dim WithEvents MyOPCGroup As OPCGroup               'OPC组
Dim MyOPCItems As OPCItems                          'OPC标签组
Dim ServerHandles() As Long                         '句柄
Dim Errors() As Long                                '错误句柄
Dim DataItem(100) As String                         '记录OPC的标签
Dim DataValue(100) As Variant                       '存放OPC的标签的值

Private Sub StartClient()
'在定义所有变量后,我们就要进行OPC连接了,要进行OPC连接之前,先要配置要访问的OPC标签名,
'我们DataItem中加入相应的标签名,注意:这两个数组必须由1开始,不能由0开始。
'配置好标签后就要进行OPC连接了。

    Dim ItemNum As Integer                      '标签个数
    Dim ClientHandles1(100) As Long             '先配置名柄索引,这将在读取OPC标签的值时可要用到
   
On Error GoTo HANDLEERROR
    '生成OPC对象
    Set MyOPCServer = New OPCServer
    MyOPCServer.Connect ServerName, NodeName
    Set MyOPCGroups = MyOPCServer.OPCGroups
    MyOPCGroups.DefaultGroupIsActive = True
    Set MyOPCGroup = MyOPCGroups.Add("MYGROUP")
    Set MyOPCItems = MyOPCGroup.OPCItems
   
    ItemNum = 5         'OPC标签个数,如果标签数量很多,可以考虑采用数据库方式
    DataItem(1) = "[NEW_TOPIC]B3:1"
    DataItem(2) = "[NEW_TOPIC]B3:2"
    DataItem(3) = "[NEW_TOPIC]T4:3.ACC"
    DataItem(4) = "[NEW_TOPIC]T4:3.EN"
    DataItem(5) = "[NEW_TOPIC]T4:3.DN"
   
    '进行OPC标签连接
    '对OPC的写可以有同步与异步之分,对于大量的数据传输,异步是更佳的选择,但对少量的数据传输,同步表现得更好。
    If ItemNum > 0 Then
        MyOPCItems.AddItems ItemNum, DataItem, ClientHandles1, ServerHandles, Errors
        MyOPCGroup.IsSubscribed = True
    End If
   
    '至此:OPC连接就成功了,我们可以对OPC进行读与写的操作了。
    Timer1.Enabled = True       '连接成功后,定时交换数据
    Exit Sub
   
HANDLEERROR:
    MsgBox Err.Description

End Sub

Private Sub Check1_Click(Index As Integer)
Dim B3bit(15) As Integer            'B3的16个位这里只要用到了0、1、4
Select Case Index
    Case 0:
        If Check1(0).Value = Checked Then Image1.Visible = True Else Image1.Visible = False
    Case 1:
        If Check1(1).Value = Checked Then Image4.Visible = True Else Image4.Visible = False
    Case 2:
        If Check1(2).Value = Checked Then Image3.Visible = True Else Image3.Visible = False
End Select
If Check1(0).Value = Checked Then B3bit(0) = 1 Else B3bit(0) = 0
If Check1(1).Value = Checked Then B3bit(1) = 2 Else B3bit(1) = 0
If Check1(2).Value = Checked Then B3bit(4) = 16 Else B3bit(4) = 0
DataValue(1) = B3bit(0) + B3bit(1) + B3bit(4)
MyOPCItems(1).Write DataValue(1)
End Sub

Private Sub Command1_Click()
    Command1.Enabled = False
    StartClient
End Sub

Private Sub Command3_Click()
    StopClient
    Unload Me
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Command3_Click
End Sub

Sub StopClient()
'OPC客户端连接后要占用服务器资源,所以如果不需要使用OPC时,
'必须进行OPC连接断开。断开的程序相当简单,释放资源即可。
'但在实际的使用中发现,频繁的连接与断开,将使服务器的资源被大量的消耗,
'最终让服务器出错。所以尽量减少无谓的OPC连接与断开。
    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

Private Sub Timer1_Timer()
'定时读取SLC内存内的标签值
    i = 1
    For Each aaa In MyOPCItems
        aaa.Read i, DataValue(i)
        i = i + 1
    Next
'根据标签的值,相应改变梯形图中各元件的状态
    Text1.Text = DataValue(3)
    If DataValue(2) = 1 Then
        Image5.Visible = True
        Image2.Visible = True
    Else
        Image5.Visible = False
        Image2.Visible = False
    End If
    If DataValue(4) = 1 Then Image6.Visible = True Else Image6.Visible = False
    If DataValue(5) = 1 Then Image7.Visible = True Else Image7.Visible = False
End Sub

[] [返回上一页] [打 印] [收 藏]
∷相关教程评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
用户名
分 值 100分 85分 70分 55分 40分 25分 10分 0分
说 明
  (注“”为必填内容。)
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情链接 - 网站地图
PLC家园 PLC工程师的乐园 PLC学习的好网站
版权所有:PLCZONE 沪ICP备09021707号