DISCLAIMER
The example below is intended to demonstrate one or more features or methods and is presented as a configuration example only. Schneider Electric assumes no liability for the use or application of this example or any portion thereof.
ClearSCADA allows the user to create its own Structured Text library, where several user function blocks can be stored.
A function that is periodically requested by users is one that returns the day of the week from a DATE_AND_TIME input variable. The code below returns the day of the week as a number (0 = Sunday to 6 = Saturday):
Once added to a library, this function can be called from both ST or FBD logic program.
Below a picture of the function being called from an FBD program:
Below a picture of the function being called from an ST program:
Note: Don't forget to add the library that contains the function block you are going to use to your logic program before calling the function. For more information on how to do that, please search the manual for "ST and Function Block Libraries".
The example below is intended to demonstrate one or more features or methods and is presented as a configuration example only. Schneider Electric assumes no liability for the use or application of this example or any portion thereof.
ClearSCADA allows the user to create its own Structured Text library, where several user function blocks can be stored.
A function that is periodically requested by users is one that returns the day of the week from a DATE_AND_TIME input variable. The code below returns the day of the week as a number (0 = Sunday to 6 = Saturday):
FUNCTION_BLOCK DayOfTheWeek VAR_INPUT InDate : DATE_AND_TIME; END_VAR VAR_OUTPUT DayOfWeek : INT; END_VAR VAR Year : INT; cYear : INT; Month : INT; Day : INT; CP : INT; YP : INT; MP : INT; LeapYear : BOOL := FALSE; Valid :BOOL; END_VAR Year := EXTRACT_DT_YEAR(InDate); cYear := STRING_TO_INT(RIGHT(INT_TO_STRING(Year),2)); Month := EXTRACT_DT_MONTH(InDate); Day := EXTRACT_DT_DAY(InDate); Valid := TRUE; CASE Year OF 1752..1799 : CP := 4; 1800..1899 : CP := 2; 1900..1999 : CP := 0; 2000..2099 : CP := 6; ELSE Valid := FALSE; END_CASE; YP := cYear / 4; IF (MOD(cYear,400) = 0) THEN LeapYear := TRUE; ELSIF (MOD(cYear,100) = 0) THEN LeapYear := FALSE; ELSIF (MOD(cYear,4) = 0) THEN LeapYear := TRUE; ELSE LeapYear := FALSE; END_IF; CASE Month OF 1 : IF LeapYear THEN MP := 6; ELSE MP := 0; END_IF; 2 : IF LeapYear THEN MP := 2; ELSE MP := 3; END_IF; 3 : MP := 3; 4 : MP := 6; 5 : MP := 1; 6 : MP := 4; 7 : MP := 6; 8 : MP := 2; 9 : MP := 5; 10 : MP := 0; 11 : MP := 3; 12 : MP := 5; END_CASE; IF Valid THEN DayOfWeek := MOD(CP + cYear + YP + MP + Day, 7 ); ELSE DayOfWeek := -1; END_IF; END_FUNCTION_BLOCK |
Once added to a library, this function can be called from both ST or FBD logic program.
Below a picture of the function being called from an FBD program:
Below a picture of the function being called from an ST program:
Note: Don't forget to add the library that contains the function block you are going to use to your logic program before calling the function. For more information on how to do that, please search the manual for "ST and Function Block Libraries".