PDA

Просмотр полной версии : Время в ПЛК



Alber
16.05.2014, 22:43
Порылся, поискал, посмотре, всего одна тема и то в ней батарейка разрядилась!
Возник вопросик: чтобы использовать дату и время в плк (100 и т.д.) есть 2 библиотеки ( может больше, ну я пока не встречал).
При использовании sysLibtime (curtimeEx) часы работаю отлично все, что нужно показывают, но вот только отстают 5 сек, а может и на 10 в сутки!
Есть еще RTC библиотека,но там придется конвертировать и при отключение как они востановятся не совсем ясно.
Можно ли реализовать на ПЛК часы без тормазов, чтоб как на компе, не поправлять их каждые сутки?
Есть мысль сделать компенсатор на CurTimeEx, чтоб в сутки прибовлял по пару сек, но это тоже костыль, то вперед побежит, то назад.
Может другие варианты есть? Поделитесь кто победил этот вопрос.

capzap
17.05.2014, 04:03
Ну победить можно, если в паять более качественную микросхему часов,а так только костыли и тем по этому предостаточно,где обсуждались подобные вещи

Alber
17.05.2014, 09:26
Понял порыскаю, главное теперь все прояснилось.

Вольд
17.05.2014, 10:56
Есть мысль сделать компенсатор на CurTimeEx, чтоб в сутки прибавлял по пару сек, но это тоже костыль, то вперед побежит, то назад.

Для каждого конкретного кварцевого резонатора RTC будут либо спешить , либо отставать на N сек./сутки. Так что автокоррекция раз в сутки хорошее решение вопроса.

Alber
17.05.2014, 21:40
Но как определить размер этой фвто коррекции?
Может она равна секунде, а может полтары, а то и гляди 1,7 сек.!
Вот в чем вопрос.
Если ПЛК занят чем, то предугадать размер этой коррекции вообще не реально, может и на 15-20 сек за сутки отстать..
Кто делал костыли отзавитесь,
кому удалось решить этот вопрос.

Alber
17.05.2014, 21:48
Если ПЛК перезагружать или питание поотрубать, то отставание значительно увеличиться, хотя есть батарейка!
Куда девается время!?

capzap
17.05.2014, 22:15
http://www.owen.ru/forum/showthread.php?t=14056&p=126715&viewfull=1#post126715

Alber
19.05.2014, 15:22
Угу! благодарствую, пойду поламаю голову:)

capzap
19.05.2014, 21:27
Если поломать в нужном направлении, то можно на любом ПК в локальной сети написать программку, которая будет открывать сокет и при приеме запроса, отправит локальное время в любом формате и не обязателен будет интернет

Yegor
21.05.2014, 08:10
Если поломать в нужном направлении, то можно на любом ПК в локальной сети написать программку, которая будет открывать сокет и при приеме запроса, отправит локальное время в любом формате и не обязателен будет интернетВелосипед уже изобретён и называется NTP. Поднять NTP-сервер можно на любом компе. Клиент для ПЛК только надо написать. Ща попробую.

Alber
21.05.2014, 09:42
Ну вооще, куда поперло!
Да, если так рассуждать, то че овен библиотеку с NTP клиентом не написал!? и кучу вопросов отвалилось бы сразу.

capzap
21.05.2014, 10:47
Велосипед уже изобретён и называется NTP. Поднять NTP-сервер можно на любом компе. Клиент для ПЛК только надо написать. Ща попробую.

Я по Вашему не клиента написал ?

Yegor
21.05.2014, 11:07
Я по Вашему не клиента написал ?Упустил предыдущее сообщение, а в последнем вы какую-то программу предлагаете писать, которая совершенно не нужна, если ваш клиент работает, и это чудесно. В винде встроенный NTP-сервер есть. Можно и сторонние найти.

capzap
22.05.2014, 08:20
Я имел ввиду написать не чистый нтпсервер,а нечто свое, со своим выводом нужной информации,можно же ограничится только минутами и секундами

Alber
27.05.2014, 17:26
Обнаружена зависимость! Отставание времени ПЛК прямо пропорционально длительности цикла ПЛК! Сделайте 1 мс и у вас будет отставание может 1 сек в сутки.
Хотите часы чтоб работали придется ствить 1 мс. (хотя это не всегда нужно)
А по поводу НТП, предложенный capzap, то там придется дополнительную компенсацию делать на время формирования строки и все одно ставить 1 мс, иначе будут косяки при синхронизации.

