Can шина. Расшифровка данных
- Войдите на сайт для отправки комментариев
Ср, 13/05/2015 - 19:32
Имею arduino uno с can bus shield . Через COM-ODB2 подключаюсь к авто.
Используя пример из библиотеки -
// demo: CAN-BUS Shield, receive data #include <mcp_can.h> #include <SPI.h> long unsigned int rxId; unsigned char len = 0; unsigned char rxBuf[8]; MCP_CAN CAN0(10); // Set CS to pin 10 void setup() { Serial.begin(115200); CAN0.begin(CAN_500KBPS); // init can bus : baudrate = 500k pinMode(2, INPUT); // Setting pin 2 for /INT input Serial.println("MCP2515 Library Receive Example..."); } void loop() { if(!digitalRead(2)) // If pin 2 is low, read receive buffer { CAN0.readMsgBuf(&len, rxBuf); // Read data: len = data length, buf = data byte(s) rxId = CAN0.getCanId(); // Get message ID Serial.print("ID: "); Serial.print(rxId, HEX); Serial.print(" Data: "); for(int i = 0; i<len; i++) // Print each byte of the data { if(rxBuf[i] < 0x10) // If data byte is less than 0x10, add a leading zero { Serial.print("0"); } Serial.print(rxBuf[i], HEX); Serial.print(" "); } Serial.println(); } } /********************************************************************************************************* END FILE *********************************************************************************************************/
получаю ответ следующего вида:
ID: F1 Data: 00 02 00 40 00 00 ID: 120 Data: 00 15 C8 CE 00 ID: 12A Data: 10 F0 70 60 00 00 30 80 ID: 130 Data: 02 ID: F1 Data: 1C 02 00 40 00 00 ID: 135 Data: 00 08 0D 02 05 0F 00 00 ID: 137 Data: 00 00 00 00 00 00 00 00 ID: 139 Data: 00 00 00 00 00 00 00 00 ID: 140 Data: 00 1A 00 ID: F1 Data: 28 01 00 40 00 00 ID: 160 Data: 00 00 00 00 00 ID: 1E1 Data: 00 00 00 00 00 00 00 ID: F1 Data: 34 02 00 40 00 00 ID: 1F1 Data: 80 0A 00 00 08 00 00 62
Вопрос: как из этого всего получить полезную информацию в человеческом виде? Например темп. охлаждайки, скорость или обороты?
Открою вам большой секрет. Точный ответ на вопрос знает только производитель авто. Обычно для овладения этой информацией нужно терпеливо логировать данные и пытаться их сопоставить с искомыми параметрами. Причем показания по сученые с Кан шины не являются ньюман рэди. Скажем байт отвечающий за показания положения окна у некоторых моделей фольцвагена 0- закрыто, а от 64 до 80 - открыто полностью, или сработка концевика водительской двери - 1, пассажирской -2, левая задняя - 63, правая - 127. Так что пилите Шура. И еще тут вам никто не поможет.
Так то да, однако откуда сотни программ для телефонов?
Откуда авторы программ под андроид берут значения кодов? Реверсинженеринг таких прог приведет к нужной инфе?
Полагаю существуют типовые протоколы, описывающие параметры искомых величин.
В большинстве случаев имеется четыре основных вектора развития протоколов: западные, восточные, американские и дизельные.
Протоколы часто соответствуют стандартам, например: SAE J1850 VPW; ISO9141-2; ISO14230-2 (KWP2000); SAE J1850 PWM; ISO 15765-4 CAN ;
И ещё: CAN-это протокол сети контроллеров, по-этому CAN-шин в современных автомобилях несколько. Чаще две. В моем три: мотор/трансмиссия, безопасность/охрана, комфорт/климат. Кстати есть официальные SDK и CAN-транслятор к нему.
Копните в сторону elm327. Чудо за 5$ весьма популярно и софта к нему море. А учитывая открытость и настроенность на блютузное общение думаю можно парсить уже не голые байты, а связные коды с маской протокола.
Сразу видно человека который "глубоко шарит в кан" ... Да на нижнем уровне протоколы соответствуют стандарту, но ТС уже принимает данные, в стандартной форме. А что делать с этими данными , которые, блин, "соответствуют стандарту", не знает. Ему нужна таблица соответсвий адреса пакета и данных в пакете с реальными данными. И даже Ваш "волшебный" SDK от форда с ардуино ему мало поможет.
Кстати, ТС, учтите библиотека от сидстудио кривая, и маски настраивает не правильно, ее "писатель" не понимал как они действуют.
Согласен с Вами. ибо в вопросе гибкости шины она больше похожа на кусок провода, а что по нему передавать - решают инженеры производящие авто и прочую технику. Шина кстати имеет весьма узкий канал, но может работать в режиме жесткого реального времени.
Кстати ТС - обратите внимание на протокол LIN, это перспектива CAN.
Всем спасибо за ответы, верно, есть куча софта на базе elm и все это универсально, т.е. подходит для многих марок авто. Опять же вопрос стоит только лишь в том, где взять таблицу или что то иное в виде: ИД - Устройство . Грубый пример "0х12 - показания дрмв". О расшифровке уже самих данных я имею представление.
Какие еще есть варианты? Единственное что я вижу, это снифать проги аля "вася диагност" и то, я далек от этого.
Кстати, ищу информацию в связи с тем, что диплом на эту тему сдавать уже через 2 недели. Был бы рад хоть каким то наводкам куда копать.
"типичный" студень))) 2 недели до диплома пора начинать, хватит гулять по ночам и отсыпаться днем
<оффтоп>
Нам темы для диплома утвердили за 3 недели до защиты. Не понимаю вообще как можно за такой промежуток времени ходить на практику, писать диплом, еще и устройство разрабатывать.
</оффтоп>
понятно. странные какие то
Отличный пост на заметку!