-> Hier kostenlos registrieren
Hi,
ich habe in einer Förderstrecke für z.B. Stopper einen FB geschrieben, der immer mit anderen Werten am IN sowie einem DB für jeden Stopper aufgerufen wird.
Diese FB-Aufrufe liegen alle in einem FC in den Netzwerken hintereinander.
Nach einiger Zeit allerdings ergibt es plötzlich Probleme:
Im FB aus NW 2 bis Ende erscheinen teilweise Werte des FBs aus Netzwerk 1. In den dazugehörigen DBs sind die Werte, im FC selbst sind sie ebenfalls richtig, öffne ich allerdings den FB mit passendem DB zum beobachten stehen dort andere Aktualwerte vom IN-Parameter drin. Diese verhindern dann den weiteren Programmablauf.
Es sind nicht nur INT-Werte, sondern auch einfache boolsche Operanden.
Nehme ich nun einfach einen FB aus diesem FC heraus und stelle ihn in einen anderen FC ein, so funktioniert es ohne Probleme.
Woher könnten solche Probleme kommen?
Zeitstempel sind alle okay
Datenbausteine und FBs habe ich von der CPU gelöscht, DBs neu im Programm generiert (gelöscht und generieren lassen) und wieder übertragen, ohne Erfolg.
Kopiere ich den FB, bennenne ihn um und lade den neuen, dann funktioniert es auch, aber kann ja nicht des Rätsels Lösung sein. Dann hätte ich gleich einen FC schreiben können sowie DBs um die dann dort hineinzuschreiben, davon abgesehen würden 60 gleiche FBs den Speicher sprengen.
Es gibt keine Querverweise auf Speicherbereiche, auch keinen absoluten Aufruf innerhalb des FBs. Alles was hinein soll wird an IN, IN/OUT, OUT verarbeitet. Genutzt wird für Flankenmerker der STAT-Bereich. Den TEMP nutze ich nie.
Das Programm liegt auf einer CPU315-2DP 315-2AH14-0AB0 mit FW 3.3.11 - Aktualisierung der FW würde ich ungern machen, da ich bei einem Fehlschlag/Defekt keinen Ersatz bekommen kann (Afrika).
Programmiert wurde mit Step7 5.5 + SP4
Es betrifft im übrigen nicht nur diesen einen FB, sondern ALLE. Also alle Weichen, Stopper, Kettenschmierungen, Pufferstrecken, etc.
Ein Urlöschen der CPU habe ich bereits einmal durchgeführt, naja mehrmals inkl. Werkseinstellungen.
Der OB35 wird zyklisch mit 100ms aufgerufen und öffnet einen FC, welcher 4 PID-Regler beinhaltet. Sollte aber doch kein Problem darstellen.
Der Gesamtzyklus beträgt 5ms laut Diagnose. Fehler sind keine eingetragen.
Wie oben erwähnt, wird der FB problemlos ausgeführt wenn ich ihn verschiebe oder umkopiere, aber nur dann, wenn er nicht noch einmal verwendet wird, daher schliesse ich einen Programmierfehler aus.
Gibt es evtl. die Möglichkeit das die DBs nicht richtig dem FB zugeordnet werden? Wie kann ich das feststellen, wenn er mit einfacher CALL-Anweisung mitsamt DB geöffnet wird?
Es ist relativ schlecht, wenn der FB mit DB221 aufgerufen wird und der FB mit DB230 plötzlich den Wert des DB221 erhält, obwohl im DB230 ein anderer Wert steht.
Hoffe auf Abhilfe
.
LG
Björn
EDIT:
Ich habe den aufrufenden FC und den aufgerufenen FB angehangen. Der FB in Netzwerk 2 hat im DB seinen richtigen Wert stehen, aber beim Beobachten und auf der CPU nutzt er den Wert aus dem DB aus Netzwerk 1. Leider ist es kein einfacher Beobachten-Fehler, sondern tatsächlich blockiert es so (Im Testbetrieb beobachtet mit gleichem Ergebnis)
ich habe in einer Förderstrecke für z.B. Stopper einen FB geschrieben, der immer mit anderen Werten am IN sowie einem DB für jeden Stopper aufgerufen wird.
Diese FB-Aufrufe liegen alle in einem FC in den Netzwerken hintereinander.
Nach einiger Zeit allerdings ergibt es plötzlich Probleme:
Im FB aus NW 2 bis Ende erscheinen teilweise Werte des FBs aus Netzwerk 1. In den dazugehörigen DBs sind die Werte, im FC selbst sind sie ebenfalls richtig, öffne ich allerdings den FB mit passendem DB zum beobachten stehen dort andere Aktualwerte vom IN-Parameter drin. Diese verhindern dann den weiteren Programmablauf.
Es sind nicht nur INT-Werte, sondern auch einfache boolsche Operanden.
Nehme ich nun einfach einen FB aus diesem FC heraus und stelle ihn in einen anderen FC ein, so funktioniert es ohne Probleme.
Woher könnten solche Probleme kommen?
Zeitstempel sind alle okay
Datenbausteine und FBs habe ich von der CPU gelöscht, DBs neu im Programm generiert (gelöscht und generieren lassen) und wieder übertragen, ohne Erfolg.
Kopiere ich den FB, bennenne ihn um und lade den neuen, dann funktioniert es auch, aber kann ja nicht des Rätsels Lösung sein. Dann hätte ich gleich einen FC schreiben können sowie DBs um die dann dort hineinzuschreiben, davon abgesehen würden 60 gleiche FBs den Speicher sprengen.
Es gibt keine Querverweise auf Speicherbereiche, auch keinen absoluten Aufruf innerhalb des FBs. Alles was hinein soll wird an IN, IN/OUT, OUT verarbeitet. Genutzt wird für Flankenmerker der STAT-Bereich. Den TEMP nutze ich nie.
Das Programm liegt auf einer CPU315-2DP 315-2AH14-0AB0 mit FW 3.3.11 - Aktualisierung der FW würde ich ungern machen, da ich bei einem Fehlschlag/Defekt keinen Ersatz bekommen kann (Afrika).
Programmiert wurde mit Step7 5.5 + SP4
Es betrifft im übrigen nicht nur diesen einen FB, sondern ALLE. Also alle Weichen, Stopper, Kettenschmierungen, Pufferstrecken, etc.
Ein Urlöschen der CPU habe ich bereits einmal durchgeführt, naja mehrmals inkl. Werkseinstellungen.
Der OB35 wird zyklisch mit 100ms aufgerufen und öffnet einen FC, welcher 4 PID-Regler beinhaltet. Sollte aber doch kein Problem darstellen.
Der Gesamtzyklus beträgt 5ms laut Diagnose. Fehler sind keine eingetragen.
Wie oben erwähnt, wird der FB problemlos ausgeführt wenn ich ihn verschiebe oder umkopiere, aber nur dann, wenn er nicht noch einmal verwendet wird, daher schliesse ich einen Programmierfehler aus.
Gibt es evtl. die Möglichkeit das die DBs nicht richtig dem FB zugeordnet werden? Wie kann ich das feststellen, wenn er mit einfacher CALL-Anweisung mitsamt DB geöffnet wird?
Es ist relativ schlecht, wenn der FB mit DB221 aufgerufen wird und der FB mit DB230 plötzlich den Wert des DB221 erhält, obwohl im DB230 ein anderer Wert steht.
Hoffe auf Abhilfe

LG
Björn
EDIT:
Ich habe den aufrufenden FC und den aufgerufenen FB angehangen. Der FB in Netzwerk 2 hat im DB seinen richtigen Wert stehen, aber beim Beobachten und auf der CPU nutzt er den Wert aus dem DB aus Netzwerk 1. Leider ist es kein einfacher Beobachten-Fehler, sondern tatsächlich blockiert es so (Im Testbetrieb beobachtet mit gleichem Ergebnis)
Anhänge
Zuletzt bearbeitet: