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

Results 1 to 7 of 7

Thread: S7 FB für Stringoperation gesucht

  1. #1
    Join Date
    16.03.2004
    Posts
    178
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Default


    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
    greetings from upper austria

    ... merlin ...
    Reply With Quote Reply With Quote S7 FB für Stringoperation gesucht  

  2. #2
    Join Date
    27.05.2004
    Location
    Thüringen/Berlin
    Posts
    13,824
    Danke
    749
    Erhielt 3,139 Danke für 2,236 Beiträge

    Default

    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.

  3. #3
    Join Date
    16.03.2004
    Posts
    178
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Default

    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...
    greetings from upper austria

    ... merlin ...

  4. #4
    Join Date
    16.03.2004
    Posts
    178
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Default

    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...
    greetings from upper austria

    ... merlin ...

  5. #5
    Join Date
    27.05.2004
    Location
    Thüringen/Berlin
    Posts
    13,824
    Danke
    749
    Erhielt 3,139 Danke für 2,236 Beiträge

    Default

    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.
    Attached Files Attached Files

  6. #6
    Join Date
    17.06.2004
    Location
    Offenau
    Posts
    4,079
    Danke
    210
    Erhielt 466 Danke für 366 Beiträge

    Default

    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!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Reply With Quote Reply With Quote huhu...  

  7. #7
    Join Date
    16.03.2004
    Posts
    178
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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.
    greetings from upper austria

    ... merlin ...

Similar Threads

  1. Replies: 9
    Last Post: 02.10.2018, 13:13
  2. Replies: 8
    Last Post: 01.04.2014, 12:35
  3. Replies: 0
    Last Post: 17.03.2014, 13:18
  4. Image für 4MB MMC für gesucht
    By Henri-1 in forum Simatic
    Replies: 53
    Last Post: 27.02.2014, 20:15
  5. Replies: 22
    Last Post: 04.09.2011, 16:34

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •