TIA Zykluszeit - Fehler im zyklischen Programm finden?

Fireman_Frank

Level-2
Beiträge
154
Reaktionspunkte
28
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

eine Steuerung S7-1500 (läuft zur Zeit nur im Simulator) geht alle paar Stunden mit Zykluszeitüberschreitung in Stop. Klar, vermutlich irgendwo ne Endlosschleife. Aber wo?

- TIA V16 Upd.2
- Zyklusüberwachung steht auf 150ms, im normalen Betrieb wird in der Diagnose eine maximale Zykluszeit von 23ms angezeigt.
- An OB's ist nur ein OB1 vorhanden
- Im Diagnosepuffer folgen die Einträge 'Zykluszeit überschritten' und 'Zykluszeit 2 mal überschritten' im Abstand von 1ms. Müßten diese nicht eigentlich einen Abstand von 150ms haben?

Aber die eigentliche Frage:
Ein OB80 gibt mir in seinen Lokaldaten nur an aus welchem OB heraus er angesprungen wurde. Gibt es eine Möglichkeit im OB80 genau den Baustein/Bausteinadresse zu ermitteln aus dem heraus OB80 aufgerufen wurde?

Frank
Zyklusüberschreitung.jpg
 
Mal anders herum gefragt :
An wie vielen Stellen in deinem Programm besteht denn die Chance, dass dieses Verhalten auftreten kann ? Vor Allem in Verbindung mit dem Umstand, dass das nicht ständig passiert ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In dem Programm werden Daten aus Tabellen verarbeitet, es sind also schon einige Schleifen und Sprünge drin. Grundsätzlich tut das Programm auch genau das was es soll. Und da ich das Programm nicht selber geschrieben habe fehlt mir auch das Gefühl für die kritischen Stellen. Und leider ist das Programm auch nicht mal eben in zwei Tagen neu geschrieben...
 
Kann es denn ggf. auch sein, dass es sich hier gar nicht wirklich um einen Fehler handelt sondern dass einfach nur die Überwachungszeit zu knapp gewählt wurde ?
Ansonsten solltest du dich m.E. auf das Ereignis, bei dem das stattfindet, konzentrieren ...
 
Mal so als spontane Idee,

du könntest in jedem Baustein eine Variable Beschreiben, also eine Variable die in jedem Baustein ( bzw. den Potentiellen ) ganz oben beschrieben wird.
also FB80 MeineTestvar := 80;
FB81 MeineTestvar := 81....

Wenn die CPU dann in Stopp geht, dann könntest du schon mal sehen in welchem Baustein die CPU war.
Dann könntest du innerhalb dieses Bausteins an mehreren Schritten diese Variablen beschreiben und so innerhalb des Bausteins weiter eingrenzen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke, in der Hoffnung, dass der fragliche Teil in SCL programmiert worden ist, das der TE hier nur nach eine WHILE-Schleife (oder ähnlich) suchen muss. Hier hat man ja eine gute Chance, dass es hin und wieder keine richtige Abbruch-Bedingung gibt. Bei FOR..TO halte ich das eher für unwahrscheinlich ...
Aber wir hören ja gar nichts mehr vom Feuerwehrmann ...
 
Die Rückwärts-Sprünge zu Endlos-Schleifen müssen keine explizit erkennbaren Sprünge (wie GOTO) sein, es werden wahrscheinlich "normal aussehende" Schleifen (FOR, WHILE, REPEAT, CONTINUE) sein, wo die Endebedingung nicht (rechtzeitig) erfüllt wird.
Oder eine oder mehrere Schleifen tun manchmal zuviel/zulange (z.B. sehr große Datenmengen umspeichern) oder kommen "unglücklich" zusammen im selben Zyklus. Evtl. hat der Programmierer sowas schon geahnt und RE_TRIGR eingebaut - das ist allerdings auch nicht endlos möglich.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde hier mal ein Lanze brechen für AWL.
Daten + Schleifen in FUP/KOP sind ja wohl nicht besser.
Ein gutes Dokumentieren (pro Zeile, wo es Sinn macht) unmöglich.

