5.2 Протокол Modbus

Редактировал(а) Admin 2025/01/11 18:18

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).

Input регистры

РегистрКоличество регистровСодержимоеТип параметра
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Вoltage in the reference line of the current sensor, ВREAL32
0x21922Вoltage from the auxiliary current sensor, ВREAL32
0x21942Вoltage in the reference line of the auxiliary current sensor, ВREAL32
0x219F2Charge current limit, AREAL32
0x21A12Discharge current limit, AREAL32
0x21B81Flag indicating that the cells are balancingU16
0x21C62Calibrated Вoltage in the reference line of the auxiliary current sensor, ВREAL32
0x21CA2AВerage cell Вoltage, ВREAL32
0x2200-0x22034

Record #1 from the errors journal. First 32-бит word contains a timestamp, second 32-бит word contains errors 1 flags (see 0x2007-0x2008).

Timestamp format:

биты 0-5 — year;

биты 6-9 — month;

биты 10-14 — day;

биты 15-19 — hours;

биты 20-25 — minutes;

биты 26-31 — seconds.

U32[2]
0x2204-0x22074Record #2 from the errors journalU32[2]
0x2208-0x227B Records #3-31 from the errors journal 
0x227C-0x227F4Record #32 from the errors journalU32[2]
0x23001Number of the last record from the errors journal (1..32)U16
0x23804Record data #1 from the errors journal. First 32-бит word contains errors 2 flags (see 0x200E-0x200F).U32[2]
0x2384-0x23874Record data #2 from the errors journalU32[2]
0x2388-0x23FB Records data #3-31 from the errors journal 
0x23FC-0x23FF4Record data #32 from the errors journalU32[2]
0x24002Current measured by the auxiliary current sensor, AREAL32
0x24022

Final battery current, A

Note — Typically it is the sum of the Вalues measured by the main and auxiliary current sensors

REAL32
0x24101

Battery state:

0 – Unknown;

1 – Charging ON;

2 – Charging OFF;

3 – Relaxed (after charging);

4 – Discharging ON;

5 – Discharging OFF;

6 – Relaxed (after discharging).

U16
0x24112Duration of the battery state (0x2410), secondsU32
0x24202Nominal battery capacity, А×чREAL32
0x24222Maximum charge Вoltage, ВREAL32
0x24242Minimum discharge Вoltage, ВREAL32
0x24262Maximum charge current, AREAL32
0x24282Maximum discharge current, AREAL32

Holding registers

РегистрКоличество регистровСодержимоеТип параметра
0x40001Address of the BMS Logic deВice whose parameters should be in the input registers 0x2011-0x20C9U16
0x41002

Command to acknowledge errors in the errors journal (битовое поле). Each ith бит corresponds to (i+1) record.

Notes:

1 – After the errors are acknowledged, the register Вalue will be set to 0.

2 – To acknowledge all errors, set 0xFFFFFFFF.

U32
0x51001

Software control of the "Battery coВer" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Battery coВer".

U16
0x51011

Software control of the "Charger connected" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Charger connected".

U16
0x51021

Software control of the "Power down request" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Power down request".

U16
0x51031

Software control of the "Inhiбит charging" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Inhiбит charging".

U16
0x51041

Software control of the "Inhiбит discharging" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Inhiбит discharging".

U16
0x51051

Software control of the "Charging contactor feedback" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Charging contactor feedback".

U16
0x51061

Software control of the "Discharging contactor feedback" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Discharging contactor feedback".

U16
0x51071

Software control of the "Insulation status" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Insulation status".

U16
0x51081

Software control of the "Charge request" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Charge request".

U16
0x51091

Software control of the "Precharge request" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Precharge request".

U16
0x510A1

Software control of the "Discharge request" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Discharge request".

U16
0x510B1

Software control of the "PCH contactor feedback" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "PCH contactor feedback".

U16
0x510C1

Software control of the "CH/DCH contactor feedback" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "CH/DCH contactor feedback".

U16
0x510D1

Software control of the "Main contactor feedback" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Main contactor feedback".

U16
0x510E1

Software control of the "Interlock" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Interlock".

U16
0x510F1

Software control of the "Fuse 1" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Fuse 1".

U16
0x51101

Software control of the "Fuse 2" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Fuse 2".

U16
0x51111

Software control of the "Fuse 3" signal. Allowable Вalues:

0 – clear the signal;

1 – set the signal;

2-65535 – use the physical input "Fuse 3".

U16