Step 7 Uhrzeitsyncro - Fehler bei vollen Zahlen

Zuviel Werbung?
-> Hier kostenlos registrieren
Dem panel schickst du dann die Lokalzeit zum Synchronisieren.
Ok, so hab ich das auch gemacht. Stell ich jetzt nach einem halben Jahr fest :eek:
Wenn ich das aber dauerhaft umrechne, muss ich das doch quasi genauso machen, wie ich jetzt auch, bloß anstatt die Uhrzeit zu verstellen das Ergebnis in einer Variable schreiben... :confused:
Weil woher will ich denn wissen, wann Sommer/Winter ist?
 
Ok, so hab ich das auch gemacht. Stell ich jetzt nach einem halben Jahr fest :eek:
Wenn ich das aber dauerhaft umrechne, muss ich das doch quasi genauso machen, wie ich jetzt auch, bloß anstatt die Uhrzeit zu verstellen das Ergebnis in einer Variable schreiben... :confused:
Weil woher will ich denn wissen, wann Sommer/Winter ist?

Genau. Nur würgst du nicht ständig die Systemzeit entgegen die Synchro vom NTP. Sondern führst die entsprechende Variable mit der Lokalzeit inkl. Sommerzeit ab.
Die So/Wi Zeit musst du aber natürlich immernoch selbst errechnen. Dafür gibts ja aber schon fertige Bausteine. Und wenn Sommerzeit ist, dann addierst du einfach noch die Stunde zu deiner Lokalzeit.

Du brauchst dazu aber halt UTC vom NTP server. Sonst (wenn du nur Lokalzeit zur verfügung hast) musst du selbst dafür sorgen dass hier um 2 Uhr umgestellt wird. Aber sollte die Anlage in einer anderen Zeitzone stehen z.B. schon um 1 Uhr. etc.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt hab ich ein Problem damit:
rechne ich die Stunde auf folgende Weise um 1 höher, geht alles gut.

l #stunde
bti
+1
itb
t lb 3

.....
.....
.....

l lb 3
t db100.dbb 13


Mache ich nun das ganze beim Datum, steht zwar brav die Zahl ein höher im db, wincc gibt mir aber nur ##### aus.
sobald ich die Korrektur rausnehme, steht wieder das Datum drin...

was läuft da (bei mir) falsch?...
 
Keiner eine Idee?

Bug im Wincc flex.?
Ich glaube das irgendwie,das es tatsächlich nen bug ist.

Folgende Zeile ist zum testen drin:
L 14
ITB
T db100.dbb2

Verändere ich nun manuell die Systemzeit vom PG aus auf z. b. 15.xx.xxxx, so zeigt mir wincc den lattenzaun an. (######).

Was ist da kaputt? Ich schreibe doch einen festen Wert in die Datumszeile des DB's... [emoji35]
 
Hat keiner eine Idee?

Übrigens: Ein synchronisieren zwischen panel Zeit und cpu klappt Wunderbar.
das Panel kann die Zeit also aus dem db lesen, die wincc Ausgabe jedoch nicht...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
MP 370 touch. Aber das gleiche Problem gibt's auch bei dem 277 touch...

Aufgefallen ist dabei noch, das ich die Uhrzeit verstellen kann, nicht aber das Datum. sprich bis zum 2ten Byte gibt's die Latten...
 
Ähm... Du weißt schon das WinCC einen DATE_AND_TIME komplett auf Gültigkeit prüft oder?

Das einfache erhöhen einer Stunde geht eigentlich immer, solange der Wert zwichen 0..23 bleibt, geht.
Code:
 CALL  "READ_CLK"                  //Systemzeit CPU - UTC (gültig und vollständig)
       RET_VAL:=#iINT
       CDT    :="DbSysTime".DT_A        //DB1.DBB0

//Stunde
      L     DB1.DBB    3                //Geht solange die CPU-Stunde <= 22
      BTI                               //Das Datum bleibt bei überschreiten von 23 logischerweies unverändert
      +     1
      ITB   
      T     DB1.DBB    3
Das geht bei mir im Simulator mit ner 315 und nem MP370 Problemlos.
In deinem kurzen Code-Beispiel, wo du was ähnliches zeigst, kann ich leider nicht sehen wo die restlichen Teile herkommen.
Im Simulator sehe ich dann auch das der Zeitstempel als "######" angezeigt wird, sobald irgend ein Teil davon nicht mehr passt.

Das andere Beispiel in dem du einfach versuchst den Tag im Datum zu ändern, kann nicht gehen.
Denn dann passt der in Byte8 eingetragene Wochentag nicht mehr dazu.
Code:
      CALL  "READ_CLK"                  //Systemzeit CPU - UTC
       RET_VAL:=#iINT
       CDT    :="DbSysTime".DT_A        //DB1.DBB0

//Datum-Tag
      L     12                          //Geht so gut wie nie
      ITB                               //Das Datum pass nicht mehr zum Wocchentag im Byte8
      T     DB1.DBB    2

      L     DB1.DBB    8                //Wenn man den Wochentag entsprechend korrigiert, dann passt es wieder
      UW    W#16#F0
      L     6                           //Der 12.08.2016 war ein Freitag
      OW    
      T     DB1.DBB    8

Aber was hilft dir das?
Du möchtest ja einen DATE_AND_TIME von UTC auf CEST bringen.
Das heißt dass nicht nur die Stunde addiert werden muss, sondern eventuell auch eine Anpassung von Tag, Monat oder Jahr erforderlich ist.
Den Wochentag zum passenden Datum musst du auch errechnen. Schon kompliziert.

Wenn man was zu nem DT addieren will nimmt man die fertige Funktion "AD_DT_TM" aus der Standard-Bibliothek welche all das richtig macht.
Code:
CALL  "READ_CLK"                  //Systemzeit CPU - UTC
       RET_VAL:=#iINT
       CDT    :="DbSysTime".DT_A

      CALL  "AD_DT_TM"
       T      :="DbSysTime".DT_A        //UTC
       D      :=T#2H
       RET_VAL:="DbSysTime".DT_B        //UTC+2
Um damit aus deiner NTP-Zeit (UTC und gleich CP-Systemzeit) die CEST zu bekommen, musst du natürlich wissen ob jetzt Sommerzeit ist oder nicht.

Meiner Meinung nach, zumindest was ich verstanden habe, ist folgendes der einfachste Weg für dich.
  • 2 DT-Variablen einmal für die UTC und einmal für die CEST.
  • Die UTC-Variable wird zyklisch vom READ_CLK mit Systemzeit (UTC) beschrieben.
  • Diese Variable fütterst du dann in den Baustein BT_LT_3 von PN/DP (gibt's hier zum Download)
  • Am Ausgang kommt die Zeit richtig als CEST raus, welche du dann auf die zweite DT-Variable schreibst.
Der Baustein von PN/DP berechnet auf Grund des Eingangszeitstempels in UTC ob gerade Sommer- oder Winterzeit herrscht, addiert dann mit AD_DT_TM entweder T#1h oder T#2h und schiebt den Zeitstempel auf den Ausgang.
 
Zuletzt bearbeitet:
Zurück
Oben