PDA

Просмотр полной версии : Часы ПЛК160 в цифрах



Yegor
05.02.2016, 14:01
Решил сравнить часы ПЛК160 с часами ПК. В течение одного часа я двумя¹² нехитрыми программами записывал в файл показания ФБ CurTimeEx, функции TIME() и класса DateTime (.NET). Показания ПЛК снимались через модбас с периодом 50-100 мс (все регистры разом). Отдельно сравнивались часы двух ПК — накапливающегося расхождения не было. Затем файл прогонялся через программы-анализаторы³.

22341


Существенные наблюдения:
TIME() идёт равномерно, но убегает на 12 секунд за час (100,(3)% нормальной скорости *).
CurTimeEx идёт неравномерно, но через час сохраняет верный ход.

Лучше всего эти эффекты видно графически.

Снимок 1: синяя линия ( TIME() ) равномерно уходит от зелёной (CurTimeEx).

22343

Снимок 2: неравномерный ход CurTime:

22345

Снимок 3: сильная трёхсекундная заминка CurTime. Чёрные точки — референсное время ПК. Каждая точка — успешное считывание показаний ПЛК. Все графики имеют одинаковый набор точек по X.

22347

Снимок 4: красным — референсное время округлено до целых (так должен выглядеть CurTime).

22349


PLCInfo
PLC model MODEL PLC 160
Binary VERSION 2.14.0
Need Target version 2.10
Compiled: 10:35:22 Apr 29 2011
MAC 6B:77:00:01:D0:D1
IP 10.1.6.10
GATE 10.0.6.1
MASK 255.255.255.0
PIC upper version is 15
Licence unlimited

¹ http://pastebin.com/XJSKnDPU
² http://pastebin.com/8pCiR5aa
³ http://pastebin.com/YRKmbGSe

Файл clock1.zip — записанные данные (int32 — CurTimeEx, приведённый к DT, int32 — TIME(), long — DateTime.Now.ToBinary()).
Файл dump.zip — расшифрованные, смещённые к нулю и переведённые в текст результаты.

Влияние загруженности ПЛК в данном эксперименте не оценивалось.

Scream
05.02.2016, 14:23
использовали ethernet?
ping учитывался?

Yegor
05.02.2016, 14:38
Ethernet, да. Время отклика и некоторые другие мелочи в рамках этого эксперимента не имеют значения — это видно по равномерной/ровной синей линии TIME().

Кстати ПЛК работал весь день, и сейчас появилась возможность оценить расхождение за семь часов.
CurTime (DT): 982078482 TIME(): 86824,54 PC: 05.02.2016 9:12:16
CurTime (DT): 982104300 TIME(): 112730,81 PC: 05.02.2016 16:22:35

982104300 - 982078482 = 25818
112730 - 86824 = 25906
05.02.2016 16:22:35 - 05.02.2016 9:12:16 = 25819

Таким образом, чуть более чем за 7 часов TIME() убежала на полторы минуты. 90 / 7 = 12,8 (темп спешки сохраняется). Отмечу, что опрос модбасом вёлся только утром и сейчас, и т.к. результат прежний, то значит, опрос (по крайней мере около 10 Гц) побочных эффектов не даёт.

Scream
05.02.2016, 14:57
Ethernet, да. Время отклика и некоторые другие мелочи в рамках этого эксперимента не имеют значения — это видно по равномерной/ровной синей линии TIME().

Кстати ПЛК работал весь день, и сейчас появилась возможность оценить расхождение за семь часов.
CurTime (DT): 982078482 TIME(): 86824,54 PC: 05.02.2016 9:12:16
CurTime (DT): 982104300 TIME(): 112730,81 PC: 05.02.2016 16:22:35

982104300 - 982078482 = 25818
112730 - 86824 = 25906
05.02.2016 16:22:35 - 05.02.2016 9:12:16 = 25819

Таким образом, чуть более чем за 7 часов TIME() убежала на полторы минуты. 90 / 7 = 12,8 (темп спешки сохраняется). Отмечу, что опрос модбасом вёлся только утром и сейчас, и т.к. результат прежний, то значит, опрос (по крайней мере около 10 Гц) побочных эффектов не даёт.

забавно, TIME() врёт, а я собирался сейчас в проекте на нее ориентироваться, для меня 3 секунды критично за 8 часов, спасибо однако.

lara197a
05.02.2016, 16:07
забавно, TIME() врёт, а я собирался сейчас в проекте на нее ориентироваться, для меня 3 секунды критично за 8 часов, спасибо однако.

Используя несколько ПЛК могу точно сказать, что за год убегает
до 2х мин.
и не более.
по часам. если не скучно. то считайте сами.


3 сек - 8ч,
9-24ч, для ПЛК это нормально.
Это же не хронометр.
И на ноутах убегает, примерно так же.
для этого и придумали синхронизацию и создали специальные серверы.

Scream
05.02.2016, 16:16
Используя несколько ПЛК могу точно сказать, что за год убегает
до 2х мин.
и не более.
по часам. если не скучно. то считайте сами.


