Can шина. Расшифровка данных

pahdom1
Offline
Зарегистрирован: 13.05.2015

Имею 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 

Вопрос: как из этого всего получить полезную информацию в человеческом виде? Например темп. охлаждайки, скорость или обороты?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Открою вам большой секрет. Точный ответ на вопрос знает только производитель авто. Обычно для овладения этой информацией нужно терпеливо логировать данные и пытаться их сопоставить с искомыми параметрами. Причем показания по сученые с Кан шины не являются ньюман рэди. Скажем байт отвечающий за показания положения окна у некоторых моделей фольцвагена 0- закрыто, а от 64 до 80 - открыто полностью, или сработка концевика водительской двери - 1, пассажирской -2, левая задняя - 63, правая - 127. Так что пилите Шура. И еще тут вам никто не поможет.

TevatroN
Offline
Зарегистрирован: 17.11.2013

Так то да, однако откуда сотни программ для телефонов?

Откуда авторы программ под андроид берут значения кодов? Реверсинженеринг таких прог приведет к нужной инфе?

lazy-fox
Offline
Зарегистрирован: 22.08.2014

Полагаю существуют типовые протоколы, описывающие параметры искомых величин. 

В большинстве случаев имеется четыре основных вектора развития протоколов: западные, восточные, американские и дизельные.

Протоколы часто соответствуют стандартам, например: SAE J1850 VPW; ISO9141-2; ISO14230-2 (KWP2000); SAE J1850 PWM; ISO 15765-4 CAN ;

И ещёCAN-это протокол сети контроллеров, по-этому CAN-шин в современных автомобилях несколько. Чаще две. В моем три: мотор/трансмиссия, безопасность/охрана, комфорт/климат. Кстати есть официальные SDK и CAN-транслятор к нему.

Копните в сторону elm327. Чудо за 5$ весьма популярно и софта к нему море. А учитывая открытость и настроенность на блютузное общение думаю можно парсить уже не голые байты, а связные коды с маской протокола.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Сразу видно человека который "глубоко шарит в кан" ...  Да на нижнем уровне протоколы соответствуют стандарту, но ТС уже принимает данные, в стандартной форме. А что делать с этими данными , которые, блин, "соответствуют стандарту", не знает. Ему нужна таблица соответсвий адреса пакета и данных в пакете с реальными данными. И даже Ваш "волшебный" SDK от форда с ардуино ему мало поможет. 

Кстати, ТС, учтите библиотека от сидстудио кривая, и маски настраивает не правильно, ее "писатель" не понимал как они действуют.

lazy-fox
Offline
Зарегистрирован: 22.08.2014

Согласен с Вами. ибо в вопросе гибкости шины она больше похожа на кусок провода, а что по нему передавать - решают инженеры производящие авто и прочую технику. Шина кстати имеет весьма узкий канал, но может работать в режиме жесткого реального времени.

Кстати ТС - обратите внимание на протокол LIN, это перспектива CAN.

pahdom1
Offline
Зарегистрирован: 13.05.2015

Всем спасибо за ответы, верно, есть куча софта на базе elm и все это универсально, т.е. подходит для многих марок авто. Опять же вопрос стоит только лишь в том, где взять таблицу или что то иное в виде: ИД - Устройство . Грубый пример  "0х12  - показания дрмв".  О расшифровке уже самих данных я имею представление. 

Какие еще есть варианты? Единственное что я вижу, это снифать проги аля "вася диагност" и то, я далек от этого.

 

Кстати, ищу информацию в связи с тем, что диплом на эту тему сдавать уже через 2 недели. Был бы рад хоть каким то наводкам куда копать.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

"типичный" студень))) 2 недели до диплома пора начинать, хватит гулять по ночам и отсыпаться днем

pahdom1
Offline
Зарегистрирован: 13.05.2015

<оффтоп>

Нам темы для диплома утвердили за 3 недели до защиты. Не понимаю вообще как можно за такой промежуток времени ходить на практику, писать диплом, еще и устройство разрабатывать.

</оффтоп>

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

понятно. странные какие то

elik745i
Offline
Зарегистрирован: 08.04.2012

Отличный пост на заметку!