TIA S7: TON Timer funktioniert nicht?

Zuviel Werbung?
-> Hier kostenlos registrieren
Fragst Du fbTONmyTest.Q irgendwo ab? Wenn nicht, dann bau mal irgendeine immer aufgerufene Abfrage ein. Ich meine, bei den S7-1500 laufen die Timer nicht oder aktualisieren die Ausgänge nicht, wenn man nie Q oder ET abfragt.

Wie wird bInitDone auf FALSE gebracht? Ist bInitDone remanent?
Was sollen wir uns unter "Aufrufen" eines DB vorstellen?

Wenn bInitDone statisch ist, dann kannst du den ja auch steuern.
Läuft der Timer, wenn Du bInitDone auf 0 und wieder auf 1 steuerst (obwohl: auf 1 geht er ja automatisch wieder durch Dein Programm).

Harald
 
Hallo zusammen,
genau diesen Fehler habe ich auch gemacht:
Ton mit sich selbst aufgerufen und nur in der Simu beobachtet.
Bei einer 300er geht das wie ich es von Codesys her gewohnt war aber mit ner 1500er nicht mehr.
Da hatte mir PN/DP oder jemand anders schon mal genau den gleichen Tip gegeben...
 
Ich meine, bei den S7-1500 laufen die Timer nicht oder aktualisieren die Ausgänge nicht, wenn man nie Q oder ET abfragt.
siehe hier: http://www.sps-forum.de/simatic/77908-s7-1500-timer-resetieren.html

Allerdings scheinen da auch noch Bugs oder Dokumentationsfehler involviert zu sein, denn die Dokumentation und das tatsächlich beobachtete Verhalten passen nicht zueinander:
S7-1500-Hilfe "TON: Einschaltverzögerung erzeugen" schrieb:
Die Aktualisierung der Anweisungsdaten geschieht sowohl bei einem Aufruf der Anweisung als auch bei einem Zugriff auf die Ausgänge Q oder ET.
Man kann die Timer übrigens auch nur beobachten wenn Q oder ET auch wirklich abgefragt wird. Nur IN und PT anhängen und dann über die Instanz beobachten funktioniert nicht. die Instanz wird dann nicht aktualisiert.

Harald
 
Harald,
sieht man es nur nicht, oder tut er es wirklich nicht?

Wenn ich schreibe

Code:
AUF DB 1234 // Instanz vom TON
U DBX 6.0 //der "Q"
= irgendwas

ist dann der "irgendwas" korrekt oder nicht?
(GSD habe ich so ne S7-1500 noch nie in der Hand gehabt)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das weiß ich nicht. Ich habe noch keine S7-1500 programmiert. Und das buggy TIA nutze ich auch noch nicht.

Und ich halte das Aktualisieren der Instanz-Variablen der Timer nur durch Zugriff auf .Q für eine vorschnelle Schnapsidee (möglicherweise auf Wunsch von schlecht ausgebildeten SPS-Programmierern in die Firmware eingebaut?).

Harald
 
Fragst Du fbTONmyTest.Q irgendwo ab? Wenn nicht, dann bau mal irgendeine immer aufgerufene Abfrage ein. Ich meine, bei den S7-1500 laufen die Timer nicht oder aktualisieren die Ausgänge nicht, wenn man nie Q oder ET abfragt.
Wie wird bInitDone auf FALSE gebracht? Ist bInitDone remanent?
Was sollen wir uns unter "Aufrufen" eines DB vorstellen?
Wenn bInitDone statisch ist, dann kannst du den ja auch steuern.
Läuft der Timer, wenn Du bInitDone auf 0 und wieder auf 1 steuerst (obwohl: auf 1 geht er ja automatisch wieder durch Dein Programm).

Ich frage fbTONmyTest.Q bzw. ET in meiner Beobachtungstabelle ab. Das sollte ja funktionieren...

Und ja ich force den bInitDone nur auf FALSE, TRUE geht er dann wieder von Code aus... (also in der Tabelle sieht man nie ein FALSE, da es nur ein einzelner Zyklus ist...)
 
