Announcement

Collapse
No announcement yet.

Problem mit AccessViolationException

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit AccessViolationException

    Hallo Zusammen,

    ich bin dabei eine Software zu entwickeln mit der ich in Abhängigkeit von verschiedenen Zuständen in einer SPS Emails absetzen kann.
    Als Schnittstelle zur SPS dient ein OPC-Server. Bei der Verbindung zum OPC server kommt es immer mal wieder zu einem nicht reproduzierbaren Problem. Beim Anlegen eines neuen OPC Items tritt folgender AccessViolationException Fehler auf:
    Error1.jpg

    Mein OS ist Windows7 Professional. Ich arbeite mit Visual Studio 2010. Mein Code sieht wie folgt aus:

    Code:
    Public Class Watchdog
        Dim aServer As New OPCAutomation.OPCServer
        Public WithEvents aGroup As OPCAutomation.OPCGroup
        Public Item1 As OPCAutomation.OPCItem
        Public Items As OPCAutomation.OPCItem()
        Public ItemCount As Integer
        Dim Itemlist As New ArrayList
    
        'Bei Datenänderung wird 
        Private Sub aGroup_DataChange(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 aGroup.DataChange
            Dim Count As Integer
            'Label1.Text = Item1.Value
            Count = 0
            For Count = 0 To ItemCount - 1
                gvStatus.Rows(Count).Cells(0).Value = Items(Count).ItemID
                gvStatus.Rows(Count).Cells(1).Value = Items(Count).Value
                gvStatus.Rows(Count).Cells(2).Value = Items(Count).TimeStamp
    
                'Änderung der Zeilenfarbe
                If Items(Count).Value = "False" Then
                    gvStatus.Rows(Count).DefaultCellStyle.BackColor = Color.Green
                Else
                    gvStatus.Rows(Count).DefaultCellStyle.BackColor = Color.Red
                End If
    
    
            Next
        End Sub
    
    
        'Liest die EMSR Stellen ein und erstellt die Liste mit den zu überwachenden OPC Items
        Private Sub ReadEMSR()
    
            Dim Count As Integer
    
            Count = 0
            For Count = 0 To ItemCount - 1
                Items(Count) = aGroup.OPCItems.AddItem(Itemlist.Item(Count), Count) 'HIER TRITT DER FEHLER AUF
                gvStatus.Rows(Count).Cells(0).Value = Items(Count).ItemID
                gvStatus.Rows(Count).Cells(1).Value = Items(Count).Value
                gvStatus.Rows(Count).Cells(2).Value = Items(Count).TimeStamp
            Next
    
    
        End Sub
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            gvStatus.ColumnCount = 3
            gvStatus.Columns(0).Name = "EMSR Stelle"
            gvStatus.Columns(1).Name = "Wert"
            gvStatus.Columns(2).Name = "Zeitstempel"
    
    
            Dim aStreamReader As StreamReader
            Dim aCSVItem As String
    
            Try
                aStreamReader = New System.IO.StreamReader("C:\ERR.csv")
                Do
                    aCSVItem = aStreamReader.ReadLine
                    Itemlist.Add(aCSVItem & "/SMO")
                Loop Until (aCSVItem Is Nothing)
                aStreamReader.Close()
            Catch ex As Exception
    
            End Try
            ItemCount = Itemlist.Count - 1
            ReDim Items(ItemCount)
            For Count = 0 To ItemCount
                gvStatus.Rows.Add()
                gvStatus.Rows(Count).Cells(0).Value = Itemlist(Count).ToString
            Next
        End Sub
    
    
        Private Sub btConnect_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btConnect.Click
            'On Error GoTo ConnectionERR
            Call aServer.Connect("Freelance2000OPCServer.30")
            aGroup = aServer.OPCGroups.Add("Errors")
            aGroup.IsSubscribed = True
            aGroup.UpdateRate = 500
            'Item1 = aGroup.OPCItems.AddItem("MBIN1/SMO", 1)
            ReadEMSR()
            ToolStripStatusLabel1.Text = "Verbunden"
            Exit Sub
            'ConnectionERR:
            '       ToolStripStatusLabel1.Text = "Verbindungsfehler"
        End Sub
    
    
    
        Private Sub btDisconnect_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btDisconnect.Click
            On Error GoTo DisonnectionERR
            aServer.Disconnect()
            ToolStripStatusLabel1.Text = "Getrennt"
    
            'Änderung der Zeilenfarbe
            For Count = 0 To ItemCount
                gvStatus.Rows(Count).DefaultCellStyle.BackColor = Color.White
            Next
    
            Exit Sub
    DisonnectionERR:
            ToolStripStatusLabel1.Text = "Fehler beim Trennen"
        End Sub
    End Class
    Kann weiß jemand wodurch dieser Fehler entstehen kann? Was kann ich dagegen tun?

    Vielen Dank im Voraus für eure Hilfe!

    Gruß Stumpi
    Zuletzt editiert von stumpi_8; 03.12.2012, 14:06.

  • #2
    Ich gehe mal davon aus du hast den Code bereits debugged und gesehen das kein beteiligtes Object an dieser Stelle null ist ?

    Wie ist den 'OPCItems.AddItem' definiert? Ist ja vermutlich irgendein COM Zeug. Wenn das Count in der Übergabe ein Art Index/Position einer Liste ist solltest du mal genau prüfen ob dein COM Server bei Listen den 0 oder 1 basiert arbeitet.

    Comment


    • #3
      Hallo Ralf,

      vielen Dank für die schnelle Antwort.
      Das Count ist ein Handle. Wenn ich den bei 1 loslaufen lasse, tritt das Problem nicht mehr auf. (bis jetzt)
      Vielen Dank nochmal!
      Gruß Stumpi

      Comment


      • #4
        Hallo Ralf,

        leider zu früh gefreut. Das Problem tritt wieder auf.
        Woran könnte das noch liegen?
        Vielen Dank im Voraus für eure Hilfe!
        Gruß

        Comment


        • #5
          Leider bin ich mit dem Problem immer noch nicht weiter.
          Hat von euch vielleicht noch jemand eine Idee?

          Comment

          Working...
          X