5.2 Протокол Modbus

Редактировал(а) Admin 2025/02/28 10:17

Протоколы связи

Протокол Modbus

Общая информация

Плата 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).

Регистры ввода

РегистрКоличество регистровСодержимоеТип параметра
0x00001

Аппаратная версия:

byte 0 — минорная версия;

byte 1 — мажорная версия.

U8[2]
0x0001-0x00022

Версия ВПО:

byte 0 — версия патча;

byte 1 — минорная версия;

byte 2 — мажорная версия;

byte 3 — не используется (установлен в 0).

U8[4]
0x0003-0x00042

Версия загрузчика:

byte 0 — версия патча;

byte 1 — минорная версия;

byte 2 — мажорная версия;

byte 3 — не используется (установлен в 0).

U8[4]
0x1000-0x10023

Текущее время на устройстве:

byte 0 — день (Двоично-десятичный код);

byte 1 — месяц (Двоично-десятичный код);

byte 2 — год (Двоично-десятичный код);

byte 3 — час (Двоично-десятичный код);

byte 4 — минуты (Двоично-десятичный код);

byte 5 — секунды (Двоично-десятичный код).

U8[6]
0x20001

Дискретные входы 1 (битовое поле):

бит 0 – сигнал «Открыта АКБ»;

бит 1 – сигнал «Подключено ЗУ»;

бит 2 – сигнал «Запрос на отключение питания»;

бит 3 – сигнал «Запрет заряда»;

бит 4 – сигнал «Запрет разряда»;

бит 5 – сигнал «Обратная связь контактора заряда»;

бит 6 – сигнал «Обратная связь контактора разряда»;

бит 7 – сигнал «Статус контроля изоляции».

бит 8 – сигнал «Запрос на заряд»;

бит 9 – сигнал «Запрос на предзаряд»;

бит 10 – сигнал «Запрос на разряд»;

бит 11 – сигнал «Обратная связь контактора предзаряда»;

бит 12 – сигнал «Обратная связь комбинированного контактора заряда/разряда»;

бит 13 – сигнал «Обратная связь главного контактора»;

бит 14 – сигнал целостности высоковольной цепи;

бит 15 – сигнал состояния предохранителя 1.

U16
0x2001-0x20022Ток через АКБ, имеренный датчиком холла, АREAL32
0x2003-0x20042

Внешняя температура, °C

REAL32
0x2005-0x20062Влажность, RH%REAL32
0x2007-0x20082

Регистр ошибок 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-0x200A2

Флаги состояния (битовое поле):

бит 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
0x200B1

Состояние дискретных выходов (битовое поле):

бит 0 — состояние выхода №1;

бит 1 — состояние выхода №2;

бит 2 — состояние выхода №3;

бит 3 — состояние выхода №4;

биты 4-15 — не используются.

U16
0x200C1

Состояние реле (битовое поле):

бит 0 — состояние реле №1;

бит 1 — состояние реле №2;

бит 2 — состояние реле №3;

бит 3 — состояние реле №4;

биты 4-15 — не используются.

U16
0x200E-0x200F2

Регистр ошибок 2 (битовое поле):

бит 0 – ошибка «Низкая температура (заряд)»;

бит 1 – ошибка «Высокая температура (заряд)»;

бит 2 – ошибка монтирования SD-карты;

бит 3 – ошибка записи/чтения SD-карты;

бит 4 – ошибка «Недопустимый заряд» (заряд батареи через контактор разряда);

бит 5 – ошибка «Залипание контактора»;

бит 6 – «Ошибка обр. связи контактора заряда»;

бит 7 – «Ошибка обр. связи контактора разряда»;

бит 8 – ошибка «Нарушение изоляции»;

бит 9 – «Ошибка обр. связи контактора предзаряда»;

бит 10 – «Ошибка обр. связи комбинированного контактора заряда/разряда»;

бит 11 – «Ошибка обр. связи главного контактора»;

бит 12 – не используются (set to 0);

бит 13 – общая ошибка;

бит 14 – зарезервировано (установлен в 0);

бит 15 – зарезервировано (установлен в 0);

бит 16 – зарезервировано (установлен в 0);

бит 17 – ошибка "Precharge error";

биты 18-31 — не используются.

U32
0x20101Адрес устройства BMS Logic, чьи параметры отображаются в регистрах 0x2011-0x20C9U16
0x20111

Состояние BMS Logic (битовое поле):

бит 0 — устройство обнаружено;

бит 1 — устройство онлайн;

бит 2 — устройство готово к работе;

бит 3 — данные с устройства актуальны;

бит 4 — датчик температуры №1 обнаружен;

бит 5 — датчик температуры №2 обнаружен;

бит 6 — датчик температуры №1 закорочен;

бит 7 — датчик температуры №2 закорочен;

биты 8-15 — не используются.

U16
0x2012-0x20132Температура BMS Logic, °CREAL32
0x2014-0x20152

