*
FUNCTION FC 1710 : VOID
TITLE =READ_CLK
//Funktion zum Lesen und Speichern der Systemzeit im Merker- oder
//Datenbausteinbereich
//Die Uhrzeit wird fortlaufend ab dem ersten Word am Eingang aDateTime gespeichert
//Jahr,Monat,Tag,Stunde,Minute,Sekunde,Millisekunde,Wochentag
//
//Aufrufbeispiel:
// CALL FC 2
// anyDateTime :=#OB1_DATE_TIME
// anyDestination:=DB1.DBW16
//
//DATE: 09.12.2008
//AUTHOR: 4lagig
//VERSION: V0.1 BasicVer
AUTHOR : '4lagig'
FAMILY : ClockGF
VERSION : 0.1
VAR_INPUT
anyDateTime : ANY ;
anyDestination : ANY ;
END_VAR
VAR_TEMP
dwTempAR1 : DWORD ;
dwTempAR2 : DWORD ;
xDB : BOOL ;
wDB : WORD ;
tTimeDateTemp : DATE_AND_TIME ;
iLoop : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
TAR1 #dwTempAR1; // adressregister
TAR2 #dwTempAR2; // sichern
L P##anyDestination; // ziel prüfen
LAR1 ;
L W [AR1,P#4.0]; // ob DB
L 0;
<>I ;
SPBN db2;
TAK ;
T #wDB;
SET ;
= #xDB;
SPA ver;
db2: CLR ;
= #xDB; // oder nicht
ver: L D [AR1,P#6.0]; // speicherbereich aus ANY
LAR1 ; // in AR1
L P##anyDateTime; // quelle
LAR2 ;
L D [AR2,P#6.0]; // adressieren
LAR2 ;
U #xDB; // wenn DB
SPB ver2; // die andere schleife nutzen
L 6;
nex1: T #iLoop; // jahr, monat, tag,
L B [AR2,P#0.0]; // stunden, minuten, sekunden
BTI ; // in integer wandeln
T W [AR1,P#0.0]; // und speichern
+AR1 P#2.0;
+AR2 P#1.0;
L #iLoop;
LOOP nex1;
L W [AR2,P#0.0]; // millisekunden
SRW 4; // filtern
BTI ;
T W [AR1,P#0.0]; // und speichern
L W [AR2,P#0.0]; // wochentag
L W#16#F; // filtern
UW ;
BTI ;
T W [AR1,P#2.0]; // und speichern
SPA ver3;
ver2: AUF DB [#wDB];
L 6;
nex2: T #iLoop;
L B [AR2,P#0.0];
BTI ;
T DBW [AR1,P#0.0];
+AR1 P#2.0;
+AR2 P#1.0;
L #iLoop;
LOOP nex2;
L W [AR2,P#0.0];
SRW 4;
BTI ;
T DBW [AR1,P#0.0];
L W [AR2,P#0.0];
L W#16#F;
UW ;
BTI ;
T DBW [AR1,P#2.0];
ver3: LAR1 #dwTempAR1; // adressregister zurückspeichern
LAR2 #dwTempAR2;
SET ; //EN0-handling
SAVE ;
END_FUNCTION