А вопрос еще актуальный?
Хотя, посмотрел, что ТС больше не появлялся
Наверно обиделся
ЗЫ. Может еще вернется?
Бесплатно!Код:PROGRAM PLC_PRG VAR RETAIN PERSISTENT Schedule: ARRAY [1..366, 1..2] OF TOD; (* Расписание: Время Откл, Время Вкл. в формате Time Of Date*) END_VAR VAR CONSTANT dpm: ARRAY [1..12] OF INT := 31, 28, 31,30, 31, 30, 31, 31, 30, 31, 30, 31; (*Чисол дней в месяце*) nulldt: SystemTimeDate; (*нужна для обнуления параметров*) END_VAR VAR CurTimeExInst: CurTimeEx; CurSystemTimeDate: SystemTimeDate; CurSysTime64: SysTime64; year: INT; second: INT; day: INT; hour: INT; minute: INT; month: INT; LEAP_YEAR: BOOL; (*Флаг високосного года*) Curr_DAY: INT; (*Номер дня в году*) i: INT; Now: TOD; (*Текущее время*) Stop: TOD; (*Время выключения*) Start: TOD; (*Время включения*) Light: BOOL; (*Освещение вкл.*) END_VAR CurSystemTimeDate:=nulldt; CurTimeExInst(TimeDate := CurSystemTimeDate, SystemTime := CurSysTime64); year :=CurSystemTimeDate.Year; month :=CurSystemTimeDate.Month; day :=CurSystemTimeDate.Day; hour :=CurSystemTimeDate.Hour; minute :=CurSystemTimeDate.Minute; second :=CurSystemTimeDate.Second; (*------------------------------------------------------------------------*) LEAP_YEAR := SHL(year,14) = 0; (*Проверить високосный год*) (*номер дня в году*) Curr_DAY:=day + BOOL_TO_INT(month > 2 AND LEAP_YEAR); FOR i:=1 TO 12 DO IF i < month THEN Curr_DAY:=Curr_DAY + dpm[i] ; END_IF END_FOR (*------------------------------------------------------------------------*) Now := DWORD_TO_TOD( INT_TO_DWORD(SECOND)*1000+ INT_TO_DWORD(MINUTE) * 60000 + INT_TO_DWORD(HOUR) * 3600000); (*Вкл/Выкл здесь*) Stop:=Schedule[Curr_DAY, 1]; Start:=Schedule[Curr_DAY, 2]; IF stop < start THEN Light := start <= Now OR Now < stop; ELSE Light := start <= Now AND Now < stop; END_IF;
Вот как вбивать это расписание? Здесь гораздо интересней задачка.





Ответить с цитированием