Кто находит ответы, в большенстве случаев не пишет их на форуме!

Yegor
27.05.2014, 18:19
иначе будут косяки при синхронизацииТак не накапливаются же.

Alber
01.06.2014, 10:24
NTP- должен быть в локальной сети, для минимизации времени синхронизации.(однозначно). Есть еще такой вариант как: брать время с компьютера через скаду и обновлять его (время скады сравнивается со временем плк и в случае рассогласования обновляется не знаю насколько это работоспособно!)
Кто-нить пробывал использовать RTC? чем он лучше CurrTimeEx и стоит ли менять CurrTimeEx на RTC?

DmitriiAnyushin
25.08.2017, 11:49
capzap, подскажите пожалуйста. Использую Ваш пример ntpSetter. SysSockRecv выдает результат "-1". В чем может быть проблема?

capzap
25.08.2017, 12:12
capzap, подскажите пожалуйста. Использую Ваш пример ntpSetter. SysSockRecv выдает результат "-1". В чем может быть проблема?

прошивка какая у плк? на 16 предполагаю есть проблемы, от toString нужно будет избавиться, лучше делать через указатель на строку. А минус один означает что соединение разорвано, вобщем то это на самом деле так, сервер рвет связь после того как выдал инфу

DmitriiAnyushin
25.08.2017, 12:56
Я работаю с контроллером ПЛК110-60.24-Р.М[02]. Версия прошивки 0.3.67. Таргет файл 3.12.
Поскольку в программе тэг bMsgComplete в true не выставлен, то полагаю, что и SysSockRecv больше нуля не был
NTP server на ноутбуке включен - контроллер Siemens время синхронизирует
А что за toString? Я ее в программе что то не наболюдаю

capzap
25.08.2017, 13:02
Я работаю с контроллером ПЛК110-60.24-Р.М[02]. Версия прошивки 0.3.67. Таргет файл 3.12.
Поскольку в программе тэг bMsgComplete в true не выставлен, то полагаю, что и SysSockRecv больше нуля не был
NTP server на ноутбуке включен - контроллер Siemens время синхронизирует
А что за toString? Я ее в программе что то не наболюдаю
у меня не было М02, за них вообще ни чего сказать не могу
а имя функции может и другое, я не заглядывал в проект
флаг у меня поднимался от кнопки контроллера по моему
и еще подключитесь к Вашему ntp-серверу по telnet ХХХ.ХХХ.ХХХ.ХХХ 13 есди выдаст строку то всё хорошо, если нет то надо искать другой способ получения времени для плк овен

DmitriiAnyushin
25.08.2017, 13:31
Да, в программе сделано кнопкой, я заменил на бит
Я запустил telnet на той же машине где и запущен ntp server. Прописал данную команду в командной строке на что в ответ мне выдалось сообщение "Не удалось открыть подключение к этому узлу, на порт 13: Сбой подключения"

capzap
25.08.2017, 13:37
ну значит ни чего не получится, скорее всего соединение надо устанвливать по UDP и по 123 порту

ЗЫ надеюсь в место иксов вводили адрес машины в сети :)

DmitriiAnyushin
25.08.2017, 13:56
ну значит ни чего не получится, скорее всего соединение надо устанвливать по UDP и по 123 порту

ЗЫ надеюсь в место иксов вводили адрес машины в сети :)

Конечно ip ноутбука)))
А на счет UDP можно где-нибудь поподробнее посмотреть?

capzap
25.08.2017, 14:18
https://ru.wikipedia.org/wiki/NTP

Rake Runner
25.08.2017, 14:33
Мысли вслух: у capzap в примере используется IP 132.163.4.103 и порт 13.
Судя по вики, через порт 13 идет синхронизация времени не по NTP, а по устаревшему протоколу DAYTIME.
https://en.wikipedia.org/wiki/Daytime_Protocol

А в пуле серверов у данного сервера сейчас статус "ntp ok; time, daytime busy":
http://tf.nist.gov/tf-cgi/servers.cgi

Возможно, где-то ошибся в своих предположениях.