Формат ZDT

для записи и передачи данных в ZETSENSOR

Формат имени файла данных ZXNNNNNN.zdt, где

  • Z — первый символ в имени во всех файлах, кроме файла начала записи – в нём первый символ S;
  • X – может быть L или C, в зависимости от того циклическая запись или линейная;
  • NNNNNN – порядковый номер файла от 000001 до 999999.

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

Описание поля Размер Пояснения
Номер устройства 2 байта Реально используется первый байт, второй байт — резерв
Время формирования пакета 4 байта Не совпадает со временем самих данных*
Тип данных (группы) 1 байт 0 — потоковые данные short;
1 — потоковые данные float;
2 — информация о канале;
3 — информация о параметрическом канале;
4 — информация о канале сообщений;
128..255 — сообщения.
Статус 1 байт 0x00 — Ok;
0x01 — было переполнение буфера
Количество байтов в группе 2 байта N
Данные N байтов Формат зависит от типа данных
Контрольная сумма 2 байта CRC16 по всем предыдущим полям

* Исключение — пакеты сообщений (тип 4), в которых это поле является частью временной метки сообщения.

Форматы пакетов

Потоковые данные short (тип 0)

Пакет с типом 0 содержит массив чисел типа short. Информация о потоке содержится в пакете с типом 2.

Потоковые данные short следует считать устаревшими.

Потоковые данные float (тип 1)

Пакет с типом 1 содержит массив чисел типа float. Информация о потоке содержится в пакете с типом 2.

Пакет может быть пустым, с количеством байтов данных, равным нулю. Это может означать, что по каналу могло что-то измениться (так называемый разрыв сеанса данных). Например, произошел перезапуск АЦП, или изменилась частота дискретизации, единицы измерения или другие характеристики канала. Иногда пустой пакет может быть ложным, когда на самом деле разрыва сеанса не было (тут все зависит от датчика).
Актуальная информация по каналу будет содержаться в пакете с информацией о канале (тип 2), который может быть записан в файле позднее.

Информация о каналах (тип 2)

Информация о каналах указывается в пакетах с типом 2.
Информация записывается в файле начала записи (см. 1), но может быть продублирована в любом месте любого файла данных.

Запрос информации о каналах осуществляется дополнительными командами:

#define MODB_STOP_DATA_STREAM 71 // останов потоковых данных
#define MODB_GET_NODE_INFO 72 // запрос информации о ноде

Структура информации о каналах приведена в таблице

Параметр Размер Пояснения
Частота обновления, Гц 4 байта float
Наименование канала 32 байта строка
Единица измерения 8 байт строка
Серийный номер устройства 8 байт unsigned long long
Максимальное значение по каналу 4 байта float
Минимальное значение по каналу 4 байта float
Разрешающая способность по каналу 4 байта float
Опорное значение для расчета дБ 4 байта float
Тип устройства* 4 байта число как в DEVICE_PAR

* В устройствах со старой прошивкой это поле может отсутствовать. В этом случае размер структуры будет равен 68 байтам, а поле следует заполнять каким-нибудь значением по умолчанию (например, UNKNOWN)

Общий размер структуры: 72 или 68 байтов.
Данные передаются пакетами с типом 0, 1, 128 или 129.

Информация о параметрических каналах (тип 3)

Информация о параметрических каналах указывается в пакетах с типом 3.

Структура информации о параметрическом канале приведена в таблице

Поле Размер Пояснения
Серийный номер устройства 8 байт unsigned long long
Тип устройства 4 байта число как в DEVICE_PAR
Статус 4 байта 0 — Ок,
1 — отключена передача временной метки и статуса события
Кол-во параметров (N) 4 байта число от 1 до 10
Наименование параметра 1 32 байта строка
Единицы измерения параметра 1 8 байт строка
Флаг активности параметра 1 4 байта логическое число
Наименование параметра 2 32 байта строка
Единицы измерения параметра 2 8 байт строка
Флаг активности параметра 2 4 байта логическое число
Наименование параметра N 32 байта строка
Единицы измерения параметра N 8 байт строка
Флаг активности параметра N 4 байта логическое число

Общий размер структуры зависит от количества параметров N.
Параметрические события передаются пакетами с типом 140.

Информация о канале сообщений (тип 4)

Информация о канале, по которому передается текст сообщений указывается в пакетах с типом 4.

