Damit steht die 100 in EinDimArray[1]. Wenn du ganze Felder übergeben möchtest könntest du das alles noch in eine Schleife betten. Vielleicht hilft dir das ein Stückchen weiter oder bringt dich auf neue Ideen. Rückmeldung wäre gut.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2007-08-01
Originally created by: Bernhard Werner
Hallo guerillero,
es gibt zwei Schreibweisen um mehrdimensionale Arrays zu definieren:
arrtest1 : ARRAY[0..3,0..5] OF INT;
arrtest2 : ARRAY[0..3] OF ARRAY[0..5] OF INT;
ich glaube, dass der zweite Fall so von der IEC nicht gemeint war, die Syntax schliesst das aber auch nicht aus. Wir lassen jedenfalls beides zu.
Der zweite Fall hat den Vorteil, dass man auch auf die einzelnen Dimensionen zugreifen kann:
FUNKTION(Y:=arrtest2[0]);
Beim ersten Fall gibt es einfach keine Syntax dafür. Trotzdem sollten Strukturen und Felder immer per Pointer an Funktionen übergeben werden! Wenn das Feld als Wert übergeben wird, dann muss dieses jedesmal gesamt kopiert werden. Das kostet viel Zeit!
Bernhard
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Danke für die hilfrecihen Antworten. Leider hat das Projekt an einer anderen Stelle gehakt und ich kam erst jetzt dazu mich mit diesem Problem weiter auseinander zu setzten.
Die Variablen werden Jetzt als POINTER TO ARRAY [0..7] OF BYTE übergeben. Das ist einfacher als die einzelnen Variablen in einer Schleife zu übergeben und funktioniert einwandfrei. Der Pointer Zeigt auf eine Dimension des zweidimensionalen Arrays.
Nochmal Danke für die schnelle Hilfe
Gruß
Michael Pajonk
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
wie kann man einer Funktion die eindimensionale Arrays verarbeitet eine Dimension eines zweidimensionalen Arrays übergeben?
Zweidimensionales X: ARRAY[0..8,0..8] OF BYTE;
in der Funktion FUNKTION, Y: ARRAY[0..8] OF BYTE;
es funktioniert folgendes nicht:
FUNKTION(Y:=X);
FUNKTION(Y:=X[0]);
FUNKTION(Y[0]:=X[0,0]);
Wie wird es dann gemacht? Geht das überhaupt?
Gruß
Michael Pajonk
Hallo, du könntest einen Zeiger übergeben.
zum Beispiel:
PLC_PRG:
VAR
ZweiDimArray: ARRAY [0..8,0..8] OF INT;
Zeiger: POINTER TO INT;
( Instanzen )
test: test;
END_VAR
( Code )
ZweiDimArray[1,2] := 100; ( mal so zum probieren )
Zeiger := ADR (ZweiDimArray[1,2]);
test (Zeiger := Zeiger);
FB test:
VAR_INPUT
EinDimArray: ARRAY [0..8] OF INT;
Zeiger: POINTER TO INT;
END_VAR
( Code )
EinDimArray[1] := Zeiger^;
Damit steht die 100 in EinDimArray[1]. Wenn du ganze Felder übergeben möchtest könntest du das alles noch in eine Schleife betten. Vielleicht hilft dir das ein Stückchen weiter oder bringt dich auf neue Ideen. Rückmeldung wäre gut.
m.f.g. Nick
Related
Talk.ru: 1
Originally created by: Bernhard Werner
Hallo guerillero,
es gibt zwei Schreibweisen um mehrdimensionale Arrays zu definieren:
arrtest1 : ARRAY[0..3,0..5] OF INT;
arrtest2 : ARRAY[0..3] OF ARRAY[0..5] OF INT;
ich glaube, dass der zweite Fall so von der IEC nicht gemeint war, die Syntax schliesst das aber auch nicht aus. Wir lassen jedenfalls beides zu.
Der zweite Fall hat den Vorteil, dass man auch auf die einzelnen Dimensionen zugreifen kann:
FUNKTION(Y:=arrtest2[0]);
Beim ersten Fall gibt es einfach keine Syntax dafür. Trotzdem sollten Strukturen und Felder immer per Pointer an Funktionen übergeben werden! Wenn das Feld als Wert übergeben wird, dann muss dieses jedesmal gesamt kopiert werden. Das kostet viel Zeit!
Bernhard
Hallo,
Danke für die hilfrecihen Antworten. Leider hat das Projekt an einer anderen Stelle gehakt und ich kam erst jetzt dazu mich mit diesem Problem weiter auseinander zu setzten.
Die Variablen werden Jetzt als POINTER TO ARRAY [0..7] OF BYTE übergeben. Das ist einfacher als die einzelnen Variablen in einer Schleife zu übergeben und funktioniert einwandfrei. Der Pointer Zeigt auf eine Dimension des zweidimensionalen Arrays.
Nochmal Danke für die schnelle Hilfe
Gruß
Michael Pajonk