Спасибо!!!
Спасибо!!!
Yegor действительно умножать часы на 100 вместо привычных 60 оригинально, получаем как бы привычный вид времени в программе.
Валенок да, очень неудобно в SisLibTime с Воскресеньем, надо оскатовскую проверить, может там лучше будет, пока не смотрел. LimitAlarm тоже смотрел, отлично подходит когда интервал один, уже готовое решение.
amn спасибо, тоже гляну. В вашем примере явно лажа, сравнивать секунды с секундами нет смысла, когда о них и речи нет.
melky, там вроде минуты, а не секунды.
Чесно говоря чуток шутил ))))
Отличное.. Вы же нормально воспримите диапазон типа 23-00 .. 1-00. А оно ? Лучше уж заточите свою функцию например под TOD. Не менее наглядно.
Когда один.. Ну массив с циклом прилепить
Воскресенье .. Уйти на маски
Например:
Код:program clock var std : systemtimedate; now : tod; ..//получили время в std now := dword_to_tod( ((std.hour*dword#60+std.minute)*60+std.second)*1000 ); fb period var_input t0,t1:tod; maskweek:byte; //маска с очеловеченым видом типа 2#11111_00 для пн..вск var_output q : bool; var_const w : array[0..6] of byte := 1,64,32,16,8,4,2; q := (w[clock.std.dayofweek] and maskweek) <> 0; q := q and sel(t0 >= t1, clock.now >= t0 and clock.now =< t1, clock.now >= t0 or clock.now =< t1); plc_prg (?) const N : word := .. var ok : bool; is : array[1..N] of period := (t0 := tod#6:30, t1 := tod#8:30, maskweek := 2#11111_00), (t0 := tod#18:30, t1 := tod#23:59:59, maskweek := 2#11111_00); clock(); ok := false; for i:=1 to N do is[i](q=>ok); if ok then exit; end_if end_for ..
PS
Пардон. Переводить в CFC - не очень хочется
Валенок а для меня ST полутемный лес тут в нескольких строчках разбираться и разбираться.
amn out := datetime.Second >= after AND datetime.Second < before; - ну и где тут минуты ? да и сам по себе FB странно работает, но это мне надо с нуля его вписать в ПЛК, чтобы понять...
melky, вы правы, я не тот файл отправил. Исправляюсь.
amn , значит я правильно сообразил, как ваш FB модернизировать , жалко только, что без контроллера нельзя проверить. Но самое интересное, что фактически это работает точно так же, как и LIMITALARM, только все обработки со временем внутри FB. Хотя может оно и лучше.
Вариант Валенка мне менее понятен, разбираться надо, не все мне там доступно для понимания с наскока.
Вообще-то это творение Егора, а я его применил к вашему случаю. Валенок вообще молодец, додумался, как облегчить ввод данных. Там сложного ничего нет для понимания, просто часы он выделил в целую часть, а минуты в дробную. Выкладываю версию с идеей Валенка.
Вложение 12751
amn у CodeSys действуют правила математики ?
Часы + Минуты / 100.0 или (часы + Минуты)/100.0 - что из этого правильно ? или все выполняется строго последовательно ?
А вообще с точки зрения программирования, если ставить два и более FB interval, на сколько увеличивается цикл программы, учитывая, что постоянно вызывается CurTimeEx ? в некоторой степени выглядит все красиво, но куча повторов.
Правила математики дейстуют как это и положено. А вот по поводу нескольких вызовов ФБ вы правы, стоит вынести CurTimeEx в самостоятельный отдельный блок, так как два блока могут не заработать вместе. Тогда наш ФБ будет состоять из 1 строчки.
Во вложении два блока один из них get_time нужен для второго. Его просто вставить и ничего к нему подключать не надо.