Definition und Funktionsweise:
Call-by-Reference (Übergabe als Referenz oder Übergabe nach Adresse) ist ein Mechanismus zur Parameterübergabe an Funktionen, Funktionsbausteine oder Unterprogramme in der Programmierung. Dabei wird nicht der Wert einer Variable an die aufgerufene Routine übergeben, sondern die Speicheradresse der Originalvariable.
Wenn die aufgerufene Routine den Wert des übergebenen Parameters ändert, wirkt sich diese Änderung direkt auf die Originalvariable im aufrufenden Programm aus. Beide referenzieren denselben Speicherbereich.
Vorteile und Nachteile:
- Vorteile:
- Effizient bei großen Datenstrukturen: Es muss nicht der gesamte Inhalt einer großen Datenstruktur (z.B. eines Arrays oder einer komplexen UDT) kopiert werden, sondern nur die Adresse. Dies spart Speicherplatz und Rechenzeit.
- Rückgabe mehrerer Werte: Ermöglicht einer Funktion, mehrere Werte an das aufrufende Programm zurückzugeben, indem sie die über Referenz übergebenen Variablen direkt modifiziert.
- Nachteile:
- Potenzielle Seiteneffekte: Da die aufgerufene Routine direkten Zugriff auf das Original hat, können unbeabsichtigte Änderungen der übergebenen Variablen auftreten, die schwer nachzuvollziehen sind („Seiteneffekte“).
- Komplexere Fehlersuche: Kann die Fehlersuche erschweren, da eine Variable an verschiedenen Stellen im Programm verändert werden kann.
Relevanz in der SPS-Programmierung:
In der SPS-Programmierung wird Call-by-Reference häufig verwendet, insbesondere wenn:
- Große Datenmengen wie Arrays, Strukturen oder Datenbausteine an Funktionsbausteine übergeben werden.
- Ein Funktionsbaustein mehrere Ergebnisse zurückgeben soll, ohne dass dafür ein komplexer Rückgabetyp definiert werden muss.
- Direkter Zugriff auf Hardware-E/A oder Merker erforderlich ist.
Programmiersprachen wie Strukturierter Text (ST) unterstützen Call-by-Reference oft explizit (z.B. mittels VAR_IN_OUT-Deklarationen). Das Verständnis dieses Mechanismus ist entscheidend für das Schreiben effizienter, aber auch sicherer SPS-Programme.
→ Siehe auch: Call-by-Value, Parameterübergabe, Variable, Datentyp, SPS-Programmierung, Funktionsbaustein (FB)

