Größe eines ARRAY zur Laufzeit bestimmen?

c.reps
2008-07-30
2008-07-30
  • c.reps - 2008-07-30

    Hallo liebe Community,

    ich habe folgende Frage:

    Kann man die Größe eines ARRAY irgendwie zur Laufzeit bestimmen?

    Ich möchte Werte aus einer Datei einlesen.

    Doch kann die Datei unterschiedlich lang sein (unterschiedliche Zeilenanzahl besitzen). Zu Beginn der Anwendung lese ich die Datei Byteweiße aus. Immer wenn ein EndLine-Zeichen kommt lass ich eine Variable (maxZeilen) erhöhen. So ermittle ich die Länge der Zeilen -> dies funktioniert auch.

    doch nun definiere ich folgende Variable:

    VAR 
          Daten: ARRAY [1..maxZeilen] OF ...;
    END_VAR
    

    Wenn ich das Programm nun übersetzte bekomme ich die Fehlermeldung:

    "...Obergrenze 'maxZeilen' unbekannt"

    Daher meine Frage, ob man die Länge eines ARRAY zur Laufzeit bestimmen kann?

    Hoffe Ihr könnt mir weiterhelfen.

     
  • hugo - 2008-07-30

    die länge eines arrays muss beim compilieren bekannt sein.

    du kannst [0..max] verwenden wenn max eine konstante ist.

    es gibt eine möglichkeit unterschiedlich große arrays in bausteinen zu verarbeiten indem du einen pointer auf das array und die größe des arrays übergibst.

    z.B. aufruf(adr(arrayx), sizeof(arrayx));

    hier übergibst du einen pointer auf das array und die größe in bytes des arrays. das array selbst ist aber zur koimpilation festgelegt.

    hiermit kannst du in einem baustein unterschiedliche arrays bearbeiten.

    in der freien lib oscat.lib unter w www.oscat.de w findest du einige beispiele hierzu bei array funktionen

     
  • c.reps - 2008-07-30

    so,

    habe mir die oscat275_codesys2.lib heruntergeladen und eingebunden um mir mal das mit dem _array_init anzuschauen.

    leider bekomme ich beim übersetzen eine Fehlermeldung:

    Fehler 3150: Parameter 1 der Funktion 'LEFT': Das Ergebnis einer IEC-Funktion kann nicht als Stringparameter einer C-Funktion übergeben werden.
    

    Was habe ich falsch gemacht, bzw. wie kann man dies beheben?

     

Log in to post a comment.