PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Общение с машиной (http://pccar.ru/forumdisplay.php?f=14)
-   -   CITROEN-ARDUINO (http://pccar.ru/showthread.php?t=23275)

autowp 04.02.2016 13:53

Цитата:

Сообщение от GASCHE (Сообщение 350710)
Не знаю как у вас но если стандартно то
10 - SID
1D - PID
19 10 56 45 53 54 49 20 46 4D 90 Какие то данные
Cудя по SID это запрос каких-то данных

Зацепило слово "стандартно". Есть какой-то стандарт?

Для меня открытыми и интересующими по TP являются вопросы:
- как выбирается ID traffic control frame'ов
- как определяется, какие ID являются multiframe

Пока мой ответ на это: стандарта нет, по согласованию разработчиков. Но мне не нравится такой ответ.

lti1 04.02.2016 14:06

Цитата:

Сообщение от Dmitry8 (Сообщение 350721)
10 90 A3 0 0 5 0 5 - First frame
всё что дальше: 144 байта - Consecutive frame

Мне не понятно то, что выделено жирным, то что там 144 байта я и так понял, калькулятором умею пользоваться. То есть начиная с A3 начинаются данные и их нужно как то разбирать?

T_r_D 04.02.2016 14:07

Так народ, не путайте меня.
Моё рассуждение правильно?
Что если пакет начинается с 0001 или 0000 это или первый пакет или единственный.
Младшая часть нулевого байта и весь первый байт это размер дальнейшего пакета(ов) с данными.
Пакеты с данными начинаются всегда 0010
кусок из вики: Consecutive 7 .. 4 (byte 0) 2.

GASCHE 04.02.2016 14:08

Цитата:

Сообщение от autowp (Сообщение 350722)
Есть какой-то стандарт?.

Под стандартом следует читать ISO 15765-2, ссылку на который приводили выше.

Dmitry8 04.02.2016 14:13

Цитата:

Сообщение от GASCHE (Сообщение 350710)
10 - SID
1D - PID

Про это ничего нет в ISO 15765-2

GASCHE 04.02.2016 14:28

Цитата:

Сообщение от T_r_D (Сообщение 350726)
Что если пакет начинается с 0001 или 0000 это или первый пакет или единственный

Не понял?
Single frame
01 3E FF FF FF FF FF FF
02 10 81 FF FF FF FF FF

Цитата:

Сообщение от Dmitry8 (Сообщение 350728)
Про это ничего нет в ISO 15765-2

Согласен!

Dmitry8 04.02.2016 14:31

GASCHE,
тогда поясните откуда вы взяли SID и PID?

T_r_D 04.02.2016 14:51

GASCHE в вики написано что 4 старших бита нулевого байта если 0000, то это одиночный пакет, а если 0001, то длинный, тоесть с мультифреймом.

так, скажите мне по коду- я правильно смещаю?

PHP код:

int Length;
       if(!
digitalRead(9)) // пин 9 можно переназначить                         
       
{
       
CAN.readMsgBuf(&lenbuf);
       
canId CAN.getCanId();

          if(
canId == 293// 125HEX
          
{
            if ((
buf[0] >> 4) == 16){
              
Length = ((buf[0] << 4) | buf[1]) - (len 2); 
            }
          }




autowp 04.02.2016 14:57

Цитата:

Сообщение от T_r_D (Сообщение 350734)
GASCHE в вики написано что 4 старших бита нулевого байта если 0000, то это одиночный пакет, а если 0001, то длинный, тоесть с мультифреймом.

так, скажите мне по коду- я правильно смещаю?

PHP код:

int Length;
       if(!
digitalRead(9)) // пин 9 можно переназначить                         
       
{
       
CAN.readMsgBuf(&lenbuf);
       
canId CAN.getCanId();

          if(
canId == 293// 125HEX
          
{
            if ((
buf[0] >> 4) == 16){
              
Length = ((buf[0] << 4) | buf[1]) - (len 2); 
            }
          }




Чтобы не писать "if(canId == 293) // 125HEX" и не забивать себе голову никому не нужными DEC'ами, рекомендую "if(canId == 0x125)"

(buf[0] >> 4) == 16

Это всегда false, не может быть равен 16и байт, 4 раза поделенный на 2

- (len - 2)

Вот это не понятно. Length - это что? (понятно, что длина, но длина чего?)

Dmitry8 04.02.2016 14:59

Код:

if ((buf[0] >> 4) == 0 // Single frame
...
 if ((buf[0] >> 4) == 0x01 // First Frame
...
 if ((buf[0] >> 4) == 0x02 // Consecutive Frame



Часовой пояс GMT +4, время: 09:15.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot