TIA Unterschied IEC_TIMER und TON_TIME

plc.today

Level-2
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte in einem FB mehrere Einschaltverzögerungen programmieren und dazu Multiinstanzen verwenden.

Siemens schreibt dazu:
"Deklarieren Sie die Timer und die Zähler in dem Baustein, in dem sie aufgerufen bzw. gebraucht werden. Die IEC-Zeit ist eine Struktur vom Datentyp IEC-TIMER, IEC-LTIMER, TON_TIME, oder TON_LTIME, die Sie auch als lokale Variable in einem Baustein deklarieren können."

Ich konnte allerdings nirgends eine Beschreibung finden, wie sich die Datentypen IEC_TIMER und TON_TIME unterscheiden.

Zum Ausprobieren habe ich mir den Baustein FB_Test mit dem Instanzbaustein IDB_Test angelegt und dort folgende statische Variablen deklariert (siehe Bild):

IEC_TIMER.PNG

Aufgefallen sind mir bisher folgende Punkte:

  • Wenn ich eine Variable deklariere, steht im Pulldown "Datentyp" nur IEC_TIMER und IEC_LTIMER zur Auswahl. Ich kann allerdings TON_TIME eintippen, das wird akzeptiert. Ist das nur eine Nachlässigkeit von Siemens, oder hat das einen Grund?
  • Beim Aufruf in AWL wird bei TON_TIME direkt angezeigt, welche Instanz verwendet wird (call #SwitchDelay), bei IEC_TIMER jedoch nicht (call TON, "IDB_Test"). Damit ich beim IEC_TIMER weiß, welche Instanz verwendet wurde, müsste ich einen Kommentar dazuschreiben, sonst ist es nicht nachvollziehbar. Deswegen würde TON_TIME bevorzugt verwenden, oder bringt das auch irgend welche Nachteile mit sich?

Viele Grüße
 
Den ersten Timer hast du also Stat-Var mit den Daten im IDB des aufrufenden FB aufgerufen.
Den zwiten Timer hast du doch aber als FB mit eigenem IDB aufgerufen.
Der deklarierte IEC-Timer wird bei dir gar nicht verwendet. Deine Aussage zu mit dem notwendigen Kommentar verstehe ich daher gar nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ralle,

danke für die schnelle Antwort :-)

ok, anders formuliert:
ich habe in der Schnittstelle des FB_Test folgende statischen Variablen deklariert (siehe auch Bild oben):

SwitchDelay TON_TIME
MyDelay IEC_TIMER


Was unterscheidet diese, und wie muss ich sie jeweils aufrufen, wenn ich damit eine Einschaltverzögerung realisieren will?

Bisher habe ich in S7 classic die S5-Timer verwendet, und davon will ich wegkommen. Ich habe aber noch keine Erfahrung mit TON/TOF und Multiinstanzen.

Gruß,
plc.today
 
Zuletzt bearbeitet:
Grundsätzlich erstellt TIA beim reinziehen eines Timer-Bausteins in einen FB (Anwahl Multiinstanz) automatisch eine IEC-TIMER-Instanz.
Die Type geht sowohl auf TON/TOF als auch auf TP.

TON_TIME man kann aber (zumindest bei mir) sowohl an einen TON, als auch einen TOF anhängen, der Compiler meckert nicht.
Sehr komisch.

Grundsätzlich verwende ich IEC-TIMER da es TIA ja so erstellt.
Zu den Timern im IDB habe auch noch meißt ein Array davon in einem DB.
DbTim - "T" - Array[1..100] of IEC-TIMER
Damit kann man dann auf der laufenden Anlage auch noch einen Timer DbTim.T[24] einbauen ohne dass der IDB angefasst wird.
(Obwohl dass bei TIA eh besser ist als in Classic, aber ich bin da nach wie vor noch vorsichtig)
 
Zuletzt bearbeitet:
Was unterscheidet diese, und wie muss ich sie jeweils aufrufen, wenn ich damit eine Einschaltverzögerung realisieren will?
... Eigentlich keinen ... der Datenaufbau ist gleich...
IECTimer-Aufbau.jpg

Wahrscheinlich kann mach auch deswegen einen "TON_TIME" auf einen TOF-Timer zuweisen und dem Compiler ist's Wurst.
Der Sinn dahinter.... Hmm....
 
Grundsätzlich erstellt TIA beim reinziehen eines Timer-Bausteins in einen FB (Anwahl Multiinstanz) automatisch eine IEC-TIMER-Instanz.

