Konvertierung zu #TOD

maccap

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

habe folgendes Problem zu lösen.
Habe eine Visualisierung mit iFix 3.5. Kommuniziere mittels Siemens Layer 4 Treiber zu einer 315er CPU.
Ich habe eine bestehende Zeitschaltuhr im S7-programm, die normalerweise mit Wincc flexible kein Problem darstellt.
Nun kennt iFix oder der SL4-Treiber das Time of Day-Format nicht, was in meinem Uhren-DB vorhanden ist.
Das Format ist ja nix anderes als milisekunden auf die Uhrzeit 00:00:00.000 addiert. Dh. zb 36000ms sind dann 01:00 Uhr.
Jetzt habe ich im iFix nur noch die Stunden und Minuten für die Start und Stopzeiten der 7 Programme angegeben, jeweils als eigene Int-Variable.
Nun möchte aus den zwei Ints für Stunde und Minuten eine Uhrzeit im #TOD-Format basteln.
Habe es als Long versucht, da #TOD auch 32-bit lang ist. Wenn ich im Step7 eine Longzahl in den DB auf eine #TOD-Zeile steuere, funktioniert das auch. Wenn ich jedoch diese Zahl per Programm, dh zB Move-Befehl reinschreiben will, passiert garnix.
Bin gespannt auf Eure Vorschläge.

Danke und Gruß

Mario
 
Hallo,
"1:00 Uhr" entspricht nicht 36.000 ms sondern 3.600.000 ms.
Könnte es sein, dass da schon dein Fehler liegt ?
 
...
vielleicht postest du mal deinen Programm-Ansatz.
Aus meiner Sicht muss das funktionieren. Vielleicht findet sich dann ja etwas ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du willst also 2 Integer (Stunden und Minuten) in TOD wandeln, und das im Step7 Programm oder in iFIX

In step7 ist TOD die Zeit in Millisekunden seit Mitternacht, wie du ja selber schon geschrieben hast.

Also
TOD := (Stunden * 60 * 60 *1000 + Minuten * 60 * 1000)

oder
Code:
 L Stunden
 ITD
 L L#3600000
 *D
 T MD0
 L Minuten
 ITD
 L L#60000
 *D
 L MD0
 +D
 T Variable_Vom_Typ_TOD
 
Zuletzt bearbeitet:
in marlob's Beispiel die Minuten bitte mit 6000 multiplizieren. 3600 war wohl ein Kopierfehler. Außerdem könnte man die INT-Var's mit ITD noch vorm multiplizieren wandeln.

Ich denke aber, dass maccap so etwas ähnliches auch schon programmiert hat ...
 
in marlob's Beispiel die Minuten bitte mit 6000 multiplizieren. 3600 war wohl ein Kopierfehler. Außerdem könnte man die INT-Var's mit ITD noch vorm multiplizieren wandeln.

Ich denke aber, dass maccap so etwas ähnliches auch schon programmiert hat ...
Da war ich wohl ein wenig zu schnell mit dem Tippen. Ich habe es oben korrigiert
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Leute.
Es funktioniert jetzt mit der AWL-Version von marlob. Wieso das nicht mit der KOP-Version und dem Move-Befehl nicht funktioniert hat, weis ich auch nicht.
Hauptsache das nebensächliche Problem ist vom Tisch.

Gruß Mario
 
Hallo,
habe so ein ähnliches Problem wie maccap und bräuchte nur noch die Sekunden dazu.
Hat das schon mal jemand gemacht?

Danke
Gruß
Mathias
 
Zurück
Oben