S5-Timer Istzeit berechnen

Astralavista

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

im Zuge einer Programmumwandlung von S5 nach S7 versuche ich gerade die Istzeit von S5-Timern zu berechnen.
Ich denke ich hab schon eine brauchbare Lösung, bin aber irgendwie der Meinung das ich das zu kompliziert gelöst habe.
Gibt es einen einfacheren Weg?

Code:
      LC    "T 62"                      //Lade Timerwert
      L     W#16#F000                   //Ausmaskieren des Zeitwertes
      UW    
      T     #ZEITBASIS                  //Zeitbasis speichern

      LC    "T 62"                      //Lade Timerwert
      L     W#16#FFF                    //Ausmaskieren der Zeitbasis
      UW    
      BTI   
      T     #RESTZEIT                   //Ergebnis in Zwischenvariable kopieren
      L     0
      ==I   
      UN    "T 62"                      //Prüfen ob Timer läuft
      SPB   NOT2                        //Wenn Timer nicht läuft dann Istzeit 0
      L     #SOLLZEIT                    //Lade Sollzeit
      L     W#16#FFF                    //Ausmaskieren der Zeitbasis
      UW    
      BTI   
      L     #RESTZEIT                   //Restzeit von Sollzeit subtrahieren
      -I    
      SPA   END2
NOT2: L     0
END2: ITB                               //Zahl in BCD-Format wandeln
      L     #ZEITBASIS                  //Zeitbasis manuell hinzufügen
      OW    
      T     #ISTZEIT                   //Istzeit speichern
 
im Zuge einer Programmumwandlung von S5 nach S7 versuche ich gerade die Istzeit von S5-Timern zu berechnen.
...
Gibt es einen einfacheren Weg?
Eventuell die S7-Timer (SFB3 [TP], SFB4 [TON], SFB5 [TOF]) verwenden.
Bei diesen wird die Zeit direkt in Millisekunden ohne Zeitbasis angegeben.
Und die Restzeit kann einfach ermittelt werden:
Code:
     L #Sollzeit 
     L #Abgelaufene Zeit (direkt vom SFB4)
     -D
     T #Restzeit
Wenn Du aber bei den S5-Timern bleiben willst kann ich nur sagen...
Ich denke ich hab schon eine brauchbare Lösung
... Absolut! :cool:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja klar kenne ich die SFB-Timer.
"Normalerweise" verwende ich die auch immer oder verwende DINT-Zähler oder sonstwas.
Aber hier mag ich einfach nicht zu sehr das bestehende Programm umprogrammieren, sondern es nur um ein paar Erweiterungen ergänzen.
Ok, dann lass ich es so. Habe gedacht es gibt vielleicht ne einfachere Lösung.
Nicht das irgendjemand mal die Programmzeilen sieht und nen Lachkrampf bekomt weil das evtl. in 4 Zeilen AWL erschlagen wäre :ROFLMAO:
 
Eins noch, wenn Du den Dual Ausgang des Timers nehmen würdest, könntest Du Dir die BCD Wandlung sparen.
Die Zeitbasis muss aber trotzdem beachtet werden.
 
Hallo Astralavista,

Deine Programmlösung ist schon ganz ordentlich, Du mußt Dich damit nicht verstecken.
icon14.gif

Einen einfacheren Weg gibt es bei S5Timern höchstwahrscheinlich nicht.

OK, man könnte eine Abkürzung einbauen, doch dann würde die Verständlichkeit des Programms leiden.
z.B. bei NOT2 brauchst Du nicht nochmal eine 0 laden, die ist noch im Akku, der SPB könnte auch gleich zu END2 oder zum L #ZEITBASIS nach dem ITB springen, die ganze Zeile NOT2 und der SPA darüber könnten wegfallen.

Das Übertragen des Timerwertes in #RESTZEIT geht wesentlich einfacher, wenn Du den Timerwert mit L statt LC abfragst, so wie Paule schon schrieb.

Noch ein Tip: bei Wortverknüpfungen kann man die Verknüpfungskonstante direkt an der Operation angeben, statt L W#16#F000 + UW kann man gleich schreiben UW W#16#F000.

Bei Deinem Programm muß ausnahmsweise mal nicht die Zeitbasis beachtet werden, weil sie ja in #SOLLZEIT, Timerwert und #ISTZEIT jeweils die selbe ist. Es ist so richtig, daß Du die Zeitbasis ohne Ansehen sicherst und dann der #ISTZEIT wieder hinzufügst.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Astralavista
die Sache gefällt mir, wenn ich darf würde ich deine Zeilen gerne verwenden.
Welche Datentypen sind dann
# Restzeit, #Sollzeit #Zeitbasis usw.

Danke
 
Die Datentypen sind vom Typ WORD.
Zum Anzeigen in WinCC flex dann einfach Variable auswählen und auf Typ Timer stellen. Dann werden auch je nach Zeitbasis die Werte richtig dargestellt.
Einziger Nachteil: Hat man einen Timer mit einem recht hohen Zeitwert sieht man diesen systembedingt nur noch in 10s-Schritten zählen.
 
Hallo,
bei mir geht CPU auf Stop wenn Timer Startet was mache ich Falsch ?
siehe Anhang
Danke
 

Anhänge

  • 2011-06-20_231510.jpg
    2011-06-20_231510.jpg
    43,6 KB · Aufrufe: 19
  • 2011-06-20_231426.png
    2011-06-20_231426.png
    3,8 KB · Aufrufe: 18
Ach so ... die Sollzeit solltest du in einem Global-DB speichern und an den Timer und an den FB übergeben.
In deinem FB wird die Sollzeit immer leer sein.
 
Zurück
Oben