# String nach konvertieren Array ASCII-codierter



## Jense586 (27 November 2012)

*String nach  Array of bytes  konvertieren ASCII-codierter*

Hallo SPS Freunde,

Schon mal eins vor weg, bitte nicht schlagen wenn ich es etwas nicht gleich verstehe oä bin ein blutiger Anfänger

Also es geht um folgendes, ich möchte eine Fehlermeldung auf ein Jumo Touchscreen bringen. Diese Meldung ist als String deklariert welchen ich in ein Arry schreiben möchte mithilfe des ASCII Code.

So das die Meldung auf meinem Touch erscheint.


Ich hab den ganzen tag schon das Forum und die Anleitungen durchwühlt aber so wirklich zu einer Erkenntnis bin ich noch nicht gekommen.

Hoffe ihr könnt mir Helfen.

MfG Jense


----------



## DaHauer (27 November 2012)

Hallo,

mir ist nicht ganz klar was du machen möchtest.

willst du einen String in einzelne Bytes zerlegen und in einen Array of Byte schieben, oder möchtest du etwas aus einem string finden und das dann in einen array of string schreiben?

Wenn du dein Problem etwas detaillierter beschreiben könntest wärs einfacher Dir mit der Lösung zu helfen ;-)

cheers


----------



## LambdaFourth (27 November 2012)

Hallo!
Vorweg erstmal: Ich bin auch ein blutiger Anfänger, aber hatte eine ähnliche Problemstellung vor kurzem erst.
In irgendeinem Forum (keine Ahnung welchem, vielleicht diesem hier  )habe ich eine Lösung gefunden, wie man von den Hex-Werten auf ASCII-Zeichen kommt, obwohl ich glaube, dass es eine sauberere Lösung gibt. 
Ich hab jetzt auch nicht ganz verstanden, ob du die einzelnen Zeichen in ein Array of Byte (also die Hex-Werte der Ascii-Zeichen) oder einzeln in ein Array of String schreiben willst. Ganz generell würde ich das Problem mit Pointern lösen.
Hier wäre jedenfalls für beide Fälle meine Lösung (an alle Erfahrenen: Bitte nicht lachen wenn ihr meinen Code seht )


VARsText : STRING := 'Hallo';
    pString : POINTER TO ARRAY [0..10] OF BYTE; ​byteArray : ARRAY [0..10] OF BYTE;​stringArray : ARRAY [0..10] OF STRING;
i : INT;​END_VAR

