//VAR_INPUT // RTC_DT : RTC_TYPE ; //END_VAR // //VAR // tmp_sec : ULINT ; //END_VAR // //VAR_OUTPUT // SECONDS : ULINT ; //END_VAR // //VAR // i : UINT ; // leap : ARR12_USINT := [USINT#31, USINT#29, USINT#31, USINT#30, USINT#31, USINT#30, 2(USINT#31), USINT#30, USINT#31, USINT#30, USINT#31] ; // regular : ARR12_USINT := [USINT#31, USINT#28, USINT#31, USINT#30, USINT#31, USINT#30, 2(USINT#31), USINT#30, USINT#31, USINT#30, USINT#31] ; // year : ARR12_USINT ; //END_VAR tmp_sec := 1640995200;//UNIX EPOCH TIME FOR THE MOMENT 2022.01.01 00:00:00 IF RTC_DT.YEAR < 2022 THEN SECONDS := 0; RETURN; END_IF; //UNIX EPOCH TIME CALC FURTHER FOR i := 2022 TO RTC_DT.YEAR - UINT#1 BY 1 DO IF (i MOD 4) <> 0 THEN tmp_sec := tmp_sec + ULINT#31536000; ELSE tmp_sec := tmp_sec + ULINT#31622400; END_IF; END_FOR; IF (RTC_DT.YEAR MOD 4) <> 0 THEN year := regular; ELSE year := leap; END_IF; FOR i := 1 TO RTC_DT.MONTH - UINT#1 BY 1 DO tmp_sec := tmp_sec + year[i]* ULINT#86400; END_FOR; tmp_sec := tmp_sec + (RTC_DT.DAY - ULINT#1) * ULINT#86400; tmp_sec := tmp_sec + RTC_DT.HOURS * ULINT#3600; tmp_sec := tmp_sec + RTC_DT.MINUTES * ULINT#60; tmp_sec := tmp_sec + RTC_DT.SECONDS; SECONDS := tmp_sec;