Skip to content

Утилиты для работы со счетчиками "Тэкон"

License

Notifications You must be signed in to change notification settings

alexs-sh/tekon-utils

Repository files navigation

Total alerts Language grade: C/C++ codecov

TEKON-UTILS

Набор утилит для работы со счетчиками Тэкон через Ethernet контроллер К-104. Позволяют выполнять чтение значений, чтение архивов, синхронизацию времени. Для работы используется протокол описанный в Т10.06.59РД и Т10.06.59РД-Д1.

Быстрый старт

Чтение параметров

tekon_msr -a udp:10.0.0.3:51960@9 -p'3:0xF001:0:H 3:0xF017:0:D 3:0xF018:0:T 3:0x801c:2:f'
9:3:0xf001:0 H 0x3840 OK 1558082153 18000
9:3:0xf017:0 D 2019-05-17 OK 1558082153 18000
9:3:0xf018:0 T 13:35:49 OK 1558082153 18000
9:3:0x801c:2 F 38.151833 OK 1558082153 18000

В примере выполняется чтение 4-х параметров.

Аргумент Значение Описание
-a udp:10.0.0.3:51960@9 чтение будет выполнено по UDP, с IP адреса - 10.0.0.3, через порт - 51960, адрес К-104 - 9
-p 3:0xF001:0:H адрес Тэкона - 3, адрес параметра - 0xF001, индекс параметра - 0, тип параметра - H (HEX)

Вывод программы: 9:3:0xf001:0 H 0x3840 OK 1558082153 18000

Столбец Значение Описание
1 9:3:0xf001:0 адрес параметра. Адрес К-104 - 9, адрес Тэкона - 3, адрес параметра - 0xf001, индекс параметра - 0
2 H тип парметра - HEX
3 0x3840 значение параметра
4 OK качество
5 1558082153 метка времени (UTC)
6 18000 сдвиг часового пояса хоста относительно UTC

Более подробную справку можно получить, запустив программу без аргументов или с ключем -h.

Чтение архива

tekon_arch -a udp:10.0.0.3:51960@9 -p 3:0x801C:0:12:F  -i m:12   -d 3:0xF017:0xF018 
9:3:0x801c:0 F -nan OK 1546282800 18000
9:3:0x801c:1 F -nan OK 1548961200 18000
9:3:0x801c:2 F 38.151833 OK 1551380400 18000
...

В примере выполняется чтение месячного архива глубиной 12 записей.

Аргумент Значение Описание
-a udp:10.0.0.3:51960@9 чтение будет выполнено по UDP, с IP адреса - 10.0.0.3, через порт - 51960, адрес К-104 - 9
-p 3:0x801C:0:12:F адрес Тэкона - 3, адрес архива - 0x801C, стартовый индекс - 0, кол-во записей 12, формат -F (float)
-m m:12 тип - m (месячный), глубина - 12
-d 3:0xF017:0xF018 адрес устройства - 3, адрес даты - 0xF017, адрес времени - 0xF018

Вывод программы: 9:3:0x801c:0 F -nan OK 1546282800 18000

Столбец Значение Описание
1 9:3:0x801с:0 адрес записи. Адрес К-104 - 9, адрес Тэкона - 3, адрес параметра - 0x801с, индекс - 0
2 F тип парметра - float
3 -nan значение параметра
4 OK качество
5 1546282800 метка времени (UTC)
6 18000 сдвиг часового пояса хоста относительно UTC

Более подробную справку можно получить, запустив программу без аргументов или с ключем -h.

Синхронизация времени

tekon_sync -a udp:10.0.0.3:51960@9 -d 3:0xF017:0xF018 -p 00000001

В примере выполняется запись текущего времени хоста в Тэкон.

Аргумент Значение Описание
-a udp:10.0.0.3:51960@9 чтение будет выполнено по UDP, с IP адреса - 10.0.0.3, через порт - 51960, адрес К-104 - 9
-d 3:0xF017:0xF018 адрес устройства - 3, адрес даты - 0xF017, адрес времени - 0xF018
-p 00000001 пароль наладчика

Сборка

Для сборки потребуются:

  • gcc
  • cmake
  • make

Debian x86_64

apt install git cmake make gcc
git clone https://github.com/alexs-sh/tekon-utils.git
cd tekon-utils/
mkdir build
cd build
cmake ..
make 
make test

Debian ARM

apt install git cmake make gcc-arm-linux-gnueabihf
git clone https://github.com/alexs-sh/tekon-utils.git
cd tekon-utils/
mkdir build-armhf
cd build-armhf
cmake -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_FIND_ROOT_PATH=/usr/arm-linux-gnueabihf ..
make 

Windows XP x86

