4. Протокол CANopen
Протокол CANopen
Общая информация
Устройство BMS IMD реализует протокол CiA 301 CANopen для управления режимом работы и мониторинга внутреннего состояния.
Основные характеристики:
- Поддерживаются стандартные 11-битные идентификаторы сообщений.
- Скорость обмена – 125, 250 (по умолчанию), 500 или 1000 кбит/с.
- Идентификатор COBID устройства по умолчанию – 22 (0x16).
Поддерживаемые режимы передачи данных:
- SDO (для настройки устройства).
- PDO (для обмена данными с другими элементами системы).
- Heartbeat producer (настраивается).
Ниже даётся описание параметров, передаваемых в режиме PDO и SDO. В колонке «Тип параметра»:
- U8 – беззнаковое 8-разрядное число;
- U16 – беззнаковое 16-разрядное число;
- S16 – знаковое 16-разрядное число;
- U32 – беззнаковое 32-разрядное число.
Порядок байт в словах – от младшего к старшему (little endian).
Сообщения TPDO
CANID = 0x180+COBID (по умолчанию 0x196)
Длина пакета – 8 байт. Период отправки – 100 мс.
Содержимое пакета:
Байт | Имя параметра | Тип параметра | Кодирование |
0 | INSULATION_STATUS – статус изоляции: 0 – NO_DATA (нет данных о сопротивлении изоляции); 1 – OK (сопротивление изоляции в норме); 2 – WARNING (предупреждение о низком сопротивлении изоляции; сопротивление изоляции меньше уровня WARNING_RESISTANCE, но больше уровня ALARM_RESISTANCE); 3 – ALARM (сообщении об аварийно-низком сопротивлении изоляции; сопротивление изоляции меньше уровня ALARM_RESISTANCE). Примечание – При сбросе ALLOW_WORK и до первого измерения устанавливается статус NO_DATA. | U8 | - |
1 | INTERNAL_ERROR – статус внутренней ошибки (битовое поле): бит 0 – LOW_BUS_VOLTAGE_ERROR (низкое напряжение батареи); бит 1 – TIMEOUT_ERROR (тайм-аут переходного процесса измерения); бит 2 – ANOMALY_ERROR (аномальное состояние между плюсовой и минусовой шиной батареи и шасси, может указывать на периодический контакт шин батареи с шасси); бит 3 – SELF_TEST_ERROR (ошибка самопроверки); биты 4-7 – не используются. | U8 | - |
2 | STATE – состояние работы: 0 – NOT_WORKING (устройство не работает); 1 – WORKING (устройство работает); 2 – CRITICAL_FAULT (критический сбой в работе устройства). | U8 | - |
3-7 | Резерв (установлены в 0) | - | - |
CANID = 0x280+COBID (по умолчанию 0x296)
Длина пакета – 8 байт. Период отправки – 100 мс.
Содержимое пакета:
Байт | Имя параметра | Тип параметра | Кодирование |
0 | RESISTANCE_CALCULATED – флаг расчёта сопротивления изоляции: 0 – значения сопротивлений изоляции не рассчитаны; 1 – значения сопротивлений изоляции рассчитаны. | U8 | - |
1-2 | RESISTANCE_PLUS – сопротивление изоляции между «плюсом» шины питания и шасси: 0 – минимальное сопротивление 10000 – максимальное сопротивление | U16 | 1кОм/бит |
3-4 | RESISTANCE_MINUS – сопротивление изоляции между «минусом» шины питания и шасси: 0 – минимальное сопротивление 10000 – максимальное сопротивление | U16 | 1кОм/бит |
5 | BUS_VOLATGE_ CALCULATED – флаг расчёта напряжения шины питания: 0 – значение напряжения не рассчитано; 1 – значение напряжения рассчитано. | U8 | - |
6-7 | BUS_VOLTAGE – напряжение шины питания | U16 | 0,1В/бит |
Сообщения RPDO
CANID = 0x200+COBID (по умолчанию 0x216)
Длина пакета – 8 байт. Период отправки – 100 мс.
Содержимое пакета:
Байт | Имя параметра | Тип параметра | Кодирование |
0 | ALLOW_WORK – команда разрешения работы устройства: 0 – запрет работы; 1 – разрешение работы. | U8 | - |
1 | FORCE_SELFTEST – команда принудительного запуска самодиагностики устройства: 0 – запуск самодиагностики по внутреннему алгоритму; 1 – принудительный запуск самодиагностики (если активно, то выполняется только самодиагностика). | U8 | - |
2-7 | Резерв (установлены в 0) | - | - |
Словарь SDO
Для установки уровней формирования сигналов WARNING и ALARM предназначены следующие настройки, доступные для изменения по протоколу CANopen SDO:
Имя параметра | Индекс | Подиндекс | Тип параметра | Кодирование |
ALARM_RESISTANCE – уровень формирования сигнала ALARM (по умолчанию 50кОм) | 0x4010 | 0x01 | U16 | 1кОм/бит |
WARNING_RESISTANCE – уровень формирования сигнала WARNING (по умолчанию 100кОм) | 0x4010 | 0x02 | U16 | 1кОм/бит |
Пример установки ALARM_RESISTANCE значения 50кОм (0x0032):
Байт 0 | Байт 1 | Байт 2 | Байт 3 | Байт 4 | Байт 5 | Байт 6 | Байт 7 | |
Команда | 0x2B | 0x10 | 0x40 | 0x01 | 0x32 | 0x00 | 0x00 | 0x00 |
Ответ | 0x60 | 0x10 | 0x40 | 0x01 | 0x00 | 0x00 | 0x00 | 0x00 |
Пример установки WARNING_RESISTANCE значения 100кОм (0x0064):
Байт 0 | Байт 1 | Байт 2 | Байт 3 | Байт 4 | Байт 5 | Байт 6 | Байт 7 | |
Команда | 0x2B | 0x10 | 0x40 | 0x02 | 0x64 | 0x00 | 0x00 | 0x00 |
Ответ | 0x60 | 0x10 | 0x40 | 0x02 | 0x00 | 0x00 | 0x00 | 0x00 |