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

Mit einer Schleife MW Bereiche beschreiben

gnassel
2006-08-23
2006-10-02
  • gnassel - 2006-08-23

    Hallo,

    ich habe eine winzig kleine Frage:

    ich möchte Daten aus einem Feld via Modbus übertragen. Dazu verwende ich z.Z. folgenden Code:

    MB256:=DATA(1);

    MB257:=DATA(2);

    MB258:=DATA(3);

    ...

    Die Daten würde ich gern mit einer For/Next Schleifen umkopieren.

    Aber wie kann ich die EA/Modbusadressen mit einem Index z.b. DATA(t) versehen?

     
  • Uwe - 2006-08-23

    Hallo gnassel,

    Modbus kennt nur Bit-Dienste und Wort-Dienste.

    Du kannst also via Modbus (über Wortdienste) nicht nur z.B. MB256 holen / schreiben sondern nur MW256 (also MB 512 / 513) oder

    MW128 also (MB 256 / 257).

    Das am Rande.

    Aber nun zum eigentlichen Problem.

    Du kannst ein ARRAY einfach in den Merkerbereich legen.

    z.B.

    VAR

    Merker  AT %MB256   :  ARRAY[0..10] OF BYTE;
    

    END_VAR

    und dann kannst du in einer Schleife natürlich auf Merker[ i ] zugreifen.

    Vorsicht : wenn du ein Word-Array nimmst dann solltest du als Adresse auch %MW angeben

    und keine Byteadresse da es dir sonst passieren kann dass du ein Wort-Element auf eine

    ungerade Adresse legst (z.B. Merker AT %MB1 : ARRAY[0..10] OF WORD; ).

    Die Folge wäre im Code ein Wortzugriff auf eine ungerade Byte-Adresse und das führt meist zum Absturz.

    Auch bei Strukturen muss man aufpassen (zusätzlich zu obigen Punkt können dort für das Wordalignment

    Füllbytes eingefügt werden).

    Uwe

     
  • Gumpi - 2006-10-02

    Das ist ja mal ne Chance mit Pointern zu prahlen

    Unter ST würde das so aussehen:

    var

    pt : pointer to byte;

    end_Var;

    for x:=100 to 300

    pt:=adr(%MB0)+x;

    pt^:=0;

    end_for;

    das Beispiel würde die Bytes 100 bis 300 mit Nullen beschreiben. das ^ nennt sich Inhaltsoperator.

     

Log in to post a comment.