FUNCTION FC226 : BOOL
// Beschreibung: FC_DT_TO_STRUCT
// Baustein zerlegt den Datentyp DATE_AND_TIME in einzelne Variablen. Unter "Hilfe zu Step 7" ==> "Suchen" ==> "Format des Datentyps DATE_AND_TIME"
// ist der Aufbau des Datentyps DATE_AND_TIME beschrieben. Mit Hilfe dieser Angaben wurde dieser Baustein hier erstellt.
// Als Rückgabewert der Funktion wird das OK Flag übergeben.
// Ersteller: ***
// Erstelldatum: ***
// Änderungen:
TITLE= 'Konvertierung von DATE_AND_TIME in einzelne Variablen';
NAME: DT_TO_STRUCT;
Family: SCL;
Version: '1.0';
AUTHOR: **;
// KNOW_HOW_PROTECT
{SCL_SetOKFlag:='TRUE'}
VAR_INPUT
DTVar :DT; // DATE_AND_TIME Variable die zerlegt werden soll
END_VAR
VAR_OUTPUT
nJahr :INT; // Wertebereich 90-89, 90=1990/89=2089
nMonat :INT; // Wertebereich 1-12, 1=Jan/12=Dez
nTag :INT; // Wertebereich 1-31 Tage
nStunde :INT; // Wertebereich 0-23 Stunden
nMinute :INT; // Wertebereich 0-59 Minuten
nSekunde :INT; // Wertebereich 0-59 Sekunden
nMillisekunde :INT; // Wertebereich 0-999 Millisekunden
nWochentag :INT; // Wertebereich 1-7 1=Sonntag/7=Samstag
END_VAR
VAR
sdtVar :STRUCT
byJahr :BYTE; // Wertebereich 90-89, 90=1990/89=2089 BCD Codiert
byMonat :BYTE; // Wertebereich 1-12, 1=Jan/12=Dez BCD Codiert
byTag :BYTE; // Wertebereich 1-31 Tage BCD Codiert
byStunde :BYTE; // Wertebereich 0-23 Stunden BCD Codiert
byMinute :BYTE; // Wertebereich 0-59 Minuten BCD Codiert
bySekunde :BYTE; // Wertebereich 0-59 Sekunden
byMillisekunde :BYTE; // Die beiden höchstwertigen Ziffern von MSEC
by7 :BYTE; // xxxxyyyy x=Die niederwertige Ziffer von MSEC Y=Wochentag 1=Sonntag/7=Samstag
END_STRUCT;
dtVartmp AT sdtVar :DT; // Temporärer Eingangszeiger der zerlegt werden soll
wWord :WORD; // Hilfsvariable
sWord AT wWord :STRUCT // Hilfsstruktur
by0 :BYTE;
by1 :BYTE;
END_STRUCT;
END_VAR
BEGIN
// Die DATE_AND_TIME Variable mal temporär übergeben
dtVartmp:= DTVar;
// Bytes ins Word kopieren
sWord.by0 := sdtVar.byMillisekunde;
sWord.by1 := sdtVar.by7;
// Variablen übergeben
nJahr := BCD_TO_INT(sdtVar.byJahr);
nMonat := BCD_TO_INT(sdtVar.byMonat);
nTag := BCD_TO_INT(sdtVar.byTag);
nStunde := BCD_TO_INT(sdtVar.byStunde);
nMinute := BCD_TO_INT(sdtVar.byMinute);
nSekunde := BCD_TO_INT(sdtVar.bySekunde);
nMillisekunde := BCD_TO_INT(SHR(IN:= wWord, N:= 4));
nWochentag := BCD_TO_INT(sdtVar.by7 AND BYTE#2#0000_1111);
FC226:= OK;
END_FUNCTION