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

max Array index?

c.reps
2009-02-19
2009-02-21
  • c.reps - 2009-02-19

    Hallo Gemeinde,

    hab schon wieder eine Frage, hoffe ich mach mich jetzt nicht lächerlich.

    Gibt es in CoDeSys eine Funktion die mir den höchsten Index von einem Array ausgibt, also hab ein ARRAY [0..9] of String und die Funktion soll mir halt als maxIndex die 9 liefern.

     
  • bonatus - 2009-02-19

    Hallo,

    Für was brauchst du eine solche Funktion?

    Wenn du ein Array hast, ist dieses durch die Größe durch in der Deklaration festgelegt.

    gruß bonatus

     
  • hugo - 2009-02-19

    nein gibt es nicht direkt

    aber es gibt eine funktion die dir die größe des arrays in bytes liefert

    sizeof(arrayname) da du die größe der elemente kennst kannst du dir den max index ausrechnen

     
  • c.reps - 2009-02-19

    @bonatus:

    ich wollte die größe einfach nicht fest eintragen, daher die überlegung.

    @hugo: danke für den tip. hätte ich auch selber drauf kommen können.

    Bin ich froh, dass sich immer jemand findet der einem hilft

     
  • hugo - 2009-02-19

    wir haben ähnliches gemacht um beliebige buffer zu verarbeiten.

    das problem ist wenn du ein array of byte an einen baustein übergeben wisst meckert der compiler wenn die beiden arrays nicht 100% gleiche größe und typ haben.

    unsere buffer oder array bausteine arbeiten wie folgt mit beliebigen arrays:

    var_input

    ptr : pointer to array[0..32000] of byte

    size : dword;

    end_var

    an ptr geht dann die funktion adr(eingangsarray)

    an size geht die funktion sizeof(eingangsarray)

    damit kannst du jedes beliebige array übergeben

    es wird nicht einmal übergeben, spart sogar speicher und kopierzeit.

    allerdings vorsicht:

    mit pointern ist extreme vorsicht geboten du kannst jederzeit auf unerlaubte adressen zugreifen

    sizeof und adr sind keine iec standard funktionen, sie gibt es nur in codesys

    du kannst dir unseren code ansehen in der open source lib von oscat

    w www.oscat.de w

     
  • mwatermann - 2009-02-20

    neben SIZEOFgibts auch noch die fkt LEN. diese liefert dir den kompletten, tatsächlichen byte bedarf einer variablen.

    nur für den fall, dass du sowas auch brauchst...

     
  • hugo - 2009-02-20

    len ist nur für den datentyp string definiert

    len kann nicht die größe von variablen oder arrays zurückgeben

     
  • Anonymous - 2009-02-21

    Originally created by: Andy :-)

    Hallo,

    Du könntest Dein Array auch mit einer Konstanten deklarieren...

    z.B:

    VAR_CONST

    maxArray := 10;

    VAR_END

    myArray :Array[0..maxArray] of INT

    mfg

    Andreas

     

Log in to post a comment.