西门子OPC客户端的VB6代码示例?

时间:2011-11-24 13:35:34

标签: vb6 opc

我正在尝试更新一个古老的VB6项目,以便与远程OPC服务器进行通信。我已经安装了Siemens工具包,但我找不到有关如何在VB6中使用它的任何有用文档。 (与C#一起使用)

应用程序非常简单。我只需要连接到远程服务器并写入/读取单个地址。

我发现我假设的DatCon OCX控件处理通信,但是我试图手动输入的所有ServerName值都不起作用。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

向您的VB6项目添加对DLL或OCX(seimens工具包)的引用,然后使用对象浏览器浏览公开的对象。你经常可以弄清楚你需要做什么。

C#docs还应提供丰富的信息。如果库是一个COM库,你将使用它与VB6基本相同。

答案 1 :(得分:0)

自发布以来,我确实取得了一些进展。以下示例帮助我开始。

http://support.automation.siemens.com/WW/llisapi.dll?func=cslib.csinfo&objId=25229521&load=treecontent&lang=en&siteid=cseus&aktprim=0&objaction=csview&extranet=standard&viewreg=WW

这是我目前的代码。它并不多 - 只是与服务器联系并尝试写入一个值。我没有得到任何进一步的信息。我开始收到COM错误并认为安装很糟糕(我安装时遇到了问题)所以我决定重新安装。它没用。安装是不可能的。正在等待西门子的升级。

'
' OPC Communication
'
' Paul Ramsden 24.11.2011
'
'

Option Explicit
Option Base 1

Public MyOpcServer As OPCServer
Public ServerHandle As Variant

Private ServerName As String
Private ServerNode As String
Private TestGroup As OPCGroup
Private MyOpcItem As OPCItem
Private IsInitialised As Boolean


Public Sub InitialiseOPC()
    On Error GoTo ProcError
    IsInitialised = False

    Set MyOpcServer = New OPCServer
    ServerNode = "xyz.abc.10.101"
    ServerName = "OPC.SimaticNET.1"
    Dim LocalServers
    LocalServers = MyOpcServer.GetOPCServers(ServerNode)
    Dim tmp
    ServerHandle = ""
    For Each tmp In LocalServers
        If CStr(tmp) = ServerName Then
            Call MyOpcServer.Connect(tmp)
            MsgBox MyOpcServer.ServerNode & vbCr & MyOpcServer.ServerName & vbCr & MyOpcServer.ServerState
            ServerHandle = tmp
            Set TestGroup = MyOpcServer.OPCGroups.Add("TestGroup")
            Exit For
        End If
    Next

    If ServerHandle = "" Then
        MsgBox "Could not find server " & ServerName & " on " & ServerNode
    Else
        IsInitialised = True
    End If
ProcExit:
    Exit Sub

ProcError:
    MsgBox Err.Description
    Resume ProcExit
End Sub

Private Sub ClearGroup()
    Dim handles() As Long
    Dim errors() As Long

    Call TestGroup.OPCItems.Remove(TestGroup.OPCItems.Count, handles, errors)
End Sub

Public Sub WriteOPC(address As String, value As String)
    On Error GoTo ProcError
    Call ClearGroup
    Set MyOpcItem = TestGroup.OPCItems.AddItem(address, 2011)
    MyOpcItem.Write (value)
    Exit Sub

ProcError:
    MsgBox "Write error! " & Err.Description
End Sub

Public Function ReadOPC(address As String) As String
    On Error GoTo ProcError

    Call ClearGroup
    Set MyOpcItem = TestGroup.OPCItems.AddItem(address, 2011)
    Dim value As String
    ReadOPC = MyOpcItem.Read

ProcError:
    MsgBox "Read error! " & Err.Description
End Function

Public Sub TestOPC()
    InitialiseOPC
    WriteOPC "SIMATIC 300(1).CPU 315-2 DP.Q0_0TestAusgang1", "1"
End Sub