Übergabe variables 2-dimensionales Array of INT als VAR_IN_OUT

grosser_marco

Level-1
Beiträge
45
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Übergabe variables 2-dimensionales Array of STRUCT als VAR_IN_OUT

Hallo Leute,
ich habe mal wieder eine knifflige Frage.

Ich habe einen Datentyp definiert, der aus 2 INT besteht und den Namen "Typ_Fach" trägt.
Nun habe ich 2 variable 2-dimensionale Arrays of Typ_Fach (also z.B. Datenfeld1: ARRAY [1..3, 1..8] of Typ_Fach und Datenfeld2: ARRAY [1..6, 1..14] of Typ_Fach).
Jetzt will ich diese Arrays als VAR_IN_OUT an einen Funktionsblock übergeben, wobei ich diesen Funktionsblock zweimal aufrufen will, einmal mit Datenfeld1 und einmal mit Datenfeld2.
Im Funktionsblock könnte ich den VAR_IN_OUT entweder mit den Dimensionen von Datenfeld1 oder mit den Dimensionen von Datenfeld2 als ARRAY of Typ_Fach definieren, kann aber dann nur das Array der jeweiligen Dimension übergeben.
Gibt es eine Möglichkeit, die Dimensionen des VAR_IN_OUT im Funktionsblock variabel zu gestalten, so daß ich ihm bei ersten Aufruf das Datenfeld1 und beim zweiten Aufruf das Datenfeld2 übergebe, und dann im Funktionsblock auf die einzelnen Strukturelemente aller Arrayelemente zugreifen kann (z.B. auf die 2.INT-Variable von Datenfeld[2,7]) ????

Danke für eure Hilfe!
 
Zuletzt bearbeitet:
Ich glaube, ich habs gefunden:

Übergabe eines Variablen 2-dimensionalen Arrays an einen Funktionsblock



  1. Maximale Dimensionsgrenzen des Arrays als VAR_GLOBAL CONSTANT deklarieren
    VAR_GLOBAL CONSTANT
    1. RegalMax: INT := 16;
      EtageMax: INT := 30;
END_VAR



  1. Array „Stapelregal“ als Globale Variable definieren
    VAR_GLOBAL
    1. Stapelregal[1..10, 1..16] of INT;
END_VAR



  1. Im Funktionsblock einen Zeiger auf ein Array mit Maximaldimensionen als VAR_INPUT definieren
    VAR_INPUT
    1. Z_Stapelregal; POINTER TO ARRAY[1..RegalMax, 1..EtageMax] of INT;
END_VAR



  1. Im Funktionsblock mittels des Audrucks Z_Stapelregal^[x,y] auf das Element[x,y] des durch den Zeiger adressierten Arrays zugreifen



  1. Bei Aufruf des Funktionsblockes den Pointer mit der Adresse ADR(Stapelregal) des Arrays „Stapelregal“ versorgen.



  1. Es ist sicherzustellen, daß sich die Dimensionen des Regals „Stapelregal“ innerhalb der Maximaldimensionen befinden.


Hinweis: Das Array muß nicht aus INT bestehen, sondern es kann auch als ARRAY OF STRUCT definiert werden, wobei dann im Funktionsblock mit dem Punkt-Operator (.) wie gewohnt auf die Einzelnen Strukturelemente eines Arrayelemnts zugegriffen werden kann!
Dieses Verfahren funktioniert auch für geschachtelte Bausteinaufrufe, sofern der Pointer von Aufruf zu Aufruf weitergegeben wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe es noch nicht ganz verstanden. Du willst doch eigentlich auch ein kleineres Feld in die Funktion reinreichen können. Dann sollte es genügen der Funktion beim Aufruf die Feldgrössen mit reinzureichen.
Am Rande bemerkt: Ein 0-basiertes Feld (array[0..x]) ist immer schneller im Zugriff.
 
Zurück
Oben