Timerwert in Dual ausgeben und Prozent berechnen

Anaconda55

Level-1
Beiträge
301
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Ich möchte bei einem einschaltverzögerten Timer über Dual ein Wort ausgeben das ich dann als 0 Prozent definiere und dann bis auf 100 zählen lasse bis die Zeit abgelaufen ist.

Ich weis allerdings gar nichts mehr, sitze schon eine Stunde hier und weis nicht weiter.

Kann mir bitte jemand helfen?
Ist das was ich mir vorstelle überhaupt möglich?
 
Hallo.

Ich möchte bei einem einschaltverzögerten Timer über Dual ein Wort ausgeben das ich dann als 0 Prozent definiere und dann bis auf 100 zählen lasse bis die Zeit abgelaufen ist.

Ich weis allerdings gar nichts mehr, sitze schon eine Stunde hier und weis nicht weiter.

Kann mir bitte jemand helfen?
Ist das was ich mir vorstelle überhaupt möglich?

Das ganze hängt zusammen von der Zykluszeit

sagen wir mal du hast 500 ms (als Einschaltverzögerungszeit)

Dein Zähler soll denn um (100*Zykluszeit)/500 pro zyklus inkrementiert werden.

Bei manchen OB´s kannst du die Zykluszeit einstellen (Weckalarm...)
 
kann mit den anmerkungen von johnij und larry nicht viel anfangen ...

am DUAL-ausgang steht der aktuelle Zeitwert

Der aktuelle Zeitwert entspricht dem Anfangswert von TW, von dem der Zeitwert abgezogen wird, der seit dem Start der Zeit abgelaufen ist.
also ist deine skalierung eine fallende lineare funktion

wenn du 20s auf 0-100 skalieren möchtest geht das z.B. so:

Code:
*
      U     M      0.0
      L     S5T#20S
      SE    T      1

      L     T      1
//edit-start
      L     10                  // Zeitbasis einbeziehen
      /I
//edit-end 
      L     -5                  // m * x
      *I    
      L     100                 // + n
      +I   
      T     MW    32            // = y
und zwar mit y=mx+n wobei

m=(y2-y1)/(x2-x1) durch die Wertepaare (0|100) und (20|0) -5 ist

n=y1-m*x1 dementsprechend 100 ist ...
 
Zuletzt bearbeitet:
Super vierlagig !!! Danke für die Antwort. Hört sich plausibel an und werde es morgen früh gleich mal ausprobieren !!! Würde gerne Dein Wissen haben... :D:D:D
 
@vierlagig:

Wie Du das geschrieben hast funktioniert das leider auch nicht. Der fängt mit -1000 an zu zählen und hört dann bei 100 auf. Aber die -1000 vorher müssten noch weg...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
er fängt bei -1000 an zu zählen? oder er ist mit -1000 besetzt und läuft dann bei null an?

wenn zweiteres der fall ist, mußt du bei nicht erfüllter startbedingung halt eine 0 ins merkerwort schreiben...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
er fängt bei -1000 an zu zählen? oder er ist mit -1000 besetzt und läuft dann bei null an?

wenn zweiteres der fall ist, mußt du bei nicht erfüllter startbedingung halt eine 0 ins merkerwort schreiben...

hier musst du die Zeitbasis beachten:
Auflösung_________Bereich
0,01 Sekunde______10MS bis 9S_990MS
0,1 Sekunde_______100MS bis 1M_39S_900MS
1 Sekunde_________1S bis 16M_39S
10 Sekunden_______10S bis 2H_46M_30S

welche Zeit hast du geladen?

22s? dann wäre L T1 = 220

und damit: y = -5*220+100; Y=-1000

hier musst du für m = -0,454545454545454545.... nehmen

Deswegen die Anmerkung du musst von 4L du musst m immer neu berechnen und dabei die Zeitbasis beachten.

Deswegen ist das immer etwas heikel bei den Timern den Zeitwert auszulesen und damit weiter zu arbeiten. Empfehlung: Vorschlag von 4L SFB4! Hier gibt der Timer immer ms aus.

Grüße...
 
Zuletzt bearbeitet:
Timerwert skalieren

Folgendes "Progrämmchen" skaliert jeden S7-Zeitbereich in den Bereich 0... 100%
Code:
LC   T         1                  // anzuzeigender Timer
UW   W#16#0FFF                    // Zeitbasis entfernen
BTD
DTR                               // Zeit-Istwert wandeln nach REAL
L    1.000000e+02
*R
L    S5T#12S                      // "Original"-Zeitwert des Timers
UW   W#16#0FFF                    // Zeitbasis entfernen
BTD
DTR                               // wandeln nach REAL
/R
L    1.000000e+02
TAK
-R
T    MD      200                  // Prozentwert im REAL-Format
Viel Erfolg!
eNDe
 
Guten Morgen,

hab noch mal drüber nachgedacht, und da du ja den Zeitwert vom Panel ändern willst, ist die Zeitbasis ja vorgegeben.

In deinem Fall im Bereich s.

Dann würd ich's so machen:
Code:
      L     MW   210                    //Wert vom Panel in s
      ITB   
      OW    W#16#2000                   //in S5_time wandeln Zeitbasis '10' (s)
      T     #Zeit_S5
 
      U     "M1.0"
      L     #Zeit_S5
      SE    T      2
 
      L     1.000000e+002               //für 100%
      L     MW   210                    //aktueller Startwert in s
      DTR                               //wandeln in REAL
      /R    
      NEGR                              //Wert negieren
      L     T      2                    //Restlaufzeit in s
      DTR   
      *R    
      RND   
      +     100
      T     MW   212                    //Abgelaufene Zeit Ausgabe in %

Grüße...
 
Habt ihr euere Programme ausprobiert? Bei mir funktionieren die leider nicht...
Also die Lösung von eNDe funktioniert bei mir (die anderen habe ich nicht getestet).;)
Allerdings wird nicht der Timerrestwert in % ausgegeben sondern die bereits abgelaufene Zeit.
[edit]Was ja auch das Ziel ist, Danke @Simatiker:cool: [/edit]
.
 
Zuletzt bearbeitet:
Zurück
Oben