Uhrzeit

elektrohippi

Level-1
Beiträge
31
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und allen ein gutes neues Jahr,:-D
danke für die bisherige Hilfe.
Neues Problem:confused:: Wie kann ich auf die einfachste Art die CPU- UHR
auslesen und ablegen, damit ich in Netzausfall einen Vergleich anstellen
kann?? Ich muß feststellen können, wenn meine Steuerung >>5min
stromlos war, eine entsprechende Aktion durchführen zu können.
Die Systemzeit ist ja Batterie gepuffert.
Kann jemand auf dem einfachsten Weg helfen??

Grüße Frank
 
In jedem OB ist die Startzeit in den Lokaldaten hinterlegt:

für OB1: OB1_DATE_TIME
für OB100: OB100_DATE_TIME

=> OB1-Startzeit zyklisch in einem DB sichern
(sind 8Bytes, wobei aber nicht alle für dich interessant sein dürften)

Im OB100 (wird nach Neustart abgearbeitet)
Startzeit auslesen und vergleichen mit dem gesichertem OB1 Wert

Aber dabei musst du das Format beachten (Date_and_time):
BCD-codiert .... (in Step7 Hilfe nachschauen)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eventuell hilft Dir das........


Code:
FUNCTION "SPS Datum Uhrzeit Tag" : VOID
TITLE =SPS Datum Uhrzeit Wochentag
VERSION : 0.0


VAR_OUTPUT
  DATUM : DATE ;    
  UHRZEIT : TIME_OF_DAY ;    
  TAG : INT ;    
END_VAR
VAR_TEMP
  DATUM_UHRZEIT : DATE_AND_TIME ;    
  READ_CLK : INT ;    
END_VAR
BEGIN
NETWORK
TITLE =SPS Datum Uhrzeit (DATE_AND_TIME)
//SFC 1  READ_CLK
//
//Die Funktion SFC 1 liest die aktuelle Uhrzeit und das aktuelle Datum im 
//Datenformat DATE_AND_TIME aus der SPS aus.
//   
      CALL "READ_CLK" (
           RET_VAL                  := #READ_CLK,
           CDT                      := #DATUM_UHRZEIT);
      NOP   0; 

NETWORK
TITLE =SPS Datum (DATE)
//FC 6  DT_DATE
//
//Die Funktion FC 6 liest das Datenformat DATE aus dem Datenformat DATE_AND_TIME. 
//DATE liegt zwischen den Grenzen DATE#1990-1-1 und DATE#2089-12-31.   
//   
      CALL "DT_DATE" (
           IN                       := #DATUM_UHRZEIT,
           RET_VAL                  := #DATUM);
      NOP   0; 

NETWORK
TITLE =SPS Uhrzeit (TOD)
//FC 8  DT_TOD
//
//Die Funktion FC 8 liest das Datenformat TIME_OF_DAY aus dem Datenformat 
//DATE_AND_TIME.
//   
      CALL "DT_TOD" (
           IN                       := #DATUM_UHRZEIT,
           RET_VAL                  := #UHRZEIT);
      NOP   0; 

NETWORK
TITLE =SPS Wochentag (DAY)
//FC 7 DT to DAY
//
//Die Funktion FC 7 liest das Datenformat DAY aus dem Datenformat 
//DATE_AND_TIME.
//
//Wochentag liegt im Datenformat INTEGER vor:
//1-Sonntag
//2-Montag
//3-Dienstag
//4-Mittwoch
//5-Donnerstag
//6-Freitag
//7-Samstag
      CALL "DT to DAY" (
           IN                       := #DATUM_UHRZEIT,
           RET_VAL                  := #TAG);
      NOP   0; 
END_FUNCTION
 
Code:
FUNCTION "SPS Datum Uhrzeit Tag" : VOID
TITLE =SPS Datum Uhrzeit Wochentag
VERSION : 0.0
 
 
VAR_OUTPUT
  DATUM : DATE ;    
  UHRZEIT : TIME_OF_DAY ;    
  TAG : INT ;    
END_VAR
VAR_TEMP
  DATUM_UHRZEIT : DATE_AND_TIME ;    
  READ_CLK : INT ;    
END_VAR
BEGIN
NETWORK
TITLE =SPS Datum Uhrzeit (DATE_AND_TIME)
//SFC 1  READ_CLK
//
//Die Funktion SFC 1 liest die aktuelle Uhrzeit und das aktuelle Datum im 
//Datenformat DATE_AND_TIME aus der SPS aus.
//   
      CALL "READ_CLK" (
           RET_VAL                  := #READ_CLK,
           CDT                      := #DATUM_UHRZEIT);
      NOP   0; 
 
NETWORK
TITLE =SPS Datum (DATE)
//FC 6  DT_DATE
//
//Die Funktion FC 6 liest das Datenformat DATE aus dem Datenformat DATE_AND_TIME. 
//DATE liegt zwischen den Grenzen DATE#1990-1-1 und DATE#2089-12-31.   
//   
      CALL "DT_DATE" (
           IN                       := #DATUM_UHRZEIT,
           RET_VAL                  := #DATUM);
      NOP   0; 
 
NETWORK
TITLE =SPS Uhrzeit (TOD)
//FC 8  DT_TOD
//
//Die Funktion FC 8 liest das Datenformat TIME_OF_DAY aus dem Datenformat 
//DATE_AND_TIME.
//   
      CALL "DT_TOD" (
           IN                       := #DATUM_UHRZEIT,
           RET_VAL                  := #UHRZEIT);
      NOP   0; 
 
NETWORK
TITLE =SPS Wochentag (DAY)
//FC 7 DT to DAY
//
//Die Funktion FC 7 liest das Datenformat DAY aus dem Datenformat 
//DATE_AND_TIME.
//
//Wochentag liegt im Datenformat INTEGER vor:
//1-Sonntag
//2-Montag
//3-Dienstag
//4-Mittwoch
//5-Donnerstag
//6-Freitag
//7-Samstag
      CALL "DT to DAY" (
           IN                       := #DATUM_UHRZEIT,
           RET_VAL                  := #TAG);
      NOP   0; 
END_FUNCTION

Vielen Dank, dass Du meinen Programmcode verwendet hast. ;)

http://www.sps-forum.de/showpost.php?p=93446&postcount=16

Gruß Kai
 

Anhänge

  • FC100.pdf
    4,8 KB · Aufrufe: 61
Schau mal im Anhang.
Das Problem hat mich jetzt auch interessiert, hab schnell was geschrieben.
(ungetestet)

Im OB100 wird die Zeitdifferenz seit dem Ausschalten berechnet.
Dort kannst du dann entsprechend reagieren.
 

Anhänge

  • Datetest.zip
    373 KB · Aufrufe: 28
Lösungsvorschlag

Ich lese ständig mit den Systemfunktionen die aktuelle Uhrzeit aus und speichere sie im remanenten Bereich. Bei CPU-Anlauf ist es dann einfach möglich die Zeitdifferenz zu ermitteln (Differenz aus aktueller und letzter Zeit und Umrechnen in Minuten).
 
Zurück
Oben