diff --git a/README.md b/README.md new file mode 100644 index 0000000..c65ba7b --- /dev/null +++ b/README.md @@ -0,0 +1,149 @@ +# Устройство эмуляции 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 +``` + +---