Das weiß ich nicht. Ich habe noch keine S7-1500 programmiert. Und das buggy TIA nutze ich auch noch nicht.

Und ich halte das Aktualisieren der Instanz-Variablen der Timer nur durch Zugriff auf .Q für eine vorschnelle Schnapsidee (möglicherweise auf Wunsch von schlecht ausgebildeten SPS-Programmierern in die Firmware eingebaut?).

Harald

Das ist ja dann wie Schrödingers Katze.... wenn ich nicht in die Schachtel schaue kann die Katze lebendig oder tot sein.
XLOL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das musst du die götter in Petrol fragen.
Meine Beobachtungen bei der 1500er hab ich im von PN/DP verlinkten Tread beschrieben. Warum das so ist, kann dir hier wohl keiner sagen nur vermuten.

Ach du meine Güte... wie will man eine Software schreiben / testen wenn die Beobachtung nicht funktioniert? Funktioniert wenigstens das Online-Debugging?
 
Ach du meine Güte... wie will man eine Software schreiben / testen wenn die Beobachtung nicht funktioniert? Funktioniert wenigstens das Online-Debugging?
Nein reicht nicht, Siehe Huckis Beitrag (Screenshots)
Alles funktioniert wie gewohnt wenn du dich einfach an die (mittlerweile schon oft erwähnte) Regel hältst das Q oder ET abgefragt werden muss.
Code:
#fbTONmyTest(IN := #bInitDone, PT := T#1h, [B][COLOR=#ff0000]Q => "Tag_Q"[/COLOR][/B]);
Schon geht alles wie gewohnt. Kann ja nicht so schwer sein....

Übrigens solltest du auch im Rest des SPS-Programms (Konsistenzgründe) nur mehr "Tag_Q" verwenden.
 
Zuletzt bearbeitet:
Alles funktioniert wie gewohnt wenn du dich einfach an die (mittlerweile schon oft erwähnte) Regel hältst das Q oder ET abgefragt werden muss.
Code:
#fbTONmyTest(IN := #bInitDone, PT := T#1h, [B][COLOR=#ff0000]Q => "Tag_Q"[/COLOR][/B]);
Schon geht alles wie gewohnt. Kann ja nicht so schwer sein....
Übrigens solltest du auch im Rest des SPS-Programms (Konsistenzgründe) nur mehr "Tag_Q" verwenden.

Und wieso muss ich das nicht in einem FB deklarierten FB mit Timer machen?? Also ich hab den OB1 da ruf ich ein FB1 auf, im FB1 ist ein FB2 deklariert, und im FB2 ist ein TON_TIME und dort frage ich weder Q noch ET ab... und es funktioniert. Wenn ich nun den gleichen Timer im FB1 deklariere brauch ich diese Q zuweisung auf eine Temporäre Variable... sont läuft der nicht...
Wie das?
Und vor allem will ich keine Temporärvariablen oder Merker verwenden...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und wieso muss ich das nicht in einem FB deklarierten FB mit Timer machen?? Also ich hab den OB1 da ruf ich ein FB1 auf, im FB1 ist ein FB2 deklariert, und im FB2 ist ein TON_TIME und dort frage ich weder Q noch ET ab... und es funktioniert.

Gleiche CPU? Kann ich kaum glauben. Du fragst Q und ET nicht ab und beobachtest nur die Instanz? In der 1500er?
Was machst du überhaupt mit dem Timer in FB1 wenn du weder Q noch ET abfragst?

Wenn ich nun den gleichen Timer im FB1 deklariere brauch ich diese Q zuweisung auf eine Temporäre Variable... sont läuft der nicht...
Wie das?
Und vor allem will ich keine Temporärvariablen oder Merker verwenden...

Musst du auch nicht, du kannst auch Statische Variablen verwenden. Du kannst auch Q abfragen. Aber beobachten in der VAT ist keine Abfrage. Und bei einer abfrage von Q muss man einfach wissen das diese nicht über den ganzen Zyklus konsistent ist (verhält sich so wie früher wenn man T abgefragt hat)