apt install git cmake make gcc-mingw-w64-i686
git clone https://github.com/alexs-sh/tekon-utils.git
cd tekon-utils/
mkdir build-winxp-x86
cd build-winxp-x86
cmake -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc -DCMAKE_LINKER=/usr/i686-w64-mingw32/bin/ld  -DCMAKE_C_STANDARD_LIBRARIES="-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -lws2_32 -liphlpapi -lpsapi -luserenv" -DCMAKE_C_FLAGS_RELEASE="-DWINVER=0x0501" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bstatic -lwinpthread" ..
make 

Все примеры выполнены в ОС Debian 9 x86_64.

Применение

Утилиты для чтения получают данные с устройства и выводят их в stdout. Чтение может выполняться по tcp или udp. К значениям добавляется информация о том, откуда они были получены, качество и метки времени.

Качество имеет сл. значения:

  • OK - данные получены и имеют достоверное значение
  • INV - данные получены, но имеют недостоверное значение
  • COM - обрыв связи
  • UNK - неопределенное значение

Метки времени отображаются в UTC. Дополнительно с ними хранится информация о часовом поясе (TZ). TZ отображается в виде сдвига локального времени от UTC в секундах.

Чтение значений

Формат вывода данных:

шлюз:адрес:параметр:индекс тип значение качество UTC TZ

9:3:0xf001:0 H 0x3840 OK 1557900053 18000

Чтение архива

Формат вывода данных:

шлюз:адрес:параметр:индекс тип значение качество UTC TZ

9:3:0x801c:0 F -nan OK 1546282800 18000

Чтение архива может выполнятся в 2-х вариантах:

  • без метки времени
  • с меткой времени

Чтение без меток времени. Все значения UTC равны -1.

tekon_arch -a udp:10.0.0.3:51960@9 -p 3:0x801C:0:12:F 
9:3:0x801c:0 F -nan OK -1 18000
9:3:0x801c:1 F -nan OK -1 18000
9:3:0x801c:2 F 38.151833 OK -1 18000
...

Чтение с метками времени. Требует дополнительных параметров с описанием интервала и адресов даты / времени. Переводит индексы Тэкон в UTC время.

tekon_arch -a udp:10.0.0.3:51960@9 -p 3:0x801C:0:12:F -i m:12 -d 3:0xF017:0xF018
9:3:0x801c:0 F -nan OK 1546282800 18000
9:3:0x801c:1 F -nan OK 1548961200 18000
9:3:0x801c:2 F 38.151833 OK 1551380400 18000
...

Для месячных, суточных, часовых архивов метка времени относится к началу архива.

Для интервальных архивов метка времени относится к концу архива.

Более подробно см. Т10.06.59РД-Д1 стр. 31-33

Синхронизация времени

Синхронизация времени имеет несколько подводных камней:

  • в документации нет описания алгоритма синхронизации
  • разработчики не предоставляют какой-либо информации на форумах
  • перевод времени может приводить к изменения индексов архивов, что в свою очередь приведет к повреждению архивов

Механизм синхронизации предусматривает ряд проверок, позволяющих снизить вероятность повреждения архивов. Каждая проверка может быть включена или отключена.

  • разность времени. Если время в устройстве отличается от нового больше, чем на заданное значение, то синхронизация не будет выполнена
  • индексы. Если индексы (месячный (12), суточный, часовой (1536), интервальный (5 мин) ) для времени устройства не совпадают с индексами для нового времени, то синхронизация не будет выполнена
  • переход через минуты. Если время устройства содержит не такое количество минутных интервалов, как новое время, то синхронизация не будет выполнена

Разность времени устройства и нового времени больше 100 сек.

tekon_sync -a udp:10.0.0.3:51960@9 -d 3:0xF017:0xF018 -p 00000001 -u 1557897094 -c 'difference:100'
tekon_sync : ERR : Difference check failed

Индексы для времени устройства и нового времени не равны.

tekon_sync -a udp:10.0.0.3:51960@9 -d 3:0xF017:0xF018 -p 00000001 -u 1557897094 -c 'indexes'   
tekon_sync : ERR : Indexes check failed

Кол-во 10-ти минутных интервалов во времени устройства и новом времени не равно.

tekon_sync -a udp:10.0.0.3:51960@9 -d 3:0xF017:0xF018 -p 00000001 -u 1557897094 -c 'minutes:10'
tekon_sync : ERR : Minutes check failed

Объединение проверок.

tekon_sync -a udp:10.0.0.3:51960@9 -d 3:0xF017:0xF018 -p 00000001 -u 1557897094 -c 'difference:100 minutes:10 indexes'
tekon_sync : ERR : Difference check failed

Отключение проверок.

tekon_sync -a udp:10.0.0.3:51960@9 -d 3:0xF017:0xF018 -p 00000001 -u 1557897094 -c 'none'

About

Утилиты для работы со счетчиками "Тэкон"

Resources

License

Stars

Watchers

Forks

Packages

No packages published