PDA

Просмотр полной версии : Подсчет времени (TIME_UD)



Newcomer
28.08.2018, 12:27
Добрый день.

После запуска программы TIME_UD считает до 10, после этого на вход En приходит 0 и счет останавливается. После остановки счета значение 10 на выходе time держится 2 секунды, а затем почему-то становится равным 1000. Каким таким волшебным образом 10 превращается в 1000 ? ;)

Василий Кашуба
28.08.2018, 14:37
Экстрасенсов на форуме нет, поэтому нужна программа.

Newcomer
28.08.2018, 14:57
Программа ? Пожалуйста.

Aviator_VZh
28.08.2018, 16:40
Похоже глючит таймер TIME U/D. Ждите Юрия )

Newcomer
28.08.2018, 17:37
Похоже глючит таймер TIME U/D. Ждите Юрия )

Уж вечер близится, а Юрия все нет. ;)

Newcomer
28.08.2018, 18:07
Вот простой вариант программы. Проблема та же самая.

Aviator_VZh
28.08.2018, 18:17
Может проще самому написать под нужный функционал? Какая у Вас задача?

Ревака Юрий
28.08.2018, 20:01
Вы проверяете в симуляции или в железе? Может с настройками симуляции что-то не то?

Ревака Юрий
28.08.2018, 20:21
Дольше не стал ждать, похоже с Вашими настройками периода и времени цикла, что-то не корректно считается.

Aviator_VZh
28.08.2018, 21:01
Да, Вы правы. С такими настройками цикла всё ОК.

38518

Попробовал в железе, но с логикой работы разобраться не смог. Возможно прога еще в железе не отлажена. Или необходим верхний уровень.

Newcomer
29.08.2018, 12:33
Дольше не стал ждать, похоже с Вашими настройками периода и времени цикла, что-то не корректно считается.

Действительно с минимальными настройками периода и времени цикла в режиме симуляции работает правильно, а вот если увеличить эти параметры, то работает не правильно. Но так не должно быть. Еще меня волнует вопрос как все это будет работать на реальном железе.

Сергей0308
29.08.2018, 13:14
Действительно с минимальными настройками периода и времени цикла в режиме симуляции работает правильно, а вот если увеличить эти параметры, то работает не правильно. Но так не должно быть. Еще меня волнует вопрос как все это будет работать на реальном железе.

Если всё правильно придумано в железе обычно лучше работает чем в симуляторе! Тоже несколько раз смотрел в симуляторе - не работало, проверяю в железе - всё нормально работает, может тоже неправильно симулятор настраивал! Я обычно и так знаю как должно работать и к симулятору относился скептически, теперь посмотрю, если в случае правильных настроек симулятор правильно будет показывать, может и поменяю о нём мнение!

Aviator_VZh
29.08.2018, 14:32
Я думаю, что в данном случае настройки симулятора важны т.к. работа макроса Time U/D принципиально зависит от времени цикла программы. В железе все должно быть ОК.

Только лучше использовать более простое решение для индикации оставшегося времени. Например счетчик CTN с обратным отсчетом, секундным импульсом на счет и с той же уставкой, что и таймер, но в секундах. Вот кусок моего проекта, где я использую этот принцип.

38539

Ревака Юрий
29.08.2018, 14:56
Я думаю, что в данном случае настройки симулятора важны т.к. работа макроса Time U/D принципиально зависит от времени цикла программы. В железе все должно быть ОК.

Только лучше использовать более простое решение для индикации оставшегося времени. Например счетчик CTN с обратным отсчетом, секундным импульсом на счет и с той же уставкой, что и таймер, но в секундах. Вот кусок моего проекта, где я использую этот принцип.

38539

"Фишка" в том макросе, что если логика не сложная, есть возможность измерять время с десятыми и сотыми секунды, если нужны просто секунды, то наверное можно и попроще что-то взять.

Aviator_VZh
29.08.2018, 15:06
"Фишка" в том макросе, что если логика не сложная, есть возможность измерять время с десятыми и сотыми секунды, если нужны просто секунды, то наверное можно и попроще что-то взять.

