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

Ergebnis 1 bis 8 von 8

Thema: String Concat

  1. #1
    Registriert seit
    28.10.2015
    Beiträge
    30
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich habe vier String-Variablen der Form.
    a = '2086 1672 365000 100 100 1162134 78445 4294967295 0 0 4294967295 347500 117600'
    b = '0 23080 0 0 4294967295 4294967295 4294967295 5000 -200 303 500 56 100 213 5570 6150 15 803 15 15 0 -2147483648 0 0 0'
    c = '0 5000 23200 0 0 300 0 0 1000 0 0 0 300 0 1240 345600 29376000 0'
    d = '0 0 19 0 0 DT#2016-06-14-01:27:50'

    verkette diese strings anschließend mit der CONCAT-FB con := CONCAT(a, ''); con := CONCAT(con, b); ... usw.
    und übertrage diese über TCP/IP an meinen Rechner, jedoch kommt nur ein Ausschnitt der konkatiniertenan, so ungefähr bis hälfte von der c-variable.
    Ich habe die strings mit der größe 800 definiert, aber funktioniert auch nicht.

    Wie kann ich große strings konkatenieren und übertragen ?

    Gruß
    Zitieren Zitieren String Concat  

  2. #2
    Registriert seit
    13.01.2013
    Beiträge
    633
    Danke
    26
    Erhielt 65 Danke für 60 Beiträge

    Standard

    Hast du dir deinen String mal angesehen ? Also ob der String selber ggf. Komplett ist und bei der Übertragung gekürzt wird ?
    Oder ist wirklich der String nach deinem Concat zu klein ?

  3. #3
    sadik ist offline Benutzer
    Themenstarter
    Registriert seit
    28.10.2015
    Beiträge
    30
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Bei CONCAT-FB. Die string-variablen a und b werden vollständig konkatiniert, aber bei c wird ab "29376000" nicht mehr weiter hinzugefügt.

  4. #4
    Registriert seit
    13.12.2011
    Beiträge
    1.511
    Danke
    163
    Erhielt 181 Danke für 164 Beiträge

    Standard

    Das ist auch so in Ordnung, die Standard Stringfunktionen können nur Strings bis 255 Zeichen verarbeiten.

    Von irgendwas mit Internetzugang gesendet.

  5. #5
    sadik ist offline Benutzer
    Themenstarter
    Registriert seit
    28.10.2015
    Beiträge
    30
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    OK wie kann ich dann mein Ziel erreichen ? also die letzte string variable hinzufügen ?
    Gibt es eine andere variante der concat - fb ?

  6. #6
    Registriert seit
    13.12.2011
    Beiträge
    1.511
    Danke
    163
    Erhielt 181 Danke für 164 Beiträge

    Standard

    Solange die Einzelstrings nicht länger als 255 Zeichen sind, könntest Du einen Zielstring in entsprechender Größe anlegen und die einzelnen Strings mit MEMCOPY an die entsprechende Position kopieren. Die Position musst Du Dir mit LEN dann errechnen.

    Von irgendwas mit Internetzugang gesendet.

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.338
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard

    Mit welchem Programmiersystem programmierst Du? Gibt es da MEMCPY?
    Ansonsten hier eine CONCAT-Variante mit Byte-weisem Kopieren mit Pointern für längere Strings
    FUNCTION My_CONCAT

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #8
    Registriert seit
    10.03.2014
    Ort
    Rhein-Neckar-Kreis
    Beiträge
    69
    Danke
    4
    Erhielt 10 Danke für 10 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Schreibe dir eine eigene Concat Funktion. Die ist dann auch Threadsave(im Gegensatz zu den normalen String Operatoren).
    Hier mal ein Beispiel:
    Code:
    pBytepointer_to_String1 := ADR(String_1);
    pBytepointer_to_String2 := ADR(String_2);
    pBytepointer_to_StringRes := ADR(f_OWN_Concat);
      
    WHILE TRUE DO (* Solange bis exit aufgerufen wird *)
         IF (xString2) THEN
             pBytepointer_to_StringRes^ := pBytepointer_to_String2^;
             IF (pBytepointer_to_String2^= 0) THEN
                 EXIT; (* FERTIG - raus aus der Schleife *)
             END_IF
             pBytepointer_to_String2 := pBytepointer_to_String2 + 1;
             pBytepointer_to_StringRes := pBytepointer_to_StringRes + 1;
         ELSIF (pBytepointer_to_String1^ = 0) THEN
                 xString2 := TRUE;
         ELSE
                 pBytepointer_to_StringRes^ := pBytepointer_to_String1^;
                 pBytepointer_to_String1 := pBytepointer_to_String1 + 1;
                 pBytepointer_to_StringRes := pBytepointer_to_StringRes + 1;
         END_IF
         IF (pBytepointer_to_StringRes - ADR(f_OWN_Concat) >= 512) THEN (* Überlauf *)
             pBytepointer_to_StringRes^ := 0;
             EXIT; (* FERTIG - raus aus der Schleife *)
         END_IF
     END_WHILE
    


    hier die Dazugehörige Deklaration:


    Code:
    FUNCTION f_OWN_Concat: STRING(512)
    VAR_INPUT
         String_1:   STRING(512);
         String_2:   STRING(512);
     END_VAR
    VAR
        pBytepointer_to_String1 :   POINTER TO BYTE;
        pBytepointer_to_String2 :   POINTER TO BYTE;
         pBytepointer_to_StringRes :  POINTER TO BYTE;
         xString2 :   BOOL := FALSE;
     END_VAR



    Aber Achtung: bei Codesys lassen sich z.B. nicht mehr als 512 Zeichen lange Strings definieren
    Geändert von -J-E- (21.06.2016 um 07:30 Uhr)


Ähnliche Themen

  1. Problem Concat TWINCAT2
    Von siegener19 im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 30.04.2016, 21:32
  2. Step 7 SCL: Probleme mit Concat/Insert
    Von TheElkExperience im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 05.08.2013, 09:53
  3. S7 - CONCAT mit Lokaldaten
    Von Majestic_1987 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 27.09.2012, 09:12
  4. Problem mit Systembaustein Concat
    Von qpec_hagen im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 23.05.2012, 11:15
  5. Antworten: 13
    Letzter Beitrag: 24.09.2009, 12:54

Lesezeichen

Berechtigungen

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