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

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

Thema: 300 Minuten ablaufen lassen und über einen Analogausgang an das Leitsystem übertragen

  1. #1
    Registriert seit
    12.04.2008
    Beiträge
    9
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    folgendes Problem (S7-315 + Step7 5.4):

    ich möchte zu bestimmten Ereignissen eine Zeit von 300, 120 oder 10 Minuten ablaufen lassen (immer nur eine zur Zeit) und diese dann über einen Analogausgang an das Leitsystem zur Anzeige senden (300 Minuten = 20 mA und 0 Minuten = 4 mA).
    Hatte schon eine Lösung mit S5TIME-Format an S_EVERZ und über meinen Skalierbaustein auf das PAW (INT), habe aber leider nicht daran gedacht, dass S5TIME nur 2h46min kann.
    Evtl. könnte man zwei S_EVERZ kaskadieren, nur wird die aktuelle Zeit nur an den Ausgängen "Dual" angezeigt, wenn auch der Eingang gesetzt ist und die Zeit abläuft (sonst hätte man evtl. die beiden Timerwerte in ein Doppelwort schreiben können, aber da das eine Ausgangswort "Dual" erst den parametrieten Wert ausgibt wenn der Setzeingang true ist geht das so auch nicht).

    Wäre nett wenn mir jemand genau sagen könnte wie es so zu programmieren geht (Umwandlungen, in was für ein Wort/Doppelwort mit welchem Typ schreibe ich den Wert, Bytedreher?, ...) oder das Beste gibt es schon fertige Bausteine dafür oder gibt es noch eine ganz andere Lösung?

    Gruss und vielen Dank
    LukeSkywalker
    Zitieren Zitieren 300 Minuten ablaufen lassen und über einen Analogausgang an das Leitsystem übertragen  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Schau dir mal SFB4/5 (TON/TOF) aus der Standard-Library an, die können länger.

    Noch ein Link mit Beispiel und falls du das mit PCLSIM testen willst, bitte alles lesen.
    Geändert von Ralle (12.04.2008 um 17:04 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

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

    LukeSkywalker (12.04.2008)

  4. #3
    Registriert seit
    29.01.2008
    Ort
    ´s Stauferstädtle
    Beiträge
    314
    Danke
    54
    Erhielt 53 Danke für 44 Beiträge

    Standard

    als quelle
    Code:
    ORGANIZATION_BLOCK OB 1
    TITLE = "Main Program Sweep (Cycle)"
    VERSION : 0.1
    
    VAR_TEMP
      OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
      OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
      OB1_PRIORITY : BYTE ; //Priority of OB Execution
      OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
      OB1_RESERVED_1 : BYTE ; //Reserved for system
      OB1_RESERVED_2 : BYTE ; //Reserved for system
      OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
      OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
      OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
      OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
    END_VAR
    BEGIN
    NETWORK
    TITLE =Sägezahngenerator an Analogausgabe
          L     #OB1_PREV_CYCLE; 
          L     "Zeitzaehler"; // Doppelwort
          +D    ; 
          T     "Zeitzaehler"; 
          L     L#18000000; // 300 Minuten in Millisekunden
          <=D   ; 
          SPB   m001; 
          L     0; // Zähler neu starten, wenn Ende erreicht
          T     "Zeitzaehler"; 
    m001: NOP   0; 
          L     "Zeitzaehler"; // skalieren für Ausgabe
          SSD   10; // mache aus 18000000 (DINT) 17578 (INT)
          L     25770; // mache aus 17578 27648
          *I    ; 
          SSD   14; 
          T     "Analogausgabe"; 
    END_ORGANIZATION_BLOCK
    oder nur code:
    Code:
          L     #OB1_PREV_CYCLE
          L     "Zeitzaehler"               // Doppelwort
          +D    
          T     "Zeitzaehler"
          L     L#18000000                  // 300 Minuten in Millisekunden
          <=D   
          SPB   m001
          L     0                           // Zähler neu starten, wenn Ende erreicht
          T     "Zeitzaehler"
    m001: NOP   0
          L     "Zeitzaehler"               // skalieren für Ausgabe
          SSD   10                          // mache aus 18000000 (DINT) 17578 (INT)
          L     25770                       // mache aus 17578 27648
          *I    
          SSD   14
          T     "Analogausgabe"
    Ein Frosch ohne Humor ist nur ein kleiner grüner Haufen!

  5. Folgender Benutzer sagt Danke zu kermit für den nützlichen Beitrag:

    LukeSkywalker (12.04.2008)

  6. #4
    LukeSkywalker ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.04.2008
    Beiträge
    9
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank! Hat funktioniert, aber verrate mir noch bitte mal wie du auf den Wert 25770 gekommen bist?

    Gruss LukeSkywalker



    Zitat Zitat von kermit Beitrag anzeigen
    als quelle
    Code:
    ORGANIZATION_BLOCK OB 1
    TITLE = "Main Program Sweep (Cycle)"
    VERSION : 0.1
     
    VAR_TEMP
      OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
      OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
      OB1_PRIORITY : BYTE ; //Priority of OB Execution
      OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
      OB1_RESERVED_1 : BYTE ; //Reserved for system
      OB1_RESERVED_2 : BYTE ; //Reserved for system
      OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
      OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
      OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
      OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
    END_VAR
    BEGIN
    NETWORK
    TITLE =Sägezahngenerator an Analogausgabe
          L     #OB1_PREV_CYCLE; 
          L     "Zeitzaehler"; // Doppelwort
          +D    ; 
          T     "Zeitzaehler"; 
          L     L#18000000; // 300 Minuten in Millisekunden
          <=D   ; 
          SPB   m001; 
          L     0; // Zähler neu starten, wenn Ende erreicht
          T     "Zeitzaehler"; 
    m001: NOP   0; 
          L     "Zeitzaehler"; // skalieren für Ausgabe
          SSD   10; // mache aus 18000000 (DINT) 17578 (INT)
          L     25770; // mache aus 17578 27648
          *I    ; 
          SSD   14; 
          T     "Analogausgabe"; 
    END_ORGANIZATION_BLOCK
    oder nur code:
    Code:
          L     #OB1_PREV_CYCLE
          L     "Zeitzaehler"               // Doppelwort
          +D    
          T     "Zeitzaehler"
          L     L#18000000                  // 300 Minuten in Millisekunden
          <=D   
          SPB   m001
          L     0                           // Zähler neu starten, wenn Ende erreicht
          T     "Zeitzaehler"
    m001: NOP   0
          L     "Zeitzaehler"               // skalieren für Ausgabe
          SSD   10                          // mache aus 18000000 (DINT) 17578 (INT)
          L     25770                       // mache aus 17578 27648
          *I    
          SSD   14
          T     "Analogausgabe"
    Zitieren Zitieren Berechnung  

  7. #5
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard

    18000000 entsprechen 27648 (20 mA)
    Also muss du deinen aktuellen Wert umskalieren auf 4-20mA (0-27648 )

    18000000 / 2^10 * 25770 / 2^14 ergeben ca. 27648

    Das hätte man auch anders rechnen können, aber er hat es so gemacht
    Geändert von marlob (17.04.2008 um 11:00 Uhr)

  8. Folgender Benutzer sagt Danke zu marlob für den nützlichen Beitrag:

    LukeSkywalker (18.04.2008)

  9. #6
    LukeSkywalker ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.04.2008
    Beiträge
    9
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank, aber das hatte ich bis dahin schon verstanden.
    Meine Frage ist, wie man den Wert 25770 berechnet?

    Gruß LukeSkywalker





    Zitat Zitat von marlob Beitrag anzeigen
    18000000 entsprechen 27648 (20 mA)
    Also muss du deinen aktuellen Wert umskalieren auf 4-20mA (0-27648 )

    18000000 / 2^10 * 25770 / 2^14 ergeben ca. 27648

    Das hätte man auch anders rechnen können, aber er hat es so gemacht
    Zitieren Zitieren Wie 25770 berechnet?  

  10. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von marlob Beitrag anzeigen
    18000000 entsprechen 27648 (20 mA)
    Also muss du deinen aktuellen Wert umskalieren auf 4-20mA (0-27648 )

    18000000 / 2^10 * 25770 / 2^14 ergeben ca. 27648

    Das hätte man auch anders rechnen können, aber er hat es so gemacht
    Durch Umstellen dieser Formel, da 27648 ja bekannt ist. Da kommt dann 25770 heraus.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  11. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    LukeSkywalker (18.04.2008)

  12. #8
    LukeSkywalker ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.04.2008
    Beiträge
    9
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Und wie löse ich dann die Gleichung?
    Für mich sind 2^10 und 2^14 auch noch Unbekannte!

    Gruß LukeSkywalker


    Zitat Zitat von Ralle Beitrag anzeigen
    Durch Umstellen dieser Formel, da 27648 ja bekannt ist. Da kommt dann 25770 heraus.
    Zitieren Zitieren weitere Unbekannte!  

  13. #9
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard

    Zitat Zitat von LukeSkywalker Beitrag anzeigen
    Und wie löse ich dann die Gleichung?
    Für mich sind 2^10 und 2^14 auch noch Unbekannte!

    Gruß LukeSkywalker
    also 2 hoch 10 und 2 hoch 14 kann man ganz einfach ausrechnen

  14. #10
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ein aufmerksamer Leser hat mir gerade mitgeteilt, das du vielleicht wissen wieso das 2^10 und 2^14 ist.

    SSD 10 heisst: schiebe vorzeichenrichtig 10 Stellen nach rechts.
    Eine Stelle nach rechts schieben, heisst teilen durch 2 (2^1)
    zwei Stellen nach rechts schieben, heisst teilen durch 4 (2^2)
    drei Stellen nach rechts schieben, heisst teilen durch 8 (2^3)

    -> SSD 10 heisst teilen durch 2^10

    nach links schieben ist dann mutliplizieren

  15. Folgende 2 Benutzer sagen Danke zu marlob für den nützlichen Beitrag:

    LukeSkywalker (18.04.2008),vierlagig (18.04.2008)

Ähnliche Themen

  1. Antworten: 39
    Letzter Beitrag: 17.05.2011, 20:32
  2. Antworten: 11
    Letzter Beitrag: 03.03.2010, 16:17
  3. Antworten: 8
    Letzter Beitrag: 27.10.2009, 13:38
  4. Winccflex script permanent ablaufen lassen
    Von spsbändiger im Forum HMI
    Antworten: 2
    Letzter Beitrag: 22.04.2008, 15:29
  5. Timer mit Minuten laden über OP
    Von Jens Pipka im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 18.12.2006, 08:14

Lesezeichen

Berechtigungen

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