CANEmu/README.md

150 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Устройство эмуляции 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 | Длина данных (08 байт) |
| `CAN_DATA_0` ... `CAN_DATA_7` | 1623 | Данные для передачи (до 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` — количество байт данных (08).
- `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
```
---