Das Array enthält also ASCii-formatierte BYTEs.
dieses Byte sollen nun mit den Stringfunktionen als Ganzes bearbeitet werden. Sicher ist das Array genau genommen schon ein Array aus Chars und somit eine Zeichenkette.
Wie gesagt, ich kenne die Funktion comtostr bei Moeller, welche Arrays in Strings kopiert/transformiert.
MfG M
[/code]
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Sowas klappt sehr gut, solange man nicht die Maximallängen von String Operationen überschreitet. (80 Zeichen? Bin mir da nicht ganz sicher, es steht aber in der "Hilfe" drin)
Bei längeren Strings muss man sich noch ein kleines Konstrukt ("klein" ist hier wohl eher etwas größer) da herum aufbauen, um die Längenbegrenzung zu umgehen. Aber das Prinzip wurde hoffentlich verständlich.
mfG
Steffen
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
tja, und wenn mein Internet Explorer so gut gewesen wäre mir die ganze Seite zu zeigen, hätte ich wohl auch gesehen, dass es schon entsprechende Antworten auf dieses Problem gab.
Bis dann
Steffen
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2006-04-21
Originally created by: S-12
Hallo, danke für Deine Hilfe.
Joohrte's Antwort hat übrigends nicht funktioniert. Ich erhielt ständig einen Stringüberlauf.
Leider funktionierte auch eine FOR-Schleife zum zusammensetzen der String, vergleichbar mit Deiner While-Schleife, nicht - Stringüberlauf
Inzwischen habe ich mir eine lookup table geschrieben (in ST als CASE Anweisung). Die Strings setze ich dann schön einzeln zusammen. Nicht schön aber es funktioniert.
MFG M
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2006-04-24
Originally created by: -AB-
Die Umwandlung über einen Pointer funktioniert wunderbar, das mach ich schon ewig so. Hab mir die Antwort von Joohrte nicht genau angesehn, ob es da vielleicht einen kleinen Fehler gibt, aber vom Prinzip her funktioniert es so am schnellsten (und saubersten).
Stringüberlauf kann auch daher kommen, weil wenn du eine Variable als String deklarierst, wird dieser standardmäßig auf 80 Zeichen begrenzt (also String(80)).
Du kannst die Variable aber auch einfach als String(255) deklarieren und schon sind 255 Zeichen möglich.
Das Beispiel von Joohrte war z.B. auf 10 Zeichen ausgelegt, das hast du hoffentlich bedacht.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Der Text für ein String kann unterschiedlich lag sein. Um das Ende vom text Kenzuzeichnen wird der String mit einem Byte welches den Wert 0 hat abgeschlossen. ( Null Terminiert )
Z.B. Für den String Inhalt „Test“ währe die Bytefolge 84;69;83;84;0
Wird das ende des String nicht mit 0 Abgeschlossen würde die Steuerung kein ende erkennen.
Was ein Stringüberlauf zur Folge hat.
Um Sicherzustellen das es nicht zum Überlauf kommt sollte das Bytefeld ein Byte größer sein als dein String. Von Feld sollte das letzte Byte immer Null bleiben.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2006-04-26
Originally created by: S-12
Hallo,
danke für die Infos. ich werd's dann nochmal probieren.
@AB: Die Stringvariable hatte bei mir einen definierte Länge von 5 Zeichen.
MfG M
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Originally created by: S-12
Hallo,
aufgrund der wirklich sehr mangelhaften Hilfe in der Moeller XSoft/CoDeSys muss ich diese Frage hier stellen.
Wie kann ich ein Feld aus Bytes in einen String wandeln? Ich nutze ST in meinem derzeitigen FB, aber auch eine AWL Lösung würde mich interessieren.
Bspw. gibt es in der Moeller Sucosoft die FUnktion comtostr, welche ein Array OF BYTE in einen String angegebener Länge wandelt...
MfG
Wenn ich Dich richtig verstanden habe, dann wäre das meine Lösung:
IF Byte_Var = 1 THEN String_Var = 'Text1'; END_IF
IF Byte_Var = 2 THEN String_Var = 'Text2'; END_IF
u.s.w.
Originally created by: S-12
Hallo,
nein so einfach ist es nicht.
Ich habe ein Byte, welches wie folgt aussieht:
Das Array enthält also ASCii-formatierte BYTEs.
dieses Byte sollen nun mit den Stringfunktionen als Ganzes bearbeitet werden. Sicher ist das Array genau genommen schon ein Array aus Chars und somit eine Zeichenkette.
Wie gesagt, ich kenne die Funktion comtostr bei Moeller, welche Arrays in Strings kopiert/transformiert.
MfG M
[/code]
Hi,
gibt es bei der Moeller XSoft/CoDeSys eigentlich auch die Bibliothek standard.lib?
Dann würde ich daraus die ASCIIBYTE_TO_STRING() und die CONCAT() Funktionen nehmen.
myString : STRING := '';
FOR i := 0 TO 10 DO
myString := CONCAT(myString, ASCIIBYTE_TO_STRING(dataArray[i]));
END_FOR
Gruss Jan
Originally created by: S-12
Hallo,
ja die Standard.lib (Version 7.6.02) gibt es in der XSoft.
Sie ethält allerdings keine ASCIIBYTE_TO_STRING() Funktion
U.U. müsste ich mal aus der CoDeSy Demo diese Lib kopieren..., wenn das denn läuft.
MfG M
Originally created by: Joohrte
Es Könnte auch über Pointer gelöst werden.
Beisiel:
VAR
ByteFeld : ARRAY [1..10] OF BYTE ;
pByteFeld : POINTER TO STRING[10] ;
ZielString : STRING [10] ;
END_VAR
( Addresse vom ByteFeld ermitteln )
pByteFeld := ADR(ByteFeld) ;
ZielString := pByteFeld^ ; ( Inhalt Kopieren )
Hi,
vielleicht etwas spät, aber es mag dem einem oder anderen noch helfen.
Also, ich hatte ein ähnliches Problem beim auslesen eines Textfiles.
Etwas umständlich, aber zuverlässig, kann man dieses Problem mit einem Array of String lösen.
ggf mit dem Zusatz: ascii[13]:='$n';
im Falle eines File Readers kann man sich dann eine schöne While Schleife aufbauen, die den String zusammensetzt.
Sowas klappt sehr gut, solange man nicht die Maximallängen von String Operationen überschreitet. (80 Zeichen? Bin mir da nicht ganz sicher, es steht aber in der "Hilfe" drin)
Bei längeren Strings muss man sich noch ein kleines Konstrukt ("klein" ist hier wohl eher etwas größer) da herum aufbauen, um die Längenbegrenzung zu umgehen. Aber das Prinzip wurde hoffentlich verständlich.
mfG
Steffen
Hehe,
tja, und wenn mein Internet Explorer so gut gewesen wäre mir die ganze Seite zu zeigen, hätte ich wohl auch gesehen, dass es schon entsprechende Antworten auf dieses Problem gab.
Bis dann
Steffen
Originally created by: S-12
Hallo, danke für Deine Hilfe.
Joohrte's Antwort hat übrigends nicht funktioniert. Ich erhielt ständig einen Stringüberlauf.
Leider funktionierte auch eine FOR-Schleife zum zusammensetzen der String, vergleichbar mit Deiner While-Schleife, nicht - Stringüberlauf
Inzwischen habe ich mir eine lookup table geschrieben (in ST als CASE Anweisung). Die Strings setze ich dann schön einzeln zusammen. Nicht schön aber es funktioniert.
MFG M
Originally created by: -AB-
Die Umwandlung über einen Pointer funktioniert wunderbar, das mach ich schon ewig so. Hab mir die Antwort von Joohrte nicht genau angesehn, ob es da vielleicht einen kleinen Fehler gibt, aber vom Prinzip her funktioniert es so am schnellsten (und saubersten).
Stringüberlauf kann auch daher kommen, weil wenn du eine Variable als String deklarierst, wird dieser standardmäßig auf 80 Zeichen begrenzt (also String(80)).
Du kannst die Variable aber auch einfach als String(255) deklarieren und schon sind 255 Zeichen möglich.
Das Beispiel von Joohrte war z.B. auf 10 Zeichen ausgelegt, das hast du hoffentlich bedacht.
Der Text für ein String kann unterschiedlich lag sein. Um das Ende vom text Kenzuzeichnen wird der String mit einem Byte welches den Wert 0 hat abgeschlossen. ( Null Terminiert )
Z.B. Für den String Inhalt „Test“ währe die Bytefolge 84;69;83;84;0
Wird das ende des String nicht mit 0 Abgeschlossen würde die Steuerung kein ende erkennen.
Was ein Stringüberlauf zur Folge hat.
Um Sicherzustellen das es nicht zum Überlauf kommt sollte das Bytefeld ein Byte größer sein als dein String. Von Feld sollte das letzte Byte immer Null bleiben.
Originally created by: S-12
Hallo,
danke für die Infos. ich werd's dann nochmal probieren.
@AB: Die Stringvariable hatte bei mir einen definierte Länge von 5 Zeichen.
MfG M