добавлен readme

This commit is contained in:
Razvalyaev 2025-08-06 11:47:50 +03:00
parent 366ba99467
commit 9f728f9160

149
README.md Normal file
View File

@ -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 | Длина данных (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
```
---