Hallo,
- Datum + Uhrzeit liegen immer im OB1 bereit
(temp. Variable
#OB1_DATE_TIME)
- Lege in einem Datenbaustein deiner Wahl eine Variable vom Typ
Date_And_Time an (z.B. SystemZeit).
- Kopiere von OB 1 aus mit
SFC20 die
temporäre Variable
#OB1_DATE_TIME.
Beispiel :
Dein DB ist DB2,
die vom Typ Date_And_Time definierte Variable ist "Systemzeit"
Code:
CALL "BLKMOV" // SFC20 Aufruf
SRCBLK :=#OB1_DATE_TIME
RET_VAL:=MW222
DSTBLK :=DB2.SystemZeit
Nach Ausführung hast du im DB2 an der Stelle "SystemZeit"
die aktuelle CPU-Zeit (Datum + Uhrzeit).
Zum Beobachten (prüfen) machst du eine VAT und beobachtest
die Bytes der Variablen "Systemzeit"
DB2.DBB x .........(Jahr)
DB2.DBB x+1 ..... (Monat)
DB2.DBB x+2 ..... (Tag)
DB2.DBB x+3...... (Stunde)
DB2.DBB x+4...... (Minute)
DB2.DBB x+5...... (Sekunde)
DB2.DBB x+6...... (Millisekunde)
DB2.DBB x+7...... (niederwertige Stelle = tausendstel Sek., höherwertige Stelle = Wochentag)
Insgesamt 8 Byte, x = Anfang deiner Variable (SystemZeit) im DB2
------------------------
Zum Synchronisieren der Zeit zwischen OP und CPU
mußt du Aufträge anstoßen, also als Bereichszeiger Auftragsfach definieren!
Über Auftrag Nr. 40 wird dem OP mitgeteilt, seine aktuelle Zeit in den
Bereichszeiger
Datum/Uhrzeit_HMI zu schreiben.
Nach anstoßen des Auftrages solltest du die Zeit aus dem Bereichszeiger
als neue SPS-Zeit mit
SFC 0 (Systemzeit setzten) übernehmen.
Auftrag 40 = DatumUhrzeit nach CPU (Format Date_And_Time)
Auftrag 41 = Datum/Uhrzeit nach SPS (Format "OP / MP" --> ALt !)
Wobei für dich (TP170b) Auftrag 40 in Frage kommt.
Soll das OP/TP immer die CPU Zeit anzeigen,
dann brauchst du kein Auftrag anzustoßen,
sondern den Bereichszeiger
Datum/Uhrzeit_SPS dafür zu definieren,
dieser Bereichszeiger schaut dann im obigen Beispiel auf DB2.x.
Die aktualisierungszeit aber groß wählen (1 Stunde oder so)