String nach konvertieren Array ASCII-codierter

Jense586

Member
Beiträge
7
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
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
 
Zuletzt bearbeitet:

DaHauer

Well-known member
Beiträge
78
Punkte Reaktionen
13
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

Member
Beiträge
6
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
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 :p)


VAR
sText : 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 CONSTANT
ascii : 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) DO
byteArray := pString^;
stringArray := ascii[pString^;

END_FOR
 
Zuletzt bearbeitet:

RobiHerb

Well-known member
Beiträge
678
Punkte Reaktionen
112
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
 
OP
J

Jense586

Member
Beiträge
7
Punkte Reaktionen
0
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
 
OP
J

Jense586

Member
Beiträge
7
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
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
 
OP
J

Jense586

Member
Beiträge
7
Punkte Reaktionen
0
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?:confused: (siehe Anhang)

danke schon mal für eure hilfe.
 

Anhänge

  • versuch1.jpg
    versuch1.jpg
    68,9 KB · Aufrufe: 60

DaHauer

Well-known member
Beiträge
78
Punkte Reaktionen
13
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
 

Anhänge

  • FC_CONCATBYTESTOSTRING.TXT
    544 Bytes · Aufrufe: 171
OP
J

Jense586

Member
Beiträge
7
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
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.:ROFLMAO:

lg
 

Anhänge

  • versuch1.jpg
    versuch1.jpg
    41,8 KB · Aufrufe: 50
  • versuch2.jpg
    versuch2.jpg
    39,2 KB · Aufrufe: 30
Oben