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

Ergebnis 1 bis 9 von 9

Thema: String nach konvertieren Array ASCII-codierter

  1. #1
    Registriert seit
    27.11.2012
    Beiträge
    7
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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
    Geändert von Jense586 (28.11.2012 um 14:56 Uhr)
    Zitieren Zitieren String nach Array of bytes konvertieren ASCII-codierter  

  2. #2
    Registriert seit
    01.10.2009
    Ort
    Regensburg
    Beiträge
    77
    Danke
    8
    Erhielt 11 Danke für 11 Beiträge

    Standard

    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

  3. #3
    Registriert seit
    22.10.2012
    Beiträge
    6
    Danke
    1
    Erhielt 3 Danke für 2 Beiträge

    Standard

    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 )


    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[i] := pString^[i];
    stringArray[i] := ascii[pString^[i];
    END_FOR
    Geändert von LambdaFourth (27.11.2012 um 15:58 Uhr)

  4. Folgende 2 Benutzer sagen Danke zu LambdaFourth für den nützlichen Beitrag:

    abcdef (02.12.2012),Jense586 (28.11.2012)

  5. #4
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Beitrag

    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
    Als Freelancer immer auf der Suche nach interessanten Projekten.

  6. Folgender Benutzer sagt Danke zu RobiHerb für den nützlichen Beitrag:

    Jense586 (28.11.2012)

  7. #5
    Jense586 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.11.2012
    Beiträge
    7
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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

  8. #6
    Jense586 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.11.2012
    Beiträge
    7
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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

  9. #7
    Jense586 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.11.2012
    Beiträge
    7
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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.
    Angehängte Grafiken Angehängte Grafiken

  10. #8
    Registriert seit
    01.10.2009
    Ort
    Regensburg
    Beiträge
    77
    Danke
    8
    Erhielt 11 Danke für 11 Beiträge

    Standard

    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
    Angehängte Dateien Angehängte Dateien

  11. Folgender Benutzer sagt Danke zu DaHauer für den nützlichen Beitrag:

    Jense586 (04.12.2012)

  12. #9
    Jense586 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.11.2012
    Beiträge
    7
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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.

    lg
    Angehängte Grafiken Angehängte Grafiken

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 11.10.2012, 16:51
  2. DATE_AND_TIME in String konvertieren
    Von toto45 im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 14.03.2012, 13:58
  3. Antworten: 4
    Letzter Beitrag: 09.11.2011, 15:21
  4. String nach Date_and_Time konvertieren
    Von McFly82 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.08.2011, 14:16
  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
  •