4. Протокол CANopen

Редактировал(а) Admin 2025/01/29 10:58

Протокол 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 – максимальное сопротивление

U161кОм/бит
3-4

RESISTANCE_MINUS – сопротивление изоляции между «минусом» шины питания и шасси:

0 – минимальное сопротивление

10000 – максимальное сопротивление

U161кОм/бит
5

BUS_VOLATGE_ CALCULATED – флаг расчёта напряжения шины питания:

0 – значение напряжения не рассчитано;

1 – значение напряжения рассчитано.

U8-
6-7BUS_VOLTAGE – напряжение шины питанияU160,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кОм)0x40100x01U161кОм/бит
WARNING_RESISTANCE – уровень формирования сигнала WARNING (по умолчанию 100кОм)0x40100x02U161кОм/бит

Пример установки ALARM_RESISTANCE значения 50кОм (0x0032):

 Байт 0Байт 1Байт 2Байт 3Байт 4Байт 5Байт 6Байт 7
Команда0x2B0x100x400x010x320x000x000x00
Ответ0x600x100x400x010x000x000x000x00

Пример установки WARNING_RESISTANCE значения 100кОм (0x0064):

 Байт 0Байт 1Байт 2Байт 3Байт 4Байт 5Байт 6Байт 7
Команда0x2B0x100x400x020x640x000x000x00
Ответ0x600x100x400x020x000x000x000x00