-> Hier kostenlos registrieren
Schon zum zweiten Mal habe ich den Fall, dass mein Programm oder die Steuerung sich aufhängt und nicht da weiter macht wo sie soll.
Dann hilft nur noch komplettes übersetzen der Software (Analog zum Klassiker im TIA WinCC wenn z.B. ein Button nicht mehr funktioniert hilft nur noch komplett übersetzen).
Programmiert ist alles in SCL und alles sind nicht optimierte Bausteine.
Hier der Programmausschnitt wo der Aufhänger war:
Erklärung zum Ausschnitt:
Programmiert wurde mit state machines wo jeder Anlagenteil seinen eigenen Ablauf hat damit man eben undefinierte Zustände vermeiden kann. In diesen state 9 ("DeckDB".data[#deck].state = 9) wird nur an einem Ort gewechselt und dass das passiert ist nur möglich wenn die gleiche state machine im state 5 ist und eine weitere Vorbedingung erfüllt ist. Daher kann ausgeschlossen werden dass dieser Integervalue ständig hin und her springt, es ist de facto so dass er im state 9 ist.
Die Bedingung dass der state Wechsel in einen anderen state erfolgt ist einzig der Bool-Rückgabewert von "DeckmoveRef"(belt := #deck). Und ich glaube hier befindet sich der Hänger, denn diese Funktion wird nicht aufgerufen obwohl sie aufgerufen werden sollte.
Ich habe die Möglichkeit mein Programm zurückzusetzen (über eine weitere Funktion) wo halt das ganze Aufstart-Prozedere abläuft jedoch blieb ich immer wieder in diesem state 9 hängen. Es kann auch ausgeschlossen werden dass der verwendet index #deck einen Wert hat womit die Funktion "DeckmoveRef"(belt := #deck) nichts anfangen kann.
Da die Anlage schnellst möglich wieder laufen musste kam mir leider nicht in den Sinn DeckmoveRef() woanders auf zu rufen um zu schauen was passiert. Als ich nämlich ausschließen konnte dass nichts hin und her springt war mir klar dass ich die Software komplett übersetzen muss, denn was ähnliches hatte ich schon mal.
Daher meine Frage ob da jemand ähnliche Erfahrungen gemacht hat? Es kann nicht sein dass ich die Software komplett übersetzen muss und damit die SPS in Stopp bringe und zugleich noch alle Datenbausteine mit ihren Startwerten initialisiere.
Dann hilft nur noch komplettes übersetzen der Software (Analog zum Klassiker im TIA WinCC wenn z.B. ein Button nicht mehr funktioniert hilft nur noch komplett übersetzen).
Programmiert ist alles in SCL und alles sind nicht optimierte Bausteine.
Hier der Programmausschnitt wo der Aufhänger war:
Code:
...
ELSIF "DeckDB".data[#deck].state = 9 THEN // Belt referencing
IF "DeckmoveRef"(belt := #deck) THEN
"stateChange"(p_dst_state := 3,
p_state := "DeckDB".data[#deck].state);
"DeckOutfeedDB".deck[#deck].h_doorClose := true;
END_IF;
...
Erklärung zum Ausschnitt:
Programmiert wurde mit state machines wo jeder Anlagenteil seinen eigenen Ablauf hat damit man eben undefinierte Zustände vermeiden kann. In diesen state 9 ("DeckDB".data[#deck].state = 9) wird nur an einem Ort gewechselt und dass das passiert ist nur möglich wenn die gleiche state machine im state 5 ist und eine weitere Vorbedingung erfüllt ist. Daher kann ausgeschlossen werden dass dieser Integervalue ständig hin und her springt, es ist de facto so dass er im state 9 ist.
Die Bedingung dass der state Wechsel in einen anderen state erfolgt ist einzig der Bool-Rückgabewert von "DeckmoveRef"(belt := #deck). Und ich glaube hier befindet sich der Hänger, denn diese Funktion wird nicht aufgerufen obwohl sie aufgerufen werden sollte.
Ich habe die Möglichkeit mein Programm zurückzusetzen (über eine weitere Funktion) wo halt das ganze Aufstart-Prozedere abläuft jedoch blieb ich immer wieder in diesem state 9 hängen. Es kann auch ausgeschlossen werden dass der verwendet index #deck einen Wert hat womit die Funktion "DeckmoveRef"(belt := #deck) nichts anfangen kann.
Da die Anlage schnellst möglich wieder laufen musste kam mir leider nicht in den Sinn DeckmoveRef() woanders auf zu rufen um zu schauen was passiert. Als ich nämlich ausschließen konnte dass nichts hin und her springt war mir klar dass ich die Software komplett übersetzen muss, denn was ähnliches hatte ich schon mal.
Daher meine Frage ob da jemand ähnliche Erfahrungen gemacht hat? Es kann nicht sein dass ich die Software komplett übersetzen muss und damit die SPS in Stopp bringe und zugleich noch alle Datenbausteine mit ihren Startwerten initialisiere.