Read_CLK in SCL

MichaelHuf

Level-2
Beiträge
58
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich versuche die Aktuelle Systemzeit in SCL auszulesen und zu zerlegen.

TEMP_INT := READ_CLK(CDT:=TEMP_DT);
WOCHENTAG := WORD_TO_INT(BYTE_TO_WORD(CDT[7]));
MILLISEC := WORD_TO_INT(BYTE_TO_WORD(CDT[6]));
SEKUNDE := WORD_TO_INT(BYTE_TO_WORD(CDT[5]));
MINUTE := WORD_TO_INT(BYTE_TO_WORD(CDT[4]));
STUNDE := WORD_TO_INT(BYTE_TO_WORD(CDT[3]));
TAG := WORD_TO_INT(BYTE_TO_WORD(CDT[2]));
MONAT := WORD_TO_INT(BYTE_TO_WORD(CDT[1]));
JAHR := WORD_TO_INT(BYTE_TO_WORD(CDT[0]));

Bei denn Ausgaben stimmt nur das Jahr,Monat,Stunde beim Tag kommt zum Bespiel 34 raus.
Was mach Ich falsch?
Brauche die zerlegung wegen einer Zeitschaltuhr.
Habe eine CPU 614 - Step7 5.3

Danke Im Voraus
Michael
 
Hallo,

Der Datentyp Date_And_Time wird im BCD-Format gespeichert.

Zahlenwerte bis 9 sind gleich. Größere Werte kannst du dir in Hex ansehen, dann passt es.
Wenn du deine 34 in Hex anguckst hast du 22.

Gruß Wilfried
 
Hallo,

der Wochentag teilt sich das Byte mit den Ms.

Bytes / Inhalt / Bereich
7 / (4 MSB) LSD (least significant decade) von ms / 0 ... 9
7 / (4 LSB) Wochentag / 1 ... 7 (1 = Sonntag).

Welche Zahl hast du denn ?

Gruß Wilfried
 
Hallo
Der Wochentag benutzt nur Bit 0..3 im letzten Byte. Bit 4..7 wird für die ms benutzt.

Schau dir in der Standard Library - IEC Function Block die Bausteine "DT_Date", "DT_DAY" und "DT_TOD" einmal an.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ok habe Dt_DAY eingefügt und Tag ausgelesen!

Nun habe Ich aber ein anders Problem,wenn dies Werte als BCD codiert sind,
wie vergleiche ich diese mit einem Int - Wert.



Gruß Michael
 
Hallo,

entweder den Int- Wert zu BCD oder den BCD-Wert zu Int wandeln. Da es keine neg. Werte gibt bleibt es gleich.
Eine andere Möglichkeit sehe ich nicht.

Gruß Wilfried
 
Hallo,

eine Wandlung von BCD auf INT ist in SCL nicht möglich.
Habe einen FC eingebunden.

Danke an Alle.
MFG
Michael
 
Zurück
Oben