S7 FB für Stringoperation gesucht

merlin

Well-known member
Beiträge
180
Punkte Reaktionen
1
Zuviel Werbung?
->Hier kostenlos registrieren
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

Supermoderator
Teammitglied
Beiträge
14.473
Punkte Reaktionen
3.426
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.
 
OP
M

merlin

Well-known member
Beiträge
180
Punkte Reaktionen
1
Zuviel Werbung?
->Hier kostenlos registrieren
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...
 
OP
M

merlin

Well-known member
Beiträge
180
Punkte Reaktionen
1
Bin schon etwas weiter...

Code:
      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

Supermoderator
Teammitglied
Beiträge
14.473
Punkte Reaktionen
3.426
Das geht in SCL freilich besser, aber letztendlich sind es die gleichen Funtionen, die genutzt werden, Z.Bsp:

Code:
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.
 

Anhänge

  • fc_block_move.zip
    633 Bytes · Aufrufe: 65

Jochen Kühner

Well-known member
Beiträge
4.154
Punkte Reaktionen
474
Zuviel Werbung?
->Hier kostenlos registrieren
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!
 
OP
M

merlin

Well-known member
Beiträge
180
Punkte Reaktionen
1
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. ;)
 
Oben