TIA Timer in nicht aufgerufenen Programmen

DerTechpriester

Level-2
Beiträge
386
Reaktionspunkte
160
Zuviel Werbung?
-> Hier kostenlos registrieren
Werte Gemeinde,
Ich habe ein Problem, evtl. stehe ich auch einfach auf dem Schlauch...

Ich habe mir ein kleines Testprogramm gebastelt um ein Problem zu behandeln, welches unsere Anlagen immer wieder heimsucht:

Wir haben eine ganze Sammlung aus Automatikprogrammen, welche bei Deaktivierung des Automatikmodus über den OB1 weggeschaltet werden.
Problem hierbei: Ein Timer, welcher während der Automatik gesetzt wird, läuft offenbar auch ohne vom OB1 gerufen zu werden im Hintergrund weiter.
Beim Beobachten bleibt der IST-Wert bestehen, aber sobald die Automatik wieder einsetzt wird die Zeit, in welcher die Automatik ausgeschaltet war, aufaddiert.

Meine Frage: Gibt es eine Möglichkeit, die laufenden Zeiten bei wegschalten durch den OB1 zu pausieren oder ein plausibles Workaround? Ich möchte nur ungern alles anfassen und Zeiten aus der Automatik irgendwo anders abarbeiten lassen.

Bilder: Das Testprogramm. Die Zeit soll nur laufen, solange das Programm auch eingeschaltet ist. Es gibt nicht mehr, gesteuert habe ich es direkt über den Datenbaustein.

(Tia V16, CPU ist eine 1214, bzw. PLCSIM)
 

Anhänge

  • 2024-05-21 17_44_37-C__Users_BuchhageS_Documents_Automatisierung_IntercomTest_IntercomTest.png
    2024-05-21 17_44_37-C__Users_BuchhageS_Documents_Automatisierung_IntercomTest_IntercomTest.png
    4,1 KB · Aufrufe: 35
  • 2024-05-21 17_45_17-C__Users_BuchhageS_Documents_Automatisierung_IntercomTest_IntercomTest.png
    2024-05-21 17_45_17-C__Users_BuchhageS_Documents_Automatisierung_IntercomTest_IntercomTest.png
    11,4 KB · Aufrufe: 35
  • 2024-05-21 17_50_26-.png
    2024-05-21 17_50_26-.png
    69,1 KB · Aufrufe: 35
Natürlich läuft die Zeit weiter, es ist ja eigentlich kein Zeitglied, sondern nur ein Bauteil, welches bei Start der Zeit den SPS Timer abspeichert und bei jedem Zugriff des Timers nur die Differenz dazu errechnet.
Meiner Meinung nach (es soll auch andere Meinungen geben), ist es nicht unbedingt sinnvoll einen kompletten Baustein durch nicht mehr aufrufen einfach "abzuwürgen", besser wäre evtl. eine Weiterschaltbedingung zu sperren.
Jetzt aus dem Kopf, (bin zu Hause) da gibt's doch bei den Timerfunktionen was um einen Timer zurückzusetzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe jetzt mal meine VM mit TIA15.1 gestartet, damit ich weiß, wovon ich schreibe:
Dein Beispiel:
1716308976716.png
Dieses NW nicht im abgeschalteten Baustein legen, das komplette NW immer bearbeiten.
Ich nehme an, dass "Datenbaustein_1".Programm_EIN true ist, wenn dein Programm läuft und false, wenns nicht läuft. Du brauchst also nur deine Timernetzwerke zu einem "immer" Baustein zu verschieben.
 
Prinzipiell ist das Überspringen von Timern nie eine gute Idee, insbesondere bei Siemens, wo selbst die IEC-Timer eigentlich Hardware-Timer sind.

U.a. weil trotzdem einige warum auch immer anderer Meinung sind, hat Siemens noch die Funktion "Zeit rücksetzen" spendiert:

1716310417971.png

😁
 
@hucki : 100%ig deiner Meinung !!!