Флаги балансировки ячеек (битовое поле):

бит i —балансировочный резистор подключен к i-вой ячейке.

U32
0x2016-0x202920

Массив состояний ячеек. Каждый элемент массива соответствует ячейке и является битовым полем:

бит 0 — ячейка подключена;

бит 1 — температурный датчик подключен;

бит 2 — к ячейке следует подключить балансировочный резистор;

бит 3 — балансировочный резистор подключен к ячейке;

бит 4 — температурный датчик закорочен;

бит 5 — провода подключены к ячейке;

биты 6-15 — не используются.

U16[20]
0x202A-0x205140Массив напряжений ячеек (В)REAL32[20]
0x2052-0x207940Массив температур ячеек (°C)REAL32[20]
0x207A-0x20A140Массив степеней заряда ячеек (SOC) (%)REAL32[20]
0x20A2-0x20C940Массив сопротивлений ячеек (Ohm)REAL32[20]
0x20F41

Дискретные входы 2 (битовое поле):

бит 0 – состояние предохранителя 2;

бит 1 – состояние предохранителя 3;

бит 2 – состояние защитного прерывателя цепи;

биты 3-15 – не используются.

U16
0x2100-0x21012Степень заряда АКБ (SOC), %REAL32
0x21021Количество устройств BMS LogicU16
0x21031Количество ячеекU16
0x2104-0x21052Напряжение АКБ, ВREAL32
0x2106-0x21072Сопротивление АКБ, ОмREAL32
0x2108-0x21092Эффективная ёмкость АКБ, А×чREAL32
0x210A-0x210B2Эффективность балансировки ячеек, %REAL32
0x210C-0x210D2Степень работоспособности батареи, %REAL32
0x210E-0x210F2Глубина разряда батареи, А×чREAL32
0x2110-0x21112Минимальная температура среди устройств BMS LogicREAL32
0x21121Адрес устройства Logic, имеющего минимальную температуруU16
0x2113-0x21142Максимальная температура среди устройств BMS LogicREAL32
0x21151Адрес устройства Logic, имеющего максимальную температуруU16
0x2116-0x21172Скорость обмена с устройствами BMS Logic, ком./сREAL32
0x2118-0x21192Минимальная температура ячейкиREAL32
0x211A1Адрес устройства Logic, к которому подключена ячейка с минимальной температуройU16
0x211B1Номер ячейки с минимальной температуройU16
0x211C-0x211D2Максимальная температура ячейкиREAL32
0x211E1Адрес устройства Logic, к которому подключена ячейка с максимальной температуройU16
0x211F1Номер ячейки с максимальной температуройU16
0x2120-0x21212Минимальное напряжение среди ячеекREAL32
0x21221Адрес устройства Logic, к которому подключена ячейка с минимальным напряжениемU16
0x21231Номер ячейки с минимальным напряжениемU16
0x2124-0x21252Максимальное напряжение среди ячеекREAL32
0x21261Адрес устройства Logic, к которому подключена ячейка с максимальным напряжениемU16
0x21271Номер ячейки с максимальным напряжениемU16
0x21281

Флаг наличия ошибки:

0 — нет ошибок;

1 — имеются ошибки.

U16
0x2130-0x21312Энергия, полученная от зарядного устройства, Вт×чREAL32
0x2132-0x21332Энергия, потреблённая нагрузкой, Вт×чREAL32
0x2134-0x21352Энергия, рассеянная на балансировочных резисторах, Вт×чREAL32
0x21401

Флаг монтирования SD-карты:

0 — не примонтирована;

1 — примонтирована.

U16
0x21411не используетсяU16
0x21421не используетсяU16
0x21701

Статус подключения Wi-Fi:

0 — нет подключения ;

1 — подключение установлено.

U16
0x2171-0x21722IP-адрес сети Wi-FiU8[4]
0x2173-0x21753MAC-адрес Wi-Fi модуляU8[6]
0x2179-0x217A2Мгновенное значение эффективной ёмкости, А×чREAL32
0x217B-0x217C2Заряд, полученный батареей от зарядного устройства, А×чREAL32
0x217D-0x217E2Заряд, переданный нагрузке от батареи, А×чREAL32
0x217F-0x21802IP-адрес сети EthernetU8[4]
0x2181-0x21822Маска подсети Ethernet подключенияU8[4]
0x2183-0x21842Адрес шлюза сети EthernetU8[4]
0x2185-0x21862Калиброванное значение референсной линии датчика тока, ВREAL32
0x218E-0x218F2Напряжение с выхода датчика тока, ВREAL32
0x2190-0x21912Напряжение референсной линии датчика тока, ВREAL32
0x2192-0x21932Напряжение выхода внешнего датчика тока, ВREAL32
0x2194-0x21952Напряжение референсной линии внешнего датчика тока, ВREAL32
0x219F-0x21A02Максимально разрешенный ток заряда батареи, AREAL32
0x21A1-0x21A22Максимально разрешенный ток разряда батареи, AREAL32
0x21B81Флаг индикации балансировки ячеекU16
0x21C6-0x21C72Калиброванное значение референсной линии внешнего датчика тока, ВREAL32

