ЭСКО: чтение данных

ЭСКО-Т

Содержание · Обмен

Одна теплосистема. Ниже — карта показаний двух магистралей. Размер архивной записи — 64 байта.

Идентификация

EEPROM Поле
0x0000 Номер, 8 ASCII-цифр
0x0010 Старшая тетрада — число каналов расхода; младшая — исполнение
0x0011 Сетевой адрес
0x0012 Версия; при версии ≥3 архив читается через A/4

Версия 00/FF недопустима. Значения каналов 1–2 читаются для одной теплосистемы; настройки третьего канала — только при его наличии и выборе для чтения.

Архивная запись

Смещения от начала payload. Форматы — в общей части.

Смещение Байт Поле Масштаб
0 5 Дата BCD YY MM DD hh mm
5 7 Q BCD /1e9, Гкал
12 7 M1 BCD /1e6, т
19 7 M2 BCD /1e6, т
26 7 M3, отрицательный дисбаланс BCD /1e6, т
33 2 t1 UInt16 /256, °C
35 2 t2 UInt16 /256, °C
37 2 t холодной воды UInt16 /256, °C
39 1 P1 /100, МПа
40 1 P2 /100, МПа
41 1 P холодной воды /100, МПа
42 4 Время нормальной работы BCD /100, ч
46 4 Время G < Gmin BCD /100, ч
50 4 Время G > Gmax BCD /100, ч
54 4 Время dT < dTmin BCD /100, ч
58 4 Время технической неисправности BCD /100, ч
62 1 Ошибки/режим Биты
63 1 KSI Инверсия суммы байтов 0–62

M3 не является массой третьего трубопровода. Архивных V1/V2 нет. Архивная температура холодной воды 151 °C преобразуется в 0 как служебное значение, а не измерение 0 °C. Для текущих показаний такое преобразование не применяется.

После проверки KSI запись считается пустой, если каждый из первых пяти байтов равен 00 или FF.

Ошибки, байт 62

Бит Значение
0 Останов счёта
1 Техническая неисправность
2 dT < dTmin
3 G > Gmax
4 G < Gmin
5 Реверс G2

Биты 7–6: 00 — обычный режим; 01 — автореверс G2; 10 — G2=0; 11 — G1=0. Это режим, не дополнительные ошибки.

Кольца FLASH

Архив AT для A/4 Записей Начало FLASH, байты EEPROM-указатель последней записи
Месячный 2 30 0x0080 0x0058
Суточный 1 512 0x0800 0x0054
Часовой 0 1504 0x8800 0x0050

Для версии <3: указатель читается R как UInt16 BE; допустимый диапазон 0..count-1. Запись читается восемью запросами L:

byte_address = ring_start + index * 64
L_address = byte_address / 8 + part    # part = 0..7

Ответы объединяются в 64 байта. Полностью нулевые/FF страницы пропускаются до проверки KSI; для остальных проверяются KSI и дата. На стёртые старые слоты при двоичном поиске смотрят как на записи раньше заданной даты. Финальная дата проверяется независимо от поиска.

Логическое начало — (last_index+1) % count. При хронологическом порядке применяется двоичный поиск первой записи с датой ≥ заданной; физический индекс (first+logical_index) % count. После сбросов или перевода часов порядок может нарушиться; в таком случае двоичный поиск неприменим.

Текущие значения: G

Из данных обычного ответа используются первые 3 байта — FP3.

Поле Канал 1 Канал 2 Единица
t 0x0350 0x0358 °C
P 0x0368 0x0370 МПа
Gv 0x044D 0x048D м³/ч
Gm 0x0468 0x04A8 т/ч
sign = -1, если b0 & 0x80; иначе +1
exponent = (b0 & 0x7F) - 64
mantissa = ((b1 << 8) | b2) / 65536
value = sign * mantissa * 2^exponent

FP3 не является IEEE float. 46 F0 00 → 60,0.

Текущие интеграторы: P/1/G

Запрос: 00 BA 50 01 47 NN 00 00 00 00 00 00 00 KS
Ответ:  00 BA D0 01 47 NN [7 байт BCD] KS
NN, dec Поле Масштаб
0 Q /1e9, Гкал
1 / 2 V1 / V2 /1e6, м³
4 / 5 M1 / M2 /1e6, т
16 Время нормальной работы /100, ч
17 Время G < Gmin /100, ч
18 Время G > Gmax /100, ч
19 Время dT < dTmin /100, ч
20 Время технической неисправности /100, ч

BCD: packet[6:13]. В этой команде времена тоже занимают 7 байт, в архиве — 4.

Состояние: M 0x0028

Начало данных: EG E1 E2. Признак текущей неисправности: (EG & 0x1F) != 0 || E1 != 0 || E2 != 0. В EG биты 0–4 совпадают по смыслу с младшими битами архивного байта ошибок. В E1: бит 2 — t1 вне допуска; бит 3 — t2 вне допуска; соответствующее значение температуры помечается недостоверным. Текущее состояние не относится к прошлым архивным интервалам.

Настройки: R

EEPROM Поле Формат
0x0018 Абонент 8 байт CP866
0x0020 S1 Бит 0: 0 — ТСП 1.3910, 1 — ТСП 1.3850; 2/3 — источник T1/T2, 4/5 — P1/P2, 6/7 — G1/G2
0x0021 S2 Биты 0/1/2 — источник T3/P3/G3
0x0023 Режим 0/1/2/3 — обычный/автореверс G2/G2=0/G1=0
0x0024–0x0026 Заданные T1/T2/T3 UInt8, °C
0x0027 / 0x0028 Минимум dT1−2 / dT2−3 UInt8, °C
0x0029–0x002B Заданные P1/P2/P3 UInt8 /100, МПа
0x002C–0x002E Заданные G1/G2/G3 UInt8, % диапазона
0x0040 Адрес установки 16 байт CP866, два чтения
n*0x100+0x40 Ду и номер ППР n 3+5 ASCII-байт
n*0x100+0x50 Диапазон ППР n FP3, м³/ч

Флаг источника: 0 — измерение, 1 — заданное значение. Текст завершается NUL, пробелы по краям и управляющие символы удаляются; поле из 00/FF/пробелов считается незаданным. Поля канала 3 применяются только к соответствующему исполнению.

Порядок чтения текущих

T/G → M 0x0028 → P с NN=0 и 16–20 → для каждого выбранного канала четыре G (t/P/Gv/Gm) и два P (V/M). Мгновенные значения и накопленные интеграторы имеют разные единицы и сохраняются раздельно.