//Addresses Used
//Address Meaning
//I 0.0 Input to read a variable time into MD 0
//I 0.1 Input to set the time
//MW 0 Date, can be changed via STATUS VAR
//MD 2 Time, can be changed via STATUS VAR
//MW 6 Current date
//MW 8 Current day
//MD 10 Current time of day
//***********************************************************************************
FUNCTION FC 10 : VOID
TITLE = CPU- Set and read CPU time
VERSION : 1.0
VAR_TEMP
IN_TIME : TIME_OF_DAY ; //TOD actual parameter
OUT_TIME : TIME_OF_DAY ; //TOD actual parameter
IN_DATE : DATE ; //DATE actual parameter
OUT_DATE : DATE ; //DATE actual parameter
IN_TIME_DATE : DATE_AND_TIME ; //DT actual parameter
OUT_TIME_DATE : DATE_AND_TIME ; //DT actual parameter
CUR_RETVAL : INT ; //Current return value
END_VAR
BEGIN
NETWORK
TITLE = Save the required time and date
// in the temporary variables
L D#1997-1-20 ; //Specify date as constant
AN I 0.0 ; //if I 0.0 = 0; variable value in MW 0 if I 0.0 = 1
JC nko1 ;
L MW 0 ; //Specify value in MW 0 as date
//(change via STATUS VAR)
nko1: T #IN_DATE ;
L TOD#13:30:0.0 ; // Specify time as constant
AN I 0.0 ; // if I 0.0=0; variable value in MD 2 if I 0.0 = 1
JC nko2 ;
L MD 2; // Specify value in MD 2 as time
//(change via STATUS VAR)
nko2: T #IN_TIME ;
NETWORK
TITLE = Combine date and time
// to the output variable (format DATE_AND_TIME)
CALL FC 3 // Standard FC3 "D_TOD_DT" (conversion D and TOD
// to DT)
(IN1 := #IN_DATE, //Combines date from input variable (format DATE)
IN2 := #IN_TIME, //and time from input variable
RET_VAL := #IN_TIME_DATE); //(Format TIME_OF_DAY)
//to form output variable
//(format DATE_AND_TIME)
NETWORK
TITLE = Set time at positive edge
A I 0.1 ; // Set time if positive edge at I 0.1
FP M 255.1 ;
= M 255.0 ; // Edge memory bit
NETWORK
TITLE = Set time at positive edge
A I 0.1 ; //Set time if positive edge at I 0.1
FP M 255.1 ;
= M 255.0 ; //Edge memory bit
NETWORK
TITLE = Set the time
A M 255.0 ; // Set time if M 255.0=1 (positive edge)
JNB _005 ;
CALL SFC 0 // SFC 0 "SET_CLK" (set time-of-day interrupt)
(PDT := #IN_TIME_DATE, // Current date and time
RET_VAL := MW 200); // Contains error code (if SFC processing faulty)
_005: A BR;
= Q 4.0 ; // Q 4.0=1 if setting time OK
NETWORK
TITLE = Read time
CALL SFC 1 // SFC 1 "READ_CLK" (read time)
(RET_VAL := #CUR_RETVAL , // Contains error code
//(if SFC processing faulty)
CDT := #OUT_TIME_DATE); // Contains read time
// and date (format DT)
NETWORK
TITLE = Extract date from format DATE_AND_TIME
CALL FC 6 //FC6 "DT_DATE" (conversion DT to DATE)
(IN := #OUT_TIME_DATE, // Read time and date
//(format DT)
RET_VAL := #OUT_DATE); // Output variable in format DATE
//(current date)
NETWORK
TITLE = Display current date
L #OUT_DATE ;
T MW 6 ; // Display current date in MW 6
NETWORK
TITLE = Extract day from format DATE_AND_TIME
CALL FC 7 // FC7 "DT_DAY" (conversion DT to DAY)
(IN := #OUT_TIME_DATE, // Read time and date
//(format DT)
RET_VAL := MW 8) // Display current day in MW 8
NETWORK
TITLE = Extract time from format DATE_AND_TIME
CALL FC 8 // FC8 "DT_TOD" (conversion DT to TOD)
(IN := #OUT_TIME_DATE, //Read time and date
//(format DT)
RET_VAL := #OUT_TIME); //Output variable in format TOD
//(current time of day)
NETWORK
TITLE = Display current time
L #OUT_TIME ;
T MD 10 ; //Display current time of day in MD 10
END_FUNCTION
//***********************************************************************************
ORGANIZATION_BLOCK OB 1
TITLE = Call FC10
VERSION : 1.0
VAR_TEMP
SYSTEM : ARRAY [1..20] OF BYTE ;
END_VAR
BEGIN
CALL FC 10 ;
END_ORGANIZATION_BLOCK
NETWORK
TITLE = Set time at positive edge
A I 0.1 ; // Set time if positive edge at I 0.1
FP M 255.1 ;
= M 255.0 ; // Edge memory bit
NETWORK
TITLE = Set time at positive edge
A I 0.1 ; //Set time if positive edge at I 0.1
FP M 255.1 ;
= M 255.0 ; //Edge memory bit
这是sfc0中帮助中的代码,这段代码中为什么这里要写两编呢?谁能帮我看看