Monday, February 24, 2014

Contract Hour - Once a day summing

Contract Hour How do you do a daily summary, at whatever the user wants for contract hour? Similar code can be used to do Hourly Summing.
FUNCTION CHOURTIME:
  • Returns CHOUR_NOT when you are not in contract hour.
  • Returns CHOUR_JUST when you are in contract hour and need to sum. i.e., first second of hour.
  • Returns CHOUR_DONE when you are in contract hour and have already done a sum.
  • Variables: ContractHourStatus should be a non-retained global and initialized to CHOUR_NOT at warm boot.
  • ContractHour should be a retained global and initialized to a default value at cold boot. Should be called once a second.
NSEC := ANY_TO_DINT(DateTime);
Hour := ANY_TO_UDINT(MOD ( NSEC / 3600, 24) );

IF  (ContractHour = Hour) THEN
    IF (ContractHourStatus = CHOUR_NOT) THEN
        ChourTime:= CHOUR_JUST;
    ELSE 
        ChourTime:= CHOUR_DONE;
    END_IF; 
ELSE 
    ChourTime:= CHOUR_NOT;
END_IF; 

Variables-Local

NameTypeDirAttrRetained
NSECDINTVarR/WNo
HOURUDINTVarR/WNo
ContractHourUDINTVarInputReadNo
ContractHourStatUDINTVarInputR/WNo
ChourTimeUDINTVarOutputWNo

Defined words (#define in C++)


Defined WordsValue
CHOUR_NOT0
CHOUR_JUST1
CHOUR_DONE2

No comments:

Post a Comment