1

Тема: Отсчет больших промежутков времени (минуты, часы, дни)

Появилась необходимость задавать длительные промежутки времени
На диаграммах счет идет в минутах, но по аналогии можно задать и часы
Отсчет идет с 1 секунды, а не с 0, если это критично, то после генератора ШИМ можно поставить логическое НЕ.
Так же по факту генерируемая секунда немного длинее обычной.

Вопрос: из-за того что результат после сравнения значений X и Y (блоки 3, 5 и 8) появляются на мгновение, в симуляторе их не видно, возможны ли при работе в железе игнорирование этих значений и лучше добавить задержку выключения для каждого этого блока на 100 мс?

Ну и может есть проще способ задавать длинные задержки?

Вложений в сообщении

Иконка вложения Таймер.png 69.46 кб, скачивался 70 раз, последний раз 2021-02-20 

Иконка вложения ШИМ.png 81.3 кб, скачивался 66 раз, последний раз 2021-02-20 

2

Re: Отсчет больших промежутков времени (минуты, часы, дни)

Ну и может есть проще способ задавать длинные задержки?

Есть: https://canny.ru/docs/tips_tricks/clock/

3

Re: Отсчет больших промежутков времени (минуты, часы, дни)

zotikov пишет:

...Отсчет идет с 1 секунды, а не с 0, если это критично...

Если между блоками 1 и 2 поставить, например, детектор переднего фронта, то отсчет будет идти с 0 секунды. Либо для компенсации описанного эффекта, для получения 1 минуты, можно проводить сравнение не с 60, а с 61.

zotikov пишет:

...из-за того что результат после сравнения значений X и Y (блоки 3, 5 и 8) появляются на мгновение, в симуляторе их не видно...

В симуляторе, для отслеживания изменений состояний, можно использовать, например, "контрольные точки". Подробнее см. https://canny.ru/docs/cannylab/simulato … o-usloviyu

4 (12-04-2021 14:18:14 отредактировано orto)

Re: Отсчет больших промежутков времени (минуты, часы, дни)

Хочу продолжить тему больших интервалов времени (сутки и больше).
Начал я как и все - с программного ШИМ-регулятора с периодом 1 сек. Моя программа отрабатывала суточный цикл (9 часов),  и на следующие сутки в нужное время не запускалась. Выяснил что проблема с таймером. Заменил таймер на описанный в примерах, по времени цикла. Заметного улучшения не заметил. Решил выяснить, что делается внутри контроллера. С трудом наладил связь по VCP USB (никак не мог понять, внешнее питание - это обязательный атрибут или можно без внешнего питания подать питание по USB). Когда связь появилась, то решил, что сейчас всё узнаю про точность хода таймера. Но тут меня постигла неудача. При отключении от USB что-то случилось с контроллером и при повторном подключении контроллер перестал определяться как COM-порт, а определяется как USB-устройство ввода. Причем на другом компьютере определения устройства аналогичное. Похоже что-то подгорело в драйвере и связи по USB мне уже не видать. (подскажите, диагностика и замена контроллера будет на платной основе, или можно будет сделать по гарантии?).

Далее относительно промежутков времени остается только теоретизировать.
В сутках 86400 сек. При потере 20 мс на каждой секунде, за сутки потеряется 0,02*86400=1728 сек или 28,8 мин.  Если потери составят 50 мс на каждую секунду, то за сутки потеряется уже 72 минуты. В силу описанных выше условий не могу сказать, насколько у меня расходится суточный таймер и где и сколько мс теряется... Но по ощущениям теряется. Я начал данное исследование, чтобы понять, в чем именно причина. И причину не нашел, и контроллер подпортил...

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

Автор, начавший данный пост, утверждал, что секунда в контроллере длиннее стандартной секунды. Я с ним согласен, но к сожалению привести конкретные цифры не могу. 
Думаю, что  в каждом конкретном случае это можно сделать только методом последовательных приближений.
Я надеюсь, что точность всё-таки достижима. Но не с первого раза. И обязательно сразу получайте обратную связь из контроллера в компьютер, чтобы точно видеть, насколько расходится суточный ход контроллера.

Прикладываю свой файл, может вдруг я зря грешу на таймер.
Контроллер CANNY 3 Tiny

Вложений в сообщении

Иконка вложения Аквариум-5.cfd 19.13 кб, скачивался 155 раз, последний раз 2021-04-11 

5

Re: Отсчет больших промежутков времени (минуты, часы, дни)

Учитывая, что USB связь с контроллером теперь не работает, а эксперимент хочется завершить и разобраться с таймером до конца,  подскажите, как связаться с контроллером по RS-232? Связь можно также осуществить через HTERM, или уже будут другие подходы для чтения информации из контроллера?

6

Re: Отсчет больших промежутков времени (минуты, часы, дни)

При отключении от USB что-то случилось с контроллером и при повторном подключении контроллер перестал определяться как COM-порт, а определяется как USB-устройство ввода.

Если не подключенный к питанию контроллер подключить к USB, он перейдет в режим связи с CannyLab / загрузки ПО: https://canny.ru/docs/c3tiny/#sec--c3ti … agruzki-po