@DerTechpriester : Prinzipiell ist sogar das nicht bearbeiten von Bausteinen keine gute Idee - bist du dir sicher, dass da der IEC-Timer dein einziges Problem ist / bleibt ...?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Natürlich läuft die Zeit weiter, es ist ja eigentlich kein Zeitglied, sondern nur ein Bauteil, welches bei Start der Zeit den SPS Timer abspeichert und bei jedem Zugriff des Timers nur die Differenz dazu errechnet.
Meiner Meinung nach (es soll auch andere Meinungen geben), ist es nicht unbedingt sinnvoll einen kompletten Baustein durch nicht mehr aufrufen einfach "abzuwürgen", besser wäre evtl. eine Weiterschaltbedingung zu sperren.
Jetzt aus dem Kopf, (bin zu Hause) da gibt's doch bei den Timerfunktionen was um einen Timer zurückzusetzen.
O...kay. Die funktionsweise des Timers war mir soweit nicht bekannt. Wieder was gelernt.
Ich habe es früher auch anders gemacht. Das "abwürgen" des Bausteins nimmt mir jede Möglichkeit, das Programm weiter zu beobachten. Ich hatte es erst so, musste es dann umbauen, da bei uns "alle Programme so aufgebaut sind", dass die Bausteine abgewürgt werden. Es soll einfach sein, ich mache es zu kompliziert.

Dieses NW nicht im abgeschalteten Baustein legen, das komplette NW immer bearbeiten.
Ich nehme an, dass "Datenbaustein_1".Programm_EIN true ist, wenn dein Programm läuft und false, wenns nicht läuft. Du brauchst also nur deine Timernetzwerke zu einem "immer" Baustein zu verschieben.
Nimmst du richtig an. Das heißt, ich muss doch ein bisschen was umbauen. "Einfach" im Sinne von direkt Zeit auf Ausgang etc. hat jetzt seinen Preis.

U.a. weil trotzdem einige warum auch immer anderer Meinung sind, hat Siemens noch die Funktion "Zeit rücksetzen" spendiert:
Zurücksetzen ist in diesem Fall nicht gewünscht. Da würde sich ja nochmal die gesamte Zeit auf die bereits angefangene aufaddieren.

Prinzipiell ist sogar das nicht bearbeiten von Bausteinen keine gute Idee - bist du dir sicher, dass da der IEC-Timer dein einziges Problem ist / bleibt ...?
Siehe oben. Wir haben 20 Maschinen die alle so ticken. Teilweise werden so auch die Einstellungen und Betriebsmodi umgeschaltet. Hast du zufällig eine detailliertere Begründung oder etwas, wo ich nachlesen könnte, wieso dies per se keine gute Idee ist und zu was für Problemen das noch führen kann?

Danke für Eure Antworten bisher. Ich bin planungstechnisch schon ein ganzes Stück weiter. (y)
 
Wir haben 20 Maschinen die alle so ticken. Teilweise werden so auch die Einstellungen und Betriebsmodi umgeschaltet. Hast du zufällig eine detailliertere Begründung oder etwas, wo ich nachlesen könnte, wieso dies per se keine gute Idee ist und zu was für Problemen das noch führen kann?
Ich kann an dieser Stelle nur Ratschläge geben - jemanden bekehren zu wollen habe ich mir abgewöhnt.
Das nicht mehr bearbeiten eines Bausteins führt dazu, dass alle Variablen ihren Zustand behalten - das kann natürlich ganz toll sein und gewünscht - das kann aber auch zu "interessanten" Nebeneffekten führen.
Wenn ihr das so macht und das toll findet dann mach es mal weiter ...
 
Ich kann an dieser Stelle nur Ratschläge geben - jemanden bekehren zu wollen habe ich mir abgewöhnt.
Das nicht mehr bearbeiten eines Bausteins führt dazu, dass alle Variablen ihren Zustand behalten - das kann natürlich ganz toll sein und gewünscht - das kann aber auch zu "interessanten" Nebeneffekten führen.
Wenn ihr das so macht und das toll findet dann mach es mal weiter ...
Du hast mich falsch verstanden. Ich wollte nicht meine Meinung bestätigt wissen. Unterprogramme wegschalten und alle Variablen resetten finde ich selbst NICHT toll. Ich wollte nur ehrlich wissen, ob es noch Nebeneffekte gibt, von denen ich noch nichts weiß...
 
Nein, die Nebeneffekte sind eben die Variablen, die ihren Zustand behalten und einem dann schon mal "in die Suppe spucken" - das kann dann vor Allem bei Rück-Aktivieren des Bausteins dann schon mal Schwierigkeiten machen.
Ich muss jetzt aber auch dazu sagen, dass ich das immer auch aus der Sicht des Instandhalters gesehen habe und dann selber gerne wissen möchte was sich wo in welchem Zustand befindet.
Früher hatte man dies "Wegschalten" gemacht um CPU-Leistung zu sparen ... aber ist das heute noch sinnig ?
 
