dayOfWeek = (year+year/4+ ММ[mounth] + day) MOD 7
где
year - год;
day - номер дня в месяце;
ММ[mounth] - значение из массива
январь
5 (4 - для високосного года)
февраль
1 (0 - для високосного года)
март
1
апрель
4
май
6
июнь
2
июль
4
август
0
сентябрь
3
октябрь
5
ноябрь
1
декабрь
3
В вычислениях используются только целочисленные значения
Код:
FUNCTION dayOfWeek : UDINT; // (c) PeterA
VAR_INPUT
year: udint;
mounth: udint;
day:udint;
END_VAR
VAR
MM: ARRAY [1..12] OF udint := [5,1,1,4,6,2,4,0,3,5,1,3];
END_VAR
IF udint_to_bool(year MOD 4 ) THEN
MM[1]:= 5; MM[2]:= 1;
ELSE
MM[1]:= 4; MM[2]:= 0;
END_IF
dayOfWeek:= (year+year/4+ MM[mounth] + day) MOD 7;
end_function
Ну с массивами придётся обождать/аккуратно разграничивать. Пока ST и остальной код ОвенЛоджика это как 2 континента с узким подвесным мостом. В Лоджике пока ещё только bool, unsigned long и float. Остальные типы не поддерживаются