5.2 Протокол Modbus

Редактировал(а) Admin 2025/02/13 12:37

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

Протокол 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-0x10033

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

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-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
0x218E2Напряжение с выхода датчика тока, ВREAL32
0x21902Напряжение референсной линии датчика тока, ВREAL32
0x21922Напряжение выхода внешнего датчика тока, ВREAL32
0x21942Напряжение референсной линии внешнего датчика тока, ВREAL32
0x219F2Максимально разрешенный ток заряда батареи, AREAL32
0x21A12Максимально разрешенный ток разряда батареи, AREAL32
0x21B81Флаг индикации балансировки ячеекU16
0x21C62Калиброванное значение референсной линии внешнего датчика тока, ВREAL32
0x21CA2Среднее напряжение ячеек в батарее, В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
0x23804Запись №1 журнала ошибок. Первое 32-битное слово содержит регистр ошибок 2 (см. 0x200E-0x200F).U32[2]
0x2384-0x23874Запись №2 журнала ошибокU32[2]
0x2388-0x23FB Записи №3-31 журнала ошибок 
0x23FC-0x23FF4Запись №32 журнала ошибокU32[2]
0x24002Ток, измеренный внешним датчиком тока, AREAL32
0x24022

Итоговый ток АКБ, 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
0x24112Время нахождения в текущем состоянии (см. 0x2410), секU32
0x24202Номинальная ёмкость АКБ, А×чREAL32
0x24222Максимальное напряжение заряда АКБ, ВREAL32
0x24242Минимальное напряжение разряда АКБ, ВREAL32
0x24262Максимальный ток заряда АКБ, AREAL32
0x24282Минимальный ток заряда АКБ, AREAL32

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

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

Команда квитирования ошибок в жернале ошибок (битовое поле). Каждое 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