здравствуйте.
необходимо определить длительность импульса по времени на дискретном входе плк-100.
подскажите как это можно сделать.
Вид для печати
здравствуйте.
необходимо определить длительность импульса по времени на дискретном входе плк-100.
подскажите как это можно сделать.
а если необходимо определить общую длительность импульса по времени на дискретном входе?
спсб.
а как сделать так чтобы счетчик общей продолжительности импульса не сбрасывался после выключения плк?
Конечную переменную, в которую Вы время наработки складываете объявить как Retain
А как теперь его "сбросить"?:confused:
Кого сбросить? Переменную из Retain ???
Перед пропаданием питания обнулите её... Ну или при появлении питания...
имелось ввиду, как обнулить счетчик при необходимости.
это понятно...
куда и как этот кусок вставить в:
VAR
Timer : TON;
FixDi : R_TRIG;
Последний_импульс : TIME;
Все_без_последнего : TIME;
Общая_продолжительность : TIME;
END_VAR
....
Timer( IN := Di, PT := INT_TO_TIME( -1 ) );
FixDi( CLK := Di );
Последний_импульс := SEL( FixDi.Q, MAX( Последний_импульс, Timer.ET ), T#0s );
Все_без_последнего := SEL( FixDi.Q, Все_без_последнего, Общая_продолжительность );
Общая_продолжительность := Все_без_последнего + Последний_импульс;
можно и в минутах
Валенок, этими примерами можно воспользоваться если Общая_продолжительность не более 2 месяцев….
А если она составляет полгода, год?
Вот мой вариант:
VAR
RST: BOOL;
RS: RS;
R_TRIG: R_TRIG;
TON: TON;
END_VAR
VAR RETAIN PERSISTENT
Last_imp : TIME;
All_without_last : TIME;
All_imp : TIME;
hours: DWORD;
END_VAR
http://s50.radikal.ru/i127/1008/a8/7ad49df4f257.jpg
Для примера, считает количество циклов(hours) каждые 5 сек.