0

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

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

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

任何人都可以帮忙吗?

4

2 回答 2

2

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

C# 文档还应该提供丰富的信息。如果该库是一个 COM 库,那么您将使用与 VB6 基本相同的方式来使用它。

于 2011-11-30T21:14:29.833 回答
1

自发帖以来,我确实取得了一些进展。下面的例子帮助我开始。

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
于 2011-12-01T06:11:12.020 回答