Hi
an dem eigenartigen Verhalten der Timer in der Simatic alt und neu habe ich auch schon gekaut. Inzwischen bin ich nicht mehr der Meinung, dass da was falsch läuft.
Das mit der Rückführung kann ich bestätigen.
In der alten Welt (300/400 und Step7 V5) wurde TON, TOF und TP durch SFB realisiert. Die haben eine Instanz, also einen DB. Man kann von immer und überall in diese Instanz reinschauen. Wenn man den SFB jedoch nicht aufruft, dann bewegt sich da auch nix. Beispiel: Man plaziere einen TP im OB35. Diesen parametriert man jedoch so, dass er nur alle 10 Sekunden dran kommt. Im OB1 schaut man auf die abgelaufene Zeit. Die wird nur alle 10 Sekunden aktualisiert. Wenn man also nun meint, dass man einen Impuls von 1 Sekunde braucht, dann klappt das natürlich nicht. Denn der OB35 aktualisiert den TON ja erst nach 10 Sekunden.
Wenn man eine Variablentabelle (VAT) verwendet und damit in die Instanz schaut, stell man ebenfalls fest, dass sich diese nur dann ändert, wenn der SFB aufgerufen wird, also alle 10s im diesem Beispiel.
Lassen wir so einen Quatsch mit mehreren OB mal und überlegen uns, was die Rückführung einer Instanzvariablen bedeutet. Wir haben einen SFB-Aufruf. D.h. die Eingangsparameter werden vor dem eigentlich Aufruf in die Instanz kopiert. Und nach dem Aufruf wieder raus.
Für den TON gilt: Ist der IN 0, dann ist das auch der Q. Siehe IEC61131 -- da kann Siemens nix für.
Der Timer startet mit der steigenden Flanke am IN. D.h. beim TON ist der Augang auf 0, denn die Zeit ist ja noch nicht abgelaufen.
Wenn dann die Zeit abgelaufen ist, dann wird der Ausgang 1. Für genau eine Zyklus lang, denn der Eingang wird ja wieder 0 und deswegen der Ausgang wieder 0.
Wenn du Glück hast, dann kannst du diesen einen Zyklus auch im Status sehen, meistens aber nicht. Man kann den Impuls aber sehr gut in einem Zähler (ADD mit EN

fangen.
Also schon in der alten Welt muss man mit solchen Rückführungen sehr vorsichtig sein.
In der neuen Welt (1200/1500 und damit eben auch TIA) werden die nicht durch SFB realisiert. Es fehlt das EN und das ENO! Man kann das Q an eine Verknüpfung anschließen. Sowas ging mit Bausteinen noch nie und geht auch sonst immer noch nicht. Also TON, TOF und TP sind keine Bausteine mehr. Vermutlich so eine Sequenz wie beim alten Timer aus Step5 Zeiten (der mit BCD geladen wird -- grusel)
U links_vom_in
L PT
TON instanz
L instanz.ET
T wohinauchimmer
U instanz.Q
Wenn man das mit zwei OB macht, also z.B. alle 10 s den TON aufrufen und alle 2 Sekunden den ET oder den Q auslesen, stellt man fest, dass der ET auch immer eine aktuelle Zeit an zeigt. D.h. man kann ET und Q verwenden ohne, dass man ständig einen SFB zum aktualisieren aufruft. Immer wenn man nach der Zeit fragt, bekommt man die echt aktuelle.
Endlich misst ein Timer wirklich die Zeit!
Wenn man eine Variablentabelle (VAT) verwendet und damit in die Instanz schaut, stellt man ebenfalls fest, dass sich diese immer dann ändert, wenn der Q oder ET gelesen werden, bzw. wenn der TON, TOF oderTP aufgerufen wird, also alle 2s im Beispiel mit 10s und 2s OB Zyklen. Greift man im OB1 auf den Timer zu, so wird dieser mindestens mit Zykluszeit aktualisiert. Genaugenommer mit jedem lesenden Zugriff. (Kann man dadurch prüfen, dass man einen OB1 macht der 30ms braucht und innerhalb dieser 30ms mehrfach den ET holt und an verschiedenen Stellen speichert. So ein Timer misst wirklich die Zeit.
An dieser Verbesserung, scheint es jedoch nun zu liegen, dass man am Ausgang nix mehr bekommt. Ich stelle mir das so vor: Irgendwie ist da intern nun folgendes AWL
UN instanz.Q
L PT
TON instanz
L instanz.ET
T wohinauchimmer
U instanz.Q
Der Lesezugriff für Q vor dem TON aktualisiert den Timer. Damit kann der Timer abgelaufen sein, d.h. Q ist 0. Damit bekommst du jetzt wieder eine steigende Flanke am Eingang. Also fängt er wieder von vorne an, d.h. der Lesezugriff für Q hinter dem TON ist wieder 0.
Prüfen kann man das wenn man zwischen dem negierten Kontakt und dem IN einen Abzweig einbaut und dort mittels EN verschaltetem ADD einen Zähler einbaut. Ja, der zählt schön stabil. Während der Zähler hinten am Q nur sehr sehr sporadisch zählt. Aber auch der zählt. Immer dann, wenn du das Glück hast, dass die Zeit zwischen
L instanz.ET
T wohinauchimmer
U instanz.Q
abläuft. Wenn im OB1 sonst nix drin ist; bei meiner 1214 im verhältnis 1 zu 100. Je mehr im OB drin ist desto unwahrscheinlicher wird das.
Also die Rückführung von Instanzsignalen ist keine gute Idee. War es noch nie und wird es auch nie sein.
Siemens macht ja viele Fehler. Vor allem mit der Performance im TIA, darüber sei an andere Stelle laut und deutlich geklagt. Aber die neuen TIMER und die neuen COUNTER sind in Ordnung.
Auf der 1500 bekommt man 64Bit Zähler und Timer. Die Timer haben sogar eine bessere zeitliche Auflösung.
Die alten Timer und Counter, die noch mit gruseligen BCD Werten geladen werden hätten sie sich auf der 1500 jedoch sparen können. (Jetzt steinigen mich bestimmt die, die AWL Programme von der 300 auf die 1500 migireren
