PDA

Просмотр полной версии : Считывание времени



Василий_S
17.01.2011, 13:56
Подскажите пожалуйста! Приобретён ПЛК 100-24 К-М. Есть задача ситывания текущего времени из ПК и его запись в ПЛК. В Library Manager подключаю библиотеку SysLibRtc для использования системной функции SysRtcGetTime, но ПЛК с подключенной бибиотекой приложение "не пускает". (Без SysLibRtc ПЛК загружается и работает нормально). Что делать? М.б. нужна другая прошивка или ругая модель ПЛК?

Николаев Андрей
21.01.2011, 16:18
Нужна другая модель ПЛК. В ОВЕН ПЛК1ХХ библиотека SysLibRTC не поддержана. Поддержана SysLibTime.
Примеры работы с библиотекой есть на форуме...

Василий_S
07.02.2011, 08:07
В общем, чтобы записывать текущее время ПК в Овен, вывёртываюсь так: С помощью средста VB-6 считываю текущую дату и время с ПК, затем - формирую (т.е. вычисляю) текущее время и представляю его числом, понятным Овену, как текущая дата и время в формате DINT. Затем перевожу это число в Hex-ы, меняю местами по 4 информационных байта фрейма и вставляю в посылку по Modbus ASCII. (Используется Com порт). Осталось найти как считать контрольную сумму (взятый из имеющегося примера алгоритм не даёт нужного числа), может кто подскажет, где есть описение протокола Modbus ASCII именно для Овена с доходчивым описанием алгоритиа вычисления контрольной суммы.
Пы.Сы. Посылка, для конкретной точки времени, получается такая: 05100004000200AAFD4D35BD (данные AAFD4D35 точно щас не помню, только контр. сумму ).
Причём пока не поставил 2 нуля (в имеющемся описании фрейма) после длины запроса (парам. 0002), Овен посылку не воспринимал. Код посылки выискивал с помощью Lectus Modbus OPC and DDE server.
Осталось найти надлежащий алгоритм вычисления КС. Буду очень благодарен Вам за подсказку.

МИХАИЛ
07.02.2011, 09:15
http://ru.wikipedia.org/wiki/CRC

Василий_S
07.02.2011, 10:31
МиХаил, спасибо, но это расчёт CRC суммы, когда в ASCII требуется LRC сумма. Порылся в инете и нашёл 2 разных способа исчисления LRC суммы. Отличие - оконцовке. В одном (видимо в стандартном) сумма инвертируется и плюсуется 1, в другом - 256 (FA) минус сумма "доконтрольных" чисел.

Александр Приходько
07.02.2011, 14:02
МиХаил, спасибо, но это расчёт CRC суммы, когда в ASCII требуется LRC сумма. Порылся в инете и нашёл 2 разных способа исчисления LRC суммы. Отличие - оконцовке. В одном (видимо в стандартном) сумма инвертируется и плюсуется 1, в другом - 256 (FA) минус сумма "доконтрольных" чисел.

Потратим минуту времени находим в интернете следующее:
Контрольная сумма в режиме ASCII это LRC. Контрольная сумма - это 8-ми разрядное число, передаваемое как два ASCII символа (hex). Контрольная сумма образуется путем конвертирования всех hex символов в двоичные числа, сложением этих чисел без учета переноса, и вычислением дополнительного кода полученного числа. В приемнике LRC заново рассчитывается и сравнивается с полученным LRC. При вычислении LRC двоеточие, CR, LF и любой другой не-ASCII символ отбрасывается.
Источник:
http://www.google.ru/url?sa=t&source=web&cd=5&ved=0CD0QFjAE&url=http%3A%2F%2Fwww.gorgaz.ru%2Fproducts%2Fir-k-300%2Fdocumentation%2Fdownload%2Fmodbus.zip%3FPHPS ESSID%3D38770b2452306f9abc799f37ab1e4b16&rct=j&q=%D1%80%D0%B0%D1%81%D1%87%D0%B5%D1%82%20crc%20%D0 %B4%D0%BB%D1%8F%20modbus%20ACSII%20&ei=E9BPTcfOBI3LswbT9eGQDQ&usg=AFQjCNFMvRw9EvdNfJkusReF0b_JuvkViQ&cad=rjt

Василий_S
07.02.2011, 14:33
Александр, Нашёл свою ошибку - не указал количество передаваемых байт, вместо числа - поставил 00. Оттого и КС отличается от требуемой.

lara197a
07.02.2011, 18:33
Это проще сделать использую ОРС КДС и сислиб тайм.

Василий_S
08.02.2011, 10:38
Это проще сделать использую ОРС КДС и сислиб тайм.

Да, но в моём случае ситуация иная: SCADA самодельная - на VB