0x21CA-0x21CB

2Среднее напряжение ячеек в батарее, ВREAL32
0x2200-0x22034

Запись №1 журнала ошибок. Первое 32-битное слово содержит отметку времени, второе 32-битное слово содержит регистр ошибок 1 (см. 0x2007-0x2008).

Формат отметки времени:

биты 0-5 — год;

биты 6-9 — месяц;

биты 10-14 — день;

биты 15-19 — часы;

биты 20-25 — минуты;

биты 26-31 — секунды.

U32[2]
0x2204-0x22074Запись №2 журнала ошибокU32[2]
0x2208-0x227B Записи №3-31 журнала ошибок 
0x227C-0x227F4Запись №32 журнала ошибокU32[2]
0x23001Номер последней записи в журнале ошибок (1..32)U16
0x2380-0x23834Запись №1 журнала ошибок. Первое 32-битное слово содержит регистр ошибок 2 (см. 0x200E-0x200F).U32[2]
0x2384-0x23874Запись №2 журнала ошибокU32[2]
0x2388-0x23FB Записи №3-31 журнала ошибок 
0x23FC-0x23FF4Запись №32 журнала ошибокU32[2]

0x2400-0x2401

2Ток, измеренный внешним датчиком тока, AREAL32
0x2402-0x24032

Итоговый ток АКБ, A

Примечание — Обычно это сумма измеренных значений основного и внешнего датчика тока

REAL32
0x24101

Состояние батареи:

0 – Неизвестно;

1 – Charing ON – заряд;

2 – Charging OFF – нет заряда;

3 – Relaxed (after charging) – батарея в состоянии релаксации после заряда;

4 – Discharging ON – разряд;

5 – Discharging OFF – нет разряда;

6 – Relaxed (after discharging) – батарея в состоянии релаксации после разряда.

U16
0x2411-0x24122Время нахождения в текущем состоянии (см. 0x2410), секU32
0x2420-0x24212Номинальная ёмкость АКБ, А×чREAL32

0x2422-0x2423

2Максимальное напряжение заряда АКБ, ВREAL32
0x2424-0x24252Минимальное напряжение разряда АКБ, ВREAL32

0x2426-0x2427

2Максимальный ток заряда АКБ, AREAL32
0x2428-0x24292Минимальный ток заряда АКБ, AREAL32

Регистры хранения

РегистрКоличество регистровСодержимоеТип параметра
0x40001Адрес устройства BMS Logic, чьи параметры должны отображаться в регистрах 0x2011-0x20C9U16
0x4100-0x41012

Команда квитирования ошибок в жернале ошибок (битовое поле). Каждое i-вый бит соответствует записи №(i+1).

Примечания:

  • После квитирования всех ошибок значение регистра будет установлено равным 0.
  • Для квитирования всех ошибок запишите в регистр 0xFFFFFFFF.
U32
0x51001

Программное управление сигналом "Battery cover". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Battery coВer".

U16
0x51011

Программное управление сигналом "Charger connected". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Charger connected".

U16
0x51021

Программное управление сигналом "Power down request". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Power down request".

U16
0x51031

Программное управление сигналом "Inhibit charging". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Inhibit charging".

U16
0x51041

Программное управление сигналом "Inhibit discharging". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Inhibit discharging".

U16
0x51051

Программное управление сигналом "Charging contactor feedback". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Charging contactor feedback".

U16
0x51061

Программное управление сигналом "Discharging contactor feedback". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Discharging contactor feedback".

U16
0x51071

Программное управление сигналом "Insulation status". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Insulation status".

U16
0x51081

Программное управление сигналом "Charge request". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Charge request".

U16
0x51091

Программное управление сигналом "Precharge request". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Precharge request".

U16
0x510A1

Программное управление сигналом "Discharge request". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Discharge request".

U16
0x510B1

Программное управление сигналом "PCH contactor feedback". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "PCH contactor feedback".

U16
0x510C1

Программное управление сигналом "CH/DCH contactor feedback". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "CH/DCH contactor feedback".

U16
0x510D1

Программное управление сигналом "Main contactor feedback". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Main contactor feedback".

U16
0x510E1

Программное управление сигналом "Interlock". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Interlock".

U16
0x510F1

Программное управление сигналом "Fuse 1". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Fuse 1".

U16
0x51101

Программное управление сигналом "Fuse 2". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Fuse 2".

U16
0x51111

Программное управление сигналом "Fuse 3". Возможные значения:

0 – сбросить сигнал;

1 – установить сигнал;

2-65535 – использовать физическое состояние сигнала "Fuse 3".

U16