Настройка следующая:
- Клиент Python → отправляет запросы UDS через CAN-интерфейс Kvaser.
- CANoe CAPL скрипт → действует как ECU, отвечает на диагностические службы.
Некоторые службы (например, ECUReset 0x11) работают нормально:
Журнал Python:
Код: Выделить всё
Tx: 0211010000000000
Rx: 0251010000000000
Received positive response for ECUReset (0x11)
Журнал Python:
Код: Выделить всё
Tx: 0210020000000000
RAW CAN: ID=0x7EC, Data=065002003201f400
TimeoutException – Did not receive IsoTP frame in time
Код: Выделить всё
ID=7EC Data=06 50 02 00 32 01 F4 00
Мой код CAPL (упрощенный)
Код: Выделить всё
case 0x10: // DiagnosticSessionControl
{
byte resp[8];
resp[0] = 0x50;
resp[1] = data[1];
resp[2] = 0x00;
resp[3] = 0x32;
resp[4] = 0x01;
resp[5] = 0xF4;
CanTpSendData(gHandle, resp, 6);
write(">> Session Control 0x%02X", data[1]);
}
break;
case 0x27: // SecurityAccess
{
byte resp[8];
resp[0] = 0x67;
resp[1] = data[1];
resp[2] = 0x12;
resp[3] = 0x34;
resp[4] = 0x56;
resp[5] = 0x78;
CanTpSendData(gHandle, resp, 6); // send seed
write(">> Sent seed.");
}
break;
Для SessionControl (0x10) ответ должен быть следующим:
Код: Выделить всё
50 02 00 32 01 F4
Для SecurityAccess (0x27, sub 0x01) ответ должен быть следующим:
Код: Выделить всё
67 01 12 34 56 78
Что происходит на самом деле
CANoe отправляет 8-байтовые кадры с завершающим заполнением 00, например:
Код: Выделить всё
06 50 02 00 32 01 F4 00
06 67 01 12 34 56 78 00
Мой вопрос
- Почему CanTpSendData(gHandle, resp, 6) по-прежнему приводит к 8-байтовому кадру CAN?
/> - Как заставить симуляцию CANoe CAPL отправлять именно то количество байтов UDS, которое я указал (без заполнения), чтобы udsoncan/isotp принял это?
- Существует ли лучшая практика обработки заполнения между Python isotp и CANoe CAPL?
- (по-прежнему отправляет 8-байтовые кадры с дополнительными нулями).
Код: Выделить всё
CanTpSetPadding(gHandle, 0x00); - Инициализация массива нулями () перед заполнением.
Код: Выделить всё
byte resp[8] = {0}; - Различные значения для len в CanTpSendData.
Подробнее здесь: https://stackoverflow.com/questions/797 ... p-when-ecu
Мобильная версия