Problem mit Array

Anonymous
2009-09-13
2009-09-15
  • Anonymous - 2009-09-13

    Originally created by: Ferengi

    hallo,

    meine erste Schleife und schon gibts Probleme, lasse ich die for-schleife weg, funktioniert alles ohne probleme (wert wird ins array geschrieben), mit schleife passiert aber garnix (nicht mal ein fehler)

    zum testen hab ich dann noch ein 2. array (int) angelegt und den zähler (i) reinschreiben lassen, das ging, also kann die schleife nicht so falsch sein, tipps?

    Christian

    FOR i:=0 TO ListeLEN DO
    Auswahl     :=LIST_GET(10,ListeLEN,ReceiveString2); (*Auswahl des Werts aus der Liste*)
    Sensor      :=LIST_GET(44,0,Auswahl);          (*Sensor*)
    Temperatur  :=STRING_TO_REAL(LIST_GET(44,1,Auswahl));   (*Temp + in Real umwandeln *)
    Temp[i]         :=Temperatur;
    END_FOR;
    
     
  • heiwil - 2009-09-13

    wenn ich es richtig sehe, ist die Liste 0 basiert,

    versuche:

    FOR i:=0 TO ListeLEN - 1 DO 
    

    Heiwil

     
  • Anonymous - 2009-09-13

    Originally created by: Ferengi

    bringt leider nix

    zum weiteren verständnis, ich lese über eine rs232 schnittstelle an der ein 1-wire-bus hängt temperaturen ein, diese kommen auch als string wunderbar an, das ganze sieht so aus "28CEB4B0010000F8 00,13.50,56.25$R$N289349F001000036 00,23.37,74.00$R$N........."

    sensornr,temp,andererwert,Zeilenschaltung

    da ganz am schluß noch einiger "müll" übertragen wird muß der string etwas gekürzt werden

    LEN_ReceiveString2    := LEN (ReceiveString2) - 9;
    ReceiveString2    := LEFT(ReceiveString2,LEN_ReceiveString2);
    

    jetzt wirt mit dem oscat baustein list_len ermittelt wie oft es eine zeilenschaltung gab = wieviele werte, das ganze -1 damit ich bei 0 anfangen kann und den zähler gleich für das array verwenden kann

    ListeLEN         := LIST_LEN(10,ReceiveString2)-1;
    

    zum schluß dann der bereits gepostete teil der den string nochmal unterteilt und in das array schreiben soll

    komplett

    LEN_ReceiveString2    := LEN (ReceiveString2) - 9;
    ReceiveString2    := LEFT(ReceiveString2,LEN_ReceiveString2);
    ListeLEN         := LIST_LEN(10,ReceiveString2)-1;
    FOR i:=0 TO ListeLEN DO
       Auswahl         :=LIST_GET(10,ListeLEN,ReceiveString2);          (*Auswahl des Werts*)
       Sensor         :=LIST_GET(44,0,Auswahl);          (*Sensor*)
       Temperatur      :=STRING_TO_REAL(LIST_GET(44,1,Auswahl));   (* in Real umwandeln *)
       Temp[i]         :=Temperatur;
    END_FOR;
    
     
  • heiwil - 2009-09-14

    Du musst das Element i aus der Liste auswählen.

    Auswahl         :=LIST_GET(10,i,ReceiveString2);
    

    So sollte es gehen:

    PROGRAM PLC_PRG
    VAR
       LEN_ReceiveString2:   INT;
       ReceiveString2:      STRING(255);
       ListeLEN:         INT;
       i:               INT;
       Auswahl:         STRING(255);
       Temperatur:         REAL;
       Sensor:            STRING(255);
       Temp:            ARRAY[0..200] OF REAL;
    END_VAR
    
    ReceiveString2      := '28CEB4B0010000F800,13.50,56.25$R$N289349F001000036 00,23.37,74.00$R$N';
    ListeLEN         := LIST_LEN(10, ReceiveString2) - 1;
    FOR i:=0 TO ListeLEN DO
       Auswahl         :=LIST_GET(10,i,ReceiveString2);         (*Auswahl des Werts*)
       Sensor         :=LIST_GET(44,0,Auswahl);               (*Sensor*)
       Temperatur      :=STRING_TO_REAL(LIST_GET(44,1,Auswahl));   (* in Real umwandeln *)
       Temp[i]         :=Temperatur;
    END_FOR
    

    Heiwil

     
  • Anonymous - 2009-09-15

    Originally created by: Ferengi

    so einfach ist das manchmal, ganz großes danke

    Christian

     

Log in to post a comment.