Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 3 von 3

Thema: Übergabe variables 2-dimensionales Array of INT als VAR_IN_OUT

  1. #1
    Registriert seit
    16.01.2009
    Beiträge
    45
    Danke
    16
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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!
    Geändert von grosser_marco (08.09.2009 um 20:06 Uhr)
    Zitieren Zitieren Übergabe variables 2-dimensionales Array of STRUCT als VAR_IN_OUT  

  2. #2
    Registriert seit
    16.01.2009
    Beiträge
    45
    Danke
    16
    Erhielt 1 Danke für 1 Beitrag

    Standard

    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.

  3. Folgender Benutzer sagt Danke zu grosser_marco für den nützlichen Beitrag:

    Ralle (08.09.2009)

  4. #3
    Registriert seit
    30.08.2005
    Beiträge
    280
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard


    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.

Ähnliche Themen

  1. Variables Archiv
    Von Wowa05 im Forum HMI
    Antworten: 7
    Letzter Beitrag: 31.03.2010, 11:41
  2. Var_in_out
    Von RobiHerb im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 17.03.2010, 09:45
  3. 2 dimensionales Array
    Von Airpower im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 31.01.2010, 10:19
  4. Warum kann S7 nur 6-dimensionales Feld (Array)?
    Von bischkul im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 26.10.2009, 21:14
  5. Antworten: 21
    Letzter Beitrag: 21.06.2008, 16:54

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •