# Устройство эмуляции 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 ``` ---