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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 21 von 21

Thema: DB auslesen

  1. #21
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.326
    Danke
    932
    Erhielt 3.332 Danke für 2.690 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von User1974 Beitrag anzeigen
    1. Dein Schreibzeiger setzt sich selbstständig zurück, warum dann die zusätzlichen Eingangsvariablen #DS-Reset und #DS_Add?
    Mein FC70 aus Beitrag #7 realisiert einen Ringpuffer/Archiv für 10000 Datensätze je 24 Byte.
    Da diese 10000 Datensätze nicht in einen DB passen, ist der Puffer auf 4 DB je 2500 Datensätze aufgeteilt.
    Im ersten DB ist der Schreibzeiger, er merkt sich die Nummer des zuletzt geschriebenen Datensatzes 0 bis 9999.
    Damit beim Start auf den ersten Datensatz Nummer 0 geschrieben wird, ist der Schreibzeiger mit -1 initialisiert
    (könnte auch 9999 sein).

    Immer wenn ein Datensatz hinzugefügt werden soll, dann ist der Baustein-Eingang DS_Add für 1 Zyklus zu aktivieren.
    Ist das Ende des Ringpuffers bei Datensatz Nummer 9999 erreicht, dann beginnt der FC70, die Datensätze ab Datensatz
    Nummer 0 zu überschreiben. Der Schreibzeiger setzt sich genaugenommen nicht zurück, sondern schließt den Ringpuffer,
    indem am linearen Ende des Puffers auf den Anfang des Puffers weitergeschaltet wird (Überlauf, Wrap). Das macht das MOD.

    Wenn der Puffer explizit von vorn bei Datensatz Nummer 0 beginnen soll, dann ist der Baustein-Eingang DS_Reset zu aktivieren.
    Das stellt den Schreibzeiger so, daß der nächste Datensatz in den ersten Datensatz des Ringpuffers geschrieben wird.

    2. Wie kommt die Datensatz-Nr. zustande? Die DB Auswahl kann ich noch nachvollziehen, oder rechne ich falsch?
    Der Schreibzeiger zählt die Datensatznummern 0 bis 9999. Der Ringpuffer ist aber "physikalisch" auf 4 DB aufgeteilt.
    Deshalb wird berechnet, in welchem DB sich der zu schreibende Datensatz befindet und der wievielte Datensatz innerhalb
    dieses DB das ist. Das macht die Division der Datensatznummer durch die Kapazität der Teil-DB = 2500 Datensätze.
    Code:
    // Schreibzeiger "zuletzt geschriebener Datensatz" 1 Datensatz weiter stellen
          L     "A-Puffer1".DS_Pointer ;    // -1..0..9999
          +     1 ;                         // nächster -> 0..1..10000
          L     10000 ;                     // max Anzahl Datensätze
          MOD   ;                           // auf 0..9999 begrenzen, ggf. Wrap
          T     "A-Puffer1".DS_Pointer ;    // und merken
    
    // Anfangsadresse neuer Datensatz im Aufzeichnungspuffer berechnen
    // hier ist die Nummer des aktuell zu schreibenden Datensatzes noch im AKKU1
          L     2500                        // 2500 Datensätze je Teil-DB
          /I                                // 0..9999 -> 0..3 / AKKU1-H -> 0..2499
    // AKKU1-L: Quotient 0..3 = DB-Selector -> Nr Datensatz-DB DB71..DB74
    // AKKU1-H: Div.Rest 0..2499 = Datensatz-Nr im Puffer-Teil-DB
    Beispiel: Datensatz 5203 soll geschrieben werden
    5203 / 2500 = 2 Rest 203
    Im AKKU1-L-Word steht nach der Division der Quotient 2 und im AKKU1-H-Word steht der Divisionsrest 203.
    (siehe auch die Step7-Hilfe zu /I).
    AKKU1-L (Quotient) wählt nun den DB: DB71 + 2 = DB73
    AKKU1-H (Divisionsrest) ergibt die Datensatznummer innerhalb dieses DB73: Datensatz 203

    3. Und zu guter letzt, wozu ist der Schiebe rechts Befehl gut? Da komm ich nicht hinter.
    SRD 16 schiebt den Divisionsrest (203) vom AKKU1-H-Word (Bits 16 bis 31) in das AKKU1-L-Word (Bits 0 bis 15).

    Gruß
    Harald

  2. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Ralph (22.09.2010)

Ähnliche Themen

  1. S7-200 CPU 226 CN auslesen
    Von RGELEKTRO im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 03.10.2016, 16:39
  2. S7 MMC auslesen
    Von Wowa05 im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 30.01.2010, 11:20
  3. SZL auslesen
    Von der Micha im Forum Hochsprachen - OPC
    Antworten: 19
    Letzter Beitrag: 09.08.2008, 19:02
  4. OP 37 auslesen!
    Von RobRoy94 im Forum HMI
    Antworten: 4
    Letzter Beitrag: 16.03.2006, 18:28
  5. SPS mit c auslesen
    Von Speedy3311 im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 24.08.2005, 15:30

Lesezeichen

Berechtigungen

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