TIA Zeiten bleiben stehen

So:
1748241276957.png

Werden die Startwerte als Aktualwerte gesetzt, steht die Mühle.
Dies betrifft alle Zeiten, die irgendwie aktiv sind.

Also so ein kleines lächerliches Problem ist das jetzt nicht mehr.
 
Ich kann es auch auf 2ms setzen.
1748241778353.png

Das Problem wird sich aber deswegen genau so wenig lösen.

Ihr könntet mir aber "ein schnelles richtiges Programm" zeigen, bei dem die Zeiten nicht auf 0 gesetzt werden.
 
Code läuft ganz normal.
"Momentaufnahme der Aktualwerte"
"Momentaufnahme in Startwerte kopieren"
Bausteine laden. (Programm und CPU ist synchron)

Danach:
"Startwerte als Aktualwerte laden"
Leider schreibst du nicht mit was für einer Steuerung / TIA(?) Version du arbeitest.
Ich vermute mal, wenn du die Aktualwerte aller DB´s über die Momentaufnahme in die Startwerte kopierst und dann das komplette Programm überträgst, dann werden deine DB´s reinitialisiert und damit hältst du dir deine Timer an.
 
Die Taktmerker wollen wir nicht benutzen, damit das Programm auch schnell Herstellerübergreifend angepasst werden kann.

Übrigends, die Timer bleiben genauso stehen:
1748242635909.png
Ansonsten läuft das Programm immer :-/
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also so ein kleines lächerliches Problem ist das jetzt nicht mehr.
Doch ist es... wenn sich eine ordentliche Lösung erarbeitet hat.

Nach deinen Lösungsansätzen mal ne Frage:

Dir ist bekannt was eine Flanke ist und du kannst die vorstellen was da im Programm im Detail passiert?
 
Ich finde es schon sehr amüsant wie sich hier die ganzen alten Hasen auf dem Holzweg befinden und den guten Mann dumm von der Seite an machen :D

Aus seinem Anfangsbeitrag wird sofort der Fehler ersichtlich.

Er mach eine Momentanaufnahme des Timer-DBs läd diese in die Startwerte und danach geht nichts mehr.
Da ist das alte Problem, dass der Trigger in dem DB als Startbelegung ein TRUE bekommt und deswegen der Timer nicht mehr funktioniert.

Das ist so ein altes Problem, dass die alten Hasen das eigentlich sofort sehen müssten.

Besonders weil er schreibt, dass nach einem neuen Trigger wieder alles läuft.


Also man sollte von DBs mit Timern keine Momentanaufnahme als Startwerte laden, weil man wie am lebendigen Beispiel hier zu sehen, sich die Timer zerschießt.

Pauschal Momentanaufnahme in Startwerte kopieren finde ich eh kein schöner Ansatz.
Das macht man nur bei Parametern, die man auch wirklich sichern möchte.
Pauschales kopieren kann auch zu merkwürdigen Verhalten der Anlage führe, wenn z.B. von einem Zustand ausgegangen wird, der nicht mehr vorherrscht.


Kurz und knapp... LÖSUNG: Lösche die Momentanaufnahme aus deiner Startbelegung der DBs und schon funktioniert es wieder.
 
Falls es unbedingt ohne Taktmerker funktionieren soll, kannst dich ja auch in der LGF Bib bedienen. Da sind auch Frequenzgeneratoren dabei.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie
Da ist das alte Problem, dass der Trigger in dem DB als Startbelegung ein TRUE bekommt und deswegen der Timer nicht mehr funktioniert.
+1
zusätzlich gab es hier schon mal eine Diskussion, dass bei bestimmten TIA-Version(en?) da auch einen Fehlverhalten war, beim eigenmächtigen und ungewollten Aktivieren von Timer-Eigenschaften (ich finde den grad nicht mehr, @hucki kam drin vor)

Also man sollte von DBs mit Timern keine Momentanaufnahme als Startwerte laden, weil man wie am lebendigen Beispiel hier zu sehen, sich die Timer zerschießt.


Pauschal Momentanaufnahme in Startwerte kopieren finde ich eh kein schöner Ansatz.
+1
 
Habe jetzt Antwort vom Siemens Support erhalten.
PeterPan-35 hat es erraten.
Werden die Startwerte als Aktualwerte geladen wird auch der IN Parameter geschrieben.
Dadurch, dass dieser immer 0 ist, wird der TON nicht mehr bearbeitet.
Habe es jetzt mit einem Timerinterrupt und Zählern gelöst.

 
Werden die Startwerte als Aktualwerte geladen wird auch der IN Parameter geschrieben.
Dadurch, dass dieser immer 0 ist, wird der TON nicht mehr bearbeitet.
Die Erklärung ist so nicht korrekt. Problem ist, dass der aus dem Aktualwert gespeicherte IN = 1 ist, und dadurch der TON keine steigende Flanke erkennt, wenn beim Programmstart STOP/RUN das VKE an IN schon 1 ist.
Abhilfe: dafür sorgen, dass beim Programmstart das VKE an IN (kurz) auf 0 geht - am einfachsten das Bit "FirstScan" aus den Systemmerkern verknüpfen (UND NOT "FirstScan").

Unabhängig davon bei Timern auch noch die Regel beachten: niemals den eigenen Q direkt als Startbedingung an IN verknüpfen, sondern immer eine BOOL-Variable dazwischen, die am Q hängt (wie bereits in Beitrag #3 genannt).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum hast du überhaupt die Aktualwerte in die Startwerte kopiert? Du hast doch eh eine feste Zeit einprogrammiert.
Das kenne ich nur wenn ich Zeiten die per HMI oder dergleichen geändert werden können. Und auch da setze ich einen eigenen DB Sollwerte Timer ein und der eigentliche DB Timer bleibt unberührt.
 
Warum hast du überhaupt die Aktualwerte in die Startwerte kopiert? Du hast doch eh eine feste Zeit einprogrammiert.
Das kenne ich nur wenn ich Zeiten die per HMI oder dergleichen geändert werden können. Und auch da setze ich einen eigenen DB Sollwerte Timer ein und der eigentliche DB Timer bleibt unberührt.
Das hat nichts mit den Zeitwerten zu tun. TON hat Instanz-Daten und diese Daten wurden kopiert.
Und da kann dieses Verhalten und noch ganz andere Dinge auftreten.
Man sollte halt bei ner SPS wissen was man tut ...
Vielleicht sollte ja Siemens wieder die Zeitbaugruppen der S5-110A wiederbeleben ;)
Zeitbaugruppe.png
 
Das ist schon klar das der Fehler nix mit den Zeitwerten zu tun hat. Es war nur als Anregung die Zeiten von dem Timer DB zu trennen. So kommt man auch nicht auf die Versuchung, wie im Fehlerfall, den Timer DB mit Momentaufnahme, dann in Startwerte zu laden und bei der reinitialisierung das Problem zu haben
 
Die Taktmerker wollen wir nicht benutzen, damit das Programm auch schnell Herstellerübergreifend angepasst werden kann.
Mittlerweile gibt es in den meisten Steuerungen entweder interne Taktgeneratoren (Siemens) oder "Blink" Bausteine (Codesys). Einfach Hersteller übergreifend kannst vergessen, du musst immer Anpassungen machen. Die IEC61131-3 stellt nur ein Grundgerüst das spätestens in der Siemens- Welt als allgemeiner Hinweis gilt 🤪
 
Zurück
Oben