7.4 KiB
Устройство эмуляции CAN-ошибок
Устройство предназначено для генерации CAN-кадров с возможностью намеренного внесения ошибок в различные поля кадра. Это позволяет тестировать устойчивость и обработку ошибок в CAN-сетях, а также проверять поведение принимающих устройств.
Основные возможности
В папке can_emul_term находится терминалка для генерации CAN-кадров
В вкладке setup настраивается обмен по Modbus:
- Выбирается COM порт для общения с STM
- Выбирается период опроса Modbus
- Скорость 115200 bps, 1 stop bit, none parity, none flow control
В вкладке CAN EMULATOR настраивается скорость CAN, период посылок и CAN фрейм.
Возможности:
- Передача данных по регистрам океана.
- Генерация рандомного ID в CAN-кадре.
- Генерация стандартных (11-бит ID) и расширенных (29-бит ID) CAN-кадров.
- Передача данных с заданным битрейтом (напр. 125 / 250 / 500 / 1000 Кбит/с).
- Возможность внесения ошибок:
- Инверсия полей IDE, RTR, SRR, r1, r0.
- Инверсия одного бита данных или ID.
- Ошибка CRC.
- Отключение бит-стаффинга (stuff bits).
- Работа в двух режимах: одиночный кадр или периодическая отправка.
Для разработчика
Структура управления
Устройство управляется через Modbus-регистр, состоящий из:
- Коилов (флагов) — включение функций и ошибок.
- Холдинг-регистров — задание параметров кадра.
Холдинг-регистры
Настройка параметров CAN:
Название поля | Адрес | Описание |
---|---|---|
CAN_BITRATE_KBPS |
0 | Битрейт CAN в Кбит/с |
CAN_PERIOD |
1 | Интервал отправки в мс (если включен START_POLLING ) |
Настройка CAN-кадра:
Название поля | Адрес | Описание |
---|---|---|
CAN_ID_HI |
2 | Старшая часть CAN ID |
CAN_ID_LO |
3 | Младшая часть CAN ID |
CAN_DLC |
4 | Длина данных (0–8 байт) |
CAN_DATA_0 ... CAN_DATA_7 |
16–23 | Данные для передачи (до 8 байт) |
На будущее:
Название поля | Адрес | Описание |
---|---|---|
DATA_UNIX_HI |
64 | Время в системе UNIX (старшое слово) |
DATA_UNIX_LO |
65 | Время в системе UNIX (младшее слово) |
Адреса коилов
Для управления CAN:
Название поля | Адрес | Описание |
---|---|---|
START_POLLING |
0 | Запуск периодической отправки |
START_SINGLE_FRAME |
1 | Однократная отправка кадра |
HEADER_IDE |
2 | Режим кадра: 0 = стандартный, 1 = расширенный |
HEADER_RTR |
3 | Remote Transmission Request (1 = запрос) |
Для выставления ошибок:
Название поля | Адрес | Описание |
---|---|---|
FLIP_SRS |
16 | Инвертировать SRR-бит |
FLIP_IDE |
17 | Инвертировать IDE |
FLIP_RTR |
18 | Инвертировать RTR |
FLIP_R1 |
19 | Инвертировать r1 |
FLIP_R0 |
20 | Инвертировать r0 |
FLIP_MSGID_BIT |
21 | Инвертировать старший бит ID |
FLIP_DATA_BIT |
22 | Инвертировать один бит данных |
FLIP_CRC_BIT |
23 | Инвертировать CRC |
DISABLE_STUFF_BITS |
24 | Отключить вставку stuff-битов |
Как пользоваться
Шаг 1. Настройка параметров кадра
Заполните следующие поля:
CAN_BITRATE_KBPS
— битрейт шины (например, 500).CAN_ID_HI
,CAN_ID_LO
— идентификатор кадра.HEADER_IDE
— выбор типа кадра:- 0 — стандартный (11 бит).
- 1 — расширенный (29 бит).
HEADER_RTR
— тип кадра:- 0 — data frame.
- 1 — remote request.
CAN_DLC
— количество байт данных (0–8).CAN_DATA_0
...CAN_DATA_7
— данные кадра.
Шаг 2. Включение ошибок (опционально)
Установите нужные флаги в коилах:
- Для инверсии полей (например, IDE, CRC и др.).
- Для отключения бит-стаффинга.
Шаг 3. Отправка кадра
Выберите один из вариантов:
- Установите
START_SINGLE_FRAME
в 1 — для однократной отправки кадра. - Установите
START_POLLING
в 1 — для периодической отправки.- Задайте интервал через
CAN_PERIOD
.
- Задайте интервал через
Примечание: Если задан слишком маленький
CAN_PERIOD
, он автоматически будет ограничен минимальным значением (CAN_MIN_PERIOD
в прошивке).
Примеры
Пример 1: Стандартный кадр, ID = 0x123, 2 байта данных
CAN_BITRATE_KBPS = 500
CAN_ID_HI = 0x0000
CAN_ID_LO = 0x0123
HEADER_IDE = 0
HEADER_RTR = 0
CAN_DLC = 2
CAN_DATA_0 = 0x11
CAN_DATA_1 = 0x22
START_SINGLE_FRAME = 1
Пример 2: Расширенный кадр с ошибкой CRC и отключенным стаффингом
CAN_BITRATE_KBPS = 500
CAN_ID_HI = 0x001D
CAN_ID_LO = 0xABCD
HEADER_IDE = 1
HEADER_RTR = 0
CAN_DLC = 8
CAN_DATA_0...7 = 0xAA, 0xBB, ...
FLIP_CRC_BIT = 1
DISABLE_STUFF_BITS = 1
START_SINGLE_FRAME = 1