TIA 1500er CPUs interne Realisierung von Timer

Fluffi

Level-2
Beiträge
453
Reaktionspunkte
69
Ich stelle mir schon lange die Frage wie Timer, genauer gesagt die guten alten Legacy-Timer (nicht IEC, wobei die Unterscheidung hier wohl keine Rolle spielen dürfte) auf einer Siemens CPU eigentlich genau realisiert werden. Da ich aktuell nur noch 1500er CPUs einsetze (mit TIA V15.1) bezieht sich die Frage eher auf diese CPU-Generation. Auf microControllern laufen spezielle Timer bzw. Zeitfunktionen ja gerne direkt in Hardware-Registern ab (ich meine jetzt keine Interrupts), sprich die CPU koppelt diese mit dem CPU Takt und es besteht nur ein sehr geringer oder eigentlich gar kein Overhead für Berechnung. Ist das bei Siemens auch ein (größtenteils) hardwarebasierender Vorgang auf der CPU, oder laufen diese auf dem OS der CPU in reiner Software ab, wo die Berechnungszeit sich in Abhängigkeit der Anzahl der verwendeten Timer erhöht. Ich stelle deshalb diese Frage, da ich gerne sehr viele Timer einsetze und mich immer frage, ob das nicht irgendwann "zuviele" sind, auch wenn ich deswegen noch keine direkten Probleme mit der Zykluszeit hatte, sofern ich das abschätzen kann. Ist das eher schlecht für die Zykluszeit und Performance, oder ist im großen und ganzen die Anzahl vernachlässigbar. Es könnte ja sein, dass die Timer vom System aus alle sowieso reserviert sind und schlussendlich es egal ist ob man einen oder 500 benutzt, da immer alle pro kleinster Zeiteinheit intern durchgenudelt werden.
 
Also wenn ich es richtig verstanden habe, laufen die "alten" Timer im OS der CPU und verwenden dort speziell reservierte Speicherplätze während die IEC-Timer reine Softwarefunktionen sind, weswegen sie auch entsprechende Instanzen (DB, Multiinstanz) brauchen.
 
Ohne genau zu kennen, wie die interne Verarbeitung der Legcy-Timer genau läuft, aber mit viel Erfahrung im Bereich Coden und Kompilieren stelle ich einfach mal eine Hypothese auf:
(gesützt auf 2 Zitate aus der TIA-Hilfe)


Ich ziehe daraus folgende Schlüsse:
  1. Für die Legacy-Timer ist ein eigener Speicherbereich vorgesehen, der vom Betriebssystem im Hintergrund bearbeitet wird. Es ist sicherlich keine spezialisierte Hardware verbaut. Realistischerweise wird er Compiler, sobald Legacy-Timer vorhanden sind, einen oder mehrere Interrupts (nennen wir sie OBs) anlegen welche die aktiven Timer im Hintergrund je nach Zeitbasis durchiteriert. Es wird also Rechenzeit verbraten.
  2. Die IEC-Timer sind ganz normale Instruktionen (in Alt-Sprache: FB-Aufrufe), zu denen der Compiler Code baut und die schätzungsweise auf einem System-Tick-Zähler aufsetzen. Immer dann, wenn auf die Ausgänge ET oder Q zugegriffen wird, ruft der Compiler die gleiche Instruktion implizit auf, um die Ausgänge der Instruktion neu ausrechnen zu lassen (um so das eigentlich sinnlose asynchrone Verhalten der Legacy-Timer auch in der neuen Welt zu übernehmen).

Aus Sicht der Effizienz sehe also 2 Dinge:
  1. Legacy-Timer = Pfui, da sie zusätzliche Interrupt-Last erzeugen.
  2. IEC-Timer ja, aber nur in kompakter Form, wo beim Aufruf alle Ausgänge direkt beschaltet werden. Nachfolgender Code (aus der Siemens Hilfe) sollte das veranschaulichen

Code:
// gut:
"TON_DB".TON(IN := "Tag_Start", PT := "Tag_PresetTime", Q => "Tag_Status", ET => "Tag_ElapsedTime");

// böse:
"TON_DB".TON(IN := "Tag_Start", PT := "Tag_PresetTime");
"Tag_Status" := "TON_DB".Q;
"Tag_ElapsedTime" := "TON_DB".ET;
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…