first commit
This commit is contained in:
158
README.md
Normal file
158
README.md
Normal file
@@ -0,0 +1,158 @@
|
||||
# OBD2 Emulator
|
||||
|
||||
Эмулятор ECU для тестирования бортовых компьютеров через CAN-шину.
|
||||
Поддерживает стандарт SAE J1979 (OBD-II PIDs) поверх ISO 15765-4 (CAN).
|
||||
|
||||
## Возможности
|
||||
|
||||
- **Динамическая симуляция** — реалистичное поведение автомобиля
|
||||
- **Множество PIDs** — поддержка основных OBD2 параметров
|
||||
- **Сценарии движения** — холостой ход, город, трасса, прогрев
|
||||
- **Автонастройка CAN** — автоматическое поднятие физических и виртуальных интерфейсов
|
||||
|
||||
## Поддерживаемые PIDs (Mode 01)
|
||||
|
||||
| PID | Название | Единицы |
|
||||
|-----|----------|---------|
|
||||
| 04 | Engine Load | % |
|
||||
| 05 | Coolant Temperature | °C |
|
||||
| 0C | Engine RPM | rpm |
|
||||
| 0D | Vehicle Speed | km/h |
|
||||
| 0F | Intake Air Temperature | °C |
|
||||
| 10 | MAF Air Flow Rate | g/s |
|
||||
| 11 | Throttle Position | % |
|
||||
| 1F | Run Time | s |
|
||||
| 2F | Fuel Tank Level | % |
|
||||
| 46 | Ambient Temperature | °C |
|
||||
| 5C | Oil Temperature | °C |
|
||||
| 5E | Fuel Rate | L/h |
|
||||
| ... | и другие | |
|
||||
|
||||
## Установка
|
||||
|
||||
```bash
|
||||
# Клонирование
|
||||
cd obd2_emulator
|
||||
|
||||
# Виртуальное окружение
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate # Linux
|
||||
|
||||
# Зависимости
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Использование
|
||||
|
||||
### Базовый запуск (виртуальный CAN)
|
||||
|
||||
```bash
|
||||
# Запуск с vcan0 (автоматически создаётся)
|
||||
python src/main.py --interface vcan0 --scenario city
|
||||
```
|
||||
|
||||
### Физический CAN интерфейс
|
||||
|
||||
```bash
|
||||
# Использование can1 (например, второй канал 2CH CAN HAT)
|
||||
python src/main.py --interface can1 --bitrate 500000 --scenario highway
|
||||
```
|
||||
|
||||
### Параметры командной строки
|
||||
|
||||
```
|
||||
-i, --interface CAN интерфейс (can0, can1, vcan0) [default: vcan0]
|
||||
-b, --bitrate Скорость CAN в bps [default: 500000]
|
||||
-s, --scenario Сценарий (idle, warmup, city, highway, acceleration)
|
||||
--status-interval Интервал обновления статуса [default: 1.0]
|
||||
--no-status Отключить вывод статуса
|
||||
--debug Включить отладочный вывод
|
||||
```
|
||||
|
||||
## Сценарии
|
||||
|
||||
| Сценарий | Описание |
|
||||
|----------|----------|
|
||||
| `idle` | Холостой ход, машина стоит |
|
||||
| `warmup` | Прогрев холодного двигателя |
|
||||
| `city` | Городской цикл (разгон/торможение, 0-50 км/ч) |
|
||||
| `highway` | Трасса (круиз 110-120 км/ч) |
|
||||
| `acceleration` | Тест ускорения (полный газ) |
|
||||
| `dynamic_city` | Продвинутый городской цикл |
|
||||
| `manual` | Ручное управление |
|
||||
|
||||
## Архитектура
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ OBD2 Emulator │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||
│ │ CAN │◄──►│ OBD2 │◄──►│ Vehicle │ │
|
||||
│ │ Interface │ │ Protocol │ │ Simulator │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||
│ │ ▲ │
|
||||
│ │ │ │
|
||||
│ ▼ ┌───────┴───────┐ │
|
||||
│ ┌─────────────┐ │ Scenario │ │
|
||||
│ │ can0/can1 │ │ Manager │ │
|
||||
│ │ vcan0 │ └───────────────┘ │
|
||||
│ └─────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Тестирование с бортовым компьютером
|
||||
|
||||
### Настройка на Raspberry Pi 5 с 2CH CAN HAT
|
||||
|
||||
```bash
|
||||
# Терминал 1: Запуск эмулятора на can1
|
||||
python src/main.py -i can1 -s city
|
||||
|
||||
# Терминал 2: Запуск бортового компьютера на can0
|
||||
# (ваш проект can_sniffer или OBD2 клиент)
|
||||
```
|
||||
|
||||
### Тест с виртуальным CAN
|
||||
|
||||
```bash
|
||||
# Терминал 1: Эмулятор
|
||||
python src/main.py -i vcan0 -s highway
|
||||
|
||||
# Терминал 2: Тестовый запрос RPM
|
||||
cansend vcan0 7DF#0201 0C 00 00 00 00 00 00
|
||||
|
||||
# Терминал 3: Мониторинг ответов
|
||||
candump vcan0 | grep 7E8
|
||||
```
|
||||
|
||||
## OBD2 протокол
|
||||
|
||||
### Формат запроса (CAN ID: 0x7DF)
|
||||
|
||||
```
|
||||
Byte 0: Length (количество значащих байт)
|
||||
Byte 1: Mode (01 = текущие данные)
|
||||
Byte 2: PID
|
||||
Bytes 3-7: Padding (0x00)
|
||||
|
||||
Пример запроса RPM: 7DF#02 01 0C 00 00 00 00 00
|
||||
```
|
||||
|
||||
### Формат ответа (CAN ID: 0x7E8)
|
||||
|
||||
```
|
||||
Byte 0: Length
|
||||
Byte 1: Mode + 0x40 (41 для Mode 01)
|
||||
Byte 2: PID
|
||||
Bytes 3+: Data
|
||||
|
||||
Пример ответа RPM 3000: 7E8#04 41 0C 2E E0 00 00 00
|
||||
RPM = (0x2E * 256 + 0xE0) / 4 = 3000
|
||||
```
|
||||
|
||||
## Лицензия
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user