Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 7 von 7

Thema: Array to String, Header

  1. #1
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Code:
    VAR_OUTPUT 
    Strint_Out:STRING[208]
    END_VAR
    
    VAR_TEMP
    Temp_String : STRING[208] ;
    String_Sicht AT Temp_String : STRUCT
         Header : array [0..1] of Byte ;
         Data : ARRAY[0..207] OF BYTE ;
    END_STRUCT ; 
    END_VAR
    
    String_Sicht.Header[0]:=208;
    String_Sicht.Header[1]:=208;
    
    
    FOR k:=0 TO 12 DO  // 13 * 16 = 208
            FOR L:=0 TO 15 DO
                    String_Sicht.Data[L + 16 * k] := DbNummer.DB[ k *  20 + L];
            END_FOR;
    END_FOR;
    
    Strint_Out:=Temp_String;
    Meine Frage:
    Mein Array ist 208 byte lang. muss mein string jetzt 210 oder 208 lang sein ? die header brauch ich ja noch. Mein Array ist immer 208 lang, stimmt dann die Headerzuweisung ?
    Zum Schluss wird mein Temp_string auf den outputstring geleget. Geht das so ? Steht das Array dann in voller Länge(208 byte) in dem String ?
    Zitieren Zitieren Array to String, Header  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Hallo,
    so wie ich das sehe hast du es korrekt gemacht ...
    Die Header-Bytes kommen zuzüglich zum String - werden aber immer mit erzeugt - ein String, der 208 Zeichen speichern kann. ist also immer 210 Bytes groß - so wie du es ausgeführt hast ...
    Auch die Art und Weise des Arbeitens mit der AT-Sicht an dieser Stelle ist so in Ordnung ...

    Gruß
    Larry

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich denke, das haut so hin. Keine schlechte Idee, ich hatte das vor einigen Monaten ohne AT-Sicht so gelöst:

    Code:
    H_String := '';
    H_CharString := '';
    FOR I := 1 TO 18 DO
       H_CharString := CHAR_TO_STRING(Code_Data[I + 12]);
       H_String := CONCAT(IN1 := H_String
                         ,IN2 := H_CharString
                         );
    END_FOR; 
    Evaluation_4_Daten := H_String;
    PS: Kann mir mal einer verrraten, warum dieser besch... Editor die Codeformatierung jedesmal vollkommen zerhaut? Das nervt
    Geändert von Ralle (15.05.2012 um 10:59 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. #4
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Hallo,
    so wie ich das sehe hast du es korrekt gemacht ...
    Die Header-Bytes kommen zuzüglich zum String - werden aber immer mit erzeugt - ein String, der 208 Zeichen speichern kann. ist also immer 210 Bytes groß - so wie du es ausgeführt hast ...
    Auch die Art und Weise des Arbeitens mit der AT-Sicht an dieser Stelle ist so in Ordnung ...

    Gruß
    Larry


    bei mir ist das array doch 208 lang und nicht 210. ?!

    vllt liegt es auch wo anders, dass ich an der hmi simulation nur quark rausbekomme.

    lese alles erst mal aus 13 arrays aus und schiebe es hier in einen großen String[208], danach blkmove ich den string[208] auf einen schlaug auf 13x string [16] ( strings folgen alle aufeinander).

    bekomme ich da ein header problem ? oder an was könnte es liegen ?
    sollte ich besser 13 x string[16] outputen und einzeln blkmoven ?

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Ahhhh ... jetzt verstehe ich den Hintergrund ...
    Sind deine 13 Array's vielleicht auch Strings ? Wenn ja, dann haben die auch einen Header ...
    Wenn deine Quellen einzelne Strings sind, so würde ich die nicht Byteweise sondern mit Concat zusammensetzen.
    Vielleicht schreibst du mal etwas detaillierter zu deinem Vorhaben ...

    Ein String[208] ist übrigens so aufgebaut :
    2 Byte Header + 208 Byte Stringdaten = 210 Byte für das Gesamt-Element
    Ein String[13] ist dann so aufgebaut :
    2 Byte Header + 13 Byte Stringdaten = 15 Byte für das Gesamt-Element

    Gruß
    Larry

  6. #6
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Ahhhh ... jetzt verstehe ich den Hintergrund ...
    Sind deine 13 Array's vielleicht auch Strings ? Wenn ja, dann haben die auch einen Header ...
    Wenn deine Quellen einzelne Strings sind, so würde ich die nicht Byteweise sondern mit Concat zusammensetzen.
    Vielleicht schreibst du mal etwas detaillierter zu deinem Vorhaben ...

    Ein String[208] ist übrigens so aufgebaut :
    2 Byte Header + 208 Byte Stringdaten = 210 Byte für das Gesamt-Element
    Ein String[13] ist dann so aufgebaut :
    2 Byte Header + 13 Byte Stringdaten = 15 Byte für das Gesamt-Element

    Gruß
    Larry
    bei mir sind arrays != strings ^^...mein array sind array of bytes
    also 13 x array[0..15] of byte in einen großen string[208] und den dann auf 13 strings blkmoven.

    das mit dem header hab ich jetzt geblickt ... die header bytes werden ja von den daten bytes überschrieben, richtig ?
    brauch ich für die 13 strings auch jeweils noch header mit der größe 16 ?

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nein ... brauchst du nicht.
    du mußt halt nur die Pos.-Zeiger richtig berechnen.
    Schöner wäre es aber, wenn du auf deine "Array[0..15] of Byte" symbolisch zugreifen könntest - dann könntest du nämlich auch so eine AT-Sicht auf deinen Zielstring bilden und die da rein schreiben ohne die Bytes des jeweiligen DB's indexieren zu müssen - also etwa so :
    Code:
    VAR_OUTPUT 
    Strint_Out:STRING[208]
    END_VAR
    
    VAR_TEMP
    Temp_String : STRING[208] ;
    String_Sicht AT Temp_String : STRUCT
         Header : array [0..1] of Byte ;
         Data : ARRAY[1..13] OF array[0..15] of BYTE ;
    END_STRUCT ; 
    END_VAR
    
    temp_String := '' ;
    
    
     String_Sicht.Data[1] := "Quell_DB".Data_Array_1 ;  // "Quell_DB" ist hier der symbolische Namen deines DB und "Data_Array_1" der Namen eines deiner Array[0..15] of Byte
    Strint_Out:=Temp_String;
    Gruß
    Larry

  8. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Limette (15.05.2012)

Ähnliche Themen

  1. String in Array
    Von bige im Forum CODESYS und IEC61131
    Antworten: 17
    Letzter Beitrag: 02.07.2014, 18:26
  2. Array of Byte to String[12] ,S7
    Von sb9674 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 28.09.2009, 19:15
  3. Antworten: 13
    Letzter Beitrag: 24.09.2009, 12:54
  4. String array in SQL
    Von dannyli im Forum Hochsprachen - OPC
    Antworten: 4
    Letzter Beitrag: 30.05.2009, 02:54
  5. String-Header
    Von MiLa im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 08.12.2008, 19:58

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •