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