Offset auf S7-Zeit für WinCCflexible (MP377)????

Inbetriebnehmer

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Ich habe ein Problem mit einer Uhrzeit funktion:

Diese Funktion sollte mir die Baugruppenzeit auslesen und einen Stundenoffset von x addieren oder subtrahieren, um damit eine andere Zeitzone anzeigen zukönnen.
das funktioniert jedoch nicht so ganz weil ich irgendwo beim wandeln des BCD wertes einen Fehler habe, schätze ich. Schaut es euch doch mal an vieleicht könnt ihr mir weiterhelfen.
Am rande kann ich eigentlich irgendwo in der Systemzeit (wenn diese auf Greenwich time steht)ein Bít sehen mit dem ich auf Sommer- oder Winterzeit umstellen kann???

MFG Inbetriebnehmer :sb8:
 

Anhänge

  • FB95.pdf
    17,7 KB · Aufrufe: 41
FC1 "AD_DT_TM" und FC35 "SB_DT_TM"

Zum Addieren und Subtrahieren von Zeiten zu einem DATE_AND_TIME-Wert gibt es in Step7 fertige Funktionen:
Standard Library > IEC Function Blocks: FC1 "AD_DT_TM" und FC35 "SB_DT_TM". ( 1 Stunde entspricht T#1H )

Diese Funktionen beachten auch korrekt, wenn sich durch die Berechnung das Datum ändert.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sommer/Winterzeit

dafür habe ich folgendes im einsatz:

im instanzdb steht ab dib0 die systemzeit (mit sommer winterzeit)
und ab dib18 die spszeit (zeit direkt von der cpu)
Code:
      CALL  "BLKMOV"
       SRCBLK :=#SPSZEIT
       RET_VAL:=#RET_VAL_TEMP
       DSTBLK :=#SYSTEMZEIT

//Umstellung auf Sommerzeit
      L     DIB   18
      BTD   
      L     4
      /D    
      L     DIB   18
      BTD   
      +D    
      +     L#5
      L     L#7
      MOD   
      L     L#-1
      *D    
      +     L#31
      T     #TAG_IM_MAERZ

//Zurückstellung
      L     DIB   18
      BTD   
      L     L#4
      /D    
      L     DIB   18
      BTD   
      +D    
      +     L#2
      L     L#7
      MOD   
      L     L#-1
      *D    
      +     L#31
      T     #TAG_IM_OKTOBER

//Prüfung ob Zeit im Bereich
      SET   
      R     #SOMMERZEIT

      L     DIB   18
      BTI   
      T     #JAHR

      L     DIB   19
      BTI   
      T     #MONAT

      L     DIB   20
      BTI   
      T     #TAG

      L     DIB   21
      BTI   
      T     #STUNDE


//Monat <3 oder 10<
      U(    
      L     3
      L     #MONAT
      <I    
      )     
      U(    
      L     10
      <I    
      )     
      SPB   ja

//Tag im März > TAG_IM_MÄRZ
      U(    
      L     #MONAT
      L     3
      ==I   
      )     
      U(    
      L     #TAG_IM_MAERZ
      L     #TAG
      <I    
      )     
      SPB   ja

//Prüfung der Stunde im März
      U(    
      L     #MONAT
      L     3
      ==I   
      )     
      U(    
      L     #TAG_IM_MAERZ
      L     #TAG
      ==I   
      )     
      U(    
      L     #STUNDE
      L     2
      >=I   
      )     
      SPB   ja

//Tag im Oktober < TAG_IM_OKTOBER
      U(    
      L     #MONAT
      L     10
      ==I   
      )     
      U(    
      L     #TAG
      L     #TAG_IM_OKTOBER
      <I    
      )     
      SPB   ja

//Prüfung der Stunde im Oktober
      U(    
      L     #MONAT
      L     10
      ==I   
      )     
      U(    
      L     #TAG_IM_OKTOBER
      L     #TAG
      ==I   
      )     
      U(    
      L     #STUNDE
      L     2
      <I    
      )     
      SPB   ja

      SPA   nee

ja:   SET   
      S     #SOMMERZEIT


//Anzahl der Tage im Monat bestimmen

      U(    
      L     #MONAT
      L     4
      ==I   
      )     
      O(    
      L     #MONAT
      L     6
      ==I   
      )     
      O(    
      L     #MONAT
      L     9
      ==I   
      )     
      O(    
      L     #MONAT
      L     11
      ==I   
      )     
      SPB   m30

      L     #MONAT
      L     2
      ==I   
      SPB   feb

      L     31
      SPA   mOk
m30:  L     30
      SPA   mOk

feb:  L     #JAHR
      L     4
      MOD   
      U     ==0
      SPB   sJah

      L     28
      SPA   mOk

sJah: L     29

mOk:  T     #MONAT_TAGE

      L     DIB    3                    //Stunde
      BTI   
      L     23
      ==I   
      SPB   tagP

      L     DIB    3                    //Stunde
      BTI   
      +     1
      ITB   
      T     DIB    3                    //Stunde
      SPA   nee                         //Tag hat sich nicht geändert -> Ok.

tagP: L     0
      T     DIB    3                    //Stunde

      L     #TAG                        //Tag
      +     1
      T     #TAG
      L     #MONAT_TAGE
      >I    
      SPB   monP

      L     #TAG
      ITB   
      T     DIB    2                    //Tag

      SPA   woTa

monP: L     1
      T     DIB    2                    //Tag

      L     #MONAT
      +     1
      T     #MONAT
      L     12
      >I    
      SPB   jahP

      L     #MONAT
      ITB   
      T     DIB    1                    //Monat

      SPA   woTa

jahP: L     1
      T     DIB    1                    //Monat

      L     DIB    0                    //Jahr
      BTI   
      +     1
      ITB   
      T     DIB    0                    //Jahr


woTa: L     7
      L     DIB    7                    //Wochentag
      ==I   
      SPB   woNu

      L     DIB    7                    //Wochentag
      +     1
      T     DIB    7                    //Wochentag
      SPA   nee

woNu: L     1
      T     DIB    7                    //Wochentag

nee:  NOP   0
 
Hallo,
Die #SPSZEIT erhalte ich über SFC1.
Die Variablen habe ich alle im entsprechenden Format unter "STAT" angelegt, paßt das? (funktioniert jedenfalls)
Kann ich die Variablen aus dem IDB direkt weiterverarbeiten?

Gruß
Klaus
 
Zurück
Oben