Структура информации о канале сообщений приведена в таблице.

Поле Размер Пояснения
Серийный номер устройства 8 байт unsigned long long
Тип устройства 4 байта число как в DEVICE_PAR
Идентификатор формата 4 байта от 128 до 255 (см. ниже)
Дополнительная информация Зависит от формата

Идентификатор сеанса (тип 5)

Идентификатор сеанса передается в пакетах с типом 5 и требуется при передаче данных по каналам, где возможны переподключения.

Структура пакета с номером сеанса приведена в таблице.

Поле Размер Пояснения
Идентификатор сеанса 4 байта unsigned long

Пакет с типом 5 передается при каждом подключении к серверу. Значение идентификатора задается один раз при включении передающего модуля и повторяется при каждом следующем переподключении вплоть до отключения. При следующем включении модуля значение должно отличаться, поэтому обычно в качестве идентификатора принимается время включения (time_t).

Потоковые данные float со счетчиком (тип 7)

Пакет с типом 7 содержит массив чисел типа float. Информация о потоке содержится в пакете с типом 2.

Формат пакета типа 7 практически полностью совпадает с форматом пакета типа 1. Разница только в том, что в заголовке пакета в поле «Время формирования пакета» передается не время формирования пакета, а 32-битный счетчик отчетов по данному адресу (node):

uint32_t seqfloat;

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

Сообщения (типы 128..255)

Сообщения передаются пакетами с типами от 128 по 255 (с установленным старшим битом байта).

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

  • секунды — время формирования пакета из заголовка;
  • наносекунды — первые четыре байта данных пакета.

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

Форматы сообщений

Для идентификации форматов используется диапазон целых чисел от 128 по 255, включительно. Такие границы выбраны, чтобы можно было идентификатор указывать прямо в заголовке пакета — в однобайтовом поле типа.

Пакет short (формат 128)

Сообщение содержит массив чисел short. Каждое число short может иметь любое значение, кроме 0x8000 (-3276710).

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

Информация о сообщении передается пакетом с типом 2.

Пакет float (формат 129)

Сообщение содержит массив чисел float.

В отличие от потока float (стандартный канал), числа следуют не одним непрерывным потоком, а отдельными наборами чисел. Каждый такой набор содержит метку времени. Формат подходит для передачи редких данных, носящих событийный характер генерации.

Информация о сообщении передается пакетом с типом 4. Дополнительная информация содержит данные о канале:

Параметр Размер Пояснения
Наименование канала 32 байта строка
Единица измерения 8 байт строка
Частота обновления, Гц 4 байта float
Максимальное значение по каналу 4 байта float
Минимальное значение по каналу 4 байта float
Разрешающая способность по каналу 4 байта float
Опорное значение для расчета дБ 4 байта float

Параметрические данные (формат 140)

Сообщение содержит данные одного параметрического события.
Информация о сообщении передается пакетом с типом 3.

Цифровое событие (формат 160)

Сообщение содержит одну двоичную структуру, отображающей состояние цифрового порта:

Поле Размер Пояснения
Номер порта 2 байта unsigned short > 0:
1 — первый порт
2 — второй порт
Фронт 2 байт signed short:
-1 — (FALLING_EDGE) ниспадающий фронт
+1 — (RISING_EDGE) возрастающий фронт
Имя порта 32 байта char[32] строка

Текст NMEA 0183 (формат 183)

Сообщение содержит одну или несколько строк текста NMEA 0183. Каждая строка начинается с символа ‘$’ и заканчивается следующими пятью символами:

  • символ ‘*’;
  • контрольная сумма в виде двух шестнадцатеричных цифр — сумма по модулю 256 всех байтов строки, начиная с первого символа ‘$’;
  • символы ‘r’ и ‘n’ (CRLF).

Не допускается разбивать строку на несколько сообщений. Сообщение может содержать нулевые символы (‘’), которые должны быть отброшены.

Информация о сообщении передается пакетом с типом 4 без дополнительной части.

Другие форматы

Для добавления новых форматов следует использовать незанятые значения из диапазона 129..254.

При определении нового формата следует в этом документе описать формат сообщения, а также формат дополнительной части пакета с типом 4 (при наличии).

Значение 255 (0xFF16) зарезервировано.

Скачать

пример конвертирования zdt файлов