datum und uhrzeit in S7. woher nehmen?

knollmeister

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
moin.

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

gruß boris
 
Hauptbausteine sind:

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

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Boris schrieb:
moin.

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

gruß boris

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.
 
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.
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Re: S7 Zeit mit SCF1

Franz schrieb:
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


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

pt
 
Zurück
Oben