We are developing a taximeter app and use OBD data to retrieve the speed and then calculate travelled distance. All works fine on cars with an engine, but on electric vehicles the pids to use are obviously different for every manufacturer.
When we use Torque, we see that it is able to retrieve the speed and I found extended PIDs on Github for Torque, like "2101" for a Kia Niro.
When we send this command, we get something strange back, like this:
01B0:6101000000001:1261455A3D00000180:61010061453F2:5F3D00000000003:000000002D7F2B4:5017E7341B2D035:2D29524E17E6346:072D1699000000
On Github it says that w is (Signed(BB)*256)+BC, but there is no explanation on what BB or BC would be.
So, my question really is, how can we retrieve the speed value from the return string.
Help is much appreciated.
Did you use the edit pid test
button to read the raw hex
response as Torque app would
see it?
Does your vehicle use 010D
for speed?
A signed two byte number from
bytes BB and BC of the raw hex
response.
Have you tried using the "normal" speed PID but using different response message IDs (headers)?
EVs nearly always support "generic" PIDs but the responses are on different CAN IDs as the ECUs are different.
Do you have any CAN tools or just ELM327?
You essentially need to request PID 010D (actually PID 0D via service 01) using header 7DF and see any responses.
If that doesn't work then use header 18DB33F1.
I am still struggling with understanding what the return values mean.
When I do a Wheel Speed 2103, I get
7E800C610302007F83
7EA037F2112
7E821B2162801807E00
The formula is A*32/25 and it tells me that A=2 in Torque app.
The only '2' I see in the returned values is in the 7EA at the last position.
So, A refers to the last position in the string?
And if I had a B in the formula, it would have value 1 that is preceeding the 2?
you have two blocks 7E8 and 7EA immediately answered
7E800C610302007F83 - here is your byte 0x02
you are using adapter setting ATCRA7E8? to read only responses from the 7E8 engine block?
no, there are no settings sent.
So, this means, in 7E800C610302007F83
when A = 02
B would be 00
C would be 7F
D would be 83?
And would be 00C6103 then?
7E8 00C 610302007F83B2162801807E
7E8 - address ECU engine
00C - number of bytes in response
6103 - positive response to request 2103 (6103=2103+0x4000hex)
B would be 00
C would be 7F
D would be 83? - yes
Ah! I start to get it now. Thank you.
But what is the second
7E8 about:
7E821B2162801807E00
would mean that there are 21B bytes...?
7E8 21 B2162801807E00
7E8 - the address from which the engine block responds
21 - identifier of the second line of the multiline response
B2 - byte E response
16 - byte F response
...
Thank you very much!
very helpful indeed.
I tried different Pids now and got this, for example:
7E8100C61030000807F
From previous answers in this thread on example
7E800C610302007F83B2162801807E
I see that there is an additional 1 after the 7E8.
What is that for?
Using CAN Extended Addresses
Some vehicles with CAN interfaces use a data
format that is slightly different from what we have
described so far. The data packets look very similar,
except that the first byte is used for the receiver’s (ie
target’s) address. The remaining seven bytes are used
as described previously.
We refer to this type of addressing as ‘CAN
Extended Addressing’, and provide support for it with
the AT CEA command.
1 - additional block address on the Getaway bus
example 7B0 04 02 10 81 00 00 00 00 7C0 F1 02 50 81 00 00 00 00 7B0 04 02 21 A2 00 00 00 00 7C0 F1 10 16 61 A2 01 02 05 7B0 04 30 FF 00 00 00 00 00 7C0 F1 20 DF 01 00 04 09 01 7C0 F1 21 02 05 DF 01 00 04 7C0 F1 22 09 01 00 04 01 00
We have an hybrid Prius Gen 3 from 2019 and have loaded the predefined PIDs labelled Prius Gen 3 (2010+).
But when we run the 2121 CCS Vehicle Speed with Equation 'A', we are not getting the vehicle speed, but heavily jumping values in the A field that are in no way related to the car's current speed.
What are we doing wrong?
i think you are getting response from another block
post the answer for this PID 2121 in Test PID mode
maybe you have problems with a low-quality adapter
try setting PID Test 2121 as in the screenshots
https://disk.yandex.ru/i/ZVXa3adyIWKvRw
https://disk.yandex.ru/i/5MKQGH2GntkAGg
https://disk.yandex.ru/i/NZUoHULvohgskQ
we tried with 2 different OBD dongles and the result is always the same. And both are not cheap ones.
Here's a video showing what Torque does, and on the right our app showing the speed determined with GPS. (look at Geschw., German for speed).
It all looks rather weird and totally wrong:
https://taximeter-gps.com/torque.mp4
What are we doig wrong?
You are trying to use a speed PID for an automatic transmission, and the automatic transmission does not support this PID
PID set Prius Gen3 is not suitable for your car KIA Niro