Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Самый точный, но тоже скачущий спидометр у меня получился так:
Owen.jpg
Чтобы не скакало использовал фильтр + сглаживаниеКод:function_block Freq var_input in : real; // Вход с текущим значением счётчика end_var var_output F : real; // Частота или скорость end_var var inOLD : real; // старое значение счётчика tsOLD, ts : udint; // Фиксация системного таймера end_var ts := time_to_udint(get_time()); // Текущее значение системного таймера в мс if ts - tsOLD >= 1000 then // ПР может проскочить 1000 мс период F := (in - inOLD) / udint_to_real(ts - tsOLD); // Текущая разница за реальный период tsOLD := ts; inOLD := in; // Фиксируем как предыдущие значения end_if end_function_block
Чет не пойму, это условие же никогда не выполнится. Значение tsOLD присваивается в теле IF и до этого равно нулю...Код:if ts - tsOLD >= 1000 then // ПР может проскочить 1000 мс период
Выполнится, для кого сделали Отладку ФБ, в том числе пошаговую ? 1 Отладка.jpg
Последний раз редактировалось kondor3000; 06.08.2025 в 09:51.