Code:
IF #timer1.Q THEN

Ist auch eine Abfrage. Macht doch überhaupt keinen Sinn einen Timer zu beobachten der im Programm nur als Füllmaterial aufgerufen wird.

mfG René
 
Zuletzt bearbeitet:
und wieso muss Q oder ET zyklisch abgefragt werden?? Ich dachte zuerst okay, das hat evtl. was mit dem Compiler zu tun, wenn der keine Ausgangsabfrage sieht, performance-optimiert er den Maschinencode und lässt den Aufruf weg. Das wäre ja gar nicht mal so unintelligent... aber das ist ja auch nicht der Fall. Die Ausgangs-Abfrage des Timers MUSS zyklisch erfolgen, sonst wird der Timer-FB unter oder abgebrochen.
Ist das noch ne Leiche im TIA-S7? oder pure Absicht????? im S7-v5.5 ist das ja net so...
 
und wieso muss Q oder ET zyklisch abgefragt werden??

Muss er nicht. Hat auch keiner behauptet. Bei der 1500er muss nichtmal der Timer zyklisch aufgerufen werden (was er bei der 300/400er muss)

Die Ausgangs-Abfrage des Timers MUSS zyklisch erfolgen, sonst wird der Timer-FB unter oder abgebrochen.
Ist das noch ne Leiche im TIA-S7? oder pure Absicht????? im S7-v5.5 ist das ja net so...

Wie kommst du darauf das der Timer-FB abgebrochen wird wenn du nicht abfragst? Es ist einzig die Instanz die nicht aktualisiert wird wenn du nicht abfragst. Der Timer läuft weiter.

Wenn du ET nach 2 sek wieder abfragst sind halt 2 sek abgelaufen und das steht dann auch in der Instanz. In den zwei Sekunden in der ET oder Q nicht abgefragt wird, läuft die Zeit trotzdem, aber in der Instanz sieht man das halt nicht. Aber für das Programm spielt das ja keine Rolle, da interessierts erst zum Aufrufzeitpunkt wie die Zeit nun aussieht.
Das ist ganz klar pure absicht. Great Siemens will offensichtlich die IEC Timer den S7 Timern angleichen um Umsteigern das Programmieren zu erleichtern. Aber wie wir grad sehen ist es deswegen nicht wirklich leichter.

Ja bei der S7v5.5 ist das nicht so. Da kannst du auch keine 1500er projektieren, sonst wärs da auch so.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich dachte zuerst okay, das hat evtl. was mit dem Compiler zu tun
Ist das noch ne Leiche im TIA-S7? oder pure Absicht????? im S7-v5.5 ist das ja net so...
Der große Unterschied zwischen S7 und Tia ist das die Timer dort Systemfunktionsbausteine sind die sich eben wie ganz normale
Multiinstanzfähige-Fbs verhalten. Programmaktualisierung bei Durchlauf.

Die Timer in TIA 1200/1500 scheinen etwas anderes zu sein, auf Grund der jederzeitgen Aktualisierung des Instanz bei Zugriff auf ET und Q.
Wie genau die Implementation aussieht weiß ich nicht, ob es irgendwie in Betriebssystem integriert ist oder ob der TON-FB einmal automatisch aufgerufen wird
sobald man ET und Q abfragt. Das merkwürdige dabei ist auf jeden Fall dass der alleinige Aufruf (ohne ET,Q) des FB nicht das Ergebnis bringt.
Das steckt einfach so in der Firmware der 1200/1500.

Vom Verhalten her sind die Timer also näher an den S7-Timern (S5#T) als an den IEC-FBs aus 300/400.
Warum dieser Mechanismus so ausgelegt wurde musst du bei Siemens fragen, gewisse Vermutungen gibt es ja.

Wie Vollmi schon schrieb, man muss Q, ET nicht zyklisch aktualisieren, eben nur wenn man will das die Timerinstanz doch mal aktualisiert wird.... :cool:
 
Zuletzt bearbeitet:
Zurück
Oben