Dann wollen wir doch mal ein bisschen Licht ins Dunkel bringen:
Ein VAR_IN_OUT ist in
CODESYS einfach realisiert als POINTER auf die übergebenen Daten. Der Zugriff darauf benötigt eine Dereferenzierung
mehr als der direkte Zugriff.
Bei VAR_INPUT wird der Wert kopiert.
Will man unabsichtliches verändern des übergebenen Wertes verhindern, dann kann man VAR_IN_OUT CONSTANT verwenden
(seit Version 3.5.2.0). Auf so eine Variable darf nicht geschrieben werden.
Wenn man eine Struktur (oder FB oder STRING) an eine Funktion (oder FB) übergibt, dann ist es in aller Regel sinnvoll, das per VAR_IN_OUT zu tun.
Der Aufruf geht viel schneller und der Zugriff auf die Struktur per VAR_IN_OUT ist kaum langsamer.
Allenfalls wenn immer alle Werte einer Struktur verarbeitet werden und vielleicht sogar mehrfach darauf zugegriffen wird
könnte es vorteilhaft sein die Struktur zu kopieren. Der Speicherverbrauch ist in jedem Fall höher.
Ein Interface ist vermutlich nicht sinnvoll, wenn man nur den Zugriff auf Daten bieten will. Der Zugriff auf eine Eigenschaft eines Interfaces
entspricht immer einem Funktionsaufruf und ist dementsprechend deutlich langsamer als der Zugriff auf ein Strukturelement.
Interfaces sollte man dann verwenden wenn man Code schreibt, der verschieden implementierte FB's verwendet, die gemeinsame Eigenschaften haben.
Ein Beispiel habe ich schon mal in diesem Thread beschrieben:
http://www.sps-forum.de/codesys-und-iec61131/69842-codesys-objektorientiertes-programmieren.html
Ich finde es vor allem dann sehr sinnvoll, mit Interfaces zu arbeiten, wenn man Bibliotheken schreibt.
Viele unserer Kunden entwickeln ganze Bibliothekslandschaften und da kann es sehr sinnvoll sein, dass die Bibliotheken mit gemeinsamen
Interfaces arbeiten.
Überhaupt muss man feststellen dass sich die ganze Power der Objektorientierung an einem einzelnen Projekt oft nicht gut darstellen lässt.
Die Vorteile kommen zum Tragen wenn man weiterentwickelt, Varianten produziert, standardisierte Abläufe hat, wenn Teams an Projekten
arbeiten und wenn Teams an Bibliotheken arbeiten.