# datum und uhrzeit in S7. woher nehmen?



## knollmeister (24 August 2005)

hallo.

bei unserem projekt soll eine abwassermengenerfassung realisiert werden.
diese erfassung soll einmal am ende jedes monats zurückgesetzt und der wert in ein register geschoben werden wo er ende des darauf folgenden monats wieder überschrieben wird.

das problem dabei ist folgendes:
wo bekommt die steuerung die aktuelle uhrzeit und das datum her?
es gibt ja eine menge bausteine die die datum und uhrzeitfunktionen bearbeiten.
leider finde ich in deren hilfe keine angabe darüber, woher die steuereung die daten für datum und uhrzeit bekommt.

gruß
knollmeister


----------



## lorenz2512 (24 August 2005)

Hallo,
Du willst also die S7 zur Monatsschaltuhr degradieren :lol: , hatten wir schon mal http://www.sps-forum.de/phpBB2/viewtopic.php?t=4307&highlight=uhrzeit

oder nimm einfach eine externen Monatswecker und schalte den über einen Eingang, dann brauchst Du dich nicht mit Sommer und Winterzeit und Gangungenauikeit rum ärgern. :wink:


----------



## RMA (24 August 2005)

Einfachste Quelle für Datum und Zeit ist OB1 selbst. Ab Local Byte 12 (in den TEMPs) ist es in Date_And_Time format gespeichert.


----------



## Boris (25 August 2005)

moin.

verstehe ich das richtig?
im ob1 steht ab byte 12 immer die aktuelle uhrzeit und das datum?
gut zu wissen.

gruß boris


----------



## MSB (25 August 2005)

Hauptbausteine sind:

SFC0, SFC1 Schreiben/Lesen der Echtzeituhr
SFC Schlagmichtot + zig weitere FC's zu Sommer/Winterzeitumschaltung.

Mfg
Manuel


----------



## RMA (25 August 2005)

Boris schrieb:
			
		

> moin.
> 
> verstehe ich das richtig?
> im ob1 steht ab byte 12 immer die aktuelle uhrzeit und das datum?
> ...



Ja, es stimmt. Es gibt ein hartneckiges Gerücht, dass die Zeit die da gespeichert ist, die des Erstanlaufs von OB1 ist. Dass dies nicht der Fall ist, kann man leicht beweisen indem man die Bytes in einigen Merker Byes schreibt und dies dann in einem VAT beobachtet. 

Natürlich, wegen der Zykluszeit ist diese Zeit dicht ganz so genau wie die von SFC1, aber für die meisten Zwecke reicht es allemal - und spart viel Arbeit.


----------



## RMA (26 August 2005)

Ich habe folgende PN von Franz gekriegt:



> Hallo,
> ich habe deinen Beitrag gelesen. Aber wie kann ich die Zeit weiterverarbeiten?
> Ich will die Zeit des OB1 in dienen DB ablegen.
> 
> MFG Franz



Das ist ganz einfach, einfach die zwei DWORDs aus dem LD Bereich laden und in Dein DB transferieren, z.B., in OB1:

L LD12
T DB10.DBD0
L LD16
T Db10.DBD4

Nun hast Du Deine Daten in DB10

Byte 0 = Jahr (z.B. 05)
Byte 1 = Monat (z.B. 08 )
Byte 2 = Tag (z.B. 26)
Byte 3 = Stunde
Byte 4 = Minute
Byte 5 = Sekunde
Byte 6 = Die beiden höchstwertigen Ziffern von ms
Byte 7 - 4 MSB = niederwertigen Ziffern von ms
Byte 7 - 4 LSB = Wochentag - 1 = Sonntag, 2 = Montag ...

Könnte kaum einfacher sein, oder? 
Doch, ein Tick einfacher könnte es sein - *Achtung*! 

1) die Werte sind BCD codiert, Du musst sie mit BTI in INT umwandeln bevor Du damit arbeiten kannst.

2) die ms sind wegen der Zyklus Zeit mit Vorsicht zu geniessen es sei denn Du liest die Daten ganz am Anfang von OB1 und bearbeitest sie gleich.


----------



## Franz (26 August 2005)

*S7 Zeit mit SCF1*

Hallo,
ich habe diesen aufruf geschrieben.

VAR_TEMP 
  CPU_Time : DATE_AND_TIME ;  
  error : INT ;    
END_VAR

NETWORK 

      CALL SFC    1 
           RET_VAL                  := #error, 
           CDT                      := #CPU_Time
Ich will jetzt die #CPU_Time in einen DB zu transverieren.Habe also diese zeilen noch geschrieben.
L CPU_Time
T DB10.DBW 4
Das ging nicht.
Danke


----------



## RMA (26 August 2005)

Du kannst zusammengesetzte Datentypen nicht mit dem Lade Befehl bearbeiten der kann nur bis zu 4 Bytes handhaben (Grösse der AKKUs). Deswegen kannst Du nur auf Einzelteilen von solchen Strukturen zugreifen.

Deswegen habe ich oben 2x DWORDs geladen, kopiere das, dann guckst Du die einzelnen Bytes in einem VAT an. Denk daran, dass diese Code nur in OB1 funktioniert aber auf die Daten in DB10 (oder wo auch immer) kannst Du von überall zugreifen.

Deine SFC1 Daten dürften auch vorhanden sein, Du muss nur gucken wo die 8 Bytes liegen und dann mit z.B. (Wenn CPU_Time an Adresse 8 anfängt)

L LD8
T DB10.DBD4
L LD12
T Db10.DBD8


----------



## plc_tippser (26 August 2005)

*Re: S7 Zeit mit SCF1*



			
				Franz schrieb:
			
		

> Hallo,
> ich habe diesen aufruf geschrieben.
> 
> VAR_TEMP
> ...




Får so eine Function kannst du den SFC20 benutzen.

pt


----------

