Sporadischer Fehler beim Datenaustausch zwischen Graph und einem FB

Majestic_1987

Level-1
Beiträge
270
Reaktionspunkte
22
Zuviel Werbung?
-> 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).
 
Ja, das sind wirklich die ganz bösen Sachen.

Ich würde schrittweise vorgehen und folgendes probieren.
1. Den eigenen FB nochmals durchsuchen, ob nicht doch aus versehen irgendwo ein Zugriff nach oder von außen erfolgt.
2. Wenn im FB indirekte Adressierung verwendet wird, diese nochmals genau prüfen.
3. wenn möglich einfach mal die Aufrufreihenfolge deiner 3 FB tauschen und sehen, ob der Fehler nun bei einem der anderen FB auftaucht. (Auch schon so gesehen)
4. Die Merker an In und Output des FB testweise durch andere ersetzen (Ist der Fehler weg, werden die Merker irgendwo im Programm (auch indirekt) bechrieben.
5. Den IDB durch einen anderen ersetzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich ersetze erstmal die Merker, dann den IDB (gibt nur einen weil Multiinstanz) und sollte das nicht fruchten tausche ich die Aufrufreihenfolge. Ich hasse solche Fehler. Und die Debugging-Möglichkeiten sowie die Tatsache wir leider keinen SPS-Analyzer hier haben, machen die Fehlersuche nicht leichter. Was würd ich jetzt fürs TwinCat Scope geben xD

Aktueller Workaround: Überwachung der Schritt-Laufzeit. Glücklicherweise geht das in dem Fall, so kann hier wenigstens produziert werden.
 
Zuletzt bearbeitet:
Zur Multiinstanz: (bitte nicht böse sein über die Frage, hab schon alles mögliche erlebt) Hast du den FB 3x einzeln in der Multiinstanz unter STAT angelegt und rufst diese 3 Instanzen auf?
 
Natürlich xD wie sollte ich das denn sonst tun? ;-)

Habe den Fehler aber gefunden. Nachdem Merkeraustausch und Co nichts brachten fiel es mir wie Schuppen von den Augen: Ich hatte schlichtweg im Graph (der mir natürlich für die Einbindung einer Komponente weitestgehend egal war) eine klitzekleine und überaus selten aktive Transition übersehen, die vor meinen Schritt sprang und ein Kommando an meinen Baustein gab, dass in dieser Situation keinen Effekt hat.

Wenn man den Wald vor lauter Bäumen nicht sieht. *shame*
 
Zurück
Oben