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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Funktion Count/Len/Length um Anzahl der Elemente in einem Array auszulesen

  1. #1
    Registriert seit
    20.09.2005
    Beiträge
    63
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich bin gerade dabei ein Projekt im TwinCat zu programmieren und wollte dabei, wie in Hochsprachen üblich, die Größe eines Arrays ermitteln. Leider kann ich keine Funktion (Count/len/Length (Array() ) finden die mir das übernimmt. Gibt es da so eine Funktion?

    Dank im Voraus für die Antworten.

    Grüße
    Daimonion
    Zitieren Zitieren Funktion Count/Len/Length um Anzahl der Elemente in einem Array auszulesen  

  2. #2
    Registriert seit
    17.03.2011
    Ort
    im Wald
    Beiträge
    284
    Danke
    11
    Erhielt 36 Danke für 35 Beiträge

    Standard

    Hallo,

    hatte auch mal so eine Idee, ist aber nicht. (Antwort ist nicht von Beckhoff geprüft).

    Wenn es geht, dann bitte auch die Funktion zum setzen der Feldgröße im Quelltext wie z.B. SetLength(Variable, neue Größe).

    Gruß

  3. #3
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    SIZEOF(myVar) liefern die Datengröße des Arrays. Das geteilt durch die Größe eines einzelnen Array-Elements liefert die Anzahl der Elemente:
    (reine Mathematik)

    Code:
    VAR
        myArr : ARRAY [1..4] OF INT;
        size: INT;
        ElementCount: INT;
    END_VAR
    ----------------------
    size:= SIZEOF(myArr);
    
    ElementCount := size/ SIZEOF(myArr[1]);
    Array-Größe dynamisch zur Laufzeit ändern geht nicht. Ist glaube ich per se bei SPSen nicht möglich (Norm)?

  4. #4
    Registriert seit
    17.03.2011
    Ort
    im Wald
    Beiträge
    284
    Danke
    11
    Erhielt 36 Danke für 35 Beiträge

    Standard

    Nun einmal Sorry, für den dummen Kommentar.

    Warum sollte ein Programmierer eine Feldgröße abfragen können, wenn sie nicht verändert werden kann. Das heißt, sie wurde vom Programmierer definiert, also bekannt. Was für ein Blödsinn des Systems.

    Gruß

  5. #5
    Registriert seit
    12.04.2010
    Beiträge
    300
    Danke
    22
    Erhielt 54 Danke für 52 Beiträge

    Standard

    Hi,

    wenn z.B. 2 Maschinen mit Unterschiedlichen Optionen compiliert werden, könnte das Array myArr einmal 10, das andere mal 20 Elemente enthalten.

    wenn du diese Möglichkeit hast, dann braucht man es meiner Meinung nach nicht.
    Code:
     
    #define MAX_ARR 10            ; Typ-1
    oder
    #define MAX_ARR 20            ; Typ-2
    myArr = INT[0...MAX_ARR];
     
    ...
    loop index = 0 to MAX_ARR - 1 do
       myArr[index] .....
    endloop
    wenn du aber so deklarieren musst

    Code:
     
    myArr = INT[10];              // Typ=1
    oder
    myArr = INT[20];              // Typ=2
     
    ...
    loop index = 0 to ELEMENT-COUNT do
       myArr[index] .....
    endloop
    Dann macht das Sinn. Sonst musst du halt x-mal Code-Änderungen machen, mit beiden Methoden gehts sonst 'automatisch'

    bg
    bb
    Geändert von bits'bytes (08.07.2011 um 16:05 Uhr) Grund: Ergänzung

  6. #6
    Registriert seit
    17.03.2011
    Ort
    im Wald
    Beiträge
    284
    Danke
    11
    Erhielt 36 Danke für 35 Beiträge

    Standard

    Ja, das sehe ich.

    Aber trotzdem sollte der Programmierer wissen was er tut.

    Nun, dann wäre halt der Wunsch das Feld selbst zu definieren.

    Gruß

  7. #7
    Registriert seit
    12.04.2010
    Beiträge
    300
    Danke
    22
    Erhielt 54 Danke für 52 Beiträge

    Standard


    Aber trotzdem sollte der Programmierer wissen was er tut.
    Ja eh, hoffentlich

    die Frage ist mit welchem Aufwand du das schaffst,

    Ändere ich einmal 10 --> 20

    oder

    muss ich 17 mal im Code alles nachbessern nur weil die Arraygröße fix eingetragen wurde....

    bg
    bb

  8. #8
    Registriert seit
    17.03.2011
    Ort
    im Wald
    Beiträge
    284
    Danke
    11
    Erhielt 36 Danke für 35 Beiträge

    Standard

    @bits, haste vollkommen Recht.

    Also, wäre die Lösung man kann die Feldgröße verändern, nach den Bedürnissen. Ist üblich bei vielen anderen Sprachen. Wurde das hier vergessen ?

    Gruß

  9. #9
    Registriert seit
    02.02.2007
    Beiträge
    104
    Danke
    12
    Erhielt 16 Danke für 13 Beiträge

    Standard

    Zitat Zitat von Voxe Beitrag anzeigen
    Hallo,

    hatte auch mal so eine Idee, ist aber nicht. (Antwort ist nicht von Beckhoff geprüft).

    Wenn es geht, dann bitte auch die Funktion zum setzen der Feldgröße im Quelltext wie z.B. SetLength(Variable, neue Größe).

    Gruß
    Dynamische Speicherverwaltung ist in der IEC Norm nicht vorgesehen.
    In TwinCAT 3 wird sie aber in Grenzen zur Verfügung stehen.
    Beim Steuerungshochauf kann dann einmal die Größe eines Arrays festgelegt werden.

    Damit heist es mal wieder warten oder drauf verzichten.

    Gruß

    dummy

  10. #10
    Registriert seit
    17.03.2011
    Ort
    im Wald
    Beiträge
    284
    Danke
    11
    Erhielt 36 Danke für 35 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @dummy, Danke für diese Antwort.

    Du hast mir bestätigt, es macht Sinn. Also weiter warten auf TwinCAT3.

    Gruß

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 21.12.2016, 17:03
  2. Funktion mit Array-Rückgabewert
    Von cas im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 25.03.2011, 12:07
  3. Antworten: 0
    Letzter Beitrag: 06.10.2009, 06:32
  4. Antworten: 1
    Letzter Beitrag: 14.12.2005, 21:42
  5. Anzahl der 1sen iin einem Byte.
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 01.09.2005, 14:29

Lesezeichen

Berechtigungen

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