U.U. bleiben ja selbst Ausgänge im (undefinierten) Zustand Ein. Zumindest bis zum nächsten CPU-Stop, danach sind sie dann doch aus.
Fehlermeldungen die in dem übersprungenen Baustein generiert werden, kommen nicht mehr bzw. bleiben Anstehen.
Anlagenzustandsvariablen z.B. "Anlage_Ein" stehen im "falschen" Zustand.
Zähler machen genauso Quatsch wie Timer.
Auf den zugehörigen HMI-Bildern wird nur Quatsch angezeigt...

Ansonsten aber natürlich: "Einheitlichkeit geht vor Schönheit". Wenn das in allen Euren Anlagen der Programmierstil ist, dann lass das so und mach das identisch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Prinzipiell ist das Überspringen von Timern nie eine gute Idee, insbesondere bei Siemens, wo selbst die IEC-Timer eigentlich Hardware-Timer sind.

U.a. weil trotzdem einige warum auch immer anderer Meinung sind, hat Siemens noch die Funktion "Zeit rücksetzen" spendiert:

Anhang anzeigen 78273

😁
Bei der S3 und der S5 waren das auf jeden Fall Hardwaretimer, bei den S3 und den älteren S5 musstest du auch zusätzlich zu der CPU eine Zeit/Zählerbaugruppe einsetzen (deshalb waren bei der S3 und der S5 diese Timer auch in der Anzahl beschränkt).
Bei der S7 werden die S5 Timer durch in der Anzahl beschränkten Betriebssystemroutinen nachgestellt.
Soviel ich weiß, sind die IEC Timer reine Softwaretimer, deshalb ist die IEC Timer Anzahl auch nur durch die Speicher Anzahl und CPU Leistung beschränkt.

Aber ich gebe dir auf jeden Fall recht, das Überspringen von Timern ist keine gute Idee. In Betrag #2 ist mir aus dem Kopf nicht mehr der Name des Timerrücksetzbefehls eingefallen, danke dafür.
 
Zuletzt bearbeitet:
Bei der S3 und der S5 waren das auf jeden Fall Hardwaretimer, bei den S3 und den älteren S5 musstest du auch zusätzlich zu der CPU eine Zeit/Zählerbaugruppe einsetzen (deshalb waren bei der S3 und der S5 diese Timer auch in der Anzahl beschränkt).
Bei der S7 werden die S5 Timer durch in der Anzahl beschränkten Betriebssystemroutinen nachgestellt.
Soviel ich weiß, sind die IEC Timer reine Softwaretimer, deshalb ist die IEC Timer Anzahl auch nur durch die Speicher Anzahl und CPU Leistung beschränkt.

Aber ich gebe dir auf jeden Fall recht, das Überspringen von Timern ist keine gute Idee. In Betrag #2 ist mir aus dem Kopf nicht mehr der Name des Timerrücksetzbefehls eingefallen, danke dafür.
Wenn du die S3 noch kennst dann bist du sehr erfahren (y) Die richtigen Hardware Timer kenn ich nur noch von den alten Klö/Moe Steuerungen mit den Potis an der Front.

Timer überspringen ist wirklich keine allzu gute Idee, vielleicht solltest du stattdessen Counter verwenden die würden zumindest stehen bleiben...
 
...von denen ich noch nichts weiß...
Ich bin in der Lage zu lesen, Danke ;)

U.U. bleiben ja selbst Ausgänge im (undefinierten) Zustand Ein. Zumindest bis zum nächsten CPU-Stop, danach sind sie dann doch aus.
Fehlermeldungen die in dem übersprungenen Baustein generiert werden, kommen nicht mehr bzw. bleiben Anstehen.
Anlagenzustandsvariablen z.B. "Anlage_Ein" stehen im "falschen" Zustand.
Zähler machen genauso Quatsch wie Timer.
Auf den zugehörigen HMI-Bildern wird nur Quatsch angezeigt...
Ansonsten aber natürlich: "Einheitlichkeit geht vor Schönheit". Wenn das in allen Euren Anlagen der Programmierstil ist, dann lass das so und mach das identisch.
Deshalb werden beim Umschalten die relevanten E/A vom Handbetriebsbaustein zurückgesetzt oder über einen Taster alles.
Aber ich habe jetzt den Auftrag ein spezifisches Problem zu beheben und es lässt sich "on the fly" nicht beheben. Ich werde das Programm umbauen wenn die Maschine hinterher besser läuft, ist das glaube ich ein Argument für sich.