3 сек - 8ч,
9-24ч, для ПЛК это нормально.
Это же не хронометр.
И на ноутах убегает, примерно так же.
для этого и придумали синхронизацию и создали специальные серверы.

вы говорите о rtc, time() к rtc насколько понимаю отношения не имеет, или я ошибаюсь?
со спец. серверами (ntp) плк не работает, или я опять ошибаюсь?

Вольд
05.02.2016, 16:18
Используя несколько ПЛК могу точно сказать, что за год убегает
до 2х мин.
и не более.
по часам. если не скучно. то считайте сами.


3 сек - 8ч,
9-24ч, для ПЛК это нормально.
Это же не хронометр.
И на ноутах убегает, примерно так же.
для этого и придумали синхронизацию и создали специальные серверы.

Если за сутки часы уходят на 9 сек., то за год они уйдут на 9 * 365 = 3285 сек = 55 мин.

Откуда вы взяли 2 мин. ?

Yegor
05.02.2016, 16:44
забавно, TIME() врёт, а я собирался сейчас в проекте на нее ориентироваться, для меня 3 секунды критично за 8 часов, спасибо однако.Если выяснится, что забегание не зависит от вычислительной нагрузки и/или времени цикла, то можно сделать поправку. Правда, придётся сделать свои TON, TP и т.д. (есть Standard-intern.lib, откуда можно взять исходники на ST). С другой стороны, не совсем понятно что делать с задержками шагов в SFC (давать заведомо больше?).
Если за сутки часы уходят на 9 сек., то за год они уйдут на 9 * 365 = 3285 сек = 55 мин.
Откуда вы взяли 2 мин. ?На другом более старом ПЛК я наблюдал иной эффект: CurTime не только шаталось, но и забегало/отставало. Правда, это было в 2011, и я толком не помню условия того эксперимента. Так что всё может быть. Тут уже требуется приличная выборка по числу контроллеров, чтобы выводы делать.

lara197a
05.02.2016, 19:04
Невнимательно прочел.
rtc програмный ФБ.(програмные часы реального времени)
ничего общего к встроенным в ПЛК часам реального времени не имеет.
Из-за особенностей работы и низкой точности исключен из МЭК(какого не помню).

Используйте встроенные часы ПЛК, а не програмные.

Филоненко Владислав
05.02.2016, 21:26
Итак, в ПЛК 2-е часов (не синхронных). RTC, увод соответствует кварцевым часам.
И системный таймер (то самое TIME) - тут увод больше, т.к. кварц не часовой.
TIME и его производные (TP, TON, BLINK и т.п.) можно использовать на промежутках в часы
Для длительных отрезков времени используйте RTC.

Теперь о погрешности от нагрузки. Оба времени не подвержены влиянию нагрузки, однако влиянию нагрузки подвержен наблюдатель (сам ПЛК), т.о. некий джиттер времени объясняется не джитером времени, а джитером реакции программы ПЛК.

Scream
05.02.2016, 21:40
Итак, в ПЛК 2-е часов (не синхронных). RTC, увод соответствует кварцевым часам.
И системный таймер (то самое TIME) - тут увод больше, т.к. кварц не часовой.
TIME и его производные (TP, TON, BLINK и т.п.) можно использовать на промежутках в часы
Для длительных отрезков времени используйте RTC.

Теперь о погрешности от нагрузки. Оба времени не подвержены влиянию нагрузки, однако влиянию нагрузки подвержен наблюдатель (сам ПЛК), т.о. некий джиттер времени объясняется не джитером времени, а джитером реакции программы ПЛК.

хорошо что подвели итог. Скажите, эта информация есть где нибудь в РЭ или на сайте?

lara197a
05.02.2016, 21:58
Давайте всеже определимся речь об аппаратных RTC или системных.
Цитирую первоисточник:
"...Главный недостаток функционального блока RTC это необходимость его
начальной инициализации при каждом перезапуске контроллера. Многие ПЛК
имеют встроенные аппаратно реализованные часы реального времени. Разные
экземпляры функционального блока RTC не связаны между собой и могут
отсчитывать разное время. Аппаратные часы лишены такой возможности.
Разумным компромиссом является реализация функционального блока RTC
автоматически инициализирующегося значением аппаратных часов, если
начальное значение PDT не задано.
Основное достоинство аппаратных RTC часов это сохранение хода при
выключенном питании. Без поддержки такой функции установка аппаратных
часов не имеет смысла. Поэтому практически все микросхемы RTC совмещают
в себе небольшое статическое ОЗУ. Все они оснащены встроенной схемой
контроля, позволяющей программно определить факт нарушения питания. Тем
не менее, аппаратные RTC нужно обязательно настроить при первом
включении. Функции источника точного времени они выполняют не лучше, чем
программная реализация..."

Scream
06.02.2016, 00:06
хм, однако ТС показывает обратное.

Вольд
06.02.2016, 11:22
Микросхема RTC будет точно отсчитывать время при использовании качественного кварцевого резонатора.