5.2 Протокол Modbus
Communication protocols
Modbus protocol
Общая информация
Плата BMS Main 2.x реализует протокол Modbus для настройки и чтения состояния АКБ и BMS. BMS является Modbus-сервером и отвечает на команды Modbus-клиента.
Взаимодействие с устройством осуществляется через шину RS-485 (Modbus RTU) или сеть Ethernet (Modbus TCP).
Параметры шины RS-485:
- частота, бит/с — 600, 1200, 2400, 4800, 9600 (по умолчанию), 19200, 38400, 57600, 115200;
- длина слова, бит — 8;
- четность — нет;
- адрес устройства (по умолчанию) — 32.
Параметры Ethernet:
- порт — 502.
Ниже приводятся описание Input и Holding регситров. В колонке «Тип параметра»:
- U8 – беззнаковое 8-разрядное число;
- U16 – беззнаковое 16-разрядное число;
- S16 – знаковое 16-разрядное число;
- U32 – беззнаковое 32-разрядное число.
- REAL32 — число с плавающей точкой одинарной точности (стандарт IEEE 754);
- U8[x] — массив беззнаковых 8-разрядных чисел длиной x;
- U16[x] — массив беззнаковых 16-разрядных чисел длиной x;
- REAL32[x] — массив чисел с плавающей точкой одинарной точности длиной x.
Порядок байт в словах – от младшего к старшему (little endian).
Регистры ввода
| Регистр | Количество регистров | Содержимое | Тип параметра |
| 0x0000 | 1 | Аппаратная версия: byte 0 — минорная версия; byte 1 — мажорная версия. | U8[2] |
| 0x0001-0x0002 | 2 | Версия ВПО: byte 0 — версия патча; byte 1 — минорная версия; byte 2 — мажорная версия; byte 3 — не используется (установлен в 0). | U8[4] |
| 0x0003-0x0004 | 2 | Версия загрузчика: byte 0 — версия патча; byte 1 — минорная версия; byte 2 — мажорная версия; byte 3 — не используется (установлен в 0). | U8[4] |
| 0x1000-0x1003 | 3 | Текущее время на устройстве: byte 0 — день (Двоично-десятичный код); byte 1 — месяц (Двоично-десятичный код); byte 2 — год (Двоично-десятичный код); byte 3 — час (Двоично-десятичный код); byte 4 — минуты (Двоично-десятичный код); byte 5 — секунды (Двоично-десятичный код). | U8[6] |
| 0x2000 | 1 | Дискретные входы 1 (битовое поле): бит 0 – сигнал «Открыта АКБ»; бит 1 – сигнал «Подключено ЗУ»; бит 2 – сигнал «Запрос на отключение питания»; бит 3 – сигнал «Запрет заряда»; бит 4 – сигнал «Запрет разряда»; бит 5 – сигнал «Обратная связь контактора заряда»; бит 6 – сигнал «Обратная связь контактора разряда»; бит 7 – сигнал «Статус контроля изоляции». бит 8 – сигнал «Запрос на заряд»; бит 9 – сигнал «Запрос на предзаряд»; бит 10 – сигнал «Запрос на разряд»; бит 11 – сигнал «Обратная связь контактора предзаряда»; бит 12 – сигнал «Обратная связь комбинированного контактора заряда/разряда»; бит 13 – сигнал «Обратная связь главного контактора»; бит 14 – сигнал целостности высоковольной цепи; бит 15 – сигнал состояния предохранителя 1. | U16 |
| 0x2001-0x2002 | 2 | Ток через АКБ, имеренный датчиком холла, А | REAL32 |
| 0x2003-0x2004 | 2 | Внешняя температура, °C | REAL32 |
| 0x2005-0x2006 | 2 | Влажность, RH% | REAL32 |
| 0x2007-0x2008 | 2 | Регистр ошибок 1 (битовое поле): бит 0 – ошибка «Превышение тока»; бит 1 – ошибка «Низкое напряжение»; бит 2 – ошибка «Высокое напряжение»; бит 3 – ошибка «Низкая температура (разряд)»; бит 4 – ошибка «Высокая температура (разряд)»; бит 5 – ошибка «Открыта крышка АКБ»; бит 6 – ошибка «Повышенная влажность»; бит 7 – ошибка «Вода»; бит 8 – ошибка «Перегрев Logic»; бит 9 – ошибка «Потеря связи c Logic»; бит 10 – критическая ошибка; бит 11 – ошибка Crown; бит 12 – ошибка «Несоответствие кол-ва ячеек»; бит 13 – ошибка «Потеря связи с HYG»; бит 14 – флаг о необходимости квитировать записи в журнале ошибок; бит 15 – ошибка «Потеря связи с Combilift»; бит 16 – ошибка «Короткое замыкание»; бит 17 – ошибка «Перегрев контактора»; бит 18 – ошибка «Несоответствие кол-ва Logic»; бит 19 – ошибка АЦП; бит 20 – ошибка в цепи подключения датчика тока (обрыв или короткое замыкание); бит 21 – большая частота переключений контактора заряда; бит 22 – большая частота переключений контактора разряда; бит 23 – ошибка «Потеря связи с BMS Current Sensor»; бит 24 – внутренняя ошибка BMS Current Sensor; бит 25 – ошибка контрольной суммы настроек платы; бит 26 – флаг перезапуска платы по требованию WDT; бит 27 – ошибка «Нет датчиков температуры»; бит 28 – ошибка «КЗ датчика температуры»; бит 29 – ошибка «Потеря связи со Spirit»; биты 30-31 – не используются. | U32 |
| 0x2009-0x200A | 2 | Флаги состояния (битовое поле): бит 0 – сигнал «SOC ниже заданного уровня»; бит 1 – сигнал «Ток заряда выше заданного уровня»; бит 2 – состояние контактора заряда (0 – разомкнуто, 1 – замкнуто); бит 3 – сигнал «Разрешение ЗУ»; бит 4 – сигнал «Заряд АКБ» (детектируется ток заряда); бит 5 – состояние контактора разряда (0 – разомкнуто, 1 – замкнуто); бит 6 – сигнал «Разряд АКБ» (детектируется ток разряда); бит 7 – сигнал «Повышенное напряжение» (EВ); бит 8 – сигнал «Нагрев АКБ»; бит 9 – сигнал «Охлаждение АКБ»; бит 10 – сигнал на отключение контактора разряда от погрузчика HYG; бит 11 – сигнал об инициализации платы (во время инициализации калибруется датчик тока и сканируются платы BMS Logic); бит 12 – состояние контактора предзаряда; бит 13 – сигнал на отключение контактора разряда от погрузчика Combilift; бит 14 – сигнал о запущенном процессе анализа ячеек (Cell analysis); бит 15 – сигнал на балансировку серии батареи №1; бит 16 – сигнал на балансировку серии батареи №2; бит 17 – состояние дополнительного (AUX) контактора разряда (0 – разомкнуто, 1 – замкнуто); бит 18 – подтверждение отключения питания; бит 19 – сигнал EWS от погрузчика Crown; бит 20 – состояние главного контактора (0 – разомкнут, 1 - замкнут); бит 21 – сигнал служебного сброса системы; бит 22 – состояние комбинированного контактора заряда/разряда (0 – разомкнуто, 1 – замкнуто); бит 23 – сигнал «Готовность заряжаться»; бит 24 – сигнал «Готовность разряжаться»; бит 25 – сигнал включения платы "Power up"; биты 26-31 – не используются. | U32 |
| 0x200B | 1 | Состояние дискретных выходов (битовое поле): бит 0 — состояние выхода №1; бит 1 — состояние выхода №2; бит 2 — состояние выхода №3; бит 3 — состояние выхода №4; биты 4-15 — не используются. | U16 |
| 0x200C | 1 | Состояние реле (битовое поле): бит 0 — состояние реле №1; бит 1 — состояние реле №2; бит 2 — состояние реле №3; бит 3 — состояние реле №4; биты 4-15 — не используются. | U16 |
| 0x200E-0x200F | 2 | Регистр ошибок 2 (битовое поле): бит 0 – ошибка «Низкая температура (заряд)»; бит 1 – ошибка «Высокая температура (заряд)»; бит 2 – ошибка монтирования SD-карты; бит 3 – ошибка записи/чтения SD-карты; бит 4 – ошибка «Недопустимый заряд» (заряд батареи через контактор разряда); бит 5 – ошибка «Залипание контактора»; бит 6 – «Ошибка обр. связи контактора заряда»; бит 7 – «Ошибка обр. связи контактора разряда»; бит 8 – ошибка «Нарушение изоляции»; бит 9 – «Ошибка обр. связи контактора предзаряда»; бит 10 – «Ошибка обр. связи комбинированного контактора заряда/разряда»; бит 11 – «Ошибка обр. связи главного контактора»; бит 12 – не используются (set to 0); бит 13 – общая ошибка; биты 14-31 — не используются. | U32 |
| 0x2010 | 1 | Адрес устройства BMS Logic, чьи параметры содержатся в регистрах 0x2011-0x20C9 | U16 |
| 0x2011 | 1 | Состояние BMS Logic (битовое поле): бит 0 — устройство обнаружено; бит 1 — устройство онлайн; бит 2 — устройство готово к работе; бит 3 — данные с устройства актуальны; бит 4 — датчик температуры №1 обнаружен; бит 5 — датчик температуры №2 обнаружен; бит 6 — датчик температуры №1 закорочен; бит 7 — датчик температуры №2 закорочен; биты 8-15 — не используются. | U16 |
| 0x2012-0x2013 | 2 | Температура BMS Logic, °C | REAL32 |
| 0x2014-0x2015 | 2 | Флаги балансировки ячеек (битовое поле): бит i —балансировочный резистор подключен к i-вой ячейке. | U32 |
| 0x2016-0x2029 | 20 | Массив состояний ячеек. Каждый элемент массива соответствует ячейке и является битовым полем: бит 0 — ячейка подключена; бит 1 — температурный датчик подключен; бит 2 — к ячейке следует подключить балансировочный резистор; бит 3 — балансировочный резистор подключен к ячейке; бит 4 — температурный датчик закорочен; бит 5 — провода подключены к ячейке; биты 6-15 — не используются. | U16[20] |
| 0x202A-0x2051 | 40 | Массив напряжений ячеек (В) | REAL32[20] |
| 0x2052-0x2079 | 40 | Массив температур ячеек (°C) | REAL32[20] |
| 0x207A-0x20A1 | 40 | Массив степеней заряда ячеек (SOC) (%) | REAL32[20] |
| 0x20A2-0x20C9 | 40 | Массив сопротивлений ячеек (Ohm) | REAL32[20] |
| 0x20F4 | 1 | Дискретные входы 2 (битовое поле): бит 0 – состояние предохранителя 2; бит 1 – состояние предохранителя 3; бит 2 – состояние защитного прерывателя цепи; биты 3-15 – не используются. | U16 |
| 0x2100-0x2101 | 2 | Степень заряда АКБ (SOC), % | REAL32 |
| 0x2102 | 1 | Количество устройств BMS Logic | U16 |
| 0x2103 | 1 | Количество ячеек | U16 |
| 0x2104-0x2105 | 2 | Напряжение АКБ, В | REAL32 |
| 0x2106-0x2107 | 2 | Сопротивление АКБ, Ом | REAL32 |
| 0x2108-0x2109 | 2 | Эффективная ёмкость АКБ, А×ч | REAL32 |
| 0x210A-0x210B | 2 | Эффективность балансировки ячеек, % | REAL32 |
| 0x210C-0x210D | 2 | Степень работоспособности батареи, % | REAL32 |
| 0x210E-0x210F | 2 | Глубина разряда батареи, А×ч | REAL32 |
| 0x2110-0x2111 | 2 | Минимальная температура среди устройств BMS Logic | REAL32 |
| 0x2112 | 1 | Адрес устройства Logic, имеющего минимальную температуру | U16 |
| 0x2113-0x2114 | 2 | Максимальная температура среди устройств BMS Logic | REAL32 |
| 0x2115 | 1 | Адрес устройства Logic, имеющего максимальную температуру | U16 |
| 0x2116-0x2117 | 2 | скорость обмена с устройствами BMS Logic, ком./с | REAL32 |
| 0x2118-0x2119 | 2 | Минимальная температура ячейки | REAL32 |
| 0x211A | 1 | Адрес устройства Logic, к которому подключена ячейка с минимальной температурой | U16 |
| 0x211B | 1 | Номер ячейки с минимальной температурой | U16 |
| 0x211C-0x211D | 2 | Максимальная температура ячейки | REAL32 |
| 0x211E | 1 | Адрес устройства Logic, к которому подключена ячейка с максимальной температурой | U16 |
| 0x211F | 1 | Номер ячейки с максимальной температурой | U16 |
| 0x2120-0x2121 | 2 | Минимальное напряжение среди ячеек | REAL32 |
| 0x2122 | 1 | Адрес устройства Logic, к которому подключена ячейка с минимальным напряжением | U16 |
| 0x2123 | 1 | Номер ячейки с минимальным напряжением | U16 |
| 0x2124-0x2125 | 2 | Максимальное напряжение среди ячеек | REAL32 |
| 0x2126 | 1 | Адрес устройства Logic, к которому подключена ячейка с максимальным напряжением | U16 |
| 0x2127 | 1 | Номер ячейки с максимальным напряжением | U16 |
| 0x2128 | 1 | Флаг наличия ошибки: 0 — нет ошибок; 1 — имеются некоторые ошибки. | U16 |
| 0x2130-0x2131 | 2 | Энергия, полученная от зарядного устройства, Вт×ч | REAL32 |
| 0x2132-0x2133 | 2 | Энергия, потреблённая нагрузкой, Вт×ч | REAL32 |
| 0x2134-0x2135 | 2 | Энергия, рассеянная на балансировочных резисторах, Вт×ч | REAL32 |
| 0x2140 | 1 | Флаг монтирования SD-карты: 0 — не примонтирована; 1 — примонтирована. | U16 |
| 0x2141 | 1 | не используется | U16 |
| 0x2142 | 1 | не используется | U16 |
| 0x2170 | 1 | Статус подключения Wi-Fi: 0 — нет подключения ; 1 — подключение установлено. | U16 |
| 0x2171-0x2172 | 2 | IP-адрес сети Wi-Fi | U8[4] |
| 0x2173-0x2175 | 3 | MAC-адрес Wi-Fi модуля | U8[6] |
| 0x2179-0x217A | 2 | Мгновенное значение эффективной ёмкости, А×ч | REAL32 |
| 0x217B-0x217C | 2 | Заряд, полученный батареей от зарядного устройства, А×ч | REAL32 |
| 0x217D-0x217E | 2 | Заряд, переданный нагрузке от батареи, А×ч | REAL32 |
| 0x217F-0x2180 | 2 | IP-адрес сети Ethernet | U8[4] |
| 0x2181-0x2182 | 2 | Маска подсети Ethernet подключения | U8[4] |
| 0x2183-0x2184 | 2 | Адрес шлюза сети Ethernet | U8[4] |
| 0x2185-0x2186 | 2 | Калиброванное значение референсной линии датчика тока, В | REAL32 |
| 0x218E | 2 | Напряжение с выхода датчика тока, В | REAL32 |
| 0x2190 | 2 | Напряжение референсной линии датчика тока, В | REAL32 |
| 0x2192 | 2 | Напряжение выхода внешнего датчика тока, В | REAL32 |
| 0x2194 | 2 | Напряжение референсной линии внешнего датчика тока, В | REAL32 |
| 0x219F | 2 | Максимально разрешенный ток заряда батареи, A | REAL32 |
| 0x21A1 | 2 | Максимально разрешенный ток разряда батареи, A | REAL32 |
| 0x21B8 | 1 | Флаг индикации балансировки ячеек | U16 |
| 0x21C6 | 2 | Калиброванное значение референсной линии внешнего датчика тока, В | REAL32 |
| 0x21CA | 2 | Среднее напряжение ячеек в батарее, В | REAL32 |
| 0x2200-0x2203 | 4 | Запись №1 журнала ошибок. Первое 32-битное слово содержит отметку времени, второе 32-битное слово содержит регистр ошибок 1 (см. 0x2007-0x2008). Формат отметки времени: биты 0-5 — год; биты 6-9 — месяц; биты 10-14 — день; биты 15-19 — часы; биты 20-25 — минуты; биты 26-31 — секунды. | U32[2] |
| 0x2204-0x2207 | 4 | Запись №2 журнала ошибок | U32[2] |
| 0x2208-0x227B | Записи №3-31 журнала ошибок | ||
| 0x227C-0x227F | 4 | Запись №32 журнала ошибок | U32[2] |
| 0x2300 | 1 | Номер последней записи в журнале ошибок (1..32) | U16 |
| 0x2380 | 4 | Запись №1 журнала ошибок. Первое 32-битное слово содержит регистр ошибок 2 (см. 0x200E-0x200F). | U32[2] |
| 0x2384-0x2387 | 4 | Запись №2 журнала ошибок | U32[2] |
| 0x2388-0x23FB | Записи №3-31 журнала ошибок | ||
| 0x23FC-0x23FF | 4 | Запись №32 журнала ошибок | U32[2] |
| 0x2400 | 2 | Ток, измеренный внешним датчиком тока, A | REAL32 |
| 0x2402 | 2 | Итоговый ток АКБ, A Примечание — Обыно это сумма измеренных значений основного и внешнего датчика тока | REAL32 |
| 0x2410 | 1 | Состояние батареи: 0 – Неизвестно; 1 – Charing ON – заряд; 2 – Charging OFF – нет заряда; 3 – Relaxed (after charging) – батарея в состоянии релаксации после заряда; 4 – Discharging ON – разряд; 5 – Discharging OFF – нет разряда; 6 – Relaxed (after discharging) – батарея в состоянии релаксации после разряда. | U16 |
| 0x2411 | 2 | время нахождения в текущем состоянии (см. 0x2410), сек | U32 |
| 0x2420 | 2 | Номинальная ёмкость АКБ, А×ч | REAL32 |
| 0x2422 | 2 | Максимальное напряжение заряда АКБ, В | REAL32 |
| 0x2424 | 2 | Минимальное напряжение разряда АКБ, В | REAL32 |
| 0x2426 | 2 | Максимальный ток заряда АКБ, A | REAL32 |
| 0x2428 | 2 | Минимальный ток заряда АКБ, A | REAL32 |
Регистры хранения
| Регистр | Количество регистров | Содержимое | Тип параметра |
| 0x4000 | 1 | Адрес устройства BMS Logic, чьи параметры должны содержаться в регистрах хранения 0x2011-0x20C9 | U16 |
| 0x4100 | 2 | Команда квитирования ошибок в жернале ошибок (битовое поле). Каждое i-вый бит соответствует записи №(i+1). Примечания:
| U32 |
| 0x5100 | 1 | Программное управление сигналом "Battery cover". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Battery coВer". | U16 |
| 0x5101 | 1 | Программное управление сигналом "Charger connected". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Charger connected". | U16 |
| 0x5102 | 1 | Программное управление сигналом "Power down request". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Power down request". | U16 |
| 0x5103 | 1 | Программное управление сигналом "Inhiбит charging". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Inhiбит charging". | U16 |
| 0x5104 | 1 | Программное управление сигналом "Inhiбит discharging". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Inhiбит discharging". | U16 |
| 0x5105 | 1 | Программное управление сигналом "Charging contactor feedback". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Charging contactor feedback". | U16 |
| 0x5106 | 1 | Программное управление сигналом "Discharging contactor feedback". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Discharging contactor feedback". | U16 |
| 0x5107 | 1 | Программное управление сигналом "Insulation status". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Insulation status". | U16 |
| 0x5108 | 1 | Программное управление сигналом "Charge request". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Charge request". | U16 |
| 0x5109 | 1 | Программное управление сигналом "Precharge request". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Precharge request". | U16 |
| 0x510A | 1 | Программное управление сигналом "Discharge request". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Discharge request". | U16 |
| 0x510B | 1 | Программное управление сигналом "PCH contactor feedback". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "PCH contactor feedback". | U16 |
| 0x510C | 1 | Программное управление сигналом "CH/DCH contactor feedback". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "CH/DCH contactor feedback". | U16 |
| 0x510D | 1 | Программное управление сигналом "Main contactor feedback". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Main contactor feedback". | U16 |
| 0x510E | 1 | Программное управление сигналом "Interlock". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Interlock". | U16 |
| 0x510F | 1 | Программное управление сигналом "Fuse 1". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Fuse 1". | U16 |
| 0x5110 | 1 | Программное управление сигналом "Fuse 2". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Fuse 2". | U16 |
| 0x5111 | 1 | Программное управление сигналом "Fuse 3". Возможные значения: 0 – сбросить сигнал; 1 – установить сигнал; 2-65535 – использовать физическое состояние сигнала "Fuse 3". | U16 |