Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 25 von 25

Thema: OPC - Client programmieren mit Microsoft Visual Studio 2008

  1. #21
    Registriert seit
    27.10.2009
    Beiträge
    317
    Danke
    0
    Erhielt 64 Danke für 54 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Aber dass man mit VB6 programmieren muss kann ja fast ned sein
    nein man kann auch .NET nehmen dann wird es halt nur noch undurchsichtiger, denn das Erzeugen und Löschen von Objekten macht dann .NET und man selber steht doof da wenn man nicht sehen kann was und vor allem wann wirklich was passiert.

    In deinem Fall glaubt .NET das ein Objekt gecastet werden muss und das geht natürlich nicht, die Collection gibt es anscheinend nicht. Das Group Objekt soll Erzeugt werden (SET Befehl in VB6) und anschließend soll in dieses nagelneue Objekt eine Zuweisung ("=" Operator) stattfinden und es soll genau das zugewiesen werden was als Rückgabewert aus der Add()-Methode der Collection herauskommt, die am Serverobjekt hängt. Das geht in VB6 in einer Zeile, in .NET offenbar nicht.

    Da .NET das nicht kappiert wirst du dieser Supersprache etwas auf die Sprünge helfen müssen. Erst die Objekte (zu Fuß) erzeugen, dann (zu Fuß) initialisieren und wenn sie dann existieren kannst du hoffentlich auch Funktionen an ihnen aufrufen und etwas zuweisen.

    Also in VB6 würde dein Programm schon laufen.

    Ein Hinweis noch: ich habe gesehen das du die AddItem() Methode an der OPCItems Collection verwenden willst, wenn es bei einem Item bleibt ist das OK, wenn es aber mehrere Items werden sollen dann solltest du besser die AddItems (mit "s") Methode verwenden. Die hat zwar mehr Parameter aber diese Parameter brauchst du später sowieso (zum Read,Write,Remove, etc.)

  2. #22
    Registriert seit
    30.06.2010
    Beiträge
    3
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo zusammen,

    dieses Problem interessiert mich momentan auch, da mir VS2008 die gleiche Fehlermeldung liefert (übrigens auch mit WEb-IO und Windows 7 (32Bit)).

    Konnte schon jemand dass Problem erfolgreich lokalisieren und beheben?


    Gruß,
    Markus

  3. #23
    Registriert seit
    16.06.2010
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Juhu... ich hab meinen Fehler gefunden!!
    Mein opcdaauto.dll war zu alt! Ich hatte Version 2.0.1.0.
    Jetzt verwende ich 2.2.5.30. Damit geht es so wie wir zuerst dachten...
    (Wie bei vb6)

    Riesengroßes Dankeschön an Dr OPC für die Hilfe!!

    Grüße Imod

  4. #24
    Registriert seit
    27.10.2009
    Beiträge
    317
    Danke
    0
    Erhielt 64 Danke für 54 Beiträge

    Standard

    Na das hört sich doch super an, da passte die DLL wohl nicht zum RCW.

    Hier nochmal der gesamte Code eines Clients als Orientierung, habe ihn nicht getestet, sollte aber so ungefähr funktionieren bzw. einen Eindruck schaffen was man so beachten sollte.

    Code:
    Option Explicit
    Option Base 1
    
    Private WithEvents MyServer As OPCServer
    Private WithEvents MyGroup As OPCGroup
    'globals
    Dim MyProgID1 As String
    Dim MyNode1 As String
    Dim MyItemIDs() As String
    Dim MyServerHandles() As Long
    Dim vDataBuffer() As Variant
    
    ' the main program
    Private Sub Main()
    ' fill the ProgID of the Server
    MyProgID1="OPC.Sample.1"
    MyNode1="127.0.0.1"
    
    ' fill the ItemID wherever they come from, e.g. read from a file
    ReDim MyItemIDs(3)
    MyItemIDs(1)="Tag1" 
    MyItemIDs(2)="Tag45" 
    MyItemIDs(3)="Tag23" 
    
    ' now start the OPC Client
    Call MyConnect()
    
    '  the vDataBuffer(index) will always contain the latest value 
    ' ToDo: do something with the data
    
    ' don't forget to call MyDisconnect() in the Unload function
    
    End Sub
    
    ' this function connects and adds one group and all items
    Private Sub MyConnect()
    Dim Errors() As Long
    Dim CHs() As Long
    Dim i As Long
    Dim msgText As String
    
    On Error GoTo errorhandler
        'connect to server
        Set MyServer = New OPCServer
        msgText = "connecting to " & ProgID1
        Call MyServer.Connect(ProgID1, Node1)
        
        'add group 
        MyServer.OPCGroups.DefaultGroupUpdateRate = 1000
        Set MyGroup = MyServer.OPCGroups.Add()
        'disable callbacks
        MyGroup.IsActive = False
        MyGroup.IsSubscribed = False
        
        'add items 
        ReDim CHs(UBound(MyItemIDs))
        For i = 1 To UBound(MyItemIDs)
            CHs(i) = i
        Next
        msgText = "adding items to " & ProgID1
        Call MyGroup.OPCItems.AddItems(UBound(MyItemIDs), MyItemIDs, CHs, MyServerHandles, Errors)
       'check for errors
        For i = 1 To UBound(MyItemIDs)
            If Errors(i) <> 0 Then
                Call MsgBox("AddItems for " & MyItemIDs(i) & " failed: " & MyServer.GetErrorString(Errors(i)), vbCritical)
            End If
        Next
        ReDim vDataBuffer(UBound(MyItemIDs))
        
        ' enable the callbacks
        MyGroup.IsActive = True
        MyGroup.IsSubscribed = True
        
        Exit Sub
    errorhandler:
        Call MsgBox("ERROR when " & msgText, vbCritical)
        If Not MyServer Is Nothing Then Call MyDisconnect
    End Sub
    
    ' this function cleans up
    Private Sub MyDisconnect()
    On Error GoTo errorhandler
        'remove the groups
        If Not MyGroup Is Nothing Then
            MyServer.OPCGroups.RemoveAll
            Set MyGroup = Nothing
        End If
        'disconnect the server
        If Not MyServer Is Nothing Then
            Call MyServer.Disconnect()
            Set MyServer = Nothing
        End If
    
        Exit Sub
        
    errorhandler:
        Call MsgBox("Problems during disconnect", vbCritical)
    End Sub
    
    ' event handler when server shuts down
    Private Sub MyServer_ServerShutDown(ByVal Reason As String)
        Call MyDisconnect()
        Call MsgBox(MyServer.ServerName & vbCrLf & Reason, vbCritical)
    End Sub
    
    ' event handler receiving new data from the server
    Private Sub MyGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)
    Dim i As Long
    
    For i = 1 To NumItems
        'check the quality before using the value
        If Qualities(i) = 192 Then
            'do not make call to the server again inside this callback (only fill the data buffer)
            vDataBuffer(ClientHandles(i)) = ItemValues(i)
        End If
    Next
    
    End Sub
    Es braucht nur die ProgID es Servers und die Items befüllt werden und dann sind die Daten im DataBuffer.
    Geändert von Dr. OPC (28.07.2010 um 13:34 Uhr)

  5. Folgender Benutzer sagt Danke zu Dr. OPC für den nützlichen Beitrag:

    imod (15.07.2010)

  6. #25
    Registriert seit
    30.11.2010
    Beiträge
    1
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von imod Beitrag anzeigen
    Juhu... ich hab meinen Fehler gefunden!!
    Mein opcdaauto.dll war zu alt! Ich hatte Version 2.0.1.0.
    Jetzt verwende ich 2.2.5.30. Damit geht es so wie wir zuerst dachten...
    (Wie bei vb6)

    Riesengroßes Dankeschön an Dr OPC für die Hilfe!!

    Grüße Imod
    Hallo habe das gleiche Problem wie du... könntest du mir die opcdaauto.dll 2.2.5.30. mal zuschicken??

    schon mal vielen Dank.
    tn@solrosso.com

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 08.09.2011, 13:24
  2. Antworten: 18
    Letzter Beitrag: 05.12.2010, 16:27
  3. Microsoft Visual C# 2008 => Active X-Steuerelement
    Von Neger für alles... im Forum Hochsprachen - OPC
    Antworten: 6
    Letzter Beitrag: 30.06.2010, 12:41
  4. Libnodave and Visual Studio 2008
    Von Rick im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 12.10.2009, 22:47
  5. OPC Client in Visual Studio 2005 Express Anwendung
    Von mike_roh_soft im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 06.06.2008, 14:48

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •