Регистры Modbus — ДТВ-RS-485
Датчик температуры и влажности ДТВ-RS-485
Та же карта у исполнения ДТВ-CO2-RS-485: одна прошивка, одна карта и одна плата, различается набор датчиков.
Порт RS-485. Holding 110 — код скорости, заводское значение в карте 1152 (115200). Holding 111 — чётность: 0 нет, 1 нечёт, 2 чёт. Holding 112 — стоп-биты 1 или 2. Заводские чётность и стоп-биты карта не называет. Holding 128 — адрес 1…246, адрес 247 зарезервирован под сервис и загрузчик. Заводской адрес карта не называет. Holding 122 — режим шины: 0 классический Modbus, 1 Fast Modbus, 2 BACnet MS/TP (применяется после перезагрузки).
В карте 192 строк. Поле _meta.row_count равно 192, _meta.dropped равно 9. Какие строки отброшены, файл не перечисляет.
Колонки «Формат», «Ед. и масштаб», «Значения и диапазон», «По умолчанию», «Хранение», «С версии ПО» и «Канал» в этих строках пустые: в JSON нет полей format, unit, scale, values, default, storage, since_fw, channel. Компонент ставит там прочерк. Единица и диапазон написаны в описании. Функция Modbus считается из типа регистра. Часть коротких названий в файле обрывается на полуслове, продолжение — в описании.
Ниже вся сгенерированная карта, не выборка.
| Адрес (dec) | Адрес (hex) | Тип | Функции | Доступ | Формат | Ед. и масштаб | Значения и диапазон | По умолчанию | Хранение | ⚡ Событие Fast Modbus | С версии ПО | Канал | Название | Описание |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0x0000 | Holding | 03/06/10 | W | нет | Запись | Запись: 0xFFFF — расширенная отладка (verbose, d_nmbs и др., EEPROM); 1 — выключить отладку; 0..99 — без изменения параметров; ≥100 — калибровка по эталонной температуре (x0.1 °C); 300..900 — калибровка влажности по эталону (x0.1 %RH). Подробно: svc_mb_holding, case 0. | |||||||
| 0 | 0x0000 | Input | 04 | R | нет | Флаг отладки USART6 | Флаг отладки USART6: comport (0/1), как в config. | |||||||
| 1 | 0x0001 | Input | 04 | R | да | Температура DS18B20, x0 | Температура DS18B20, x0.1 °C; 0 если нет датчика. uint16 WO (0x06/0x10) Запись Holding: дублирует coil 1 — дискретный выход, set_all_output() (0/1). | |||||||
| 2 | 0x0002 | Holding | 03/06/10 | W | нет | Запись Holding | Запись Holding: дублирует coil 2 — свет/нагрев, 0/1 (см. svc_mb_holding). | |||||||
| 2 | 0x0002 | Input | 04 | R | да | Температура MCP9808, x0 | Температура MCP9808, x0.1 °C. | |||||||
| 3 | 0x0003 | Input | 04 | R | да | Температура HDC1080, x0 | Температура HDC1080, x0.1 °C. | |||||||
| 4 | 0x0004 | Input | 04 | R | да | Температура BME280, x0 | Температура BME280, x0.1 °C. | |||||||
| 5 | 0x0005 | Input | 04 | R | да | Температура BME680, x0 | Температура BME680, x0.1 °C (возможен сдвиг; калибр. рег. 35). | |||||||
| 6 | 0x0006 | Input | 04 | R | да | Температура выбранного внешнего датчика, x0 | Температура выбранного внешнего датчика, x0.1 °C (0 при коде 0=Off). старое 1 (PT1000) теперь = NTC10K B3950. После обновления прошивки интегратор ОБЯЗАН перезаписать reg 6 нужным кодом (иначе ранее выбранный NTC читается как Off, а PT — как NTC). | |||||||
| 6 | 0x0006 | Holding | 03/06/10 | RW | нет | Выбор внешнего датчика температуры, код 0 | Выбор внешнего датчика температуры, код 0..7 (EEPROM): 0 = Выключен (Off); Input публикует 0. 1 = NTC10K B3950 | 2 = NTC10K B3988 | 3 = NTC10K B3435 | 4 = NTC10K B3470. 5 = Pt1000 a385 (IEC 60751) | 6 = Pt1000 1000П a391 | 7 = Pt1000 1000М a428. Запись вне {0..7} → исключение 3 (ILLEGAL_DATA_VALUE). | |||||||
| 7 | 0x0007 | Input | 04 | R | да | Влажность HDC1080, x0 | Влажность HDC1080, x0.1 %RH. С 1.0.1.18: по умолчанию применяется компенсация самонагрева кристалла (RH_amb = RH_die·es(Tdie)/es(Tamb), линейно ≈ +5.8 %/°C отн., dT — из рег. 33); гейт — рег. 113. Поднимает публикуемую RH на ~4..9 п.п. (кристаллы теплее воздуха). | |||||||
| 8 | 0x0008 | Input | 04 | R | да | Влажность BME280, x0 | Влажность BME280, x0.1 %RH. Та же компенсация (dT — рег. 34, гейт 113). | |||||||
| 9 | 0x0009 | Input | 04 | R | да | Влажность BME680, x0 | Влажность BME680, x0.1 %RH. Та же компенсация (dT — рег. 35, гейт 113). ВАЖНО: абсолютная истина RH без внешнего эталона не устанавливается — компенсация даёт согласованность датчиков, а не поверенную точность; эталон — поверенный гигрометр или солевые точки (NaCl 75.3 %RH, MgCl2 33.1 %RH при 25 °C). | |||||||
| 10 | 0x000A | Input | 04 | R | да | Давление BME280, мм рт | Давление BME280, мм рт.ст. | |||||||
| 11 | 0x000B | Input | 04 | R | да | Давление BME680, мм рт | Давление BME680, мм рт.ст. | |||||||
| 12 | 0x000C | Input | 04 | R | да | Давление BME280, x0 | Давление BME280, x0.01 кПа (9989 ≈ 99.89 кПа). | |||||||
| 13 | 0x000D | Input | 04 | R | да | Давление BME680, x0 | Давление BME680, x0.01 кПа. | |||||||
| 14 | 0x000E | Input | 04 | R | да | Высота (барометрическая), BME280, м | Высота (барометрическая), BME280, м. | |||||||
| 15 | 0x000F | Input | 04 | R | да | Высота (барометрическая), BME680, м | Высота (барометрическая), BME680, м. | |||||||
| 16 | 0x0010 | Input | 04 | R | да | BME680 | BME680: газовое сопротивление, кОм (сырое, не TVOC; формат не менялся). | |||||||
| 17 | 0x0011 | Input | 04 | R | да | BME680 | BME680: IAQ 0..500, собственная шкала (с 1.0.1.18; ранее 500−кОм). 0..50 отлично, 51..100 хорошо, 101..200 слабое загрязнение, 201..300 умеренное, >300 сильное. Расчёт: 0.75·clamp(250·log10( baseline/R)) + 0.25·влажностный член (|RH−40|·500/60); baseline — адаптивный «чистый воздух» (вверх τ≈1 ч, вниз τ≈24 ч, потолок 2 МОм, RAM-only). Первые ~5 мин после старта (burn-in прогрева MOX, 20 газовых выстрелов) IAQ = 0. С 1.0.2.4 рег. 20 — ДРУГАЯ шкала (рейтинг Renesas), рег. 17 и 20 больше не сравниваются напрямую. | |||||||
| 18 | 0x0012 | Input | 04 | R | да | BME680 | BME680: эквивалент CO2, ppm (клэмп 400..5000). С 1.0.1.18 отношение считается к адаптивному baseline (см. рег. 17): дрейф MOX-нуля не смещает eCO2, единичный всплеск сопротивления не «залипает». Первые ~5 мин после старта (burn-in) публикуется нейтральные 400 ppm; после burn-in в чистом воздухе ≈ 450..560 ppm. Форма формулы и клэмпы прежние. | |||||||
| 19 | 0x0013 | Input | 04 | R | да | ZMOD4410 | ZMOD4410: TVOC, мкг/м³ (25 = 0.025 мг/м³). С 1.0.2.4 ЕДИНИЦА ИЗМЕНЕНА (было мг/м³ × 100: 41 = 0.41 мг/м³) — решение Оператора 2026-09-09; значение — алгоритм Renesas iaq_2nd_gen 4.2.0. Насыщение 65535 (= 65.535 мг/м³, далеко за диапазоном сенсора); NaN / отрицательное — 0. Уставки VOC 353/354 и гистерезис 360 ОСТАЮТСЯ в мг/м³ × 100 (миграции EEPROM нет): движок тревог делит рег. 19 на 10 (округление .5 вверх) перед сравнением — заводская уставка 60 = 0.60 мг/м³ = 600 в рег. 19 (Core/Src/svc_gas_alarm.c; Core/Inc/zmod_iaq_publish_core.h). BACnet AI:19 по-прежнему мг/м³ (масштаб 0.001). Порог событий Fast Modbus (рег. 340, сырые единицы) по этому регистру стал в 10 раз чувствительнее: заводские 10 = 0.010 мг/м³. | |||||||
| 20 | 0x0014 | Input | 04 | R | да | ZMOD4410 | ZMOD4410: IAQ — рейтинг Renesas iaq_2nd_gen 1.0..5.0 × 100 → 100..500 (с 1.0.2.4; ранее — единая шкала 0..500, как рег. 17). Полосы по таблице IAQ rating даташита Renesas: 100..199 очень хорошо, 200..299 хорошо, 300..399 средне, 400..499 плохо, 500 очень плохо. Альтернативное отображение (рейтинг−1)×125 → 0..500 переключается одной константой (Core/Inc/zmod_iaq_publish_core.h ZMOD_IAQ_REG20_MAP), НЕ отгружается — отображение ×100 подтверждено Оператором 2026-09-09 как окончательное. ПРОГРЕВ: после каждого старта (и после переинициализации сенсора по POR) реги 19..22 публикуют 0, пока алгоритм не сообщит валидность (Renesas: «не менее 60 циклов», период 3 с ⇒ ≈3 мин); в это время рег. 349 бит 7 = 0, источник CO2 (биты 8–9) = BME680 при «авто». Отказ самопроверки сенсора (код DAMAGE) — тоже 0 (сторож не подтверждается): повреждённый сенсор не питает тревогу CO2/VOC. | |||||||
| 21 | 0x0015 | Input | 04 | R | да | ZMOD4410 | ZMOD4410: eCO2, ppm, клэмп 400..5000 (формат прежний; с 1.0.2.4 значение — алгоритм Renesas). Оба eCO2 — MOX-прокси, не NDIR. | |||||||
| 22 | 0x0016 | Input | 04 | R | да | ZMOD4410 | ZMOD4410: EtOH, ppm × 100 (формат прежний; с 1.0.2.4 — алгоритм Renesas). | |||||||
| 23 | 0x0017 | Input | 04 | R | да | LD2412 | LD2412: энергия движущейся цели; 0 если нет кадра. | |||||||
| 24 | 0x0018 | Input | 04 | R | да | LD2412 | LD2412: энергия неподвижной цели (still_energy); 0 если нет кадра. | |||||||
| 25 | 0x0019 | Input | 04 | R | да | LD2412 | LD2412: освещённость, % (при живой UART-связи; иначе 0). | |||||||
| 26 | 0x001A | Input | 04 | R | да | Сигнал GPIO PB2 | Сигнал GPIO PB2: 1 = высокий уровень. | |||||||
| 27 | 0x001B | Input | 04 | R | да | Присутствие LD2412 (логика UART + PB2), 0/1 (чтение Input, FC04) | Присутствие LD2412 (логика UART + PB2), 0/1 (чтение Input, FC04). | |||||||
| 27 | 0x001B | Holding | 03/06/10 | RW | нет | Задержка сброса «присутствия» LD2412, сек (запись 1 | Задержка сброса «присутствия» LD2412, сек (запись 1..300, EEPROM). Чтение Holding (FC03) возвращает сохранённую задержку. | |||||||
| 28 | 0x001C | Input | 04 | R | да | LD2412 | LD2412: расстояние движущейся цели, см. | |||||||
| 29 | 0x001D | Input | 04 | R | нет | LD2412 | LD2412: расстояние неподвижной цели, см. | |||||||
| 30 | 0x001E | Input | 04 | R | нет | LD2412 | LD2412: дистанция обнаружения, см. | |||||||
| 31 | 0x001F | Holding | 03/06/10 | RW | нет | Калибровка темп | Калибровка темп. DS18B20, смещение x0.1 °C, диапазон -100..100. Заводские значения 31/32/33/34/35 = -21/-31/-23/-17/-34 — компенсация самонагрева платы (HIL 2026-07-11, эталон RTD/NTC 6АИ6АО); поэкземплярная подстройка — записью эталона (x0.1 °C) в holding-регистр 0. | |||||||
| 32 | 0x0020 | Holding | 03/06/10 | RW | нет | Калибровка темп | Калибровка темп. MCP9808, -100..100. | |||||||
| 33 | 0x0021 | Holding | 03/06/10 | RW | нет | Калибровка темп | Калибровка темп. HDC1080, -100..100. | |||||||
| 34 | 0x0022 | Holding | 03/06/10 | RW | нет | Калибровка темп | Калибровка темп. BME280, -100..100. | |||||||
| 35 | 0x0023 | Holding | 03/06/10 | RW | нет | Калибровка темп | Калибровка темп. BME680, -100..100. | |||||||
| 36 | 0x0024 | Holding | 03/06/10 | RW | нет | Калибровка темп | Калибровка темп. NTC10K/PT1000 (общий канал), -100..100. | |||||||
| 37 | 0x0025 | Holding | 03/06/10 | RW | нет | Калибровка влажности HDC1080, -200 | Калибровка влажности HDC1080, -200..200 (в десятых %RH смещения). РЕКОМЕНДУЕМЫЙ шаг ввода в эксплуатацию: выровнять HDC1080 по среднему бортовых BME280/BME680 записью рег.37 = round((mean(рег8,рег9) − рег7)×10). HDC1080 имеет aging-смещение RH (наблюдалось ~+17 %RH), не устраняемое встроенным нагревателем (bake-out, рег.115 — нежизнеспособен); стендовая калибровка: HDC 59.8→43.3 %RH, в пределах 0.2 % от среднего BME, рег.37 = -167. | |||||||
| 38 | 0x0026 | Holding | 03/06/10 | RW | нет | Калибровка влажности BME280, -200 | Калибровка влажности BME280, -200..200. | |||||||
| 39 | 0x0027 | Holding | 03/06/10 | RW | нет | Калибровка влажности BME680, -200 | Калибровка влажности BME680, -200..200. | |||||||
| 40 | 0x0028 | Holding | 03/06/10 | RW | нет | Фильтр Калмана | Фильтр Калмана: DS18B20 темп., 0=выкл, 1=вкл. | |||||||
| 41 | 0x0029 | Holding | 03/06/10 | RW | нет | Фильтр Калмана | Фильтр Калмана: MCP9808 темп. | |||||||
| 42 | 0x002A | Holding | 03/06/10 | RW | нет | Фильтр Калмана | Фильтр Калмана: HDC1080 темп. | |||||||
| 43 | 0x002B | Holding | 03/06/10 | RW | нет | Фильтр Калмана | Фильтр Калмана: BME280 темп. | |||||||
| 44 | 0x002C | Holding | 03/06/10 | RW | нет | Фильтр Калмана | Фильтр Калмана: BME680 темп. | |||||||
| 45 | 0x002D | Holding | 03/06/10 | RW | нет | Фильтр Калмана | Фильтр Калмана: NTC10K темп. | |||||||
| 46 | 0x002E | Holding | 03/06/10 | RW | нет | Фильтр Калмана | Фильтр Калмана: PT1000 темп. | |||||||
| 47 | 0x002F | Holding | 03/06/10 | RW | нет | Фильтр Калмана | Фильтр Калмана: HDC1080 влажность. | |||||||
| 48 | 0x0030 | Holding | 03/06/10 | RW | нет | Фильтр Калмана | Фильтр Калмана: BME280 влажность. | |||||||
| 49 | 0x0031 | Holding | 03/06/10 | RW | нет | Фильтр Калмана | Фильтр Калмана: BME680 влажность. | |||||||
| 105 | 0x0069 | Input | 04 | R | нет | Время работы с загрузки, младшее слово (сек), u32 | Время работы с загрузки, младшее слово (сек), u32; сначала читать 105, потом 106. | |||||||
| 106 | 0x006A | Input | 04 | R | нет | Старшее слово uptime (сек) | Старшее слово uptime (сек). | |||||||
| 110 | 0x006E | Holding | 03/06/10 | RW | нет | Скорость RS-485 (код baud, напр | Скорость RS-485 (код baud, напр. 1152 = 115200, 192 = 19200); заводское значение DEFAULT_BAUD_RATE=1152 — в lock-step с eeprom_factory_reset_link_params бутлоадера; см. set_baudrate(). | |||||||
| 111 | 0x006F | Holding | 03/06/10 | RW | нет | Чётность | Чётность: 0=нет, 1=нечёт, 2=чёт. | |||||||
| 112 | 0x0070 | Holding | 03/06/10 | RW | нет | Стоп-биты | Стоп-биты: 1 или 2. | |||||||
| 113 | 0x0071 | Holding | 03/06/10 | RW | нет | Компенсация самонагрева кристалла для влажности (реги 7/8/9) | Компенсация самонагрева кристалла для влажности (реги 7/8/9): 1 = включена (заводское), 0 = выключена. EEPROM. Введён 1.0.1.18. | |||||||
| 114 | 0x0072 | Input | 04 | R | нет | Наработка в целых сутках | Наработка в целых сутках: floor(накопленных часов / 24), кап 65535. Часы копятся посекундно (TIM ISR), снимок хранится во Flash и восстанавливается на старте (как MR-02m, get_operating_days). Введён 1.0.1.30 (до этого регистр ошибочно занулялся диспетчером и читал 0). | |||||||
| 115 | 0x0073 | Holding | 03/06/10 | RW | нет | Зарезервирован | Зарезервирован: HDC1080 heater bake-out — НЕЖИЗНЕСПОСОБЕН, отключён. Любая ненулевая запись (в т.ч. прежний magic 0x1080) отклоняется исключением. При включённом нагревателе шина I2C зависает (clock-stretch/NAK), HAL_I2C-вызов переживает таймаут и валит аппаратный оконный WWDG (~43 мс, рег.65508=2) — не лечится дроблением/ подкормкой сторожей (4 попытки, см. BUGLOG). К тому же нагреватель по даташиту — против конденсата, а не aging-дрейфа RH. Чтение: 0. HDC1080 +17 %RH закрыт калибровкой рег.37 по бортовым BME. | |||||||
| 122 | 0x007A | Holding | 03/06/10 | RW | нет | , EEPROM Режим шины (семейный селектор, shared/modbus MODBUS_FAST_MODE_ADDR) | , EEPROM Режим шины (семейный селектор, shared/modbus MODBUS_FAST_MODE_ADDR): 0 = классический Modbus (DMA), 1 = Fast Modbus, 2 = BACnet MS/TP. Другие значения — exception 3. Значения 0/1 применяются сразу (переключение Fast/классика без перезагрузки); выбор 2 = BACnet сохраняется в EEPROM + резерв во Flash и применяется ПОСЛЕ перезагрузки (стек USART2 латчится на старте). При выборе 2: адрес должен быть 1..127 (иначе exc 3), недопустимый baud для MS/TP → 38400 8N1. Чтение отражает ОТЛОЖЕННОЕ (сохранённое) состояние. Внутреннее хранение не изменилось: протокол 0/1 в tConfig.bus_protocol (байт 126), бит Fast в otladka.d_fastmb — регистр 122 меняет только кодировку на шине. Зеркало BACnet — объект Multi-state Value 19:1 «Bus Protocol», Present_Value 1-based: PV = режим + 1 (1=Modbus, 2=Fast Modbus, 3=BACnet), тип Unsigned. Контракт: docs/contracts/bus-protocol.md. (До 1.0.1.52 регистр был RO 0/1, а выбор BACnet жил на снятом регистре 127. В 1.0.1.52/53 зеркалом BACnet был AV:122 «Bus Mode» — снят в 1.0.2.1.) | |||||||
| 123 | 0x007B | Input | 04 | R | нет | Оценка VDDA, 0 | Оценка VDDA, 0.01 В (328 = 3.28 В), VrefInt / ADC_ready[2]. | |||||||
| 124 | 0x007C | Input | 04 | R | нет | Внутренняя температура МК, 0 | Внутренняя температура МК, 0.1 °C (300 = 30.0 °C; оценка по ADC и калибровочным константам ROM; единица — как в shared/modbus fast_mb_events.h FAST_MB_SYS_EVT_MCU_TEMP_BIT: "0.1 C"). | |||||||
| 125 | 0x007D | Holding | 03/06/10 | RW | да | Маска групп системных событий Fast Modbus (FAST_MB_SYS_EVT_* биты, карта — share | Маска групп системных событий Fast Modbus (FAST_MB_SYS_EVT_* биты, карта — shared/modbus/inc/fast_mb_events.h, не дублируется здесь). Заводское значение FAST_MB_SYSGRP_MASK_DEFAULT = 0x0030 (биты 4+5 — счётчики DO/DI, которых у RTU-Sensor НЕТ), поэтому по умолчанию uptime (105/106), VDD (123), температура МК (124), рабочие дни (114) и диагностические группы ВЫКЛЮЧЕНЫ. Практическая настройка DTV: 0x0007 (uptime + VDD + темп. МК) или 126 = любое ненулевое. Верхние биты (> 0x03FF) игнорируются, исключения нет. НЕ сохраняется в EEPROM: после каждой перезагрузки восстанавливается 0x0030 — мастер переустанавливает маску по событию REBOOT. | |||||||
| 126 | 0x007E | Holding | 03/06/10 | W | нет | Команда «все системные группы» | Команда «все системные группы»: 0 — выключить все группы, любое ненулевое — включить все (0x03FF). Чтение всегда 0. НЕ сохраняется. | |||||||
| 127 | 0x007F | Input | 04 | R | нет | СНЯТ в 1 | СНЯТ в 1.0.1.52. Прежде — селектор протокола шины (0=Modbus, 1=BACnet); объединён с семейным регистром 122 (см. выше). Не отображён: FC03 читает 0, FC06 — тихий no-op ACK. Зеркало BACnet BV:127 удалено; селектор в BACnet живёт в объекте MSV 19:1 «Bus Protocol» (через AV:122 в 1.0.1.52/53). Отгружался только в 1.0.1.50/51. | |||||||
| 128 | 0x0080 | Holding | 03/06/10 | RW | нет | Modbus slave address, 1 | Modbus slave address, 1..246 (247 зарезервирован под сервис/бутлоадер); кнопкой задаётся только 1..15, адрес >15 индицируется как 15 (все 4 LED). | |||||||
| 129 | 0x0081 | Holding | 03/06/10 | W | нет | Запись ненулевого | Запись ненулевого: перезагрузка в режим загрузчика (магическое число в RAM + reset). | |||||||
| 133 | 0x0085 | Holding | 03/06/10 | RW | нет | Время «бегущей строки» | Время «бегущей строки»; при записи значение делится на 10 (хранится x10 мс в read path). | |||||||
| 134 | 0x0086 | Holding | 03/06/10 | RW | нет | Таймаут неактивности Modbus (сек), 0 = отключено | Таймаут неактивности Modbus (сек), 0 = отключено; до 255. | |||||||
| 533 | 0x0215 | Holding | 03/06/10 | RW | нет | Усреднение по каналам датчиков (9 каналов × 3 регистра) | Адреса 533–559. Усреднение по каналам датчиков (9 каналов × 3 регистра): см. раздел ниже. | |||||||
| 533 | 0x0215 | Input | 04 | R | нет | Усреднение по каналам датчиков (9 каналов × 3 регистра) | Адреса 533–559. Усреднение по каналам датчиков (9 каналов × 3 регистра): см. раздел ниже. | |||||||
| 64256 | 0xFB00 | Input | 04 | R | нет | Диагностика Flash | Диагностика Flash: свободные байты страницы (flash_page_get_free_bytes). | |||||||
| 64384 | 0xFB80 | Input | 04 | R | нет | Фактический размер страницы | Фактический размер страницы. | |||||||
| 64512 | 0xFC00 | Input | 04 | R | нет | Метрика фрагментации Flash | Метрика фрагментации Flash. | |||||||
| 64640 | 0xFC80 | Input | 04 | R | нет | Счётчик стираний страницы (сатурация 0xFFFF) | Счётчик стираний страницы (сатурация 0xFFFF). | |||||||
| 65504 | 0xFFE0 | Input | 04 | R | нет | Ед | Ед. байт. Макс. глубина стека с момента старта; 0 = стек недостоверен / монитор не готов | |||||||
| 65505 | 0xFFE1 | Input | 04 | R | нет | Ед | Ед. байт. Свободная оперативная память (приближённо: текущий MSP − конец кучи `_end`) | |||||||
| 65506 | 0xFFE2 | Input | 04 | R | нет | Ед | Ед. байт. Используемая оперативная память (объём .bss + .data по символам линкера) | |||||||
| 65507 | 0xFFE3 | Input | 04 | R | нет | Ед | Ед. байт. Размер стека (из `svc_stack_monitor` / `_Min_Stack_Size`) | |||||||
| 65508 | 0xFFE4 | Input | 04 | R | нет | Причина последней перезагрузки МК (класс по RCC CSR, приоритет флагов) | Причина последней перезагрузки МК (класс по RCC CSR, приоритет флагов): 1=LPWR, 2=WWDG, 3=IWDG, 4=SFT, 5=POR, 6=PIN, 7=OBL, 8=V18PWR; 0 = ни один из флагов не установлен | |||||||
| 65509 | 0xFFE5 | Input | 04 | R | нет | Счётчик успешных обновлений прошивки | Счётчик успешных обновлений прошивки: младшие 16 бит (u32 во Flash; сверх 65535 — 0xFFFF) | |||||||
| 65510 | 0xFFE6 | Input | 04 | R | нет | Старшее слово u32 счётчика обновлений (как МР-02м, общая таблица shared/modbus) | Старшее слово u32 счётчика обновлений (как МР-02м, общая таблица shared/modbus) | |||||||
| 65511 | 0xFFE7 | Input | 04 | R | нет | Состояние EEPROM во время работы (с 1 | Состояние EEPROM во время работы (с 1.0.1.46; раньше — «не используется», чтение 0): бит 0 — EEPROM отвечает СЕЙЧАС бит 1 — ВОССТАНОВЛЕН на ходу (загрузочный probe провалился, повторный удался) бит 2 — конфигурация загружена из EEPROM при старте; 0 = работа на заводских, запись конфигурации ПОДАВЛЕНА до перезагрузки (защита сохранённых настроек) бит 3 — бюджет повторных probe исчерпан (60 попыток, ~10 мин) в ТЕКУЩЕМ прогоне лестницы (см. примечание ниже) биты 4..7 — резерв, всегда 0 биты 8..15 — число выполненных probe в ТЕКУЩЕМ прогоне лестницы, насыщение на 255 ВНИМАНИЕ (с 1.0.1.47), уточнение смысла битов 3 и 8..15: лестница повторных probe теперь ПЕРЕЗАПУСКАЕМАЯ. Отказ EEPROM на ходу (8 подряд неудачных операций) заводит её заново со свежим бюджетом, поэтому оба поля описывают ТЕКУЩИЙ прогон, а не всю наработку: счётчик в старшем байте после такого отказа НАЧИНАЕТСЯ С НУЛЯ — опрашивающий мастер увидит, что он «пошёл назад». Это НЕ сбой опроса. Так и задумано: без сброса бита 3 новая лестница вообще не запустилась бы, а «исчерпанный бюджет» при активно идущих проверках был бы прямой ложью. До 1.0.1.47 перезапуск был невозможен, и оба поля были монотонны за наработку; биты 0..2 не изменились. Факт перезапуска виден в 65519 (биты 4/5/7). Исправное устройство: 0x0005 (готов + конфиг загружен). ВНИМАНИЕ, единственная неоднозначность: 0 = прошивка старше 1.0.1.46 (не реализовано), НО то же 0 читается у устройства с провалившимся загрузочным probe до ПЕРВОГО повторного (не более 10 с после старта). Различать по 65512 бит 1 — это достоверная запись о старте. | |||||||
| 65468 | 0xFFBC | Input | 04 | R | нет | Кадров с ошибкой CRC (crc_err_cnt) | Кадров с ошибкой CRC (crc_err_cnt) | |||||||
| 65469 | 0xFFBD | Input | 04 | R | нет | Обработок кадра из ветки TIM14/t3 | Обработок кадра из ветки TIM14/t3.5 (src_t14_cnt) | |||||||
| 65470 | 0xFFBE | Input | 04 | R | нет | Обработок кадра из DMA-ветки (src_dma_cnt) | Обработок кадра из DMA-ветки (src_dma_cnt) | |||||||
| 65471 | 0xFFBF | Input | 04 | R | нет | Успешный разбор без старта TX (no_tx_after_ok) | Успешный разбор без старта TX (no_tx_after_ok) | |||||||
| 65472 | 0xFFC0 | Input | 04 | R | нет | Всего RxEvent (rx_evt_cnt) | Всего RxEvent (rx_evt_cnt) | |||||||
| 65473 | 0xFFC1 | Input | 04 | R | нет | Восстановлений зависшего TX (tx_stall_recovered) | Восстановлений зависшего TX (tx_stall_recovered) | |||||||
| 65474 | 0xFFC2 | Input | 04 | R | нет | Срабатываний recovery Modbus (mb_recover_cnt) | Срабатываний recovery Modbus (mb_recover_cnt) | |||||||
| 65475 | 0xFFC3 | Input | 04 | R | нет | Повторов старта TX (tx_start_retried) | Повторов старта TX (tx_start_retried) | |||||||
| 65476 | 0xFFC4 | Input | 04 | R | нет | Диагностика старта TX (tx_start_diag) | Диагностика старта TX (tx_start_diag) | |||||||
| 65477 | 0xFFC5 | Input | 04 | R | нет | Отказов старта TX (tx_start_fail) | Отказов старта TX (tx_start_fail) | |||||||
| 65478 | 0xFFC6 | Input | 04 | R | нет | t14_entry | t14_entry: входов в разбор mb_none по t3.5 | |||||||
| 65479 | 0xFFC7 | Input | 04 | R | нет | t14_size0 | t14_size0: t3.5 с пустым буфером | |||||||
| 65480 | 0xFFC8 | Input | 04 | R | нет | t14_short | t14_short: обрезанный кадр 0<Size<4 (голова разорванного кадра) | |||||||
| 65481 | 0xFFC9 | Input | 04 | R | нет | t14_alien | t14_alien: «чужой» первый байт (хвост разорванного кадра) | |||||||
| 65482 | 0xFFCA | Input | 04 | R | нет | t14_extend | t14_extend: продлений приёма (толеранс к разрыву кадра хостом до ~38 мс) | |||||||
| 65483 | 0xFFCB | Input | 04 | R | нет | rxcplt | rxcplt: отказ TIM_Start | |||||||
| 65484 | 0xFFCC | Input | 04 | R | нет | rxcplt | rxcplt: отказ UART_Receive | |||||||
| 65485 | 0xFFCD | Input | 04 | R | нет | Успешных TxCplt (ответ полностью передан в линию) | Успешных TxCplt (ответ полностью передан в линию) | |||||||
| 65486 | 0xFFCE | Input | 04 | R | нет | rxcplt | rxcplt: переполнение буфера приёма | |||||||
| 65487 | 0xFFCF | Input | 04 | R | нет | Максимальный Size, виденный в t14 mb_none | Максимальный Size, виденный в t14 mb_none; запись (Holding) — сброс всех счётчиков диагностики | |||||||
| 65492 | 0xFFD4 | Input | 04 | R | нет | Таймаутов приёма кадра | Таймаутов приёма кадра | |||||||
| 65493 | 0xFFD5 | Input | 04 | R | нет | Ошибок UART (PE/FE/NE/ORE суммарно) | Ошибок UART (PE/FE/NE/ORE суммарно) | |||||||
| 65494 | 0xFFD6 | Input | 04 | R | нет | Перезапусков приёма из IRQ-ветки | Перезапусков приёма из IRQ-ветки | |||||||
| 65495 | 0xFFD7 | Input | 04 | R | нет | Ед | Ед. мс. Максимальная длительность прохода main loop (с 1.0.2.4 заполняется; ранее всегда 0 — измерение не было подключено) | |||||||
| 65496 | 0xFFD8 | Input | 04 | R | нет | Счётчик «медленных» операций (> порога) | Счётчик «медленных» операций (> порога). В этом изделии не подключён — всегда 0 (id операций в общем заголовке имеют смысл МР-02м) | |||||||
| 65497 | 0xFFD9 | Input | 04 | R | нет | Код последней медленной операции | Код последней медленной операции. Не подключён — всегда 0 | |||||||
| 65498 | 0xFFDA | Input | 04 | R | нет | Счётчик записей EE24 (конфиг/счётчики) | Счётчик записей EE24 (конфиг/счётчики) | |||||||
| 65499 | 0xFFDB | Input | 04 | R | нет | Ед | Ед. мс. Длительность последней записи EE24 | |||||||
| 65500 | 0xFFDC | Input | 04 | R | нет | Ед | Ед. мс. Максимальная длительность записи EE24 | |||||||
| 65501 | 0xFFDD | Input | 04 | R | нет | Ед | Ед. мс. Максимальная пауза между опросами | |||||||
| 65502 | 0xFFDE | Input | 04 | R | нет | Счётчик fast_mb recovery | Счётчик fast_mb recovery | |||||||
| 65503 | 0xFFDF | Input | 04 | R | нет | Младший байт | Младший байт: класс причины сброса; старший: флаги ошибок UART | |||||||
| 65512 | 0xFFE8 | Input | 04 | R | нет | POST-битмаска самотеста | POST-битмаска самотеста: биты 0..5 = пройден, 8..13 = применим, 15 = снятие завершено; FAILED = применим и не пройден ((reg>>8) & ~reg & 0x3F). Биты (i/8+i): 0 APP_CRC (CRC образа против эталона mk/patch_app_crc.py; сырой ST-Link ELF = «не применим»), 1 EEPROM (CAT24 ответила при старте), 2 I2C_EEPROM (init шины), 3 I2C_SENSOR (init шины), 4 ADC (polled-конверсия + правдоподобие VREFINT), 5 RAM_MARCH (только сборка FACTORY_TEST) Бит 4 (ADC) — ЕДИНСТВЕННЫЙ, который может измениться ПОСЛЕ старта (с 1.0.1.46): когда лестница перезапуска АЦП сдаётся (3 неудачных ремонта подряд), бит снимается и остаётся снятым до перезагрузки. Значение: прибор «слеп» — рег. 1..49 замерли на правдоподобных старых значениях, а программный brown-out монитор перестал получать выборки и (через 5 с) ЗАПРЕЩАЕТ запись EEPROM/Flash: конфигурация перестаёт сохраняться. Это намеренно (отказ от записи безопаснее записи вслепую), а не отдельная неисправность EEPROM. Индикация на плате — мигание красного светодиода (модульная ошибка). | |||||||
| 65513 | 0xFFE9 | Input | 04 | R | нет | Ед | Ед. байт. Минимальный наблюдённый запас стека (watermark stack_guard); 0 = скан ещё не выполнялся | |||||||
| 65514 | 0xFFEA | Input | 04 | R | да | Ед | Ед. шт. Событий Fast Modbus, отклонённых потолком частоты (с 1.0.1.42). Насыщается на 65535 (не переполняется в 0). Ненулевое значение = шторм БЫЛ и был ограничен: потолок сработал, события отброшены. При штатной работе ноль. Сброс — запись любого значения в Holding 65487 (общий сброс диагностики). Диагностика: растущий счётчик указывает на неисправный датчик или слишком низкий порог 340..342. | |||||||
| 65515 | 0xFFEB | Input | 04 | R | нет | Ед | Ед. шт. Нарушений заполнения буфера в read_inputs (с 1.0.1.45, пришёл с ре-пином shared/modbus 0efa169): обработчик вернул «успех», не заполнив буфер ответа. Насыщается, не переполняется. При штатной работе ноль; ненулевое = дефект в product-хуке чтения входных регистров. ВНИМАНИЕ: этот счётчик НАМЕРЕННО НЕ сбрасывается записью в Holding 65487 — свидетельство дефекта должно пережить общую очистку диагностики, пока дыра не закрыта. | |||||||
| 65516 | 0xFFEC | Input | 04 | R | нет | Присутствие/живость датчиков (с 1 | Присутствие/живость датчиков (с 1.0.1.51). ТОЛЬКО ЧТЕНИЕ; запись на этот адрес не принимается (обрабатывается как неотображённый адрес). Биты 0..4 — снимок СТАРТА: I2C-датчик ответил на свой init при включении (фиксируются один раз, стабильны до перезагрузки): бит 0 MCP9808 бит 1 HDC1080 бит 2 BME280 бит 3 BME680 бит 4 ZMOD4410 биты 5..7 — резерв, всегда 0 — с 1.0.2.4 бит 4 честный: ставится только когда ZMOD4410 ответил на чтение идентификатора (PID 0x2310); ранее ставился безусловно Биты 8..9 — ЖИВОСТЬ на момент чтения (могут меняться при опросе): бит 8 DS18B20 валиден сейчас (сторожевой вердикт ds18b20_valid) бит 9 связь с LD2412 сейчас (ld2412_link_ok_now) биты 10..14 — резерв, всегда 0 бит 15 — снимок старта ЗАВЕРШЁН (ставится после init_sensor_module_stage2) ПОЛИТИКА: I2C-датчик, отсутствующий при старте, ОТКЛЮЧЁН до перезагрузки (горячее подключение не поддерживается): его регистры публикуют 0, его алгоритмы (Kalman/IAQ) не загружают МК, опрос его шины не ведётся. Полностью укомплектованная исправная плата: 0x831F. 0 = прошивка старше 1.0.1.51 ИЛИ снимок ещё не начат (различать по биту 15 и версии 320..323). Все I2C-биты (0..4) = 0 при бите 15 = 1 — висящая шина I2C (не распаяны подтяжки) — производственный признак, а не пять одновременных отказов. | |||||||
| 65519 | 0xFFEF | Input | 04 | R | нет | Здоровье внешней EEPROM (с 1 | Здоровье внешней EEPROM (с 1.0.1.47). ТОЛЬКО ЧТЕНИЕ; запись на этот адрес не принимается (обрабатывается как неотображённый адрес). Раскладка битов — ОБЩЕСЕМЕЙНАЯ, побитово совпадает с МР-02м 65519 (с 1.0.11.3), поэтому один инструмент читает оба изделия: бит 0 DEGRADED — работающая конфигурация в ОЗУ НЕ подтверждена EEPROM бит 1 BOOT_NOACK — микросхема не ответила при старте (EE24_Init false) бит 2 BOOT_READ_FAIL — ответила, но образ конфигурации не прочитался бит 3 BOOT_PARSE_FAIL— образ прочитан, содержимое отвергнуто (CRC конфига) бит 4 RUNTIME_FAIL — залипающий: была исправна при старте, отказала позже бит 5 SEEN_FAIL — залипающий: любой отказ с момента старта бит 6 MIRROR_APPLIED — ВСЕГДА 0 на этом изделии: зеркала конфигурации во Flash здесь нет (у МР-02м бит тоже пока 0) бит 7 RECOVERED — залипающий: связь вернулась после ЛЮБОГО отказа — и стартового, и возникшего на ходу. НЕ путать с 65511 бит 1: тот УЖЕ поставлялся и означает строго «провалился СТАРТОВЫЙ probe, повторный удался»; отказ на ходу его не поднимает биты 8..11 — класс ПОСЛЕДНЕЙ НЕУДАВШЕЙСЯ операции: 0 нет, 1 стартовый probe, 2 чтение конфигурации, 3 запись головы конфигурации, 4 — грамматика семейства, на этом изделии не встречается, 5 запись выше головы конфигурации (постановка смены серийного номера, рег. 1005), 6 повторный probe, 7 (с 1.0.2.3) ДОЛГОВРЕМЕННАЯ ЗАПИСЬ (страница EEPROM либо стирание/программирование Flash) была затребована ИЗ ПРЕРЫВАНИЯ и ОТКЛОНЕНА. Микросхема ИСПРАВНА, дефект — в прошивке, которая так записала. Что делать: искать вызов из контекста прерывания, а НЕ менять EEPROM. Класс намеренно публикуется БЕЗ флагов отказа и БЕЗ счётчика (см. 0x0700 ниже); настоящий отказ (классы 1..6) всегда перебивает его биты 12..15 — подряд неудавшихся операций, насыщение на 15 Правило чтения: бит 0 — «сейчас», бит 5 — «когда-либо». Бит 0 сам по себе не поднимается, поэтому «бит 5 есть, бита 0 нет» = эпизод был, сейчас всё в норме. Класс операции (8..11) — «что пробовали последним», а НЕ диагноз исходного отказа: он меняется по ходу деградации при неизменном младшем байте. Значения ниже ПОЛУЧЕНЫ КОДОМ (`test_eeprom_recovery --dump-examples`), а не выведены вручную — нибблы класса и счётчика делают ручную таблицу ненадёжной: 0x0000 — исправно, ничего никогда не отказывало 0x0009 — образ прочитан, содержимое отвергнуто. Это же читает чистая с завода микросхема (голова стёрта, CRC не сходится всегда) — НЕ неисправность; после первой сохранённой настройки и перезагрузки станет 0x0000 0x1225 — ответила, но образ не прочитался (одна неудачная попытка чтения) 0xF123 → 0xF623 — НЕ ОТВЕТИЛА ПРИ СТАРТЕ. Младший байт зафиксирован на 0x23, счётчик насыщен; меняется только нибл класса: 1 (стартовый probe) — мгновение при старте, затем 6 (повторный probe) на всё время, пока микросхема мертва. Опрашивающий мастер практически всегда видит 0xF623; это НЕ другая неисправность 0x06A3 — …и вернулась: обслуживание EEPROM восстановлено, но конфигурация остаётся заводской до перезагрузки, поэтому бит 0 НЕ снимается (у МР-02м в этой же ситуации 0x01A2 — там бит 0 снимается; расхождение намеренное, см. docs/contracts/eeprom-v2-layout.md) 0x0320 — «было, но сейчас всё в норме»: несколько записей не прошли, затем одна прошла. Единственный поднятый бит младшего байта — залипающий 5 0x8331 — была исправна при старте и отказала под нагрузкой (8 подряд неудачных записей). Настройки, изменённые после этого, В EEPROM НЕ ПОПАЛИ 0x03B0 — …и вернулась: бит 0 снят, класс операции сохранён как история 0x0700 — (с 1.0.2.3) микросхема ИСПРАВНА; долговременная запись отклонена из прерывания — ДЕФЕКТ ПРОШИВКИ. Ни один флаг не поднят, счётчик нулевой — и это однозначно: классы 1..6 физически не могут появиться без залипающего бита 5. Не заменять EEPROM; искать вызов из ISR СЕМЕЙСТВО: класс 7 первым выделил CE-02m-3 1.0.7.5 (MR-02m#121); здесь принят тот же номер, формулировка расширена на Flash. ВНИМАНИЕ при сравнении изделий: НЕ сопоставлять стартовые биты 1..3 с CE — у него они не оцениваются. Условия применимости — один дом: docs/contracts/eeprom-v2-layout.md § Op class 7. ВНИМАНИЕ: 0x0000 читает и прошивка старше 1.0.1.47 (адрес не обслуживался). Различать по версии в 320..323 — из самого 65519 это неразличимо, и «бит достоверности» здесь не вводится намеренно: он сломал бы общесемейную раскладку. 65511 (состояние восстановления EEPROM) НЕ отменяется, и его биты 0..2 сохраняют смысл, выпущенный в 1.0.1.46, — в частности бит 1 остаётся строго СТАРТОВЫМ. Но поля лестницы (бит 3 и биты 8..15) с 1.0.1.47 относятся к ТЕКУЩЕМУ прогону, который отказ на ходу перезапускает: см. уточнение в описании 65511 выше. И 65511 НЕ является общесемейным: у МР-02м по этому адресу лежит код последней ошибки SPI. Для сравнения изделий семейства пригоден только 65519. | |||||||
| 200 | 0x00C8 | Input | 04 | R | нет | Модель устройства ASCII | Адреса 200–219. Модель устройства ASCII: "SENSOR" по одному символу на регистр, остальное 0. | |||||||
| 270 | 0x010E | Input | 04 | R | нет | Fast Modbus serial address, u32 (младший, старший) | Адреса 270–271. Fast Modbus serial address, u32 (младший, старший). | |||||||
| 290 | 0x0122 | Input | 04 | R | нет | Сигнатура 12 байт (EEPROM 240 | Адреса 290–301. Сигнатура 12 байт (EEPROM 240..251 или "Sens." по умолчанию), байт в младшем байте регистра. | |||||||
| 320 | 0x0140 | Input | 04 | R | нет | Версия прошивки MAJOR | Версия прошивки MAJOR. | |||||||
| 321 | 0x0141 | Input | 04 | R | нет | MINOR | MINOR. | |||||||
| 322 | 0x0142 | Input | 04 | R | нет | PATCH | PATCH. | |||||||
| 323 | 0x0143 | Input | 04 | R | нет | SUFFIX (знаковое значение как uint16) | SUFFIX (знаковое значение как uint16). | |||||||
| 324 | 0x0144 | Input | 04 | R | нет | Упакованная версия u32 (часть 1), см | Упакованная версия u32 (часть 1), см. код. | |||||||
| 325 | 0x0145 | Input | 04 | R | нет | Упакованная версия u32 (часть 2) | Упакованная версия u32 (часть 2). | |||||||
| 330 | 0x014A | Input | 04 | R | нет | Строка версии загрузчика, 8 символов ASCII (младший байт) | Адреса 330–337. Строка версии загрузчика, 8 символов ASCII (младший байт). | |||||||
| 340 | 0x0154 | Holding | 03/06/10 | RW | да | Порог событий Fast Modbus для сенсорных регистров 1 | Порог событий Fast Modbus для сенсорных регистров 1..28 (одно значение на все 28), raw-единицы (температуры ×0.1 °C, влажность ×0.1 %RH). Заводское 10. Диапазон записи 5..65534 (С 1.0.1.42; ранее 1..65534); запись 1..4, 0 или 0xFFFF — исключение 3. Обоснование минимума: ниже 5 raw единиц (0.5 °C / 0.5 %RH) порог оказывается ниже собственного шума датчика, событие генерируется на шум и заливает общую шину RS-485 (0 = событие на каждое изменение = флуд; 0xFFFF — сентинел «не задано» в EEPROM). 5 по-прежнему ВДВОЕ чувствительнее заводского значения 10. Значение 1..4, записанное прошивкой 1.0.1.38..41 и лежащее в EEPROM, при загрузке поднимается до 5 (не до заводского 10 — намерение «максимальная чувствительность» сохраняется); обратной записи в EEPROM при этом не выполняется. EEPROM (коалесценция ~5 с), применяется сразу без перезагрузки. Побочный эффект записи: перерегистрация трекинга 1..28 — первое изменение каждого регистра после записи засеивает трекинг молча (одно возможно пропущенное событие на регистр). Введён 1.0.1.38; диапазон сужен в 1.0.1.42. Рег. 19 с 1.0.2.4 в мкг/м³ — тот же порог 10 там означает 0.010 мг/м³ (в 10 раз чувствительнее прежнего); при болтливых событиях TVOC поднимите порог сознательно — он общий для 1..28. | |||||||
| 341 | 0x0155 | Holding | 03/06/10 | RW | да | Порог события VDD (рег | Порог события VDD (рег. 123), единицы 0.01 В. Заводское 10 (= 0.1 В). Диапазон записи 5..65534 (минимум 0.05 В — ниже лежит шум АЦП/VREFINT). Прочие правила записи/персиста и миграция значения 1..4 — как рег. 340. Введён 1.0.1.38; диапазон сужен в 1.0.1.42. | |||||||
| 342 | 0x0156 | Holding | 03/06/10 | RW | да | Порог события температуры МК (рег | Порог события температуры МК (рег. 124), единицы 0.1 °C. Заводское 30 (= 3 °C). Диапазон записи 5..65534 (минимум 0.5 °C — встроенный датчик F030 имеет ~1 °C шума). Прочие правила записи/персиста и миграция значения 1..4 — как рег. 340. Введён 1.0.1.38; диапазон сужен в 1.0.1.42. | |||||||
| 343 | 0x0157 | Holding | 03/06/10 | RW | да | Мин | Мин. интервал между событиями uptime (рег. 105), секунды (период heartbeat). Заводское 5. Диапазон записи 1..65534 — НЕ СУЖЕН в 1.0.1.42: это ПЕРИОД, а не дельта; heartbeat раз в 1 с легитимен и сам по себе ограничен одним событием в секунду. Прочие правила — как рег. 340. Введён 1.0.1.38. | |||||||
| 344 | 0x0158 | Input | 04 | R | нет | ЗАРЕЗЕРВИРОВАН под порог AO-класса (подключение MR-02m) | ЗАРЕЗЕРВИРОВАН под порог AO-класса (подключение MR-02m). У DTV чтение 0, запись — как прочие неизвестные адреса. | |||||||
| 345 | 0x0159 | Input | 04 | R | нет | CO2 | CO2: предупреждение активно (0/1). FC02/FC01 — тот же бит. | |||||||
| 346 | 0x015A | Input | 04 | R | нет | CO2 | CO2: авария активна (0/1). | |||||||
| 347 | 0x015B | Input | 04 | R | нет | VOC | VOC: предупреждение активно (0/1). | |||||||
| 348 | 0x015C | Input | 04 | R | нет | VOC | VOC: авария активна (0/1). | |||||||
| 349 | 0x015D | Input | 04 | R | нет | Сводка одним чтением (битовая маска) | Сводка одним чтением (битовая маска): b0 CO2 предупреждение · b1 CO2 авария b2 VOC предупреждение · b3 VOC авария b4 сейчас «ночь» · b5 звук тревоги приглушён сейчас (b5 — состояние ПОЛИТИКИ приглушения, а не «сейчас звучит»: он поднят, когда звук тревоги был бы подавлен — ночью при b4 рег.365 или при «только свет». Читается и без активной тревоги, поэтому ночное приглушение проверяется по шине, без ушей.) b6 данные CO2 валидны · b7 данные VOC валидны b8–b9 фактический источник CO2: 0 = нет данных, 1 = ZMOD4410, 2 = BME680 В FC01/FC02 адрес 349 = «есть ЛЮБАЯ активная тревога». | |||||||
| 350 | 0x015E | Holding | 03/06/10 | RW | нет | Включение каналов (битовая маска, заводское 0 = ВСЁ ВЫКЛЮЧЕНО) | Включение каналов (битовая маска, заводское 0 = ВСЁ ВЫКЛЮЧЕНО): b0 CO2 предупр. · b1 CO2 авария b2 VOC предупр. · b3 VOC авария Выключенный канал НЕ даёт ни индикации, ни бита статуса. Диапазон 0..15. Заводское 0 — обновление прошивки не включает тревоги само (интегратор включает сознательно). | |||||||
| 351 | 0x015F | Holding | 03/06/10 | RW | нет | Уставка CO2 «предупреждение», ppm | Уставка CO2 «предупреждение», ppm. Заводское 1000, диапазон 400..5000. | |||||||
| 352 | 0x0160 | Holding | 03/06/10 | RW | нет | Уставка CO2 «авария», ppm | Уставка CO2 «авария», ppm. Заводское 1400, диапазон 400..5000. | |||||||
| 353 | 0x0161 | Holding | 03/06/10 | RW | нет | Уставка VOC «предупреждение», мг/м³ ×100 | Уставка VOC «предупреждение», мг/м³ ×100. Заводское 60, диапазон 1..10000. Единица ОТЛИЧАЕТСЯ от рег. 19 (мкг/м³ с 1.0.2.4) — намеренно, без миграции; 60 = 0.60 мг/м³ = 600 в рег. 19. | |||||||
| 354 | 0x0162 | Holding | 03/06/10 | RW | нет | Уставка VOC «авария», мг/м³ ×100 | Уставка VOC «авария», мг/м³ ×100. Заводское 100, диапазон 1..10000. Единица ОТЛИЧАЕТСЯ от рег. 19 (мкг/м³ с 1.0.2.4) — намеренно, без миграции; 100 = 1.00 мг/м³ = 1000 в рег. 19. | |||||||
| 355 | 0x0163 | Input | 04 | R | нет | — ЗАРЕЗЕРВИРОВАНЫ (под возможные отдельные ночные уставки) | Адреса 355–358. — ЗАРЕЗЕРВИРОВАНЫ (под возможные отдельные ночные уставки). Чтение 0; запись 0 принимается как no-op (чтобы клиент мог записать обратно блок, который только что прочитал), запись ненулевого — исключение 3. | |||||||
| 359 | 0x0167 | Holding | 03/06/10 | RW | нет | Гистерезис возврата по CO2, ppm | Гистерезис возврата по CO2, ppm. Заводское 50, диапазон 0..1000. | |||||||
| 360 | 0x0168 | Holding | 03/06/10 | RW | нет | Гистерезис возврата по VOC, мг/м³ ×100 | Гистерезис возврата по VOC, мг/м³ ×100. Заводское 5, диапазон 0..1000. Единица ОТЛИЧАЕТСЯ от рег. 19 (мкг/м³ с 1.0.2.4) — намеренно, без миграции; 5 = 0.05 мг/м³ = 50 в рег. 19. | |||||||
| 361 | 0x0169 | Holding | 03/06/10 | RW | нет | Порог «ночь» | Порог «ночь»: ночь пока рег. 25 (освещённость) ≤ этого значения. Заводское 10 %, диапазон 0..100. | |||||||
| 362 | 0x016A | Holding | 03/06/10 | RW | нет | Дельта возврата в «день» | Дельта возврата в «день»: день при рег. 25 ≥ (рег.361 + рег.362). Заводское 5 %, диапазон 0..100. | |||||||
| 363 | 0x016B | Holding | 03/06/10 | RW | нет | Задержка подтверждения включения, с | Задержка подтверждения включения, с. Заводское 30, диапазон 0..3600. | |||||||
| 364 | 0x016C | Holding | 03/06/10 | RW | нет | Задержка подтверждения выключения, с | Задержка подтверждения выключения, с. Заводское 60, диапазон 0..3600. | |||||||
| 365 | 0x016D | Holding | 03/06/10 | RW | нет | Опции (битовая маска), заводское 0x0010 | Опции (битовая маска), заводское 0x0010: b0–b1 источник CO2: 0 = авто (ZMOD4410, при его отсутствии BME680), 1 = только ZMOD4410, 2 = только BME680, 3 — недопустимо (исключение 3) b2–b3 поведение при мёртвой связи LD2412: 0 = считать день (заводское; звук разрешён), 1 = считать ночь, 2 = держать последнее, 3 — недопустимо (исключение 3) b4 приглушать звук тревоги ночью (заводское 1) b5 «только свет» — звук тревоги запрещён всегда Биты b6–b15 должны быть 0, иначе исключение 3. | |||||||
| 366 | 0x016E | Input | 04 | R | нет | — ЗАРЕЗЕРВИРОВАНЫ | Адреса 366–369. — ЗАРЕЗЕРВИРОВАНЫ. Правила те же, что у 355–358. | |||||||
| 1005 | 0x03ED | Holding | 03/06/10 | W | нет | Серийный номер, 2 регистра подряд | Серийный номер, 2 регистра подряд: 1005 = младшее слово, 1006 = старшее слово (форма 0x0E0Axxxx). Broadcast — игнорируется. | |||||||
| 533 | 0x0215 | Holding | 03/06/10 | R | нет | DS18B20 / рег | DS18B20 / рег.1: только чтение, возвращает 1 | |||||||
| 534 | 0x0216 | Holding | 03/06/10 | RW | нет | DS18B20 / рег | DS18B20 / рег.1: глубина усреднения | |||||||
| 535 | 0x0217 | Holding | 03/06/10 | R | нет | DS18B20 / рег | DS18B20 / рег.1: только чтение, возвращает 0 | |||||||
| 536 | 0x0218 | Holding | 03/06/10 | R | нет | MCP9808 / рег | MCP9808 / рег.2: только чтение, возвращает 1 | |||||||
| 537 | 0x0219 | Holding | 03/06/10 | RW | нет | MCP9808 / рег | MCP9808 / рег.2: глубина усреднения | |||||||
| 538 | 0x021A | Holding | 03/06/10 | R | нет | MCP9808 / рег | MCP9808 / рег.2: только чтение, возвращает 0 | |||||||
| 539 | 0x021B | Holding | 03/06/10 | R | нет | HDC1080 T / рег | HDC1080 T / рег.3: только чтение, возвращает 1 | |||||||
| 540 | 0x021C | Holding | 03/06/10 | RW | нет | HDC1080 T / рег | HDC1080 T / рег.3: глубина усреднения | |||||||
| 541 | 0x021D | Holding | 03/06/10 | R | нет | HDC1080 T / рег | HDC1080 T / рег.3: только чтение, возвращает 0 | |||||||
| 542 | 0x021E | Holding | 03/06/10 | R | нет | BME280 T / рег | BME280 T / рег.4: только чтение, возвращает 1 | |||||||
| 543 | 0x021F | Holding | 03/06/10 | RW | нет | BME280 T / рег | BME280 T / рег.4: глубина усреднения | |||||||
| 544 | 0x0220 | Holding | 03/06/10 | R | нет | BME280 T / рег | BME280 T / рег.4: только чтение, возвращает 0 | |||||||
| 545 | 0x0221 | Holding | 03/06/10 | R | нет | BME680 T / рег | BME680 T / рег.5: только чтение, возвращает 1 | |||||||
| 546 | 0x0222 | Holding | 03/06/10 | RW | нет | BME680 T / рег | BME680 T / рег.5: глубина усреднения | |||||||
| 547 | 0x0223 | Holding | 03/06/10 | R | нет | BME680 T / рег | BME680 T / рег.5: только чтение, возвращает 0 | |||||||
| 548 | 0x0224 | Holding | 03/06/10 | R | нет | NTC/PT / рег | NTC/PT / рег.6 in: только чтение, возвращает 1 | |||||||
| 549 | 0x0225 | Holding | 03/06/10 | RW | нет | NTC/PT / рег | NTC/PT / рег.6 in: глубина усреднения | |||||||
| 550 | 0x0226 | Holding | 03/06/10 | R | нет | NTC/PT / рег | NTC/PT / рег.6 in: только чтение, возвращает 0 | |||||||
| 551 | 0x0227 | Holding | 03/06/10 | R | нет | HDC1080 RH / рег | HDC1080 RH / рег.7: только чтение, возвращает 1 | |||||||
| 552 | 0x0228 | Holding | 03/06/10 | RW | нет | HDC1080 RH / рег | HDC1080 RH / рег.7: глубина усреднения | |||||||
| 553 | 0x0229 | Holding | 03/06/10 | R | нет | HDC1080 RH / рег | HDC1080 RH / рег.7: только чтение, возвращает 0 | |||||||
| 554 | 0x022A | Holding | 03/06/10 | R | нет | BME280 RH / рег | BME280 RH / рег.8: только чтение, возвращает 1 | |||||||
| 555 | 0x022B | Holding | 03/06/10 | RW | нет | BME280 RH / рег | BME280 RH / рег.8: глубина усреднения | |||||||
| 556 | 0x022C | Holding | 03/06/10 | R | нет | BME280 RH / рег | BME280 RH / рег.8: только чтение, возвращает 0 | |||||||
| 557 | 0x022D | Holding | 03/06/10 | R | нет | BME680 RH / рег | BME680 RH / рег.9: только чтение, возвращает 1 | |||||||
| 558 | 0x022E | Holding | 03/06/10 | RW | нет | BME680 RH / рег | BME680 RH / рег.9: глубина усреднения | |||||||
| 559 | 0x022F | Holding | 03/06/10 | R | нет | BME680 RH / рег | BME680 RH / рег.9: только чтение, возвращает 0 | |||||||
| 0 | 0x0000 | Coil | 01/05/0F | RW | нет | не используется для выходов (как в конфигурации полного контроллера) | не используется для выходов (как в конфигурации полного контроллера). | |||||||
| 1 | 0x0001 | Coil | 01/05/0F | RW | нет | дублирует holding 1 (buzzer), set_all_output() | дублирует holding 1 (buzzer), set_all_output(). | |||||||
| 2 | 0x0002 | Coil | 01/05/0F | RW | нет | дублирует holding 2 (свет / все LED), all_set_light / all_clear_light | дублирует holding 2 (свет / все LED), all_set_light / all_clear_light. | |||||||
| 6 | 0x0006 | Coil | 01/05/0F | RW | нет | булев выбор семейства внешнего датчика (легаси-доступ к holding 6) | булев выбор семейства внешнего датчика (легаси-доступ к holding 6): запись 0 → код 1 (NTC10K B3950), запись 1 → код 5 (Pt1000 a385); чтение = 1 если holding 6 из группы Pt1000 (коды 5..7), иначе 0 (NTC/Off). Полный набор вариантов (0..7) задаётся только через holding reg 6. | |||||||
| 40 | 0x0028 | Coil | 01/05/0F | RW | нет | синхронно с регистрами 40 | Адреса 40–49. синхронно с регистрами 40..49 — включение фильтра Калмана по каналам (EEPROM). | |||||||
| 1 | 0x0001 | Discrete | 02 | R | нет | отражают server_coils (и coil 6 — как coil read) | Адреса 1–6. отражают server_coils (и coil 6 — как coil read); остальное — 0. |
Условные обозначения
- R чтение
- RW чтение и запись
- W запись
- ⚡ событие Fast Modbus
- EEPROM значение хранится в EEPROM
- RAM значение хранится в RAM