-> Hier kostenlos registrieren
ich habe mir 2 FC erstellt wie auf dieser Seite beschrieben:
https://support.automation.siemens....lib.csinfo&lang=de&objid=21222026&caller=view
Also bei mir FC2 zum Lesen und FC3 zum Schreiben der Uhrzeit in db100
allerding Funktioniert nur der FC2
FC3 schreibt irgend wie nicht die Uhrzeit in die CPU
Die Daten schreibe ich in DB100, lesen aktiviere ich mit e124.6
schreiben mit e124.7
hier die 2 Quellen der FC2 und FC3, DB100 und OB1 Aufruf (AWL-Quelle):
CPU ist denk ich net so wichtig - ist eine 313C V2.0
Woran liegt das ?
****************************FC2************
FUNCTION "DT_VAR" : VOID
TITLE =
VERSION : 0.1
VAR_OUTPUT
Jahre : BYTE ;
Monate : BYTE ;
Tage : BYTE ;
Stunden : BYTE ;
Minuten : BYTE ;
Sekunden : BYTE ;
Millisekunden : WORD ;
Wochentag : BYTE ;
END_VAR
VAR_TEMP
DT_IN : DATE_AND_TIME ;
SFC1error : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
CALL "READ_CLK" (
RET_VAL := #SFC1error,
CDT := #DT_IN);
NETWORK
TITLE =
LAR1 P##DT_IN;
L B [AR1,P#0.0];
T #Jahre;
L B [AR1,P#1.0];
T #Monate;
L B [AR1,P#2.0];
T #Tage;
L B [AR1,P#3.0];
T #Stunden;
L B [AR1,P#4.0];
T #Minuten;
L B [AR1,P#5.0];
T #Sekunden;
L W#16#FFF0;
L W [AR1,P#6.0];
UW ;
T #Millisekunden;
L B#16#F;
L B [AR1,P#7.0];
UW ;
T #Wochentag;
CLR ;
END_FUNCTION
****************************FC3************
FUNCTION "VAR_DT" : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
S_Jahre : BYTE ;
S_Monate : BYTE ;
S_Tage : BYTE ;
S_Stunden : BYTE ;
S_Minuten : BYTE ;
S_Sekunden : BYTE ;
S_Millisekunden : WORD ;
S_Wochentag : BYTE ;
END_VAR
VAR_TEMP
dt_out : DATE_AND_TIME ;
SFC0error : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
LAR1 P##dt_out;
L #S_Jahre;
T B [AR1,P#0.0];
L #S_Monate;
T B [AR1,P#1.0];
L #S_Tage;
T B [AR1,P#2.0];
L #S_Stunden;
T B [AR1,P#3.0];
L #S_Minuten;
T B [AR1,P#4.0];
L #S_Sekunden;
T B [AR1,P#5.0];
L #S_Wochentag;
T B [AR1,P#7.0];
CALL "SET_CLK" (
PDT := #dt_out,
RET_VAL := #SFC0error);
END_FUNCTION
****************************DB100************
DATA_BLOCK "DatumUhrzeit"
TITLE =
VERSION : 0.1
STRUCT
Jahre : BYTE ; //Jahre
Monate : BYTE ; //Monate
Tage : BYTE ; //Tage
Stunden : BYTE ; //Stunden
Minuten : BYTE ; //Minuten
Sekunden : BYTE ; //Sekunden
Millisekunden : WORD ; //Millisekunden
Wochentag : BYTE ; //Wochentag
Stellen : BYTE ; //Reserve Byte
S_Jahre : BYTE ; //Stellen Jahre
S_Monate : BYTE ; //Stellen Monate
S_Tage : BYTE ; //Stellen Tage
S_Stunden : BYTE ; //Stellen Stunden
S_Minuten : BYTE ; //Stellen Minuten
S_Sekunden : BYTE ; //Stellen Sekunde
S_Millisekunden : WORD ; //Stellen Millisekunden
S_Wochentag : BYTE ; //Stellen Wochentag
END_STRUCT ;
BEGIN
Jahre := B#16#0;
Monate := B#16#0;
Tage := B#16#0;
Stunden := B#16#0;
Minuten := B#16#0;
Sekunden := B#16#0;
Millisekunden := W#16#0;
Wochentag := B#16#0;
Stellen := B#16#0;
S_Jahre := B#16#0;
S_Monate := B#16#0;
S_Tage := B#16#0;
S_Stunden := B#16#0;
S_Minuten := B#16#0;
S_Sekunden := B#16#0;
S_Millisekunden := W#16#0;
S_Wochentag := B#16#0;
END_DATA_BLOCK
****************************OB1 AUfruf************
NETWORK
TITLE =
U E 124.6;
SPBNB _001;
CALL "DT_VAR" (
Jahre := "DatumUhrzeit".Jahre,
Monate := "DatumUhrzeit".Monate,
Tage := "DatumUhrzeit".Tage,
Stunden := "DatumUhrzeit".Stunden,
Minuten := "DatumUhrzeit".Minuten,
Sekunden := "DatumUhrzeit".Sekunden,
Millisekunden := "DatumUhrzeit".Millisekunden,
Wochentag := "DatumUhrzeit".Wochentag);
_001: NOP 0;
NETWORK
TITLE =
U E 124.7;
SPBNB _002;
CALL "VAR_DT" (
S_Jahre := "DatumUhrzeit".S_Jahre,
S_Monate := "DatumUhrzeit".S_Monate,
S_Tage := "DatumUhrzeit".S_Tage,
S_Stunden := "DatumUhrzeit".S_Stunden,
S_Minuten := "DatumUhrzeit".S_Minuten,
S_Sekunden := "DatumUhrzeit".S_Sekunden,
S_Millisekunden := "DatumUhrzeit".S_Millisekunden,
S_Wochentag := "DatumUhrzeit".S_Wochentag);
_002: NOP 0;
https://support.automation.siemens....lib.csinfo&lang=de&objid=21222026&caller=view
Also bei mir FC2 zum Lesen und FC3 zum Schreiben der Uhrzeit in db100
allerding Funktioniert nur der FC2
FC3 schreibt irgend wie nicht die Uhrzeit in die CPU
Die Daten schreibe ich in DB100, lesen aktiviere ich mit e124.6
schreiben mit e124.7
hier die 2 Quellen der FC2 und FC3, DB100 und OB1 Aufruf (AWL-Quelle):
CPU ist denk ich net so wichtig - ist eine 313C V2.0
Woran liegt das ?
****************************FC2************
FUNCTION "DT_VAR" : VOID
TITLE =
VERSION : 0.1
VAR_OUTPUT
Jahre : BYTE ;
Monate : BYTE ;
Tage : BYTE ;
Stunden : BYTE ;
Minuten : BYTE ;
Sekunden : BYTE ;
Millisekunden : WORD ;
Wochentag : BYTE ;
END_VAR
VAR_TEMP
DT_IN : DATE_AND_TIME ;
SFC1error : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
CALL "READ_CLK" (
RET_VAL := #SFC1error,
CDT := #DT_IN);
NETWORK
TITLE =
LAR1 P##DT_IN;
L B [AR1,P#0.0];
T #Jahre;
L B [AR1,P#1.0];
T #Monate;
L B [AR1,P#2.0];
T #Tage;
L B [AR1,P#3.0];
T #Stunden;
L B [AR1,P#4.0];
T #Minuten;
L B [AR1,P#5.0];
T #Sekunden;
L W#16#FFF0;
L W [AR1,P#6.0];
UW ;
T #Millisekunden;
L B#16#F;
L B [AR1,P#7.0];
UW ;
T #Wochentag;
CLR ;
END_FUNCTION
****************************FC3************
FUNCTION "VAR_DT" : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
S_Jahre : BYTE ;
S_Monate : BYTE ;
S_Tage : BYTE ;
S_Stunden : BYTE ;
S_Minuten : BYTE ;
S_Sekunden : BYTE ;
S_Millisekunden : WORD ;
S_Wochentag : BYTE ;
END_VAR
VAR_TEMP
dt_out : DATE_AND_TIME ;
SFC0error : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
LAR1 P##dt_out;
L #S_Jahre;
T B [AR1,P#0.0];
L #S_Monate;
T B [AR1,P#1.0];
L #S_Tage;
T B [AR1,P#2.0];
L #S_Stunden;
T B [AR1,P#3.0];
L #S_Minuten;
T B [AR1,P#4.0];
L #S_Sekunden;
T B [AR1,P#5.0];
L #S_Wochentag;
T B [AR1,P#7.0];
CALL "SET_CLK" (
PDT := #dt_out,
RET_VAL := #SFC0error);
END_FUNCTION
****************************DB100************
DATA_BLOCK "DatumUhrzeit"
TITLE =
VERSION : 0.1
STRUCT
Jahre : BYTE ; //Jahre
Monate : BYTE ; //Monate
Tage : BYTE ; //Tage
Stunden : BYTE ; //Stunden
Minuten : BYTE ; //Minuten
Sekunden : BYTE ; //Sekunden
Millisekunden : WORD ; //Millisekunden
Wochentag : BYTE ; //Wochentag
Stellen : BYTE ; //Reserve Byte
S_Jahre : BYTE ; //Stellen Jahre
S_Monate : BYTE ; //Stellen Monate
S_Tage : BYTE ; //Stellen Tage
S_Stunden : BYTE ; //Stellen Stunden
S_Minuten : BYTE ; //Stellen Minuten
S_Sekunden : BYTE ; //Stellen Sekunde
S_Millisekunden : WORD ; //Stellen Millisekunden
S_Wochentag : BYTE ; //Stellen Wochentag
END_STRUCT ;
BEGIN
Jahre := B#16#0;
Monate := B#16#0;
Tage := B#16#0;
Stunden := B#16#0;
Minuten := B#16#0;
Sekunden := B#16#0;
Millisekunden := W#16#0;
Wochentag := B#16#0;
Stellen := B#16#0;
S_Jahre := B#16#0;
S_Monate := B#16#0;
S_Tage := B#16#0;
S_Stunden := B#16#0;
S_Minuten := B#16#0;
S_Sekunden := B#16#0;
S_Millisekunden := W#16#0;
S_Wochentag := B#16#0;
END_DATA_BLOCK
****************************OB1 AUfruf************
NETWORK
TITLE =
U E 124.6;
SPBNB _001;
CALL "DT_VAR" (
Jahre := "DatumUhrzeit".Jahre,
Monate := "DatumUhrzeit".Monate,
Tage := "DatumUhrzeit".Tage,
Stunden := "DatumUhrzeit".Stunden,
Minuten := "DatumUhrzeit".Minuten,
Sekunden := "DatumUhrzeit".Sekunden,
Millisekunden := "DatumUhrzeit".Millisekunden,
Wochentag := "DatumUhrzeit".Wochentag);
_001: NOP 0;
NETWORK
TITLE =
U E 124.7;
SPBNB _002;
CALL "VAR_DT" (
S_Jahre := "DatumUhrzeit".S_Jahre,
S_Monate := "DatumUhrzeit".S_Monate,
S_Tage := "DatumUhrzeit".S_Tage,
S_Stunden := "DatumUhrzeit".S_Stunden,
S_Minuten := "DatumUhrzeit".S_Minuten,
S_Sekunden := "DatumUhrzeit".S_Sekunden,
S_Millisekunden := "DatumUhrzeit".S_Millisekunden,
S_Wochentag := "DatumUhrzeit".S_Wochentag);
_002: NOP 0;