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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: UDT // Ringpuffer

  1. #1
    Registriert seit
    11.12.2008
    Beiträge
    226
    Danke
    92
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    Gibt es die Möglichkeit einen UDT – Satz (z.B. 40Byte lang) an einen Ringpuffer zu senden bzw. mehrere. Welche nach einander abgearbeitet werden.???

    Habe folgendes vor:
    1. Einen UDT erstellen welcher meinem Datensatz entspricht
    2. Diesen in einem DB als ARRAY [1..100] anlegen
    3. Die Datensätze einzeln in den ARRAY mittel Ringpuffer ablegen. Anschließend zyklisch die Sätze aus dem Puffer holen und abarbeiten.
    4. Die Sätze manuell Löschen (wahlweise einzeln oder alle)

    Hat jemand schon mal so eine Aufgabe bewältigt??
    Würde gerne das ganze mit SCL umsetzen??
    Zitieren Zitieren UDT // Ringpuffer  

  2. #2
    Registriert seit
    23.10.2009
    Beiträge
    390
    Danke
    58
    Erhielt 112 Danke für 86 Beiträge

    Standard

    Das ist der richtige Ansatz und SCL ist das passende Werkzeug.
    Fang an, das wird!
    Und wenn es klemmt frag nach.
    Gruß
    Erich

  3. #3
    Registriert seit
    03.07.2007
    Ort
    Wien
    Beiträge
    38
    Danke
    1
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Kann mich LargoD nur anschliessen: SCL und sonst nix. Geht zwar in AWL auch, aber es ist viel mühsamer und aufwendiger.

    LG vuli

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    auf jeden Fall SCL ...
    Und für deinen Fall gibt es im Forum auch schon Beispiele (auch in SCL) für die Code-Realisierung geben - sonst fragen ...

    Gruß
    Larry

  5. #5
    Registriert seit
    14.07.2008
    Ort
    Bielefeld
    Beiträge
    12
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Tach...

    der DB bzw. die Struktur würde dann etwa so aussehen?:

    Code:
    TYPE 
       DeineStruktur : STRUCT
          Byte0_39 : ARRAY[0..39] OF BYTE;    // Deine 40-Byte-Struktur
       END_STRUCT;
    END_TYPE
    
    
    DATA_BLOCK XXX (* DB *)
       STRUCT
          DeinRingBuffer : ARRAY [1..100] OF DeineStruktur;
          Aktueller_Buffer : INT;    // Zeiger auf den aktuellen Buffer (1 - 100)
          Delete_Aktuellen_Buffer : BOOL; // löscht den aktuellen Buffer
       END_STRUCT
    BEGIN
    END_DATA_BLOCK

    Der FB/FC ist dann auch nicht mehr schwierig...

  6. Folgender Benutzer sagt Danke zu IchBinsNur für den nützlichen Beitrag:

    zloyduh (04.03.2011)

  7. #6
    zloyduh ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.12.2008
    Beiträge
    226
    Danke
    92
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von IchBinsNur Beitrag anzeigen
    Der FB/FC ist dann auch nicht mehr schwierig...

    Hast du ein Beispiel wie es aussehen könnte??

  8. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Für was ein Beispiel ? Für das weiterschieben ?
    Code:
    IF Takt_vor AND NOT Takt_vor_zur_OK THEN
        
       FOR i := Array_max TO 1 BY -1 DO
          Platz[i +1] := Platz[i]  ;
       END_FOR ;
       Platz[1] := Platz[Array_max +1]  ;
    END_IF ;
    
    IF Takt_zur AND NOT Takt_vor_zur_OK THEN
        
       Platz [Array_max +1] := Platz [1] ;
       FOR i := 1 TO Array_max BY 1 DO
          Platz [i] := Platz [i +1]  ;
       END_FOR;
    END_IF ;
    Takt_vor_zur_OK := Takt_vor OR Takt_zur ;
    Gruß
    Larry

  9. #8
    Registriert seit
    23.10.2009
    Beiträge
    390
    Danke
    58
    Erhielt 112 Danke für 86 Beiträge

    Standard

    Sorry Larry,

    der Trick bei einem Ringpuffer ist ja gerade, dass man die Daten nicht verschiebt, sondern nur die Zeiger erhöht oder erniedrigt.
    Also ein Zeiger für das Ablegen der Daten, ein Zeiger für das älteste Element und wenn die Daten noch von einem anderen Prozess reium bearbeitet werden sollen, dafür noch einen Zeiger. Die Daten im Puffer werden nicht verschoben, das ist Rechenzeitverschwendung.
    Gruß
    Erich

  10. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Naja ... das kann man m.E. so und so sehen ... und im Falle von SCL halte ich die Pointer-Geschichte doch eher für fragwürdig - aber klar ... du kannst dir natürlich auch den Index merken für Schreiben und den für Lesen.
    Ich mache es nicht so und es ist auch nicht so schlimm, wenn dann bei mir die Zykluszeit der Steuerung mal um 2 oder 3 Millisekunden ansteigt.

    (derartige Funktionen habe ich mehrfach in meinen Anlagen - sogar z.T. mehrfach in einer Steuerung)

    Gruß
    Larry

  11. #10
    Registriert seit
    23.10.2009
    Beiträge
    390
    Danke
    58
    Erhielt 112 Danke für 86 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... im Falle von SCL halte ich die Pointer-Geschichte doch eher für fragwürdigLarry
    ich meinte natürlich damit einen Array-Index, also eine Integer Zahl, was ist da fragwürdig?

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... wenn dann bei mir die Zykluszeit der Steuerung mal um 2 oder 3 Millisekunden ansteigt.
    Ihr jungen Hüpfer seid verwöhnt von den modernen CPUs

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    (derartige Funktionen habe ich mehrfach in meinen Anlagen - sogar z.T. mehrfach in einer Steuerung)
    dito

    Gruß
    Erich

Ähnliche Themen

  1. Problem mit Ringpuffer
    Von nutellahase im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 12.09.2011, 19:09
  2. Ringpuffer mit Mittelwert
    Von taucherd im Forum Simatic
    Antworten: 28
    Letzter Beitrag: 19.05.2011, 23:30
  3. S7-FIFO-Baustein (als Ringpuffer) [GELÖST]
    Von openminded23 im Forum Simatic
    Antworten: 52
    Letzter Beitrag: 11.04.2011, 21:09
  4. "Ringpuffer"
    Von Itchy im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 01.11.2010, 22:46
  5. Array bei Datenwechsel speichern in Ringpuffer
    Von Wiedenn? im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 21.03.2010, 04:55

Lesezeichen

Berechtigungen

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