Да, конечно. Я не умаляю достоинств макроса, а говорю о том, что в данном случае решение может быть проще.

Newcomer
29.08.2018, 15:07
"Фишка" в том макросе, что если логика не сложная, есть возможность измерять время с десятыми и сотыми секунды, если нужны просто секунды, то наверное можно и попроще что-то взять.

Я писал, что Time U/D работает верно при отсчете времени. Не устраивает то, что верное итоговое значение на выходе time держится 2 сек., а потом самопроизвольно увеличивается в 100 раз.

Aviator_VZh
29.08.2018, 16:05
Я писал, что Time U/D работает верно при отсчете времени. Не устраивает то, что верное итоговое значение на выходе time держится 2 сек., а потом самопроизвольно увеличивается в 100 раз.

Почитайте все посты в теме. Ваша проблема изучена, причины описаны, решения даны.

Newcomer
29.08.2018, 16:13
Почитайте все посты в теме. Ваша проблема изучена, причины описаны, решения даны.

Почему итоговое значение на выходе time через 2 сек. после останова счета махом увеличивается в 100 раз то же объяснено ?

Aviator_VZh
29.08.2018, 19:31
Да, ошибка симулятора.

Ревака Юрий
29.08.2018, 21:56
Да, ошибка симулятора.

Или особенности работы на большом времени цикла, внутри стоит блок определения времени цикла программы, который в зависимости от величины этого цикла, ограничивает количество знаков после запятой, при проверке на реле, для мне пришлось нереально долго копировать и размножать блоки что бы добиться 30 ms, а тут со старта 100 ms в симуляции. Очень похоже, что как раз к моменту останова таймера, рассчитывается время цикла и меняется делитель, и 10,00 превращается в 1000.

Aviator_VZh
29.08.2018, 23:08
Или особенности работы на большом времени цикла, внутри стоит блок определения времени цикла программы, который в зависимости от величины этого цикла, ограничивает количество знаков после запятой, при проверке на реле, для мне пришлось нереально долго копировать и размножать блоки что бы добиться 30 ms, а тут со старта 100 ms в симуляции. Очень похоже, что как раз к моменту останова таймера, рассчитывается время цикла и меняется делитель, и 10,00 превращается в 1000.

Полностью согласен, просто не хотелось распространяться.

Newcomer
30.08.2018, 11:03
Или особенности работы на большом времени цикла, внутри стоит блок определения времени цикла программы, который в зависимости от величины этого цикла, ограничивает количество знаков после запятой, при проверке на реле, для мне пришлось нереально долго копировать и размножать блоки что бы добиться 30 ms, а тут со старта 100 ms в симуляции. Очень похоже, что как раз к моменту останова таймера, рассчитывается время цикла и меняется делитель, и 10,00 превращается в 1000.

И что из этого следует, рекомендации какие ? На реальном железе все будет нормально ?

Ревака Юрий
30.08.2018, 11:36
Я тестировал на железе, проблем не было. Рекомендации: смотреть минимальные уставки в программе, и настраивать симуляцию так, что бы они успевали отрабатывать. Это как если бы на реальном ПР время цикла было 100 ms, а мы на входе считали 50 импульсов в секунду, ПР их не посчитает даже в железе.

Aviator_VZh
30.08.2018, 13:26
И что из этого следует, рекомендации какие ? На реальном железе все будет нормально ?

Если Вас сильно беспокоит работа TIME U/D на реальном железе - используйте предложенное мной решение. Вашу задачу оно решает.

Newcomer
30.08.2018, 14:30
Я тестировал на железе, проблем не было. Рекомендации: смотреть минимальные уставки в программе, и настраивать симуляцию так, что бы они успевали отрабатывать. Это как если бы на реальном ПР время цикла было 100 ms, а мы на входе считали 50 импульсов в секунду, ПР их не посчитает даже в железе.

Спасибо за квалифицированный ответ.