# Umwandler für TIME/S5-TIME



## Andy_Scheck (18 Oktober 2009)

Hallo
Wie kann ich denn eine Zahl(INT/BCD/oder ähnliches) in eine TIME bzw. S5-Time umwandeln? Habs schon mit mehrern Umwandlern versucht, aber keiner konnte mir das in S5-Time wandeln.
Verwend SimaticManager 5.4 auf einer S7 312C.
Programmiert wird hauptsächlich in FUP.
Besten Dank

Andy


----------



## crash (18 Oktober 2009)

guckst du hier.
Oder du nimmst stattdessen Die IEC-Timer aus der Bibliothek.
Da kannst du die Zeit einfach in Millisekunden angeben.


----------



## Bernard (18 Oktober 2009)

Das Time Format ist in Millisekungen geschlüsselt und vom Inhalt her DINT.
S7-300 hat eine Auflösung von 10ms,S7-400 von 1ms.
Beispiele:123=t#123ms,6000=t#6s,1200000=t#2m.

S5-time ist ein WORD lang und beinhaltet 2Informationen
Erste Info:Tetrade 1=Zeitraster
Bitkennung:0000=0.01s,0001=0.1s,0010=1.0s,0011=10s.
Zweite Info Tetrade 2-4:BCD codierte Zahlenkennung die mit dem Zeitraster multipliziert den Laufzeitwert ergibt
Beispiel:word=02300 entspricht s5t#5m,01120=s5t#12s.
wenn du einen Zahlenwert z.B 1000ms in s5t umrechnen willst entspricht das  00*100 wobei  die 100 BCD codiert ist.Wenn dein Zahlenwert Int istwandle ihn in BCD.
Beispiel int=300 soll werden s5t in Sekunden mit gleicher Zahl 

```
l 300// Zahlenwert 300s int
itb    //interger to BCD
l 2#10//Zeitraster in Sekunden
slw 12//verschieben des Zeitrasters in die Erste Tetrade
ow
t #S5t_300s//Ablagevariable
```


----------



## Andy_Scheck (18 Oktober 2009)

Es besteht folgendes Problem; die Eingabe in Flex soll in Minuten sein, sprich ich muss meinen Wert der in Flex eingegeben wurde mit Faktor 60.000 multiplizieren um von den MS auf Minuten zu gelangen.
In Flex kann ich das Komma verschieben, sprich ich komm auf 10*,100*,1000*.... aber der Faktor 6 oder 60 muss ich noch einbeziehen um auf die Einheit Min zu gelangen, da bsp 200000ms = 200s= 3m 20s entsprechen. Sprich ich muss meine Eingabe mit 60 Multiplizieren um von den S auf die min zu gelangen und dann in Time oder auch S5-Time wandeln.
Habs auch mit den IEC-Timern versucht, da ist die Grundeinheit auch MS.
Besten Dank


----------



## Andy_Scheck (18 Oktober 2009)

@ crash
Den Baustein hab ich nicht ganz verstanden, wandelt der mir eine Ganzzahl oder INT in eine TIME?
Wo kann ich diesen Baustein finden?

Gruß


----------



## MSB (18 Oktober 2009)

Lineare Skalierung in den Variableneigenschaften von Flex sollte die einfachste Möglichkeit darstellen.

Also z.B. Steuerung 0 - 60000 / Bediengerät 0 - 1

Mfg
Manuel


----------



## Bernard (18 Oktober 2009)

Verwende in WINCCFLEX doch das TOD Format,es entspricht,vom Inhalt her, einem Dint auf Millisekunde bezogen. in S7 Verschiebst du die TOD-Variable auf eine Time-Variable .Diese kannst du dann an die IEC-Timer anschließen.
In WINCCFLEX kannst du dann ein Eingabefeld auf TOD difinieren und somit
Stunden:minuten: Sekunden angeben.

Viel grüße Bernard


----------



## Bernard (18 Oktober 2009)

*Den Baustein hab ich nicht ganz verstanden, wandelt der mir eine Ganzzahl oder INT in*

Die Programmzeilen wandeln int nach S5t.


----------



## crash (18 Oktober 2009)

Andy_Scheck schrieb:


> @ crash
> Den Baustein hab ich nicht ganz verstanden, wandelt der mir eine Ganzzahl oder INT in eine TIME?
> Wo kann ich diesen Baustein finden?
> 
> Gruß


steht doch im Titel 
TITLE =INT_to_S5 Time


----------



## Andy_Scheck (18 Oktober 2009)

besten DANK
@MSB
Das mit der linearen Skalierung muss ich mir mal ansehen, das heißt Eingabe bsp. 10 , in wirklichkeit wird aber dann bsp. 600 geschrieben, wenn die Skalierung auf 60 steht? 
Andy


----------



## Andy_Scheck (19 Oktober 2009)

MSB schrieb:


> Lineare Skalierung in den Variableneigenschaften von Flex sollte die einfachste Möglichkeit darstellen.
> 
> Also z.B. Steuerung 0 - 60000 / Bediengerät 0 - 1
> 
> ...


 
So habs ich s jetzt mal versucht, da s für mich auch am einfachsten geklungen hat.
Nur er schreibt die Eingabe in Flex 1:1 in den DB, trotz aktivierter Skalierung.
Kann das sein, dass das mit dem Datentyp TIMER/S5-Timer nicht klappt?
Besten Dank andy


----------



## crash (19 Oktober 2009)

Du musst das mit DINT machen.
Skalierung sowie MSB beschrieben hat



MSB schrieb:


> Lineare Skalierung in den Variableneigenschaften von Flex sollte die einfachste Möglichkeit darstellen.
> 
> Also z.B. Steuerung 0 - 60000 / Bediengerät 0 - 1
> 
> ...



Eingabe am Panel in Minuten - in der SPS hast du das dann automatisch in Millisekunden.
Das kannst du dann für deinen Timer verwenden.
Aber nicht die S5T-Timer verwenden sondern die IEC-Timer.


----------

