WinCC Stunden dezimal zu Timer

GeorgSei

Level-2
Beiträge
65
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte gern in eine EA Feld dezimale Stunden eingeben also z.B. 4,75 und diese muss dann umgerechnet für ein Timer werden. Wie macht man das am elegantesten?

Als erste hatte ich mir überlegt ein REAL Wert zu nutzen und diesen einfach mit 60 zu multiplizieren aber das funktioniert leider nicht wie gewünscht :/
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Welches Format möchtest du denn als Ziel haben? S5T oder TIME (Datentyp IEC-Zeit)?
TIME das EA Feld soll sozusagen die Zeit für den TON Timer angeben


Ich habe das hier gefunden:

L #Time_minutes // Real value - time in minutes

L 60000.0 // Conversion Factor - minutes to milliseconds (1 min. = 60000ms)

*R

RND

T #Time_for_Timer // Time in ms - data type: TIME

Damit kann ich aber nicht viel anfangen 😅
 
Meinst du einen IEC-Timer in einer 1500-er?
Die hat an einer Zeit das Format #Time oder #LTime.
Bei #Time wäre das dann die Zeit in Millisekunden in einer DInt-Variable und diese z.B. mit DINT_TO_TIME in den Zeitwert gewandelt. Diesen kannst du dann an den Timer übergeben.

Also z.B. deine Real-Variable Mal 1000 (Wenn du Sekunden vorgibst) und anschließend in eine DINT konvertiert, diese dann in eine #Time.

Das geht einfach in KOP/FUP und auch SCL, was benötigst du denn?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine S7-Variable vom Datentyp IEC-Zeit (TIME) ist ein vorzeichenbehafteter 32-Bit-Wert, der die Zeitangabe in Millisekunden enthält.
Im Endeffekt musst du doch nur ausrechnen, wieviele Millisekunden dein eingegebener Wert hat. Wenn du 4,75 eingibst ( also 4,75 Std ) dann
benötigst du eine Multiplikation mit 3600000. Ansonsten direkt am Panel im das Eingabefeld im Format TIME anlegen...
 
Meinst du einen IEC-Timer in einer 1500-er?
Die hat an einer Zeit das Format #Time oder #LTime.
Bei #Time wäre das dann die Zeit in Millisekunden in einer DInt-Variable und diese z.B. mit DINT_TO_TIME in den Zeitwert gewandelt. Diesen kannst du dann an den Timer übergeben.

Also z.B. deine Real-Variable Mal 1000 (Wenn du Sekunden vorgibst) und anschließend in eine DINT konvertiert, diese dann in eine #Time.

Das geht einfach in KOP/FUP und auch SCL, was benötigst du denn?
Am liebsten in SCL da es insgesamt 60 Variablen sind...
Man kann auch bei #Time direkt in Sekunden/Minuten/Stunden angeben.
Wie macht man das denn? Ich möchte ja eine Dezimale Stundenangabe also 4,75h = 4h 45min
Im Endeffekt musst du doch nur ausrechnen, wieviele Millisekunden dein eingegebener Wert hat. Wenn du 4,75 eingibst ( also 4,75 Std ) dann
benötigst du eine Multiplikation mit 3600000. Ansonsten direkt am Panel im das Eingabefeld im Format TIME anlegen...
Wenn ich im Panel eine EA Feld mit dem Datentyp Time erstelle kann ich keine dezimalen eingeben
 
Mann könnte auch die berechnung in der Visu machen lassen über Liniare Skalierung.

1701341721085.png

Dan kasst Du Dir die Arbeit in der PLC Sparen, und einfach Wandel von DInt_TO_TIME(Var) an deinen Timer dranhängen.
 
Dan kasst Du Dir die Arbeit in der PLC Sparen, und einfach Wandel von DInt_TO_TIME(Var) an deinen Timer dranhängen.
Naja, in der SPS hätte man statt
DInt_TO_TIME(Var)
folgendes:
DInt_TO_TIME(Var * 3600000)

Vorteil der SPS-Lösung:
Da kann man halt auch ein paar Zeilen Kommentar dazuschreiben, was man da eigentlich macht und warum. Da freut sich die Nachwelt.

PS:
Fehlt bei dir nicht noch eine Stelle ( 36.000.000 statt 3.600.000 bei Skalierung 0..10)?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
DANKE ich habe es jetzt nach DeltaMikeAir und FBieneke Lösung gelöst =)

Bei meinen Time Variablen konnte ich keine Dezimal sowie die Skalierung auswählen, da hier ich Arrays angelegt hatte und diese der HMI übergeben hatte. Jetzt habe ich alles Variablen einzeln der HMI übergeben nun geht es.

DANKE
 
Zurück
Oben