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

Ergebnis 1 bis 8 von 8

Thema: Werte dynamisch in ein DB schreiben ("Umlaufarchiv")

  1. #1
    Registriert seit
    24.01.2012
    Beiträge
    511
    Danke
    92
    Erhielt 21 Danke für 20 Beiträge

    Idee


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,

    im Rahmen meiner Hausautomatisierung mit einer S7 300 lese ich von einem Stromzähler (S0 Schnittstelle) die Impulse ein. Das funktionert auch tadellos. Nun möchte ich das Programm erweitern:
    - am Ende eines jeden Monats soll der aktuelle "kWh Stand" des Zählers gespeichert werden
    - es soll eine Art Umlaufarchiv entstehen

    Im Idealfall möchte ich mir einen FB erstellen der das macht, jedoch müsste dieser Baustein in einen DB "dynamisch" schreiben. Soll heißen:
    Januar = DBW0
    Februar = DBW2
    März = DBW4
    usw
    Es sollen insgesamt 24 Monate in dem DB abgebildet werden, erst dann kann der DB wieder von vorn überschrieben werden.
    Das Monatsende kann ich schon erfassen, lediglich das "dynamische transferieren" bereitet mir Probleme.

    Mit Arrays/Schieberegister/FIFO oder ähnliches hatte ich noch nix zu tun, dies bitte ich zu berücksichtigen.

    Ich verwende Step7 v5.5, die CPU ist eine 315 2DP (alte Bauform).

    Vielen Dank im Voraus!

    Gruß
    DerMatze
    -----------------------------------------------------------------------------------------
    Programmierumgebung: Step 7 V5.5 + SP3
    WinCC flexible 2008 Advanced + SP3
    -----------------------------------------------------------------------------------------
    Zitieren Zitieren Werte dynamisch in ein DB schreiben ("Umlaufarchiv")  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.797
    Danke
    398
    Erhielt 2.418 Danke für 2.014 Beiträge

    Standard

    Hallo,
    ich kann da jetzt nicht so recht eine Frage erkennen.
    Deine Gedanken gehen für mich in die richtige und gut umsetzbare Richtung.
    Hast du dir in der Forums-FAQ schon den Beitrag "indirekte Adressierung, LIFO, FIFO" (oder so ähnlich) angesehen ?

    Gruß
    Larry

    Hier noch der Link : http://www.sps-forum.de/showthread.p...iger-FIFO-LIFO

  3. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    DerMatze (21.11.2012)

  4. #3
    Registriert seit
    20.03.2010
    Beiträge
    59
    Danke
    10
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Ginge vielleicht auch folgendes:
    letzter Monat = DBW 0
    vorlezterMonat = DBW 2
    vorvorletzter Monat = DBW 4
    ... etc.....????
    dann schau dir doch mal den SFC20 (BLKMOV) an.
    Damit würde ich dann immer am Ende des Monats die DBW 0 bis 46 verschieben in die DBW 2 bis 48.
    Danach nur letzten Monat wieder im DBW 0 speichern und fertig.
    Den Fortschritt verdanken die Menschen den Unzufriedenen.
    Aldous Huxley

  5. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.801
    Danke
    144
    Erhielt 1.710 Danke für 1.240 Beiträge

    Standard

    Fifo oder Schieberegister braucht man nicht unbedingt
    Eine einfache Variante wäre es die Adresse direkt aus dem Jahr und Monat zu berechnen:

    Adresse = Jahr MOD 2 * 12 + Monat

    Direkt kommt dabei ein Arrayindex raus der von 1-24 durchzählt. Die ersten 12 Monatswerte sind dann für gerade Jahreszahlen, die letzten 12 für die ungeraden.
    Für indirekte Adressierung muss man diese Adresse noch mit der Datentypgröße multiplizieren.

  6. #5
    DerMatze ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    24.01.2012
    Beiträge
    511
    Danke
    92
    Erhielt 21 Danke für 20 Beiträge

    Standard

    Zitat Zitat von Pinky Beitrag anzeigen
    Ginge vielleicht auch folgendes:
    letzter Monat = DBW 0
    vorlezterMonat = DBW 2
    vorvorletzter Monat = DBW 4
    ... etc.....????
    dann schau dir doch mal den SFC20 (BLKMOV) an.
    Damit würde ich dann immer am Ende des Monats die DBW 0 bis 46 verschieben in die DBW 2 bis 48.
    Danach nur letzten Monat wieder im DBW 0 speichern und fertig.
    Hallo,
    diese Variante habe ich noch gar nicht betrachtet, die ist natürlich auch denkbar.
    Ich werde an Hand der Anreitze die ich hier bekommen habe mal etwas versuchen.
    Rückmeldung folgt...
    Vielen Dank.

    Gruß
    DerMatze

  7. #6
    DerMatze ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    24.01.2012
    Beiträge
    511
    Danke
    92
    Erhielt 21 Danke für 20 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Adresse = Jahr MOD 2 * 12 + Monat

    Direkt kommt dabei ein Arrayindex raus der von 1-24 durchzählt. Die ersten 12 Monatswerte sind dann für gerade Jahreszahlen, die letzten 12 für die ungeraden.
    Für indirekte Adressierung muss man diese Adresse noch mit der Datentypgröße multiplizieren.
    Das hört sich schon recht dynamisch an, aber indirekte Adressierung beherrsche ich nicht...

    Ich habe es nun so gelöst:
    - ich ermittle das Monatsende eines jeden Monats (Schaltjahr ist berücksichtigt)
    - wenn Monatsende, dann wird kurz vor 0Uhr ein Impuls erzeugt, dieser schiebt dann den jeweiligen Zählerstand in ein zum Monat definiertes Datenwort

    realisiert ist es ersteinmal für 12 Monate, ist ja erweiterbar
    Außerdem weiß ich welches Datenwort für welchen Monat ist, da der Inhalt nicht immer weiter geschoben wird - wie ich es erst wollte.
    Das Datenwort wird dann erst übertschrieben wenn der Monat wieder "dran" ist, somit stehen die Daten jeweils für ein Jahr zur Verfügung.

    MfG
    DerMatze
    -----------------------------------------------------------------------------------------
    Programmierumgebung: Step 7 V5.5 + SP3
    WinCC flexible 2008 Advanced + SP3
    -----------------------------------------------------------------------------------------

  8. #7
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.739
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Kannst Du den Code nicht vlt. hier als Basis für andere Häuslebauer mit ähnlichen Wünschen posten?

  9. #8
    DerMatze ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    24.01.2012
    Beiträge
    511
    Danke
    92
    Erhielt 21 Danke für 20 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von hucki Beitrag anzeigen
    Kannst Du den Code nicht vlt. hier als Basis für andere Häuslebauer mit ähnlichen Wünschen posten?
    Wenn Bedarf besteht, dann bitte per PN.

    MfG
    DerMatze
    -----------------------------------------------------------------------------------------
    Programmierumgebung: Step 7 V5.5 + SP3
    WinCC flexible 2008 Advanced + SP3
    -----------------------------------------------------------------------------------------

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 16.03.2012, 18:20
  2. Antworten: 3
    Letzter Beitrag: 26.01.2012, 10:00
  3. "Index Pulse", "Home Switch" und "Position Limit Switch"
    Von senmeis im Forum Antriebstechnik
    Antworten: 3
    Letzter Beitrag: 07.03.2011, 11:21
  4. Antworten: 36
    Letzter Beitrag: 01.06.2009, 23:36
  5. Nur "0" via BLKMOV in DB schreiben?!
    Von Hawkster im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 21.12.2006, 13:47

Lesezeichen

Berechtigungen

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