Umwandler für TIME/S5-TIME

Anton234

Level-1
Beiträge
197
Reaktionspunkte
7
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
guckst du hier.
Oder du nimmst stattdessen Die IEC-Timer aus der Bibliothek.
Da kannst du die Zeit einfach in Millisekunden angeben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
Code:
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
 
Zuletzt bearbeitet:
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
 
@ 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ß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
Den Baustein hab ich nicht ganz verstanden, wandelt der mir eine Ganzzahl oder INT in

Die Programmzeilen wandeln int nach S5t.
 
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
 
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

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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du musst das mit DINT machen.
Skalierung sowie MSB beschrieben hat

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

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.
 
Zurück
Oben