Zip Datei in Codesys 2.1 platzsparend einbinden

2009-01-20
2009-01-21
  • Ingo Sundermann - 2009-01-20

    Hallo,

    ich versuche eine ZIP-Datei in unserem Steuerungsprogramm (unter Codesys 2.1) abzulegen.

    Der erste Versuch belegt extrem viel Speicherplatz (für 1408 Bytes ca. 30KB Speicherplatz)

    VAR CONST

    file:ARRAY[1..1408] OF BYTE := 16#50,16#4B,16#03,16#04,16#14,16#00,16#08,....,16#00,16#00;

    END_VAR

    Der zweite Versuch scheint, was den Speicherplatz angeht optimal zu sein:

    VAR CONST

    file : ARRAY[1..11] OF STRING[128] :=

    '$50$4B$03$04...$14$00'

    '$4D$3C$CC...$B1$87$01'

    ...

    '$FF$FC$72$3C...$E7$CC$07';

    END_VAR

    Allerdings wird nach der ersten Null (beim Einloggen) der String terminiert !

    Ich kann die 'echten Nullen' aber nicht vermeiden.

    Der dritte Versuch belegt den doppelten Speicher von Versuch 2 und ist damit auch nur ein Kompromiss:

    VAR CONST

    file : ARRAY[1..11] OF STRING[128] :=

    '504B0304...1400'

    '4D3CCC...B18701'

    ...

    'FFFC723C...E72C07';

    END_VAR

    Gibt es hier eine effektive Lösung ?

     
  • bschuster - 2009-01-20

    Hallo,

    mir stellen sich zwei Fragen:

    • wie gross ist dein "zip-file" -- Annahme 1408 Byte

    • welche Hardware verwendest Du -- aktuelle CoDeSys V2.3.9.10 - evtl. updaten

    Dein Byte-Array belegt 1408 Byte, die Nullen werden mit gespeichert

    Deine String-Arrays belegen jeweils 1419 Byte (11 Strings mit je 128Byte+ je 1 Byte Längeninformation), die Nullen bedeuten "String-Ende" ! Also wird der Rest leer sein.

    --> Die optimale Lösung ist das Byte-Array, hier werden nur so viele Bytes alloziert wie benötigt. Zudem kannst Du in einer for-Schleife byte für byte bearbeiten.

    Vielleicht hilfts ja weiter

     
  • Ingo Sundermann - 2009-01-21

    Hallo,

    danke für die Antwort.

    ->Ich arbeite z.Zt. mit einer Digsy Compact E von Intercontrol.

    (Eine höhere Codesys Version scheitert glaube ich daran).

    ->Meine ZIP-Files sind maschinenabhängig unterschiedlich groß

    und können (vermutlich) mehrere KB groß werden.

    Ich versuche z.Zt. die Nullen in meinem Zip-File zu ersetzen, da meine Versuche mit dem Byte Array zu sehr hohem Speicheraufwand geführt haben.

    Speicheraufwendig scheint allerdings die Initialisierung zu sein, nicht das Array selbst!

    Gibt es hier vielleich eine Möglichkeit ein Array effektiver zu bedaten ?

     

Log in to post a comment.