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

Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 54

Thema: Wasseruhr mit CPU 314C-2 DP

  1. #11
    Registriert seit
    03.12.2008
    Beiträge
    654
    Danke
    160
    Erhielt 185 Danke für 113 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @PN/DP
    Ich finde, daß die Variante mit dem Prozessalarm wesentlich einfacher und sicherer zu programmieren ist.
    In der Hardware-Konfig der CPU einstellen, welcher Eingang bei welcher Flanke Prozessalarm auslösen soll.
    Dann im OB40 Deinen Impulszähler incrementieren.
    Allerdings wirst Du um AWL nicht herumkommen.

    Die Zykluszeit ist hier, denke ich, nicht das Problem.
    Der Junge muss doch erstmal lernen wie zwei Werte einfach addiert werden.

    Ich schau mal ob ich in FUP was einfaches hier einstellen kann, dauert aber ein bisschen, weil erstmal Besprechung angesagt ist.

    MfG
    Paul

  2. #12
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Moin Paul,

    Zitat Zitat von PN/DP Beitrag anzeigen
    das Problem bei der Impulszählung von Wasseruhren ist nicht die Frequenz, sondern das Tastverhältnis der
    Impulse. Bei vielen Wasseruhren ist der 1-Impuls nur 1...10ms lang, also kürzer als die Zykluszeit.
    chefren_new hat sich nun so entschieden:
    Zitat Zitat von chefren_new Beitrag anzeigen
    möchte die Wasseruhr gerne mit meiner 314c mit dem schnellen Zählereingan realisieren.
    Gruß
    PN/DP
    Zitieren Zitieren nicht einfache, sondern schnelle Zählung  

  3. #13
    Registriert seit
    03.12.2008
    Beiträge
    654
    Danke
    160
    Erhielt 185 Danke für 113 Beiträge

    Standard

    @PN/DP
    chefren_new hat sich nun so entschieden:

    Na ok
    Schauen wir mal ob wir ihn da durchführen können

  4. #14
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    [quote=Paul;216994Na ok
    Schauen wir mal ob wir ihn da durchführen können[/quote]

    Also das ist ja jetzt nicht so das Problem.
    Das einzige komplizierte ist da wohl das richtig Alarmbit aus dem OB40 Stack rauszusuchen.

    Code:
    OB 40:
    U AlarmBit  // Abfrage nur erforderlich falls noch ein Alarm generiert wird
    SPBN M1
    L 1 // Liter
    L DB10.DBD 0
    +D
    T DB10.DBD 0
    U AlarmBit 
    R AlarmBit
    M1
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  5. #15
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Paule ist aber schnell...

    @ chefren_new

    Schau mal in das Datenblatt Deines Wasserzählers, wie lang der Zählimpuls ist.

    Wenn der Zählimpuls länger als Deine Zykluszeit ist, dann kannst Du im normalen
    OB1-Programm so zählen:
    Code:
            M124.0
           +-----+   +--------+                M124.0 Flankenmerker
           |  P  |   | ADD_DI |
    E124.0-|     |---|EN      |                E124.0 Zähleingang
           +-----+   |        |
           DB10.DBD0-|IN1  OUT|-DB10.DBD0      DB10.DBD0 Zähler (DINT)
                     |        |
                 L#1-|IN2  ENO|-
                     +--------+
    Wenn der Zählimpuls kürzer als Deine Zykluszeit ist, dann MUSST Du entweder einen
    schnellen Zähler-Kanal auf Endlos-Zählen parametrieren oder der SPS-Eingang muß
    einen Prozessalarm auslösen, z.B. nur bei steigender Flanke.

    Wenn dieser Eingang die einzige Prozessalarm-Quelle ist, dann kannst Du einfach
    im OB40 programmieren:
    Code:
              +--------+
              | ADD_DI |
          ...-|EN      |
              |        |
    DB10.DBD0-|IN1  OUT|-DB10.DBD0
              |        |
          L#1-|IN2  ENO|-
              +--------+
    Wenn es mehrere Prozessalarm-Quellen gibt, dann wird es komplizierter.
    Zitat Zitat von Paule Beitrag anzeigen
    Das einzige komplizierte ist da wohl das richtig Alarmbit aus dem OB40 Stack rauszusuchen.
    Es muß im OB40 zuerst festgestellt werden, welcher Eingang den Prozessalarm
    ausgelöst hat. (siehe auch Onlinehilfe zum OB40)
    Das geht dann aber wirklich nur noch in AWL vernünftig.

    Gruß
    PN/DP
    Geändert von PN/DP (16.09.2009 um 11:07 Uhr) Grund: nicht Paul, sondern Paule
    Zitieren Zitieren FUP-Beispiel  

  6. #16
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Hier jetzt der komplette OB40-Code (allerdings nicht getestet)
    wenn E124.0 nur bei steigender Flanke einen Prozessalarm auslöst:
    Code:
    //OB40
    //prüfen, ob E124.0 den Prozessalarm ausgelöst hat
          L     #OB40_IO_FLAG
          L     B#16#54                     //Eingangsbaugruppe PE...
          <>I   
          SPB   ENDE
    
          L     #OB40_MDL_ADDR
          L     124                         //PEW124
          <>I   
          SPB   ENDE
    
          L     #OB40_POINT_ADDR
          UD    DW#16#1000000               //00000001_00000000_00000000_00000000 = E124.0
          SPZ   ENDE
    
    //E124.0 hat den Alarm ausgelöst
    //Wasserzähler um 1 Einheit erhöhen
          L     DB10.DBD    0               //alter Zählerstand
          +     L#1                         //Zähleinheit addieren
          L     L#1_000_000_000             //max Zählumfang
          MOD                               //Wrap zu 0
          T     DB10.DBD    0               //neuer Zählerstand
    
    ENDE: NOP   0
    Der Zähler zählt einfach nur die Impulse vom Wasserzähler.
    Der Zählerstand muß für eine Anzeige noch mit der Volumeneinheit/Impuls
    multipliziert werden. Oder gleich im OB40 statt 1 einen anderen Faktor addieren.

    Oft sind die Volumeneinheiten/Impuls glatte 10-er Potenzen, z.B. 10l/Imp.
    Dann muß man sich nur irgendwo ein Dezimalkomma in den Zählerstand reindenken.
    Beispiel:
    10l/Imp und Komma 2 Stellen von hinten einfügen -> Anzeige 1234,56 m³

    Gruß
    PN/DP
    Geändert von PN/DP (01.06.2010 um 08:36 Uhr) Grund: Auswertung #OB40_POINT_ADDR als DWord!
    Zitieren Zitieren OB40 Beispiel  

  7. Folgende 2 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    chefren_new (16.09.2009),Nuan (09.08.2013)

  8. #17
    chefren_new ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    20.08.2009
    Beiträge
    137
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo

    Danke für die Bemühungen

    mein Durchflusszähler:
    80 Impulse / Liter
    Durchsatz 0,5-50 Liter/Min

    Es sollte für jeden Tag die Liter gespiechert werden und das 30 Tage,
    also man sollte immer einen Rückblick von 30 Tage haben.

    Gruß

  9. #18
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Also bei max 50 Liter/Minute und 80 Impulsen/Liter müssen die Tagesdurchsätze als DINT
    oder REAL gespeichert werden.
    1 Tag = 1440 Minuten * 50 l/Minute = 72.000 l/Tag * 80 Imp/l = 5.760.000 Imp/Tag

    Ich würde den Impulszähler endlos laufen lassen (NICHT um Mitternacht auf 0 setzen).
    Bei einem Zählumfang von 0 bis 999.999.999 ist ca. 1x im Jahr mit einem Wrap zu rechnen.
    (Zähler springt von 999.999.999 zu 0, Tages-Differenz wird dann negativ!)

    Tagesverbräuche einen Monat lang speichern

    DB mit den Tagesdurchsätzen und Hilfsvariablen anlegen
    Code:
    //Pseudocode!
    STRUCT
    Tagesdurchsatz       : ARRAY[1..31] OF DINT ; //Tagesdurchsätze je Kalendertag in Liter
    Zaehlerstand_gestern : DINT ;                 //Zählerstand gestern um 23:59 Uhr
    Tag_gestern          : BYTE ;                 //Datum.Tag beim letzten Speichern
    END_STRUCT ;
    Es wird kein Zeitstempel gespeichert, der Tag des Monats ist der Index in das Array!

    Immer um Mitternacht (für's Index-Rechnen besser um 23:59 Uhr) oder anderer fester Zeitpunkt
    folgender Ablauf in Pseudocode:
    Code:
    * Datum/Uhrzeit als DATE_AND_TIME mit SFC1 "READ_CLK" in #Temp_DuT lesen
      LAR1 P##Temp_DuT
      Tag_jetzt    := LB [AR1, P#2.0] (in BCD!) und mit BTI zu 1..31dez wandeln
      Stunde_jetzt := LB [AR1, P#3.0] (in BCD!)
      Minute_jetzt := LB [AR1, P#4.0] (in BCD!)
    * Ist es 23:59 Uhr? (Stunde_jetzt == B#16#23 AND Minute_jetzt == B#16#59)
      AND Heute noch nicht gespeichert? (Tag_jetzt <> DB.Tag_gestern)
    * OK, um 23:59 Uhr 1x Tagesverbrauch speichern
        * DB.Tag_gestern := Tag_jetzt //damit nur 1x gespeichert wird
        * Tagesdurchsatz[Tag_jetzt] //in Liter// := (Zählerstand_jetzt - DB.Zählerstand_gestern) / 80
          falls (Zählerstand_jetzt - DB.Zählerstand_gestern) negativ, dann 1.000.000.000 addieren
          falls Liter-Bruchteile exakt gerundet werden sollen, dann in REAL rechnen
        * DB.Zaehlerstand_gestern := Zählerstand_jetzt
    Die CPU-Uhr sollte mit einer geeichten Uhr synchronisiert werden, z.B. mit einem NTP-Server.
    Die CPU-Uhr sollte immer auf Winterzeit stehen.

    Gruß
    PN/DP
    Angehängte Dateien Angehängte Dateien
    Geändert von PN/DP (19.09.2009 um 17:38 Uhr) Grund: Step7-Programm als AWL-Quelle angehängt
    Zitieren Zitieren Tagesverbräuche einen Monat lang speichern  

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

    Nuan (09.08.2013)

  11. #19
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Soll der aktuelle Tagesdurchsatz (in Liter) seit Mitternacht angezeigt werden:
    Tagesdurchsatz_heute in Liter := (Zählerstand_jetzt - DB.Zählerstand_gestern) / 80

    Gruß
    PN/DP
    Zitieren Zitieren aktueller Tagesdurchsatz  

  12. #20
    chefren_new ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    20.08.2009
    Beiträge
    137
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Danke

    für eine Programmbeispiel wäre ich sehr dankbar, kann leider die Theorie noch nicht in ein Programm umsetzten, und das ich nur FUP lesen kann macht die Sache nicht einfacher.

    wie kann ich 30 Tage speichern, wird das in DBs gemacht die ich mit Wincc Flex auslesen kann?

    Gruß

Ähnliche Themen

  1. EB bei 314C-2DP
    Von maxi im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.03.2009, 14:27
  2. FM 353 CPU 314c 2dp
    Von Schorfi im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 16.02.2009, 18:40
  3. 2x CPU 314C DP + 1x MP 277 Kommunikation
    Von Simatiker im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 28.01.2009, 22:57
  4. S7-300 314c-2dp
    Von autleon im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 26.06.2007, 09:55
  5. Cpu 314c-2dp
    Von ralfm im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 16.07.2006, 14:30

Lesezeichen

Berechtigungen

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