Счетчик не ретайн - будете терять остаток
И сброс его где ?
Остаток - еще хз, а нужен-ли он мне ))
Счетчик при кратковременном выключении питания сохраняется?
уже потестил, сброс дописал ))
С другой стороны - DWORD секунд это 136 лет? Я правильно посчитал?Код:bl1(ENABLE:=IS_START,TIMELOW:=T#500ms,TIMEHIGH:=T#500ms); ctu1(CU:=bl1.OUT,RESET:=FALSE,PV:=10); IF ctu1.Q THEN TOTAL_HOURS:=TOTAL_HOURS+1; ctu1(RESET:=TRUE); END_IF
Может тогда секунды и хранить в ретайн?
UPD: А можно просто раз в секунду через конфигуратор задач вызыватьКод:VAR bl1: BLINK; ft1: F_TRIG; END_VAR bl1(ENABLE:=IS_START,TIMELOW:=T#500ms,TIMEHIGH:=T#500ms); ft1(CLK:=bl1.OUT); IF ft1.Q THEN TOTAL_SECS:=TOTAL_SECS+1; END_IF
IF IS_START THEN TOTAL_SECS:=TOTAL_SECS+1;
?
30м + 1ч50м + 3ч40м - наработка 4 часаОстаток - еще хз, а нужен-ли он мне ))
Думаете праправнуки непростят ? Нормуль.С другой стороны - DWORD секунд это 136 лет?
Может тогда секунды и хранить в ретайн?
Цель - достигаетсячерез конфигуратор задач вызывать
выскажу свое "фи" по поводу использования blink'a для счетчика часов - при его использовании за каждый период счета посчитанное время расходится с реальным на 2 цикла плк. к примеру если цикл плк у вас 5мс, то при счете секунд будет расхождение на 10мс за секунду. на дистанции использования нескольких лет итоговое расхождение будет уже внушительным. хотя кому-то не важно.
я делал счетчик другим способом (исходя из того, что мой плк уж точно не проработает более 49 суток без выключения):
Код:VAR metronom: DWORD; tmr_Ah: TON := (PT := t#49d); END_VAR VAR RETAIN counter : dword; (* секунды наработки *) END_VAR tmr_Ah(in := переменная_power_status_из_модуля_статистики); IF metronom < (TIME_TO_DWORD(tmr_Ah.ET) / 1000) THEN metronom := (TIME_TO_DWORD(tmr_Ah.ET) / 1000); counter := counter + 1; end_if;
Ну может расхождение в 1% не так критично как десятки % в п#538 ?использования blink'a для счетчика часов - при его использовании за каждый период счета посчитанное время расходится с реальным на 2 цикла плк.
Мой обычный рабочий вариант
t( in := true, pt := t#1s ); (*тон*)
if t.q then
t( in := false ); (*перезапуск в этом же цикле );
t( in := true );
sec := sec + 1; (*ретайн*)
end_if
Конечно же цикл кратен секунде (1,2,4 мs)
опять же кому как нравится. мне хватило того, что за десять минут у меня расхождение таймера и блинка с периодом в секунду достигло 10 секунд. в моем понимании вопрос в том, зачем использовать неточный вариант при наличии точного, который не сложнее по реализации.
Полностью согласен