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

Ergebnis 1 bis 5 von 5

Thema: Fehler(Zeigerfehler?)in AWL Programm, Hilfe zum Ereignis 2x25

  1. #1
    Registriert seit
    04.02.2013
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen, ich habe folgendes Problem. Wenn ich mein AWL Programm auf der CPU 412-1 ablaufen lasse,
    dann geht die CPU unter umständen in den INTF Modus. Wenn ich nun den Fehlerspeicher auslese, kommt folgendes:
    Falsche Bereichskennung: 0
    FB-Nummer 1000
    Bausteinadresse: 1204
    Angeforderter OB: Programmierfehler-OB (OB 121)
    OB nicht vorhanden oder gesperrt oder nicht startbar im aktuellen Betriebszustand
    interner Fehler, kommendes Ereignis
    Hilfe zum Ereignis 2x25
    Ursache:
    Sie haben bei der bereichsübergreifenden registerindirekten Adressierung einen unzulässigen Oparandenbereich verwendet.
    Die Bereichskennung der Zugriffsadresse (Bit 24-31) ist unzulässig
    Behebung:
    Verwenden Sie eine Pointer mit korrekter Bereichskennung

    Ein Ausschnitt aus meinem Programm:
    .....
    L #IN_DBNr_ArchivKurve //Eingang der Nummer des Archivierungs DBs
    T #TEMP_DBNr_ArchivKurve //Transferiere in Tempären Speicher
    L P##IN_Pointeradresse //Lade Startadresse Pointer
    LAR1 //Speichern im Adressregister von P#0.0
    L D [AR1,P#4.0] //Lade Bereichszeiger
    LAR1 //Speichern im Adressregister
    TAR1 MD 4 //Lade Zeiger Inhalt in MD 4(dient als Zeiger Speicher)
    .....
    CALL "BLKMOV" //zum besetzen wird dazu die SFC 20 BLKMOV aufgerufen
    SRCBLK :=P#DB4000.DBX 0.0 REAL 1201 //diese holt aus dem DB4000(welcher als 0en Speicher fungiert) die 1201 Werte
    RET_VAL:=#OUT_RET_BLKMOV
    DSTBLK :=P#DB1100.DBX 0.0 REAL 1201 //und kopiert Sie in den DB1100
    ......
    LAR1 MD 4 //Lade wieder den Zeiger ins Adressregister AR1
    AUF DB [#TEMP_DBNr_ArchivKurve] //Lade DB wo die Messwerte gespeichert werden sollen.

    L #Messgroesse_1 //Nimm den aktuellen Messwert und speichere im paassendne Arrayindex (+0 Offset) ab
    T D [AR1,P#0.0]
    L #Messgroesse_2 //Nimm den aktuellen Messwert und speichere im paassendne Arrayindex (+1600 Offset) ab
    T D [AR1,P#1600.0]
    L #Messgroesse_3 //Nimm den aktuellen Messwert und speichere im paassendne Arrayindex (+3200 Offset) ab
    T D [AR1,P#3200.0]
    L #Messzyklus
    T DBD 4800
    +AR1 P#4.0 //Zähle das Adressregister um 4Byte hoch
    TAR1 MD 4 //Speicher den Pointer in MD4, damit er für den nächsten FB aufruf gesichert ist.
    ......

    Vielleicht noch kurz mal zur Funktion. Es sollen verschiedene Messgrößen in einem Prüfvorgang, bei bestimmten Ereignissen gespeichert werden.
    Wenn der Prüfvorgang beendet ist, soll der Speicher für die Messgrößen mit dem BLKMOV mit 0en initialisiert werden und der nächste Prüfvorgang
    beginnt nach einer gewissen Pause.
    Ich habe auch mal die Suche benutzt und da ist das Problem vielleicht beim SFC20 zu suchen.
    CPU Fehlermeldung unklar
    Ich steh gerade auf dem Schlauch und erkenne eigentlich den Fehler gerade nicht...
    Vielleicht könntet Ihr mir da weiterhelfen.
    Grüße
    Zitieren Zitieren Fehler(Zeigerfehler?)in AWL Programm, Hilfe zum Ereignis 2x25  

  2. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Irgendetwas relaventes hast du uns in deinem Programmauszug vorenthalten.

    Am Ende erhöhst du den Zeiger im AR1 und sicherst ihn ins MD4.
    Am Anfang des Bausteins wird aber das MD4 immer wieder mit dem Bereichszeiger aus #IN_Pointeradresse überschrieben. So wie es dasteht würde der Zeiger immer auf die gleiche Adresse zeigen, oder was steht an diesem Parameter dran?

    Warum überhaupt das Rummachen mit MD4, wenn es ein FB ist?

  3. #3
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von RiseOfTheNorthstar Beitrag anzeigen
    L P##IN_Pointeradresse //Lade Startadresse Pointer
    LAR1 //Speichern im Adressregister von P#0.0
    L D [AR1,P#4.0] //Lade Bereichszeiger
    Der Offset P#4.0 erscheint mir hier falsch.
    Wenn IN_Pointeradresse vom Datentyp Pointer ist, müsste es P#2.0 lauten.

    Wenn möglich zeig mal den gesamten Baustein.

  4. #4
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Der Offset P#4.0 erscheint mir hier falsch.
    Wenn IN_Pointeradresse vom Datentyp Pointer ist, müsste es P#2.0 lauten.

    Wenn möglich zeig mal den gesamten Baustein.
    Thomas, der ist doch geheim
    Vermutlich hast du recht.

    Doch ich würde den Bereich mit dem Fill leer machen, warum da noch einmal eine Baustein öffnen und in einen anderen Baustein schreiben?
    Denn ob das so funktioniert, wie ich es hier lese, bezweifele ich. Kann funktionieren, muss aber nicht und ein Step 7 habe ich hier nicht zum testen.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  5. #5
    Registriert seit
    04.02.2013
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Der Offset P#4.0 erscheint mir hier falsch.
    Wenn IN_Pointeradresse vom Datentyp Pointer ist, müsste es P#2.0 lauten.

    Wenn möglich zeig mal den gesamten Baustein.
    Hi, danke für die schnelle Antwort. Also ich denke du hast recht mit dem Pointer und der Änderung auf P#2.0.
    Zu deiner Frage ob der Baustein immer mit Adresse 0 initialisiert wird, kann ich sagen, dass dies nur bei bestimmten definierten Ereignissen gemacht wird.

    Zitat Zitat von bike Beitrag anzeigen
    Thomas, der ist doch geheim
    Vermutlich hast du recht.

    Doch ich würde den Bereich mit dem Fill leer machen, warum da noch einmal eine Baustein öffnen und in einen anderen Baustein schreiben?
    Denn ob das so funktioniert, wie ich es hier lese, bezweifele ich. Kann funktionieren, muss aber nicht und ein Step 7 habe ich hier nicht zum testen.


    bike
    Möglicherweise hast du mit dem Baustein Fill recht. Ich schau mal was sich da machen lässt.

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 05.11.2012, 19:42
  2. Fehler im Programm.... Bitte um Hilfe
    Von blubb12345 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 13.04.2012, 19:05
  3. Brauche Hilfe bei AWL-Programm
    Von shiznit im Forum CODESYS und IEC61131
    Antworten: 21
    Letzter Beitrag: 28.04.2011, 21:35
  4. Hilfe bei Programm AWL
    Von e_huellen im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 08.04.2007, 05:13
  5. Antworten: 7
    Letzter Beitrag: 09.08.2005, 10:17

Lesezeichen

Berechtigungen

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