Eine prinzipielle Frage zu SPS Programmen in ST

RobiHerb

Level-2
Beiträge
679
Reaktionspunkte
113
Zuviel Werbung?
-> Hier kostenlos registrieren
Es gibt, wenn man in ST programmiert 3 POU Typen, PROGRAM, FUNCTION_BLOCK, FUNCTION.

PROGRAM ist:
immer impizit instanziert,
einmal nur vorhanden (Singleton)
kann mit Parametern aufgerufen werden,
kann Werte zurück geben,
sollte eigentlich auf der obersten Ebene aufgerufen werden,
ist aber aus anderen PROGRAM oder FUNCTION_BLOCK aufrufbar.

FUNCTION_BLOCK ist:
explizit zu instanzieren,
beliebige Anzahl von Instanzen,
kann als einzige POU mit VAR_IN_OUT aufgerufen werden,
gibt direkt keine Werte zurück, VAR_OUT aber möglich,
kann weitere andere (oder auch gleiche) FUNKTION_BLOCKs instanzieren,
kann zusätzlich PROGRAM und FUNCTION aufrufen.

FUNCTION ist:
nie instanziert,
kann beliebig oft und von überall aufgerufen werden,
kann keine FUNCTION_BLOCK aufrufen, da die Instanzierung derselben nicht eindeutig möglich ist.

Frage nun, darf man/sollte man es zulassen, dass eine FUNCTION ein ja impliziert instanziertes PROGRAM aufruft?

Damit könnte man ja dann aus dem PROGRAM wiederum POU vom Typ FUNCTION_BLOCK instanzieren, die wären zwar auch Singletons jeweils ...
 
Hab grad mal in den IEC-Standard reingeschaut, weil ich letztens auch schonmal auf die Idee gekommen bin ein "PROGRAM" für etwas anderes zu verwenden.

Der Standard sagt unter anderem:
Programs can only be instantiated within resources, as defined in 2.7.1, while function blocks
can only be instantiated within programs or other function blocks.

Eine Ressource ist z.B. ein Task.
Demnach ist es nach Standard eigentlich nicht erlaubt das was bei Codesys möglich ist (aber sonst ist Codesys auch nicht voll nach Norm).
Da in einem FUNCTION_BLOCK so gut wie alles möglich ist was auch in einem PROGRAM möglich ist, würde ich PROGRAM auch nur so verwenden wie vorgesehen. Wenn jemand fragt warum, kann man sich auf die Norm beziehen.
 
Zurück
Oben