Datenspeicherung im DB in zeitlichen Intervallen

MasterKalle

Level-1
Beiträge
24
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich brauch mal eure Hilfe.

Ich möchte Werte die ich über eine Analoge Eingangsgruppe einlese in zeitlichen Abständen (zB. 1sek) im DB speichern.
Also Jede Sekunde einen Wert abspeichert und dann nach zB. 10 Werten den ersten wieder überschreiben usw.

Hoffe Ihr könnt einem Änfanger in der S7 Welt helfen :rolleyes:.
 
Code:
*
      U     M      0.5
      FP    M     10.0
      SPBN  end
      L     MB    20
      +     1
      SPL   res
      SPA   _0
      SPA   _1
      SPA   _2
      SPA   _3
      SPA   _4
      SPA   _5
      SPA   _6
      SPA   _7
      SPA   _8
      SPA   _9
res:  SPA   res2
_0:   L     MW    30
      T     DB10.DBW    0
      SPA   end
_1:   L     MW    30
      T     DB10.DBW    2
      SPA   end
_2:   L     MW    30
      T     DB10.DBW    4
      SPA   end
_3:   L     MW    30
      T     DB10.DBW    6
      SPA   end
_4:   L     MW    30
      T     DB10.DBW    8
      SPA   end
_5:   L     MW    30
      T     DB10.DBW   10
      SPA   end
_6:   L     MW    30
      T     DB10.DBW   12
      SPA   end
_7:   L     MW    30
      T     DB10.DBW   14
      SPA   end
_8:   L     MW    30
      T     DB10.DBW   16
      SPA   end
_9:   L     MW    30
      T     DB10.DBW   18
      SPA   end
res2: L     MW    30
      T     DB10.DBW    0
      L     0
      T     MB    20
end:  NOP   0
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@4L
Das ist aber sehr "Anfängergerecht".
Fehlt nur noch, dass Du 10 Vergleicher statt der Sprungleiste gemacht hättest.
Ich hatte jetzt spontan was indirektes im Kopf.
 
Aber die Idee ist gut!
Gefällt mir und ist einfach :TOOL:

Mir wäre da erst mal ein Zeit-OB (Weckarlarm) eingefallen und es darin gemacht ...
 
@4L
Das ist aber sehr "Anfängergerecht".
Fehlt nur noch, dass Du 10 Vergleicher statt der Sprungleiste gemacht hättest.
Ich hatte jetzt spontan was indirektes im Kopf.

Code:
*
      U     M      0.5
      FP    M     10.0
      SPBN  end
      L     MB    20
      +     1
      L     16
      *I    
      LAR1  
      AUF   DB    10
      L     MW    30
      T     DBW [AR1,P#0.0]
      L     MB    20
      L     9
      ==I   
      SPBN  end
      L     -1
      T     MB    20
end:  NOP   0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
so eine Anforderung hatte ich letztes Jahr.
Habe den 'FIl'-Baustein verwendet. (DB bereitstellen und übertragen)
Die FC ist mit drei Messwerten; bei anderen entsprechend erweitern (3->10)
Am Ende wird noch der Durchschnittswert ermittelt.
FC115 als pdf;

Mfg, JB
 

Anhänge

  • FC115_Rollenbreiten.pdf
    35,7 KB · Aufrufe: 79
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnellen Antworten ;)

Da ich aber noch im Einstieg in AWL bin (ganz davon abgesehen das uns AWL gar nicht mehr beigebracht wird / brauch man ja nicht mehr wird uns eingeflößt:D) , steig ich da noch nicht ganz durch.
Könnt ihr mir noch eine kleine Erklärung dazu geben?
 
Zuletzt bearbeitet:
ah ok jetzt steh ich ganz auf dem Schlauch xD
versteh nur Bahnhof ^^ tu mich bei sowas immer schwer

kann mir das vielleicht wer anhand unseres Beispiels erklären? (vielleicht in der Zeile immer dahinter schreiben) das wäre seeeehrrr nett :ROFLMAO:
Code:
*
      U     M      0.5
      FP    M     10.0
      SPBN  end
      L     MB    20
      +     1
      L     16
      *I    
      LAR1  
      AUF   DB    10
      L     MW    30
      T     DBW [AR1,P#0.0]
      L     MB    20
      L     9
      ==I   
      SPBN  end
      L     -1
      T     MB    20
end:  NOP   0
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
*
      U     M      0.5       // Taktmerker 1 sec (50/50)
      FP    M     10.0       // Flankenmerker (1/zyklus)
      SPBN  end              // VKE=1    code weiterarbiten sonst -->end
      L     MB    20         // zählvariable
      +     1                // eins dazuzählen
      L     16               // 
      *I                     // für Pointerformat *16 (nächste Adresse f Pointer)
      LAR1                   // Adressregister laden                 <------------
      AUF   DB    10         // Datenbaustein öffnen für nächste Zugriffe        |
      L     MW    30         // hier steht zb dein WERT                          |
      T     DBW [AR1,P#0.0]  // Wert nach Adresse schreiben die vorhin geladen   ^
      L     MB    20         // 
      L     9                // Zählerstand auf max Anzahl 
      ==I                    // vergleichen
      SPBN  end
      L     -1
      T     MB    20         // Zählerstand "löschen"
end:  NOP   0


so mal auf die Schnelle....
 
Zuletzt bearbeitet:
ahhh :s1:
jetzt habe ich es verstanden, danke.

Aber so ganz funktionieren will es noch nicht. Er schreibt jetzt immer nur in den gleichen Wert im DB und springt nicht in die nächste Zeile :confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ahhh :s1:
jetzt habe ich es verstanden, danke.

Aber so ganz funktionieren will es noch nicht. Er schreibt jetzt immer nur in den gleichen Wert im DB und springt nicht in die nächste Zeile :confused:

HW-konfig -> CPU-Eigenschaften -> Taktmerkerbyte aktivieren -> MB0 (oder was anderes, mußt du den code halt anpassen) -> speichern&übersetzen -> in CPU laden
 
Zurück
Oben