# S7 FB für Stringoperation gesucht



## merlin (29 Juli 2004)

Hey Leute

Ich bin auf der Suche nach einem FB der folgendes kann:

Mein String sieht folgendermassen aus: Q=1234 S=45678
Ich möchte nun einem FB diesen String zuführen und noch 2 Parameter. Das erste Trennzeichen (Q) und das zweite Trennzeichen ( ).
Der FB sollte mir dann die Werte 1234 und 45678 als DINT liefern.

Hat wer sowas in der Art schon mal benötigt??

Besten Dank
Thomas


----------



## Ralle (29 Juli 2004)

Nimm am besten die IEC-Funktionen aus der Standard-Library (FC11-FIND_IEC, FC38-STRING_I etc.). Wenn du im Simatic-Editor das Menü Ansicht/Übersichten anwählst, öffnet sich ein Fenster mit den Bibliotheken. darin kannst du die "IEC Funktion Blocks" finden, einen FC markieren und Hilfe aufrufen, die Erklärungen sind ok.


----------



## merlin (29 Juli 2004)

Mit der Funktion hatte ich schon das Vergnügen.
Ich habe aber nicht ein Suchkriterium pro String sondern bis zu 3.

In AWL ist das verdammt mühselig zu programmieren. Geht das in SCL nicht leichter? 
Ich denke da an VB mit instring usw...


----------



## merlin (29 Juli 2004)

Bin schon etwas weiter...


```
CALL  "BLKMOV"
       SRCBLK :=P#DB95.DBX0.0 BYTE 32
       RET_VAL:=#SFC_20_RetVal
       DSTBLK :=P#DB304.DBX158.0 BYTE 32
```

Ich müsste jetzt das DBX0.0 und die Länge Byte 32 variabel gestalten.
Geht das???

ZB
Einmal dbx2.0 byte 3, dbx5.0 byte 6, usw...


----------



## Ralle (29 Juli 2004)

Das geht in SCL freilich besser, aber letztendlich sind es die gleichen Funtionen, die genutzt werden, Z.Bsp:


```
DELETE (IN:= 'Temperatur ok', L:= 6, P:= 5)
```

In SCL ist halt die Schreibweise eher dem "normalen" Programmierstil vergleichbar. Die Funkionen, die angeboten werden reichen aber aus, um dein Problem zu lösen, suchen nach einem String, auschneiden (oder Kopieren) des Teilstrings, löschen im Gesamtstring und dann mit dem nächsten Teilstring von vorne.

Wenn die Länge konstant ist kannst du mit BlkMove natürlich beliebig  Teile umkopieren.

Die angehängte Quelle erleichtert die Verwendung von Blk_Move ein wenig und kann mit Variablen im Input aufgerufen werden.


----------



## Jochen Kühner (29 Juli 2004)

*huhu...*

dasmit der variablen adresse musst über any pointer machen.

aber ich verstehe deine aufgabenstellung noch nicht ganz!

du hast q und ein leerzeichen als trenzeichen aber was ist dann mit dem S??
Beschreibs mal genauer, vieleicht kann ich was proggen!


----------



## merlin (29 Juli 2004)

Ich denke ich hab einen passenden FB erstellt.
Muss ihn morgen noch gründlich Testen.

Nochmals zu meinem Problem:
Ich bekomme per RS232 einen der beiden Strings:
"S=12345 Q=4567 "
"Q1=34556 Q2=34545 Q3=324534 "

Ich habe mir jetzt einen Fb erstellt, der den String nach = durchsucht. Dort startet meine Auswertung und endet mit einem Leerzeichen. Dann wandle ich die Teilbereiche der Strings in DINT um. 

Mal schaun, ob das was kann was ich mir da grad überlegt hab.


----------

