OPC-Client Programmierrung

  • VB.NET
  • .NET (FX) 4.5–4.8

    OPC-Client Programmierrung

    Hallo zusammen,
    nach längerem Suchen im Internet bin ich auf dieses Forum gestoßen und habe mich angemeldet, mit der Hoffnung, dass mir hier vielleicht geholfen werden kann.

    Ich habe einen OPC-Client auf Basis des "OPC DA Automation Wrapper" programmiert (der im Grunde auch gut funktioniert). Jedoch habe ich folgendes Problem:
    Einige OPC-Items werden mithilfe einer DataChange Methode überwacht und wenn sich ein bestimmtes Item ändert, soll ein Wert in ein anderes geschrieben werden.

    Der Code dafür sieht folgendermaßen aus:


    Private Sub OnDataChange1(ByVal TransactionID As Integer, ByVal NumItems As Integer, ByRef ClientHandles As System.Array, ByRef ItemValues As System.Array, ByRef Qualities As System.Array, ByRef TimeStamps As System.Array) Handles MyOPCGroup1.DataChange

    For i As Integer = 1 To 1

    If Qualities(i) = OPCAutomation.OPCQuality.OPCQualityGood Then

    MyOPCQualitaetStatus = 1

    Select Case ClientHandles(i)

    Case 0

    CallWatchdog(CBool(ItemValues(i)))

    End Select

    ElseIf Qualities(i) = OPCAutomation.OPCQuality.OPCQualityBad Then

    MyOPCQualitaetStatus = 0

    Else

    MyOPCQualitaetStatus = 2

    End If

    Next

    End Sub




    Private Sub CallWatchdog(ByVal bValue As Boolean)

    Try

    If bValue Then

    MyOPCItems1(1).Write(True)

    ElseIf Not bValue Then

    MyOPCItems1(1).Write(False)

    End If

    Catch ex As Exception

    End Try

    End Sub




    Dabei Sind beide Items teil der gleichen OPCGroup. In diesem Fall wird das Item noch geschrieben, danach wird die DataChange Methode aber nicht mehr aufgerufen (obwohl sich die Daten noch ändern)
    Sind die Items (die geschrieben werden) nicht Teil der Gleichen Gruppe (welche von der DataChange Methode behandelt wird) funktioniert das ganze reibungslos.
    Also bei folgendem Code:


    Private Sub CallWatchdog(ByVal bValue As Boolean)

    Try

    If bValue Then

    MyOPCItems2(1).Write(True)

    ElseIf Not bValue Then

    MyOPCItems2(1).Write(False)

    End If

    Catch ex As Exception

    End Try

    End Sub



    Gibt es eine Möglichkeit den Umweg über 2 Gruppen zu umgehen?
    Für Hinweise und Hilfe wäre ich sehr dankbar. Ich tüftele jetzt schon seid mehreren Wochen an diesem Problem.
    Gruß TheDoor