Василий_S
09.02.2011, 08:41
Ура-аааааааааааааааааааааааааааа! Получилось!
В ПЛК постоянно передаётся время из ПК. Блин, арифметичекая сумма должна быть, а не логическая перед инвертированием.
Вопрос! В сети RS 485, протокол Modbus ASCII, - несколько устройств Owen - Slave, естесственно со своим адресом каждый. Каким макаром можно осуществлять посылку данных (в д. сл. - текущее время) на все устройства одновременно?
Заранее благодарен за ответ.

Александр Приходько
09.02.2011, 10:45
По хорошему постоянно время передавать в ПЛК не стоит, это достаточно делать раз в сутки.

Василий_S
09.02.2011, 11:19
Посмотрю как бдут разбегаться часы. А вообще-то спрашивал про возможность одновременной записи данных вовсе устройства.

Василий_S
09.02.2011, 13:17
Фига се, существенный разбег по времени получается между временем, сосчитанным с ПК и показаниями часов реального времени в ПЛК. В 13-26 уже была разница в 16 сек, а в 15-08 - 48 сек.
Точность по времени актуальна в поставленной задаче, поэтому придётся частенько корректировать время.

Дмитрий Ф
11.02.2011, 07:07
Можно попробовать передавать на адрес 0
Адрес 0 используется для широковещательной передачи, его распознаёт каждое устройство.

Василий_S
11.02.2011, 11:15
Можно попробовать передавать на адрес 0
Адрес 0 используется для широковещательной передачи, его распознаёт каждое устройство.

Дмитрий, спасибо. Т.е. посылка пр Modbus ASCII должна начинаться 00 10 ...., так? Я бегло пробовал, чё-то не пошло и отложил на потом . Займусь плотнее.
Вообще, часы реального времени гонят полную лажу. А точность по времени актуальна. Делаю постоянное считывание времени с ПК, и склоняюсь привязать время в ПК к серверу времени.

Василий_S
14.02.2011, 06:55
Чото странно. Живьем видел 15 мин за год. А тут - 1-2 дня за год :eek:[/QUOTE]

Что есть - то есть. В один тег записываю время, присылаемое с ПК, во второй - из часов реального времени и, покуривая сигарету, наблюдаю как часики тикают - разница во времени растёт "на газах". Может, часы такие попались?

Василий_S
14.02.2011, 06:56
[QUOTE=Валенок;54397]А тот кто посылает, различает broadcast ?
Простите, не совсем понял вопрос.

Василий_S
15.03.2011, 07:10
А тот кто посылает, различает broadcast ?




Чото странно. Живьем видел 15 мин за год. А тут - 1-2 дня за год :eek:

Состояние батарейки может влиять на ход часов?

Николаев Андрей
15.03.2011, 10:13
Не должно. Только на ход часов при отключении питания.

Elka
15.03.2011, 10:47
Если я правильно понял тему, то я натыкался на похожие проблемы на ПЛК63: http://www.owen.ru/forum/showthread.php?t=9010
Изначально та тема была начата по другой проблеме (кривые руки), но вот к сообщению №9 проблема уже более-менее локализовалась. Правда программа под ПЛК63 и, не помню уж точно, но, наверное, отображала часы на экран. Если так - вывод надо закомментарить. Я тогда проблему не решил, и всё время вычисляю, как и посоветовали, одним из методов - что в моём случае жить совершенно не мешает.

Василий_S
15.03.2011, 12:31
Если я правильно понял тему, ....
В данном случае задача обратная. Следить за тем, чтобы часы в сотке тикали так же как и в компе. В результате творческих терзаний организовал постоянную запись времени в "принимающий" тег (с периодичностью цикла опроса значений заданных тегов по модбасу) и коррекцию часов таймера из этого тега уже в программе контроллера с периодичностью 9 секунд. Но всплыла ещё одна проблемка - после записи значения времени из ПК в реальные часы ПЛК сами часы стартуют с отличным от записываемого времени в пределах 1 сек. Полагаю, что часики ПЛК отбрасывают или не учитывают доли секунд. А точность по времени актуальна.
Более того, разаботку программы ПЛК надо будет множить на 20 с лишним контроллеров, т.к. надо вести учёт около 200 импульсных сигналов со счётчиков активной мощности. И все контроллеры вязать в модбасовскую сетку. Вот тогда будет гораздо "веселее" синхронизировать время в контроллерах со временем ПК.

vadim_spb
08.06.2020, 11:12
а NTP не пробовали подключать? так чтобы ПЛК сам стучался на сервак и забрал время, протокол поверх udp вроде не очень замороченный

melky
08.06.2020, 11:31
capzap когда-то выкладывал пример программы подключения к ntp
Да, что касается точности, то если вы будете ломиться на ntp сервера более высокого уровня, вас просто могут блокирнуть, а ntp сервера уровня 2, которые общедоступны, тоже дают точность в пределах секунды.

melky
08.06.2020, 12:27
однако он жалуется, что надо это делать на 20 устройствах с таким решением, так как каждому надо передавать время из Scada

melky
08.06.2020, 12:47
а, ну да, давненько... на даты часто не смотрю..