#81 Zugriffsverletzung

asbald
2010-09-20
2023-08-17
  • asbald - 2010-09-20

    Hallo,
    seit ein paar Tagen geht unsere Steuerung sporadisch in den Stop-Betrieb.
    Steuerungs IPC der Firma Kuhnke mit Codesys V2.3.
    Mit dem Programmiertool lässt sich diese auch nicht mehr starten.
    Beim einloggen kommt folgende Meldung (Siehe auch Anhang): #81: Zugriffsverletzung in 'Access Violation Task = <mainmachine>'.
    Leider finde ich mit dieser Meldung keinen Bezug zu unserem Programm.
    Es ist ein zyklischer Task konfiguriert -> MainMachine.</mainmachine>

    Grüße
    asbald

    IMG: PLC Error.jpg

     
  • asbald - 2010-09-21

    Nach weiterer Recherche bin ich nun einen kleinen Schritt weiter.
    Falls der Fehler noch einmal auftritt so kann ich in Codesys unter Online -> Aufrufhierachie... den Fehler zumdmidest eingrenzen.
    Hier sollte zumidest der Baustein angezeigt werden in dem es zu einem Fehler kam. Nun heist es abwarten.
    Geholfen hat mir das Dokument (CoDeSys SP RTE.pdf).

     
  • asbald - 2010-09-23

    Über die Aufrufhierachie bin ich nun ein Stück weiter.

    Der Fehler scheint im FB DIAGGETBUSSTATE stattzufinden.

    Anbei ein Screenshot.

    Hier sind zwei boolsche Variablen mit Invalid gekennzeichet.

    Hat hierzu jemand eine Idee ?

    IMG: DIAGGETBUSSTATE.JPG

     
  • lothar - 2010-09-25

    Hallo,

    "Zugriffsverletzung" bedeutet, dass hier versucht wurde, Speicherbereiche zu schreiben bzw. zu lesen, die nicht geschrieben/gelesen werden dürfen, bzw. gar nicht existieren.
    Sowas kan passieren z.B. bei Pointerzugriffen, wenn die Pointer falsch bzw. nicht initialisiert sind, oder bei Zugriffen auf Arrays, wenn man versehentlich die Arraygrenzen überschreitet.
    Trifft man nun bei einer solchen Fehladressierung z.B. eine Speicherstelle (Byte), in welcher eigentlich eine boolsche Variable abliegen sollte, und manipuliert dadurch dieses Speicherbyte so, dass weder 2#00000000 (False), noch 2#11111111 (True) drin steht, meldet das der Monitor als "Invalid".
    Um die Adressierungsfehler im Programm zu lokalisieren, stehen diverse Check-Funktionen zur Verfügung. In diesem Fall bieten sich erstmal CheckBounds und CheckPointer an, siehe Online-Help. In diese Funktion kann man z.B. einen Haltepunkt setzen, um dann per Aufrufhierarchie diejenigeProgrammzeile zu ermitteln, die die Adressbereichsüberschreitung verursacht.

    Gruss
    lothar

     

Log in to post a comment.