Nordischerjung
Level-2
- Beiträge
- 843
- Reaktionspunkte
- 116
-> Hier kostenlos registrieren
Moin,
mein Kunde hat ne ältere Anlage, mit der er ab und an Probleme hat bzw. die SPS geht in den Stopp.
Es komt dann der folgender Fehler im Diagnosepuffer.
Bei Gehe zu.. komme ich an die rot makierte Stelle
NW1
NW2
NW3
NW4
Kann man das iwie abfangen?
Kann es sein das die Var "#Formnester_ohne_erstes" negativ ist und es dashalb zu diesem Überlauf kommt?
Diese Var wird hier berechnet
und wenn da nun mal eine 0 drin steht würde sie ja negativ werden.
Oder wovon kann das sonst kommen? Es ist nicht oft, vielleicht 1-2 x im Jahr oder so
mein Kunde hat ne ältere Anlage, mit der er ab und an Probleme hat bzw. die SPS geht in den Stopp.
Es komt dann der folgender Fehler im Diagnosepuffer.
Code:
Ereignis 1 von 100: Ereignis-ID 16# 4562
STOP durch Programmierfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden )
Unterbrechungstelle im Anwenderprogramm: Zyklisches Programm (OB 1)
Prioritätsklasse: 1
FB-Nummer: 11
Bausteinadresse: 186
Bisheriger Betriebszustand: RUN
Angeforderter Betriebszustand: STOP (intern)
interner Fehler, kommendes Ereignis
16:24:03.890 16.02.2021
(Kodierung: 16# 4562 FF84 8E70 0101 000B 00BA)
Ereignis 2 von 100: Ereignis-ID 16# 2523
Bereichslängenfehler beim Schreiben
###0 Zugriffsadresse: 0
Angeforderter OB: Programmierfehler-OB (OB 121)
Prioritätsklasse: 1
interner Fehler, kommendes Ereignis
16:24:03.880 16.02.2021
(Kodierung: 16# 2523 0179 0000 0000 0000 0000)
Bei Gehe zu.. komme ich an die rot makierte Stelle
NW1
Code:
AUF #DB_zum_Speichern //Positionsspeicher DB öffnen
LAR1 P#0.0 //Pointer auf Anfangsadresse im DB
L 20 //Anzahl Schleifen übergeben max 20 Werte im DB
M000: T #Loop_Zaehler
L L#0 //zu schreibender Wert
T DBD [AR1,P#0.0] //in das entsprechende DBD schreiben
+AR1 P#4.0 //+ 4.0, da DINT
L #Loop_Zaehler //Zähler wieder Laden und incrementieren
LOOP M000
NW2
Code:
L #Abstand
T #Temp_Abstand
AUF #DB_zum_Speichern //Positionsspeicher DB öffnen
LAR1 P#4.0 //Pointer auf Anfangsadresse im DB hier erst das 2.DBD,da das 1.DBD 0 ist
L #Formnester_ohne_erstes //Anzahl Schleifen übergeben
M001: T #Loop_Zaehler
L #Temp_Abstand //zu schreibender Wert
T DBD [AR1,P#0.0] //in das entsprechende DBD schreiben
[COLOR=#ff0000] +AR1 P#4.0 //+ 4.0, da DINT[/COLOR]
L #Abstand
L #Temp_Abstand //Temp_Abstand um eine Position erhöhen
+D
T #Temp_Abstand
L #Loop_Zaehler //Zähler wieder Laden und incrementieren
LOOP M001
NW3
Code:
AUF #DB_zum_Speichern //Positionsspeicher DB öffnen
LAR1 P#80.0 //Pointer auf Anfangsadresse Offset im DB
L 20 //Anzahl Schleifen übergeben max 20 Werte im DB
M002: T #Loop_Zaehler
L L#0 //zu schreibender Wert
T DBD [AR1,P#0.0] //in das entsprechende DBD schreiben
+AR1 P#4.0 //+ 4.0, da DINT
L #Loop_Zaehler //Zähler wieder Laden und incrementieren
LOOP M002
NW4
Code:
AUF #DB_zum_Speichern //Positionsspeicher DB öffnen
LAR1 P#160.0 //Pointer auf Anfangsadresse Offset im DB
L 20 //Anzahl Schleifen übergeben max 20 Werte im DB
M005: T #Loop_Zaehler
L L#0 //zu schreibender Wert
T DBD [AR1,P#0.0] //in das entsprechende DBD schreiben
+AR1 P#4.0 //+ 4.0, da DINT
L #Loop_Zaehler //Zähler wieder Laden und incrementieren
LOOP M005
Kann man das iwie abfangen?
Kann es sein das die Var "#Formnester_ohne_erstes" negativ ist und es dashalb zu diesem Überlauf kommt?
Diese Var wird hier berechnet
Code:
L #Anzahl_Formnester (DINT)
L L#1
-D
T #Formnester_ohne_erstes (DINT)
und wenn da nun mal eine 0 drin steht würde sie ja negativ werden.
Oder wovon kann das sonst kommen? Es ist nicht oft, vielleicht 1-2 x im Jahr oder so