String Concat

sadik

Level-1
Beiträge
30
Reaktionspunkte
0
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 konkatinierten[FONT=arial, sans-serif][/FONT]an, 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ß
 
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 ?
 
OK wie kann ich dann mein Ziel erreichen ? also die letzte string variable hinzufügen ?
Gibt es eine andere variante der concat - fb ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Schreibe dir eine eigene Concat Funktion. Die ist dann auch Threadsave(im Gegensatz zu den normalen String Operatoren).
Hier mal ein Beispiel:
Code:
[FONT=arial narrow]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
[/FONT]


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
 
Zuletzt bearbeitet:
Zurück
Oben