Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Array an eine Funktion übergeben

guerillero
2007-07-27
2007-08-17
  • guerillero - 2007-07-27

    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

     
  • Nick - 2007-07-31

    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

  • 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

     
  • guerillero - 2007-08-17

    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

     

Log in to post a comment.