Wenn bei AWL ein autom. einrücken je nach Klammerungstiefe gemacht werden würde, wäre es auch für boolische Logik nicht soo schlecht ...


Ohne Frage, heutzutage ist für Daten/Schleifen SCL die beste Wahl.
 
Das Programm ist in teils in AWL und teils in SCL und teils wirklich nicht leicht zu lesen ;)


Mal so als spontane Idee,

du könntest in jedem Baustein eine Variable Beschreiben, also eine Variable die in jedem Baustein ( bzw. den Potentiellen ) ganz oben beschrieben wird.
also FB80 MeineTestvar := 80;
FB81 MeineTestvar := 81....

Sowas ähnliches habe ich gerade am laufen, hab es aber mit einzelnen Bits gemacht die ich am Anfang des Zyklus lösche und dann nach und nach setze.

Ansonsten könntest du dich auch im STOP Zustand online verbinden und die Aufrufhierarchie öffnen.
Dann siehst du den letzten aktiven Baustein vor dem OB80 Zeitfehler. Hier man ein Bild dazu im #2:
Ich habe es selber noch nie ausprobiert...
https://support.industry.siemens.co...tack-bei-r-cksprung/129768?page=0&pageSize=10

Das klingt ja nach dem was ich suche. Sehe ich mir an, ich werde berichten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
eine Steuerung S7-1500 (läuft zur Zeit nur im Simulator) geht alle paar Stunden mit Zykluszeitüberschreitung in Stop. Klar, vermutlich irgendwo ne Endlosschleife. Aber wo?

- TIA V16 Upd.2
- Zyklusüberwachung steht auf 150ms, im normalen Betrieb wird in der Diagnose eine maximale Zykluszeit von 23ms angezeigt.
- An OB's ist nur ein OB1 vorhanden
- Im Diagnosepuffer folgen die Einträge 'Zykluszeit überschritten' und 'Zykluszeit 2 mal überschritten' im Abstand von 1ms. Müßten diese nicht eigentlich einen Abstand von 150ms haben?

Kann es denn ggf. auch sein, dass es sich hier gar nicht wirklich um einen Fehler handelt sondern dass einfach nur die Überwachungszeit zu knapp gewählt wurde ?

Also der Simulator (PLCSIM?) hat ja grundsätzlich keine ordentlich konstante Zykluszeit... Wenn da irgendwas im Windows rumzickt, geht evtl. auch die Zykluszeit vom PLCSIM hoch. Oder halt beim Online beobachten usw.

Also zusätzlich zur Fehlersuche im SPS-Code würd ich mal schaun, obs auf ner realen CPU läuft, und auch mal die Zykluszeitüberwachung auf 500ms hochsetzen.

Gruß.

23ms im PLCSIM ist schon arg hoch... was ist das denn für ne lahme Möhre?
 
Zuletzt bearbeitet:
Apropos AWL: wir hatten doch gerade erst das Thema 'Schleife in AWL mit LOOP' wo man schlechte Karten hat, wenn der SchleifenZähler mit 0 vorbesetzt ist und die Schleife eigentlich gar nicht erst begonnen werden soll ...
 
Also der Simulator (PLCSIM?) hat ja grundsätzlich keine ordentlich konstante Zykluszeit... Wenn da irgendwas im Windows rumzickt, geht evtl. auch die Zykluszeit vom PLCSIM hoch. Oder halt beim Online beobachten usw.

Also zusätzlich zur Fehlersuche im SPS-Code würd ich mal schaun, obs auf ner realen CPU läuft, und auch mal die Zykluszeitüberwachung auf 500ms hochsetzen...
So sehe ich das auch. Das deterministische Verhalten einer SPS ist, so glaube ich zumindest, beim Simulator nicht gegeben.

An der realen Anlage sollte man die Überwachungszeit so groß wie möglich und so klein wie nötig einstellen! Zykluszeiterhöhungen ergeben sich bekanntlich auch durch Kommunikation, Beobachtung mit dem PG, etc. Hier muss man ja keinen unnötigen CPU-Stopp provozieren, sofern größere Reaktionszeiten nicht zum Problem werden können.
 
Zurück
Oben