Типа:
?Код:VAR_GLOBAL RETAIN
TOTAL_HOURS: DWORD := 0;
END_VAR
VAR
bl1: BLINK;
ctu1: CTU;
END_VAR
bl1(ENABLE:=IS_START,TIMELOW:=T#500ms,TIMEHIGH:=T#500ms);
ctu1(CU:=bl1.OUT,PV:=3600);
IF ctu1.Q THEN
TOTAL_HOURS:=TOTAL_HOURS+1;
END_IF
Вид для печати
Счетчик не ретайн - будете терять остаток
И сброс его где ?
Остаток - еще хз, а нужен-ли он мне ))
Счетчик при кратковременном выключении питания сохраняется?
уже потестил, сброс дописал ))
С другой стороны - 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 секунд. в моем понимании вопрос в том, зачем использовать неточный вариант при наличии точного, который не сложнее по реализации.
Полностью согласен