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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: String ohne Trennzeichen zerlegen

  1. #1
    Registriert seit
    03.04.2013
    Ort
    Germany
    Beiträge
    18
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich habe hier folgendes Problem: ich muss in Codesys ein gesamtes String Datei (also ein Wort), die mir ohne Trennzeichen gegeben wird, zerlegen und dann weiter in einer Form von ASCII Code-Symbolen-reihe darstellen.

    Ich komme jetzt zum Gedanken, dass ich es am besten in ST Form schreiben muss. Leider bis jetzt habe ich ausschließlich mit FUP gearbeitet, also ich bin ein blütiger Anfänger in ST/AWL.

    Hoffe auf eure Hilfe!
    MfG,
    ChopinJunkie
    Zitieren Zitieren String ohne Trennzeichen zerlegen  

  2. #2
    Registriert seit
    25.06.2008
    Ort
    Blomberg/Lippe
    Beiträge
    1.293
    Danke
    51
    Erhielt 130 Danke für 124 Beiträge

    Standard

    Hallo,

    nach welchen Kriterien muss denn zerlegt werden? Und was muss dann damit gemacht werden?
    Gruß
    Mobi


    „Das Einfache kompliziert zu machen ist alltäglich. Das Komplizierte einfach zu machen –
    das ist Kreativität“ (Charles Mingus).

  3. #3
    ChopinJunkie ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.04.2013
    Ort
    Germany
    Beiträge
    18
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Mobi Beitrag anzeigen
    Hallo,
    Zitat Zitat von Mobi Beitrag anzeigen
    nach welchen Kriterien muss denn zerlegt werden? Und was muss dann damit gemacht werden?
    ein beliebiges String muss so zerlegt werden, damit das Programm später daraus einen ASCII codierten Zeichen(dargestellt als BOOL) bilden kann.

    Ich habe bis jetzt nur einzige Idee, diesen String einfach mit vordefiniertem 2-dimensionalen String Array zu vergleichen. Auf diese Weise denke ich, ich könnte entsprechenden Indexen für spalten und zeilen addresse aus ASCII tabelle bekommen. Die Indexnummern dann später entsprechender weise mit STRING_TO_BYTE und STRING_TO_WORD bearbeiten.
    Hoffentlich, meine Idee ist gut zu verstehen

    Vllt hat jemand was anderes zu vorschlagen? Würde auf eure Hilfe freuen!

    Gruß,
    ChopinJunkie

  4. #4
    Registriert seit
    25.06.2008
    Ort
    Blomberg/Lippe
    Beiträge
    1.293
    Danke
    51
    Erhielt 130 Danke für 124 Beiträge

    Standard

    Also willst du nur die einzelnen Buchstaben haben? Aber ASCII ist nicht BOOL sondern BYTE.

    Was muss denn damit gemacht werden? Evtl. gibts da ne andere Lösung.
    Gruß
    Mobi


    „Das Einfache kompliziert zu machen ist alltäglich. Das Komplizierte einfach zu machen –
    das ist Kreativität“ (Charles Mingus).

  5. #5
    ChopinJunkie ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.04.2013
    Ort
    Germany
    Beiträge
    18
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Mobi Beitrag anzeigen
    Also willst du nur die einzelnen Buchstaben haben? Aber ASCII ist nicht BOOL sondern BYTE.

    Was muss denn damit gemacht werden? Evtl. gibts da ne andere Lösung.
    Was damit gemacht werden soll, habe ich meiner Meinung nach schon beschrieben, oder?!
    --> Ein Wort Buchstaben weise so zerlegen, damit jede einzelne Buchstabe des Wortes mit z.B. 2#100_0001 (was laut ASCII Binary Darstellung ein A ist) gesendet werden kann.

  6. #6
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Mir ist auch nicht ganz klar was du willst.
    Wenn du einen String in ASCII-Code umwandeln willst, geht das ganz leicht mit einem Pointer.

    Code:
    var
      ASCII_Array :Array[1..255] of Byte;
      pZeichen : Pointer to String;
      str :String(255);
      i :int;
    end_var
    
    str := 'bliblablub';
    pZeichen := ADR(str);
    
    for i := 1 to LEN(str) do
      ASCII_Array[i] := ASC(pZeichen^);
      pZeichen := pZeichen + 1;
    end_for
    So in etwas denke ich......

    Ansonsten musst vlt. nochmal deutlicher erklären was du willst.

  7. #7
    ChopinJunkie ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.04.2013
    Ort
    Germany
    Beiträge
    18
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe gestern sowas ausprobiert, aber bis jetzt scheint es nicht wirklich gut zu funktionieren

    Code:
    FUNCTION_BLOCK Eingabefeld
    VAR_INPUT
    	stEingabefeld: STRING;
    	bTransmittern: BOOL;
    END_VAR
    VAR_OUTPUT
    	byCode_Wort: BYTE;
    END_VAR
    VAR
    	stWort: STRING;
    	i: INT;
    	j: INT;
    	stIndex_i: STRING;
    	stIndex_j: STRING;
    	byIndex_i: BYTE;
    	byIndex_j: WORD;
    	
    END_VAR
    VAR CONSTANT
    // Idea is: to declare 2 dimensions in order to better describe ascii code table	
    // two dimensional Array of STRING. Need to be better declared. We skip first two lines with ''  !!!
        stEingegebenes_Wort: ARRAY[0..7, 0..15] OF STRING := [32(''), ' ', 15(''), '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
    
    IF bTransmittern = TRUE THEN
    	stWort:= '' ; //erasing previous Data in String
    	stWort:= stEingabefeld;	//assigning InputVar to internalVar
    	FOR i:= 0 TO i:=7 DO//Loop for finding the Index of Element in String. As Next we should compare the elements
    						//of entered String with elements of predefined Array
    		IF stEingegebenes_Wort[i, j]=stWort THEN
    			stIndex_i:= stEingegebenes_Wort[i, j]; //Storing chosen element in Index_i Var
     		END_IF
    	END_FOR
    	FOR j:= 0 TO j:=15 DO
    		IF stEingegebenes_Wort[i, j]=stWort THEN
    			stIndex_j:= stEingegebenes_Wort[i, j];
    		END_IF
    	END_FOR
    	byIndex_i:= STRING_TO_BYTE(stIndex_i);
    	byIndex_j:= STRING_TO_WORD(stIndex_j);
    END_IF

  8. #8
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Sorry, aber dein Code-Schnipsel ist genauso konfus wie deine Beschreibung deines Problems.
    Hier mal ein paar Anmerkungen:

    1. Der Kompiler sollte bei eigentlich bei deinen FOR - Schleifen meckern
    Richtig:
    Code:
    FOR i := 0 TO 7 DO
    END_FOR
    oder
    Code:
    FOR i := 10 TO 1 BY -2 DO
    END_FOR
    2. Wenn du durch ein zweidimensionales Array iterieren willst, musst du die Schleifen verschachteln und nicht aneinanderreihen.
    Ein deinem Code arbeitest du erst alle Felder der ersten Zeile (i von 0 bis 7) durch während j immer 0 bleibt.
    In der zweiten Schleife sollte dir evtl. das Programm abstürzen, denn nach der ersten Schleife hat i den Wert 8 und du versuchst mit
    stEingegebenes_Wort[8,j] zu arbeiten. Da die erste Dimension deines Feldes aber nur bis 7 geht .......

    Richtige Verschachtelung:
    Code:
    FOR i := 0 to 7 DO
      FOR j := 0 to 15 DO
        //mach was mit Array[i,j]
      END_FOR
    END_FOR
    3. Du vergleichst einen String mit undefinierter Länge mit einem String der nur aus einem Zeichen besteht.
    Wenn dein stEingabefeld mehr als ein Zeichen hat, ist der Vergleich immer false.

    4.
    Code:
    byIndex_i:= STRING_TO_BYTE(stIndex_i); 
    byIndex_j:= STRING_TO_WORD(stIndex_j);
    Keine Ahnung was du damit bezweckst.



    Ich sehe gerade das es in Codesys die Funktion ASC für die Umwandlung eines Zeichens in ASCII Code nicht gibt. In der Oscat Bibliothek gibt es dafür die Funktion CODE.
    Code:
    ASCII := CODE('123',2); (*liefert den ASCII Code des 2ten Zeichens: ACSII = 50*)

  9. #9
    ChopinJunkie ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.04.2013
    Ort
    Germany
    Beiträge
    18
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    danke für die Hinweise
    ich werde noch die genauer angucken. Die Oscat Basic library habe ich mir schon zugefügt, aber keine Code Funktion gefunden. Kannst du vllt mal genauer die Bibliothet nennen.

    Danke im Voraus,
    Gruß, ChopinJunkie

  10. #10
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich selber nutze die OSCAT Bib nicht. Aber laut Doku sollte die Funktion bei den String Funktionen der OSCAT Basic sein.

Ähnliche Themen

  1. String in Codesys einlesen ohne klicken!
    Von lux im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 15.02.2013, 19:23
  2. Antworten: 50
    Letzter Beitrag: 09.08.2012, 09:31
  3. ILC 130 RTC String zerlegen?
    Von r.haunreiter im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 28.07.2011, 21:50
  4. Rohdaten Zerlegen C
    Von PBO-WE im Forum HMI
    Antworten: 9
    Letzter Beitrag: 25.02.2011, 07:41
  5. Gleitpunktzahl zerlegen
    Von Heri im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 30.07.2007, 20:35

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •