Majestic_1987
Level-1
- Beiträge
- 270
- Reaktionspunkte
- 22
-> Hier kostenlos registrieren
Hallo Liebe Forengemeinde,
ich suche gerade nach der Ursache für einen sporadisch auftretenden Fehler. Ich habe von mir geschriebene Programmteile in ein bestehendes Projekt eines Kollegen eingebunden. Der FB, welchen ich programmiert habe, handhabt den Datenaustausch mit einem MES-System. Dies wird intern über einen Zustandsautomaten gelöst. Aus dem FB heraus wird nicht auf irgendwelche Merker oder sonstiges zugegriffen (ja, das ist logisch...aber eben nicht für jeden).
Der Prozess in meinem FB wird durch eine Eingangsvariable (nennen wir sie bStart) angestoßen. Diese wird extern mit einem Merker verschaltet (er hat nur diese Verwendungsstellen) welcher im entsprechenden Schritt des übergeordneten Graph TRUE wird. Die Aktion ist nicht setzend.
Sobald mein FB seine Arbeit getan hat und im letzten Schritt steht, wird ein Ausgangsbit (nennen wir es bErfolg) auf TRUE geschaltet. Dieses Bit wiederum geht extern auf einen Merker, welcher einzige Transitionsbedingung für das Weiterschalten des Graphen in den nächsten Schritt ist. Auch dieser Merker hat nur die erwarteten Verwendungsstellen und wird nur aus meinem FB heraus beschrieben.
Bedingung für die Schrittkette in meinem FB, um vom letzten Schritt wieder in den ersten zu gelangen ist: Letzter Schritt aktiv UND bErfolg = TRUE UND NICHT bStart
Der Logik folgend sollte folgendes (in eben dieser Reihenfolge) passieren:
1. Graph geht in Schritt X
2. Merker wird TRUE
3. bStart wird folglich auch TRUE
4. FB tut seinen Job
5. Letzter Schritt wird aktiv
6. bErfolg wird TRUE
7. Der andere Merker wird folglich auch TRUE
8. Graph wechselt in Schritt X+1
9. Durch die Deaktivierung von Schritt X wird der Merker wieder FALSE
10. Folglich wird bStart auch FALSE
11. Damit ist die Bedingung für den Sprung in den ersten Schritt im FB erfüllt
12. Letzter Schritt im FB wird inaktiv, erster wird aktiv.
Das funktioniert auch. In 99 Fällen. In einem Fall jedoch (der eben sporadisch auftritt) bleibt Schritt X im Graph einfach ewig aktiv...während der FB seine Bearbeitung angestoßen und beendet hat, das bErfolg-Bit TRUE wurde und der FB auch erfolgreich in den ersten Schritt zurückgesprungen ist. WAS ja eigentlich nicht auftreten KANN weil die Bedingung im FB lautet: Start-Bit zurückgenommen, was wiederum erst passiert, wenn die übergeordnete Schrittkette eine erfolgreiche Bearbeitung signalisiert bekommen hat.
WTF?
Ich sollte vielleicht erwähnen, dass dieser Fehler NUR in dieser einen Station auftritt. In 2 weiteren Stationen läuft der Prozess fehlerfrei und wie gewollt. Das ist auch der Grund, weswegen mir langsam aber sicher die Ideen ausgehen, woran es liegen könnte. Daher auch dieser Thread. Vielleicht ist jemandem von euch mal etwas ähnliches passiert und ihr habt ne Idee, was da Phase sein könnte...und ich BETE dafür, dass nicht irgendwer irgendwo in diesem Programm indirekt auf "meinen" Merkerbereich adressiert (vielleicht sogar auch noch aus Versehen).
ich suche gerade nach der Ursache für einen sporadisch auftretenden Fehler. Ich habe von mir geschriebene Programmteile in ein bestehendes Projekt eines Kollegen eingebunden. Der FB, welchen ich programmiert habe, handhabt den Datenaustausch mit einem MES-System. Dies wird intern über einen Zustandsautomaten gelöst. Aus dem FB heraus wird nicht auf irgendwelche Merker oder sonstiges zugegriffen (ja, das ist logisch...aber eben nicht für jeden).
Der Prozess in meinem FB wird durch eine Eingangsvariable (nennen wir sie bStart) angestoßen. Diese wird extern mit einem Merker verschaltet (er hat nur diese Verwendungsstellen) welcher im entsprechenden Schritt des übergeordneten Graph TRUE wird. Die Aktion ist nicht setzend.
Sobald mein FB seine Arbeit getan hat und im letzten Schritt steht, wird ein Ausgangsbit (nennen wir es bErfolg) auf TRUE geschaltet. Dieses Bit wiederum geht extern auf einen Merker, welcher einzige Transitionsbedingung für das Weiterschalten des Graphen in den nächsten Schritt ist. Auch dieser Merker hat nur die erwarteten Verwendungsstellen und wird nur aus meinem FB heraus beschrieben.
Bedingung für die Schrittkette in meinem FB, um vom letzten Schritt wieder in den ersten zu gelangen ist: Letzter Schritt aktiv UND bErfolg = TRUE UND NICHT bStart
Der Logik folgend sollte folgendes (in eben dieser Reihenfolge) passieren:
1. Graph geht in Schritt X
2. Merker wird TRUE
3. bStart wird folglich auch TRUE
4. FB tut seinen Job
5. Letzter Schritt wird aktiv
6. bErfolg wird TRUE
7. Der andere Merker wird folglich auch TRUE
8. Graph wechselt in Schritt X+1
9. Durch die Deaktivierung von Schritt X wird der Merker wieder FALSE
10. Folglich wird bStart auch FALSE
11. Damit ist die Bedingung für den Sprung in den ersten Schritt im FB erfüllt
12. Letzter Schritt im FB wird inaktiv, erster wird aktiv.
Das funktioniert auch. In 99 Fällen. In einem Fall jedoch (der eben sporadisch auftritt) bleibt Schritt X im Graph einfach ewig aktiv...während der FB seine Bearbeitung angestoßen und beendet hat, das bErfolg-Bit TRUE wurde und der FB auch erfolgreich in den ersten Schritt zurückgesprungen ist. WAS ja eigentlich nicht auftreten KANN weil die Bedingung im FB lautet: Start-Bit zurückgenommen, was wiederum erst passiert, wenn die übergeordnete Schrittkette eine erfolgreiche Bearbeitung signalisiert bekommen hat.
WTF?
Ich sollte vielleicht erwähnen, dass dieser Fehler NUR in dieser einen Station auftritt. In 2 weiteren Stationen läuft der Prozess fehlerfrei und wie gewollt. Das ist auch der Grund, weswegen mir langsam aber sicher die Ideen ausgehen, woran es liegen könnte. Daher auch dieser Thread. Vielleicht ist jemandem von euch mal etwas ähnliches passiert und ihr habt ne Idee, was da Phase sein könnte...und ich BETE dafür, dass nicht irgendwer irgendwo in diesem Programm indirekt auf "meinen" Merkerbereich adressiert (vielleicht sogar auch noch aus Versehen).