CODESYS - das IEC 61131-3 Programmiersystem

Willkommen im offiziellen CODESYS - Forum von 3S-Smart Software Solutions | A member of the CODESYS Group
Deutsche Version English version russian version 
Aktuelle Zeit: Di Jan 15, 2019 11:31 pm

Alle Zeiten sind UTC




Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Feb 13, 2015 12:43 pm 
Offline

Registriert: Fr Jan 01, 2010 7:35 pm
Beiträge: 1
Hallo, ich möchte gerne eine String-Variable teilen.
Sie beinhaltet Komma getrennte Werte wie das folgende Beispiel.

a1234,1234,1234,125,87,0100,0100,0100,0100,0100,0100,0100,0100,0100x

Dieser String beinhaltet 14 Istwerte, also von a beginnend bis zum 1 Komma und dann
von Komma zu Komma. Das x ist Telegramm Ende. Wäre Sau cool wenn es da jemand
gibt der mir da auf die Sprünge hilft.

MFG Matze


Nach oben
   
BeitragVerfasst: Di Feb 17, 2015 4:02 pm 
Offline
Häufiger Nutzer
Häufiger Nutzer
Benutzeravatar

Registriert: Do Apr 07, 2005 1:22 pm
Beiträge: 190
Wohnort: Bei Ulm
Moin

mit FIND Position des 1. Kommas suchen
Das was davor kommt ist Ergebnis 1.
Dieses wegkopieren und anschliessend mit DELETE bis zur Position des 1. Kommas löschen.

Das ganze 14 mal wiederholen, bzw. bis zum Stringende.
ca. 5 Zeilen...

Gruß Erik

_________________
Wer Rechtschreibfehler findet darf sie behalten...


Nach oben
   
BeitragVerfasst: Mi Jan 27, 2016 7:33 am 
Offline

Registriert: Fr Jan 22, 2010 1:45 pm
Beiträge: 44
Hallo

Ne Moglichkeit wäre so:
Code:
Im Deklarationsfenster:
FUNCTION_BLOCK Splitter
VAR_INPUT
   Trig:BOOL;
   InpStr : STRING;
   Separator : STRING := ',';
   Reset : BOOL;
END_VAR
VAR_OUTPUT
   Q1: ARRAY[0..10] OF STRING;
END_VAR
VAR
   FeldIndex: INT := 0;
   (*SplitAray[0..10] : STRING;*)
   Temp1:STRING;
   DelLaenge: INT;
   VarExit: BOOL;
   ArrIsInit: BOOL;
   Flanke1:BOOL;
   Flanke2 : BOOL;
   i: INT;
END_VAR


Code:
Im Programmfenster:
IF Trig = TRUE AND Flanke1 = FALSE THEN  (*Bei Positiver Flanke am Trig-Eingang*)
   (*Prüfen, ob Daten vorhanden, Separator angegeben, Array nicht initialisiert und Reset nicht aktiv.*)
   IF InpStr <> '' AND Separator <> ''  AND ArrIsInit = FALSE AND Reset = FALSE THEN
      Temp1 := InpStr; (*Zeichenkette, sicherheitshalber umkopieren, befor sie manipuliert wird.*)
       WHILE VarExit = FALSE DO (*Alle <Separator-getrennte Blöcke durchlaufen*)
         DelLaenge := FIND(Temp1,Separator); (*Die Länge, des zu bearbeitenden Zeichenketten-Abschnittes ermitteln*)
         Q1[FeldIndex] := LEFT(Temp1, DelLaenge - LEN(Separator)); (*Sämtliche gefundene Blöcke, minus die Separatorzeichen, im Array eintragen*)
         IF DelLaenge = 0 AND Temp1 <> '' THEN (*Wenn kein Separator mehr gefunden wird, aber noch Zeichen einzutragen sind*)
            Q1[FeldIndex] := Temp1; (*Den Zeichenketten-Rest noch im Array eintragen*)
            ArrIsInit := TRUE; (*Array-Initialisierungs-Merker setzen*)
            VarExit := TRUE; (*Exit-Merker, zu verlassen der Suchschleife setzen*)
         END_IF
         FeldIndex := FeldIndex + 1; (*Array-Feld-Index um eins erhöhen*)
         Temp1 := DELETE(Temp1, DelLaenge, 1); (*Beginnend mit dem ersten Zeichen, DelLaenge Zeichen löschen. Die Zeichenkette wird also kürzer*)
        END_WHILE
      Temp1 := ''; (* Sicherstellen, das Temp1, keine Zeichen mehr enthält. Ist eigentlich überflüssig, da in Zeile 4, ein eventueller Rest, überschrieben wird.*)
   END_IF
END_IF
Flanke1 := Trig; (*Flankenmerker zurücksetzen*)

(*Das Ganze resetten*)
IF Reset = TRUE AND Flanke2 = FALSE THEN (*Bei Positiver Flanke am Reset-Eingang*)
   ArrIsInit := FALSE;  (*Array-Initialisierungs-Merker zurücksetzen. Wird bei erneuter Initialisierung, wieder gesetzt.*)
   VarExit := FALSE; (*Exit-Merker, zu verlassen der Suchschleife zurücksetzen. Sonst wird die Schleife, nie durchlaufen*)
   FeldIndex := 0; (*FeldIndex zurücksetzen, damit die nächsten Eintragungen wieder bei 0 beginnen.*)
   FOR i := 0 TO 10 DO (*Array, Feld um Feld den Inhalt löschen. Das Array bleibt leer erhalten*)
      Q1[i] := ''; (*Feldinhalt mit einem Leerstring überschreiben (Löschvorgang)*)
   END_FOR
END_IF
Flanke2 := Reset; (*Flankenmerker zurücksetzen*)


Wichtig, ist noch, dass Du das Array gross genug dimensionierst!
Viel Spass beim ausprobieren.

Mit freundlichen Grüssen! Pitsch


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de