call-by-reference Beckhoff?

gingele

Level-1
Beiträge
227
Reaktionspunkte
42
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

hat jemand von euch schon mal mit call-by-reference in beckhoff gearbeitet, bzw. geht das prinzipiell. Wenn man mit Pointern arbeitet handelt es sich eben nur um call-by-value wie ich schon feststellen musste.
 
OK habs rausbekommen, bzw. so hab ich mir das vorgestellt:

Wenn ich z.B. eine INT-Variable hab, will ich diese überall hochzählen können ohne das ich eine Kopie erstelle.

Code:
VAR
var_int1 : INT :=0;
pt1 : POINTER TO INT;
END_VAR

pt1:=ADR(var_int1);
pt1^:=pt1^+1;

var_int1; (*wird bei pt1^:=pt1^+1; hochgezählt*)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OK habs rausbekommen, bzw. so hab ich mir das vorgestellt:

Wenn ich z.B. eine INT-Variable hab, will ich diese überall hochzählen können ohne das ich eine Kopie erstelle.

Code:
VAR
var_int1 : INT :=0;
pt1 : POINTER TO INT;
END_VAR

pt1:=ADR(var_int1);
pt1^:=pt1^+1;

var_int1; (*wird bei pt1^:=pt1^+1; hochgezählt*)


Hallo gingle,

irgendwie verstehe ich deine beiden Beiträge nicht.
Den Begriff Call by reference kenne ich nur bei der Übergabe von Parametern an eine Funktion. Die sehe ich bei dir nicht.

Wenn Du es aber so meintest, kannst Du auch den Übergabeparameter als In-Out deklarieren. Dann kannst Du aus der Unterfunktion auf den übergebenden Parameter zugreifen. Ohne Pointer!

Gruß

dummy
 
Ich wollte eigentlich die Funktionsweise von call-by-reference. Das Beispiel habe ich nur vereinfacht reingeschrieben. Wenn ich aber pt1 als Inputvariable an einen FB übergebe und dort hochzähle, so wird dieser in dem FB sowie auch in dem aufrufenden FB hochgezählt. Und das war die Funktion die ich wollte.

Wenn ich das als In-Out deklariere so muss ich in der Funktion erneuten Speicher allokieren,dies will ich eben vermeiden. Klar dreht sich dieses Beispiel nur um einen Intager-Wert, aber ich will dies allgemein nutzen können.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habs gerade getestet und musste Feststellen das ich die ganze Adressenbitschubserei quasi umsonst gemacht habe :rolleyes:.

In-Out Variable Funktionieren gleich, habs gerade getestet, ihr hattet recht. Ich dachte das ich da eben zusätlichen Speicher allokiere, war ein Denkfehler ist eigentlich auch logisch.

Zumindest habe ich was über die Pointer in Beckhoff gelernt.;)
 
Habs gerade getestet und musste Feststellen das ich die ganze Adressenbitschubserei quasi umsonst gemacht habe :rolleyes:.

In-Out Variable Funktionieren gleich, habs gerade getestet, ihr hattet recht. Ich dachte das ich da eben zusätlichen Speicher allokiere, war ein Denkfehler ist eigentlich auch logisch.

Zumindest habe ich was über die Pointer in Beckhoff gelernt.;)

Grundsätzlich sollte man Pointer nur verwenden, wenn es notwendig ist. Es besteht immer die Gefahr, beim Online-Change auf die Nase zu fallen.
Man sollte dann schon sehr genau wissen, was man tut.

Ansonsten würde ich es gut finden, wenn Du dein Beispiel korrigiert hier rein stellst. Ich denke es liest hier der eine oder andere mit der es sonst nicht versteht.

Gruß

dummy
 
Zurück
Oben