RiseOfTheNorthstar
Level-1
- Beiträge
- 5
- Reaktionspunkte
- 0
-> 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.
https://www.sps-forum.de/simatic/28455-cpu-fehlermeldung-unklar.html
Ich steh gerade auf dem Schlauch und erkenne eigentlich den Fehler gerade nicht...
Vielleicht könntet Ihr mir da weiterhelfen.
Grüße
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.
https://www.sps-forum.de/simatic/28455-cpu-fehlermeldung-unklar.html
Ich steh gerade auf dem Schlauch und erkenne eigentlich den Fehler gerade nicht...
Vielleicht könntet Ihr mir da weiterhelfen.
Grüße