(*Folgendes Array ist für die Wandlung von Hex in Ascii*)
VAR CONSTANTascii : ARRAY[0..255] OF STRING(1) := 33(' '), '!', '"','#','$$' ,'%' ,'&' ,'´','(' ,')' ,'*' ,'+' ,',' ,'-' ,'.' ,'/' ,'0' ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' ,':' ,';' ,'<' ,'=' ,'>' ,'?' , '@','A' ,'B' ,'C' ,'D' ,'E' ,'F' ,'G' ,'H' ,'I' ,'J' ,'K' ,'L' ,'M' ,'N' ,'O' ,'P' ,'Q' ,'R' ,'S' ,'T' ,'U' ,'V' ,'W' ,'X' ,'Y' ,'Z' ,'[','\' ,']' ,'^' ,'_' ,'`' ,'a' ,'b' ,'c' ,'d' ,'e' ,'f' ,'g' ,'h' ,'i' ,'j' ,'k' ,'l' ,'m' ,'n' ,'o' ,'p' ,'q' ,'r' ,'s' ,'t' ,'u' ,'v' ,'w' ,'x' ,'y' ,'z' ,'{' ,'|' ,'}' ,'~';​END_VAR


(*Programm: *)

pString := ADR(sText);
FOR i := 0 TO LEN(sText) DObyteArray_ := pString^;
stringArray := ascii[pString^;
_​_
END_FOR_


----------



## RobiHerb (27 November 2012)

Ich hab das in einem vergleichbaren Fall mal so gemacht:

diagPort.tSend ist der Byte orientierte Sendepuffer.

VAR_INPUT
    theMessage    : STRING (TXBUFFLEN);        (* the message string to send                    *)
END_VAR

VAR
    pText        : POINTER TO BYTE;
    iLen        : INT;
    iIndex        : INT;
END_VAR

.... viel anderes davor  und dann:


        pText := ADR (theMessage);
        iLen  := LEN (theMessage);
        WHILE (iIndex <= iLen) DO
            diagPort.tSend[iIndex] := pText^;
            pText := pText+1;
            iIndex := iIndex+1;
        END_WHILE


----------



## Jense586 (28 November 2012)

Erstmal schon mal danke für euer hilfe, bin echt begeistert..

Ich wollte das ungefähr so machen..

Ich habe eine "Meldung" in einem String, den in die einzelne bytes zerlgen und in ein Array[0..62] of Bytes schreiben also:

Byte: 0-> M (ASCII Code für M)
        1-> E  (ASCII Code für E)
        2-> L  ......
        3-> D
        4-> u
        ..    ...
Hoffe das ist verständlicher als meine erste Variante..

lg Jens


----------



## Jense586 (30 November 2012)

Hallo leute, ich nochmal..

tut mir leid aber ich hab das noch nicht hinbekommen, programmieren will ich die ganze sache in FUP, nutze den Baustein "ConvertWStringToByteArray" aber bin echt ratlos was die deklaration betrifft.. wühle mich hier schon seit Tagen durch die Bedienungsanleitung etc..

lg Jense


----------



## Jense586 (3 Dezember 2012)

Hallo Leute,
leider besteht mein Problem noch weiterhin, ich versuch gerade das ganze in FUP zu realisieren, aber bin mir absolut nicht sicher ob das so hinhaut wie ich es versuche? (siehe Anhang)

danke schon mal für eure hilfe.


----------



## DaHauer (4 Dezember 2012)

Hallo,

das in FUP zu machen scheint mir nicht so optimal, in ST sieht das ganze wesentlich einfacher aus.

Ich hab dir mal eine Funktion angehängt, die aus BYTES einen STRING baut. Dein Problem ist ja ganz ähnlich gelagert.

Du übergibst einen POINTER TO BYTE und die Größe des Strings, den du zerlegen willst. Innerhalb der Funktion kannst du nach dem Schema arbeiten, dass in dem Anhang verwendet wird, nur dass du einen ARRAY[1..x] OF STRING(1) befüllst.

als Rückgabewert hast du dann den gefüllten Array.

Das Ganze funktioniert aber nur solange, solange ein Buchstabe auch nur ein Byte braucht.

Hoffe das hilft Dir weiter 

cheers


----------



## Jense586 (4 Dezember 2012)

Hallo Dahauer,

Danke für deine Antwort

Bin mit meinem Problem schon etwas weiter, versuche es noch immer in FUP zu realisieren, da ich persönlich mit ST noch gar nichts gemacht habe und mir FUP eigentlich auch leichter fällt.
Den aktuelle Stand pack ich mal in den Anhang, versuch1 ist dabei der FUP und versuch2 die Variablen. 
Wenn auf dem Touchscreen eine Aktion auf Grund eines Fehlers nicht "erlaubt" ist ist, möchte ich den Fehler als Text wieder geben in einer dafür vorgesehen Zeile, dafür nutze ich den "ConverWStringtoByteArray" Baustein. Mit "EN" Eingang. Da er nur den Schriftzug ausgeben soll, solang wie ein "Verbotszeichen" auf dem Screen eingblendet wird. 

1.Problem, der Baustein wirft mir den Spruch sofort auf den Screen
2.Der Text, zb."Aktion nicht erlaubt" wir nicht vollständig ausgeben sondern "ubt" schneidet er mir ab bzw es blinkt manchmal kurz auf.( das Array hat 62 Zeichen)

Zum löschen das Schriftzug habe ich mir gedacht das ich eine WString anlegen mit "Leerzeichen" der dann ausgegebne wird, sobald ich eine fallende Flanke am eingang eines weiter "ConvertBausteins" habe.

1.Problem, die Leerzeichen werden nicht ausgegeben, sonder der der Spruch "Aktion nicht erlaubt" bleibt dauerhaft bestehen.

Weiß jemand wo mein Fehler liegt? Oder stimmt etwas mit meiner denkweise nicht?
Bin für jeden Vorschlag zu haben.

lg


----------