Timer überspringen ist wirklich keine allzu gute Idee, vielleicht solltest du stattdessen Counter verwenden die würden zumindest stehen bleiben...
Das hatte ich auch schon überlegt. Aber auch hier wird es schwierig unter Kontrolle zu bringen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Deshalb werden beim Umschalten die relevanten E/A vom Handbetriebsbaustein zurückgesetzt oder über einen Taster alles.
So hatte ich es mir in etwa vorgestellt ...
Aber ich habe jetzt den Auftrag ein spezifisches Problem zu beheben und es lässt sich "on the fly" nicht beheben.
Na ... hat es vielleicht doch vielleicht mit den "Nebeneffekten" zu tun ?
Ich werde das Programm umbauen wenn die Maschine hinterher besser läuft, ist das glaube ich ein Argument für sich.
Das ist auf alle Fälle ein guter Ansatz. Ich glaube auch nicht, dass dein Programm hinterher schlechter funktionieren wird - ganz bestimmt aber könnte es wartungsfreundlicher sein ...
Auf jeden Fall viel Erfolg dabei ...!!!
 
Soviel ich weiß, sind die IEC Timer reine Softwaretimer
:unsure:
Bei den S7-1x00 werden die Timer auch aktualisiert, wenn man nur lesend auf Q oder ET zugreift. Da hat Siemens also irgendetwas IEC-Abweichendes zumindest in der Firmware geschaffen, um das zum Zyklus asynchrone Verhalten der alten Hardware-Timer nachzustellen.

Das war bei den (IMHO echten) IEC-Timern der klassischen S7-x00 nicht so.
 
Bei der S3 und der S5 waren das auf jeden Fall Hardwaretimer, bei den S3 und den älteren S5 musstest du auch zusätzlich zu der CPU eine Zeit/Zählerbaugruppe einsetzen (deshalb waren bei der S3 und der S5 diese Timer auch in der Anzahl beschränkt).
Bei der S5 mag es anfangs bzw. wahlweise noch HardwareTimer gegeben haben. Ich habe 1983 mit S5 angefangen. Damals hatte man mir einen Stapel Dokumentation zu S3 und S5 zwecks "do it yourself"-Einarbeitung gegeben. Nur aus dieser Dokumentation kenne ich die HardwareTimer.
Habe sie aber nie "in natura" selbst gesehen geschweige denn benutzt.
Die beschränkte Anzahl von Timern war bei S5 trotzdem Realität. Je nach CPU war die Anzahl fest vorgegeben, z.B. 64 oder 128.
Die Anzahl der SchleifenDurchläufe im Besy (BetriebsSystem), um mehr Timer zu realisieren, war sicherlich nicht das einschränkende Kriterium - die zusätzliche Belastung der ZyklusZeit wahrscheinlich schon eher.
Aber, im stets zu knappen und zu teuren RAM pro zusätzlichem Timer 2 weitere Byte reservieren/belegen zu müssen, war bestimmt ein relevantes Kriterium, die Anzahl Timer (und Zähler) nicht ausufern zu lassen.
Ein "absolutes" AusschlussKriterium für die "Freigabe" von mehr als maximal 128 Timer war natürlich der MC5-Code bzw. die Anzahl der MC5-Codes, die für anderweitige Verwendung nicht mehr zur Verfügung gestanden hätten, hätte man 1 Bit mehr belegen müssen, um die Befehle für die Timer 128..255 hinzuzufügen.
Dieses Kriterium gilt sinngemäss genauso für die Zähler (und für die Eingänge und Ausgänge, mit der Beschränkung auf die maximale Nr. 127 sowie die Merker, Bausteine, DatenWorte auf die maximale Nr. 255).
Leider hat Siemens nicht die Gelegenheit genutzt, den Weg der indirekten Adressierung (mit B MW bzw. B DW) für das Ansprechen von höheren Adressen freizuschalten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das läuft doch auf das alte Problem des anhaltens von Timern hinaus. Das hatten wir hier glaub ich schon mehrmals diskutiert.
Die beste Lösung dafür ist, sich einen eigenen Timerbaustein (Zähler) zu schreiben, der über die Flanken der Systemtaktmerker
100ms 200ms ... usw bearbeitet wird.
Das geht wenn man keine niedrigen ms Werte benötigt.
 
Negative Nebenwirkung beim Überspringen von Bausteinen:
Flankenerkennung funktioniert nicht. Dies ist in alle Programme den ich kenne eine wichtige Funktionalität.
Debugging von Programme die nicht zyklisch ausgeführt werden ist schwieriger.
Generell mache ich das so:
Logik, Sekvenzen: Immer zyklisch. Die Zykluszeitbelastung ist sehr gering. Debugging ist einfach.
Berechnungen, 'Datenschaufeln', Statistikfunktionen, ... meistens auf ereigniss. Aber nicht immer. Einige Berechnungen müssen zyklisch ausgeführt werden.
 
Zurück
Oben