Если же в контроллер записана диаграмма использующая драйвер VCP и контролер сначала подключен к питанию, а потом к USB, то он определится как Virtual COM Port и с ним можно будет взаимодействовать используя терминал, если такое взаимодействие предусмотренно в диаграмме: https://canny.ru/docs/c3tiny/usb/#sec-- … e-opisanie


подскажите, как связаться с контроллером по RS-232?

Используя драйвер UART в режиме инвертированной полярности: https://canny.ru/docs/c3tiny/uart/#sec- … e-opisanie

7

Re: Отсчет больших промежутков времени (минуты, часы, дни)

orto пишет:

...Далее относительно промежутков времени остается только теоретизировать.
В сутках 86400 сек. При потере 20 мс на каждой секунде, за сутки потеряется 0,02*86400=1728 сек или 28,8 мин...

Контроллеры CANNY 3 Tiny в отличие от старших моделей не имеют на борту кварцевого осциллятора. Встроенный RC-осциллятор контроллера имеет погрешность ~1%, величина которой зависит от температуры окружающей среды.
Кроме того, в режиме увеличенного разрешения системного таймера, погрешность в значениях временных интервалов увеличивается. Для повышения точности в данном случае лучше использовать стандартное разрешение системного таймера. Для достижения наибольшей точности, требуется провести калибровку контроллера (практическую), выяснить погрешность и компенсировать ее в диаграмме.
Во вложении пример учета отклонений в измерениях времени. При испытании на стенде такой подход позволил получить отклонение менее 1 секунды за 1 час.

Вложений в сообщении

Иконка вложения c3tiny_Аквариум-5.cfd 19.2 кб, скачивался 162 раз, последний раз 2021-04-12 

8 (13-04-2021 11:29:31 отредактировано orto)

Re: Отсчет больших промежутков времени (минуты, часы, дни)

Вот и наступил момент истины.
Но по-порядку.
1.

Константин, CANNY пишет:

Если же в контроллер записана диаграмма использующая драйвер VCP и контролер сначала подключен к питанию, а потом к USB, то он определится как Virtual COM Port и с ним можно будет взаимодействовать используя терминал, если такое взаимодействие предусмотрено в диаграмме: https://canny.ru/docs/c3tiny/usb/#sec-- … e-opisanie

Было бы очень хорошо, если бы такими словами было написано в руководстве, куда ведет ссылка. Когда я это прочитал и выполнил, то снова восстановилась связь и через гипертерминал удалось протестировать таймер. По документу такой порядок действий оказался неочевидным.
2. Вопрос был, что RS-232 на компьютере видится как СОМ-порт. В связи с этим можно также использовать для наблюдений за контроллером гипертерминал,  или нужны другие программные средства? У меня недостаточно знаний по программированию, от того и спрашиваю.
3. Сразу надо сделать акцент, что у меня включено увеличение тактовой частоты и секунда должна состоять из 10000 тактов.
4. Наблюдение за таймером в течении часа показало, что за 1 час (точнее за 62 минуты) внутренний таймер отстал на 106 сек. Что составляет примерно 28,5 мс/сек. Простой перерасчет показал, что реально в секунде не 10000 тактов, как предполагалось, а всего 9715.
5. Заменив в программе 10000 на 9715 снова провел тест времени. За ночь (10 час) внутренний таймер ушел вперед примерно на 2-2,5 сек. То есть настроить точный ход всё таки можно.
6. Не исключаю, что без увеличения тактовой частоты (когда 1 сек=1000 тактов) коэффициент будет другой. Так же не исключаю, что коэффициент зависит от величины и сложности конкретной программы. И также от конкретной платы контроллера. Надо всё проверять. Мне суточная точность времени принципиальна, я ищу решение. Для кого это не особенно важно - заморачиваться не надо.
7. Будет время (выходные), подберу поточнее коэффициент с более тщательной проверкой работы. В том числе посмотрю, не собьется ли таймер с отключением контроля по USB и с изменением программы (исключение отладочных блоков).
И ещё выложу картинки, чтобы было видно соотношение работы внутреннего таймера и часов компьютера.
Спасибо службе поддержки за комментарии

9

Re: Отсчет больших промежутков времени (минуты, часы, дни)

Вопрос был, что RS-232 на компьютере видится как СОМ-порт. В связи с этим можно также использовать для наблюдений за контроллером гипертерминал,  или нужны другие программные средства? У меня недостаточно знаний по программированию, от того и спрашиваю.

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

Например:

https://forum.canny.ru/viewtopic.php?id=573

https://forum.canny.ru/viewtopic.php?id=312

https://forum.canny.ru/viewtopic.php?id=177

10

Re: Отсчет больших промежутков времени (минуты, часы, дни)

Тоже полезное замечание.  А то бы я по аналогии с USB VCP пытался бы передать числа в цифровом формате.  И видимо результат бы был отрицательным.
Сейчас я понял, для чего в CannyLab встроено преобразование в ASCII коды. Именно для целей передачи и визуализации параметров с использованием последовательного интерфейса. А то было загадкой, потому что внутри CannyLab ASCII коды не используются.
Спасибо за разъяснения и подсказки.