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

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 31

Thema: Mehrere Datenbausteine durchsuchen

  1. #1
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich benötige gerade ein wenig Starthilfe bei meinem neuen Projekt.
    Bestimmt kann mir jemand von euch einwenig auf die Sprünge helfen.

    Über einen CP340 empfange ich von einem PC mehrere Datenstrings, die ich jeweils in einen Datenbaustein ablegen will.
    In diesen Datenstrings befindet sich unter anderem eine Ziffernfolge mit einer festen Länge von 18 Zeichen (Seriennnummer).

    Zu einem späteren Zeitpunkt wird mit einem Barcodescanner über einen zweiten CP340 eine dieser 18 stelligen Ziffernfolgen eingelesen.

    Daraufhin muss ich die Datenbausteine nach der Seriennummer durchsuchen und anschließend den gefundenen Datenbaustein wieder über einen CP340 versenden.


    Ich suche nun also nach einer Lösung mehrere Datenbausteine nach einer festen Ziffernfolge zu durchsuchen,
    die irgendwo in einem String stehen kann.
    Gibt es dazu eine Funktion?

    Zudem bin ich noch am überlegen wie ich es anstellen kann meine Datenbausteine zu verwalten.
    Ich hätte mir da überlegt ein Merkerbyte und 8 Datenbausteine zu verwenden.
    Wenn ein DB beschrieben ist setze ich ein Bit in dem Merkerbyte damit ich weiß das dieser schon beschrieben ist.
    Wird ein Datenbaustein dann wieder geleert (Ausgabe über CP340) dann würde ich das entsprechende Bit auch wieder zurücksetzen.

    Meint ihr es wäre sinnvoll das so zu lösen?
    Oder gibt es hier vielleicht eine bessere Lösung?

    Wenn alle acht DB´s belegt sind und ich die Seriennummer nicht finden kann würde ich auf Störung gehen und alle acht DB´s leeren.


    Als SPS setze ich eine S7-313C ein und bin schon am Grübeln ob ich da nicht an die Grenzen der SPS stoße. Was meint ihr?


    Gruß smartie
    Zitieren Zitieren Mehrere Datenbausteine durchsuchen  

  2. #2
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.728
    Danke
    729
    Erhielt 1.160 Danke für 971 Beiträge

    Standard

    Warum brauchst du 8 Datenbausteine, kannst du nicht alle eingelesenen Strings in einen DB ablegen und diesen durchsuchen.

  3. #3
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Hi marlob,

    ich hab mir das auch schon überlegt, aber ich denken so ist es übersichtlicher.
    Dann würde ich in jedem DB einen Datensetring haben und könnte jeden einzeln verarbeiten.

    Wäre es einfacher wenn alle Strings in einem DB liegen?
    Und was wäre wenn die Strings unterschiedliche Längen haben.

  4. #4
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.728
    Danke
    729
    Erhielt 1.160 Danke für 971 Beiträge

    Standard

    Also einen DB zu durchsuchen macht die Sache auf jeden Fall ein wenig einfacher. Du kannst in deinem DB ja 8 Strings definieren, die alle die max. vorkommende Länge haben. Die Länge des Strings ist sowiesoa m Anfang des Strings hinterlegt.

  5. #5
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Die maximale Länge des Strings ist mir noch nicht bekannt aber das könnte ja machbar sein.
    (Wobei mir gerade einfällt das sich das aber auch irgendwann mal ändern kann !)
    Und die Länge des Strings kann ich ja auslesen und dann den entsprechenden String mit BLKMOV zu Weiterverarbeitung verschieben.

    Wie müsste ich es denn dann machen das ein String den ich empfange im DB als letztes abgelegt wird.
    Und wie mache ich es dann wenn ein String wieder aus dem DB gelöscht wird?

    Dann habe ich ja evtl. eine Lücke, das ganze ist ja ein Prozess der sich immer wieder wiederholt.
    In meinem einen DB sind ja prinzipiell immer bis zu 8 Datenstrings die nicht unbedingt in der Reihenfolge verarbeitet werden wie sie eingelesen werden.
    Wenn ich dann die neuen Datenstrings immer unten anhänge würden mein DB ja irgendwann immer größer werden.
    Geändert von smartie (28.01.2008 um 12:34 Uhr)

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Sieh dir mal in der IEC-Library die Stringfunktionen an. Da gibt es u.a. FIND, INSERT, LEN, REPLACE, DELETE, CONCAT. Die Hilfe dazu erreichst du, indem du den Baustein in der Library anwählst und dann "F1" drückst. Am besten läßt sich das natürlich in SCL lösen. Im Prinzi ist es egal, wie viele Datenbausteine du benutzt, du mußt halt in einer Schleife alle Datenbausteine öffnen und mit FIND durchsuchen. Sollten die Strings länger als 254 Byte sein, mußt du den Gesamtstring im DB entsprechend splitten, da Step7-Strings nicht länger sein können.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo Smartie,
    ich würde in der Sache auch zu Marlob's Vorschlag tendieren.
    Meine Idee könnte so aussehen :

    Wenn du einen neuen String einliest, dann schreibst du ihn zunächst in einen Sammelbereich. Nun käme als nächstes deine Aktion (Daten ausgeben oden ablegen). Bei Aktion = Ausgeben scannst du den DB auf Übereinstimmung, ansonsten auf freien Platz. Ein Platz wird (zusätzlich) mit einem Bit als belegt gekennzeichnet.

    Prinzipiell wäre das sogar eine Aufgabe für einen FB mit zugehörigem I-DB. Dann hast du alles zusammen und kannst die Funktionen über die IN / OUT-Parameter auslösen.

    Willst du das in AWL schreiben ? Im Grunde würde sich hierfür SCL geradezu aufdrängen ...

    Gruß
    LL

  8. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Zitat Zitat von smartie Beitrag anzeigen
    Wenn ich dann die neuen Datenstrings immer unten anhänge würden mein DB ja irgendwann immer größer werden.
    Das geht ohnehin so nicht, der DB muß in seiner Länge von vorherein festgelegt sein. Wenn, dann mußt du den DB also verwalten. Du legst z.Bsp. fest, daß der DB 20 Stringvariablen enthält (je 254 Char). In einem Feld (Array of Byte) oder auch in einem Bitfeld schreibst du dann für jeden belegten String eine 1 oder ein True. Wenn ein neuer String kommt, wird das Feld nach einem freien Platz durchsucht, da hinein kommt dann der neue String.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  9. #9
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.728
    Danke
    729
    Erhielt 1.160 Danke für 971 Beiträge

    Standard

    Um die werte hintereinander in einem DB zu schreiben, kannst du dir als Anregung mal den Beitrag zum FIFO aus der FAQ durchlesen

  10. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von marlob Beitrag anzeigen
    Um die werte hintereinander in einem DB zu schreiben, kannst du dir als Anregung mal den Beitrag zum FIFO aus der FAQ durchlesen
    Meinst du marlob? Dann muß er ja ständig die Strings verschieben und kann mittendrin nichts so ohne Weiteres löschen. Ich würde eher zu einer Tabelle raten, in der die belegten Strings gekennzeichnet werden.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Antworten: 11
    Letzter Beitrag: 27.04.2010, 19:13
  2. DB schnell durchsuchen
    Von Gerri im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 18.10.2009, 11:18
  3. Mehrere Datenbausteine automatisch löschen
    Von tommylik im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 27.07.2009, 00:01
  4. DB durchsuchen, FB vereinfachen
    Von martinmd2 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 11.02.2009, 13:34
  5. DB durchsuchen
    Von puehri im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 05.12.2005, 14:46

Lesezeichen

Berechtigungen

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