Da gibt es aber Unterschiede, je nach dem, ob ich den TON aus dem "Anweisungen"-Fenster in ein KOP- oder in ein AWL-Netzwerk hineinziehe:
  • KOP: Das Fenster "Aufrufoptionen" poppt auf. Ich wähle zunächst links den Button "Multiinstanz" und kann dann im Pulldown "Name in der Schnittstelle" entweder eine vorhandene Instanz auswählen oder eine neue eintippen, die dann in der Baustein-Schnittstelle angelegt wird.
    • Wenn ich eine Instanz vom Typ IEC_TIMER wähle, wird im Programm oberhalb des Baustein-Symbols angezeigt, welche Instanz verwendet wurde (z. B. "MyDelay"). Dadurch wird der Code auch nachvollziehbar, wenn ich ihn später irgendwann wieder ansehe.
    • Wähle ich eine Instanz vom Typ TON_TIME, stehen über dem Baustein-Symbol zunächst nur <???>. Ich kann auf die Fragezeichen klicken und im dann erscheinenden Pulldown z. B. "SwitchDelay" auswählen. Diese erscheint dann zunächst mit einem Punkt ("SwitchDelay."), als ob sie noch eine weitere Eingabe erwarten würde. Die Eingabe lässt sich mit Enter nicht abschließen (Fehlermeldung "Unerwartetes Eingabeende"). Wenn ich den Punkt mit Backspace entferne, lässt sich die Eingabe dann doch abschließen, und oberhalb des Bausteins wird "SwitchDelay" angezeigt wie bei der Instanz vom Typ IEC_TIMER.
  • AWL: Wenn ich den TON ins Netzwerk ziehe, erscheint kein Popup, sondern im Netzwerk CALL TON ... Das Popup "Aufrufoptionen" kommt erst, wenn ich in der nächsten Zeile auf die drei Fragezeichen klicke und "Time" auswähle. Im Popup wähle ich wieder "Multiinstanz" und kann dann im Pulldown "Name in der Schnittstelle" wie bei KOP die Instanz auswählen.
    • Wähle ich eine Instanz vom Typ IEC_TIMER, erscheint der Name der Instanz in Rot: CALL #myDelay und die Fehlermeldung "Operanden mit strukturiertem Datentyp können nicht verwendet werden.
    • Bei einer Instanz vom Typ TON_TIME steht CALL TON und die Fehlermeldung "FB braucht die Angabe eines Instanz-DBs in CALL-Zeile".
    • Schreibe ich direkt im Netzwerk (ohne Drag&Drop) CALL #SwitchDelay, (Typ TON_TIME) so wird dieses akzeptiert.
Das erscheint mir alles nicht so recht konsistent zu sein, oder mache ich da etwas falsch?
Ich will eigentlich nur eine Einschaltverzögerung in AWL unter Verwendung von Multiinstanzen programmieren.
 
Ich habe heute zum wiederholten Male die Hilfe des TIA-Portals durchgelesen, da fiel es mir endlich wie Schuppen von den Augen:

"Eine IEC-Zeit ist eine Struktur vom Datentyp IEC_TIMER, IEC_LTIMER, TON_TIME
oder TON_LTIME, die Sie wie folgt deklarieren können:

  • Deklaration eines Datenbausteins vom Systemdatentyp IEC_TIMER oder IEC_LTIMER
    (z. B. "MyIEC_TIMER")
  • Deklaration als lokale Variable vom Typ TON_TIME, TON_LTIME, IEC_TIMER oder
    IEC_LTIMER im Abschnitt "Static" eines Bausteins (z. B.
    #MyIEC_TIMER)"
Das heißt: Wenn man den Timer in der Schnittstelle eines Funktionsbausteins deklariert (Multiinstanz) muss der Datentyp "TON_TIME" verwendet werden, wird der Timer in einem separaten Datenbaustein deklariert, muss der Typ "IEC_TIMER" sein.

Hilfe lesen hilft ;): Frage beantwortet, Problem gelöst :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
  • Deklaration als lokale Variable vom Typ TON_TIME, TON_LTIME, IEC_TIMER oder
    IEC_LTIMER im Abschnitt "Static" eines Bausteins (z. B.
    #MyIEC_TIMER)"

Ich hätte genauer lesen sollen: Bei Multiinstanzen ist sowohl der Typ "TON_TIME" als auch "IEC_TIMER" möglich. Das konnte ich für KOP nachvollziehen, jedoch nicht für AWL (siehe Bild):

TON.PNG
 
Zurück
Oben