Sonstiges Probleme mit der Umwandlung DINT_TO_TOD

MB0815

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

ich hab ein kleines Problem, und weiß nicht genau woranes liegt.
Ich will über WinCC Start und Stoppzeiten für eine Anlage einstellen,
da WinCC mit dem Format TOD nicht zurechtkommt, hab ich mir einen
Baustein gemacht, der mir einerseits das Format
TOD zerlegt in Stunden (INT) Minuten (INT) und Sekunden (INT).

EIN_h := DINT_TO_INT(TOD_TO_DINT(EIN_IST)/1000/60/60);
EIN_m:= DINT_TO_INT((TOD_TO_DINT(EIN_IST) - INT_TO_DINT(EIN_h)*1000*60*60)/1000/60);
EIN_s := DINT_TO_INT((TOD_TO_DINT(EIN_IST) - INT_TO_DINT(EIN_h)*1000*60*60 - INT_TO_DINT(EIN_m)*1000*60)/1000);


Weiters baue ich mir aus
Stunden (INT), Minuten (INT) und Sekunden (INT) eine Zeit TOD

EIN_SOLL := DINT_TO_TOD(EIN_h_s*3600000 + EIN_m_s*60000 + EIN_s_s*1000);

Irgendwie funktioniert meine Umwandlung zum TOD nicht richtig,
wenn ich z.B.: 23h 59m 59s eingebe, so bekomme ich
23:58:53 zurück?

Hat jemand eine Idee, wo mein Problem liegt.

Danke Euch.

LG
 
EIN_h := DINT_TO_INT(TOD_TO_DINT(EIN_IST)/1000/60/60);
EIN_m:= DINT_TO_INT((TOD_TO_DINT(EIN_IST) - INT_TO_DINT(EIN_h)*1000*60*60)/1000/60);
EIN_s := DINT_TO_INT((TOD_TO_DINT(EIN_IST) - INT_TO_DINT(EIN_h)*1000*60*60 - INT_TO_DINT(EIN_m)*1000*60)/1000);

[...]

EIN_SOLL := DINT_TO_TOD(EIN_h_s*3600000 + EIN_m_s*60000 + EIN_s_s*1000);
Für eine Fehlersuche sieht mir das zu verwirrend aus. ;)

Versuche es mal mit diesen Formeln:
Code:
dEIN_IST_tmp := TOD_TO_DINT(EIN_IST)/1000;
EIN_h := DINT_TO_INT(dEIN_IST_tmp / (60*60));
EIN_m := DINT_TO_INT((dEIN_IST_tmp MOD (60*60))/60);
EIN_s := DINT_TO_INT(dEIN_IST_tmp MOD 60);

Code:
EIN_SOLL := DINT_TO_TOD((INT_TO_DINT(EIN_h_s*60 + EIN_m_s)*60 + EIN_s_s)*1000);

Harald
 
Zurück
Oben