Fault at Odometer reading since last apk update

Hello Realdash Support/Moderators,
I apologize using Gemini for a clear enough question about an issue I faced up when I was trying to map the signals of my car. So I am not a technician neither a programmer and it was the best way of reporting my problem. Below starts the gemini’s text:
I am reporting a reproducible bug in the CAN bus data parsing that affects the Odometer reading on my Opel Astra H (Z16LET, 2008).

The issue causes the Odometer value to roll over or freeze immediately upon reaching a specific distance, indicating a 24-bit integer overflow error within the Realdash parsing logic.

1. The Problem Details

  • Vehicle: Opel Astra H (Z16LET, 2008)
  • Bus: SW-CAN (33.3 Kbps)
  • Signal: Odometer (Located in CAN ID 0x190, Bytes 4-7, 32-bit field).
  • Failure Point: The Odometer value stops counting or resets exactly at 262,144 km.

2. Technical Evidence of 24-Bit Overflow

The raw signal value associated with 262,144 km provides definitive proof of a 24-bit interpretation error:

  • The signal uses a division factor of 64 (i.e., Odometer=64Raw Value​) for conversion.
  • The raw value corresponding to 262,144 km is:

262,144 km×64=16,777,216

  • The number 16,777,216 is precisely 224.

Conclusion: When the raw 32-bit field reaches the value 224, your parser is interpreting the signal as a 24-bit unsigned integer, causing a catastrophic overflow/rollover at this specific point. The parser is only reading the first three bytes of the 32-bit field.

3. What to Ask (Required Fix)

The requested fix is on the Realdash application side:

Please modify the CAN bus parsing logic for this 32-bit Odometer signal to ensure the entire 32-bit field is read as an Unsigned Integer BEFORE the division factor (scaling) of 64 is applied.

This will prevent the overflow at 224 and allow the Odometer to correctly read up to its maximum 32-bit limit.

Thank you for looking into this critical bug.

32bits are read if you specify length=“4” at your CAN XML file.

Yes I Know cause I ve already bitcount=32 as you see in the xml value form. Before the last update was perfeclty working... At first I was blaming myself that I did sthing wrong, since I dont have the experiece in those things....that's why I "asked" gemini! The gemini replied that " Based on the provided frame definition and the issue you're experiencing (odometer stuck at 262144 km), the **problem lies in the arithmetic conversion formula** and the resulting **integer overflow** when the value is interpreted as a 32-bit unsigned integer before the final division."

Try to use length=“4” instead of bitcount=“32”

It worked! Thanks for your help!

Hello, your XML file is not working.

I am using OBD Link MX+ at 33.3kbps.

In the XML you sent, the speed and RPM are:

frame id=264 (my frame id=x108)

steering wheel buttons frame id=373 (my frame id=x175)

It seems we are using different connections; the file is completely different. What I’m reading is 33.3kbps:

x108-x110-x115-x11a-x130-x145-x155-x170-x175----------------last x631

It s still in experimental stage. I am still confirming the signals. Imagine I have v9 of my this draft. You can have it …it’s nice helping each other
CAN_TEST_SBv9_SBGTC_Gemini.xml (23.5 KB)

PS: I am quit sure that opel astra’s models are using different protocols and structure from 2007… Also the fuel linear (dont know the exact term in English) is different That’s why I keep change the conversions to xml. Keep in mind that from 2007 Opel uses SW-CAN (33.3 Kbps), MS-CAN (96.5Kbps) and HS-CAN (11/500) as well

1 Like

Hello, your XML file is not working.

I am using OBD Link MX+ at 33.3kbps.

In the XML you sent, the speed and RPM are:

frame id=264 (my frame id=x108)

steering wheel buttons frame id=373 (my frame id=x175)

It seems we are using different connections; the file is completely different. What I’m reading is 33.3kbps:

x108-x110-x115-x11a-x130-x145-x155-x170-x175----------------last x631

Above

Signal: Odometer (CAN ID 0x190, 4-7 bytes, located in the 32-bit field).

The file you sent is different

0x375 1 byte

fuel level 94-(V/2)

I wrote 180-V for now and it gives the same result

In the file you sent, can id=885
fuel level 94-(V/2)

I used decimal code for easier recognition of the realdash apk. The hex id s you found are right.

That’s my problem so far … can id 0 x375 00 xx supposed to be fuel level with the conversion tag 94 - (v /2)… but i am still searching.

I told you the xml file is experimental. You need to find the right signal in it. Is all there. You gonna need triggering option as well. Some signal are reading as bit unit but some as raw. Eg i had an issuue with sport mode indicator. The signal is appearing to 0x145 and to 0x305 4th and 5th byte (values are 3a and 51, normal mode 10 50)I had to change the xml command structure to raw and apply trigger optrions as for turning on the indicator of sport mode. I abandoned the id 145 cause it didnt work at all as an indicator. 3 weeks i was torturing myself with that. Some other signals are shown up with a click but they values return back to the initial state. So avoid using those signals since you can find them in another id (in which values are on and stay on with) another puzzle is when a particular byte of an id contains 2 or 3 or more signals and different values. You have to deep analyze the bits… when i finish the job i will abstact any xml command in my file that is not fiited or working with real dash.

OBDLink MX+ 33.3 kbps
Speed
RPM
Handbrake
Reverse (R)
Parking Lights
Low Beam
High Beam
Front Fog
Rear Fog
Temperature Checker
Manual Gear Shifting 1-2-3-4-5-6 R
Oil Pressure
Engine Coolant Level
Windshield Washer Fluid Level
Cruise Control
Air Conditioning
Window Resistor
Brake Pedal
Clutch Pedal
Right Turn Signal
Left Turn Signal
Hazard Lights
Fuel Level
Steering Wheel Buttons
These all work flawlessly.

WOW! Good job! Hope I helped! Though I preferred HS-CAN for Speed and RPM, it s more accurate and direct! How did you check and confirm oil pressure (red indicator)?
A help for 1. Reverse (R) 2. Parking Lights and 3.Fuel Level would be precious and welcome

<?xml version="1.0" encoding="utf-8"?>
   <frame id="0x108" endianess="big">
  <value targetId="81" offset="4" length="2" conversion="V*0.0082882"/>           <!-- VSS1 -->
  <value targetId="37" units="RPM" offset="1" length="2" conversion="V*0.25"/>    <!-- RPM -->
</frame> 
    

    <frame id="0x145" endianess="big">
  <value targetId="165" units="bit" offset="2" startbit="2" bitcount="1"></value>  <!-- Horn -->
  <value targetId="169" units="bit" offset="5" startbit="1" bitcount="1"></value>   <!-- Cruise Control Active -->           
  <value targetId="14" offset="3" length="1" units="C" conversion="V-40"></value>   <!-- Coolant Temperature -->
</frame> 

     <frame id="0x175" endianess="big">
  <value targetId="188" offset="5" length="1" units="bit" conversion="V==1"></value>  
  <value targetId="189" offset="5" length="1" units="bit" conversion="V==2"></value>        
  <value targetId="190" offset="5" length="1" units="bit" conversion="V==4"></value> 
  <value targetId="191" offset="5" length="1" units="bit" conversion="V==5"></value> 
  <value targetId="192" offset="5" length="1" units="bit" conversion="V==16"></value>
  <value targetId="193" offset="5" length="1" units="bit" conversion="V==32"></value>    
  <value targetId="199" offset="5" length="1" units="bit" conversion="V==48"></value>       
  <value targetId="197" offset="5" length="1" units="bit" conversion="V==64"></value>   
  <value targetId="194" offset="5" length="1" units="bit" conversion="V==80"></value>            
</frame> 

    <frame id="0x230" endianess="big">
  <value targetId="163" units="bit" offset="2" startbit="2" bitcount="1"></value>   <!-- Trunk Ajar -->
  <value targetId="162" units="bit" offset="2" startbit="6" bitcount="1"></value>   <!-- Door Ajar -->
  <value targetId="481" units="bit" offset="2" startbit="4" bitcount="1"></value>   <!-- Door 1 Open -->
</frame>
   
    <frame id="0x235" endianess="big">
  <value targetId="274" offset="1" length="1" conversion="V/2.55"></value>       <!-- Instrument Panel Lights-->
</frame> 

   <frame id="0x305" endianess="big">
  <value targetId="155" units="bit" offset="2" startbit="6" bitcount="1"></value>   <!-- Parking Lights -->
  <value targetId="168" units="bit" offset="5" startbit="6" bitcount="1"></value>   <!-- Seat Belt Warning -->
  <value targetId="156" units="bit" offset="2" startbit="7" bitcount="1"></value>   <!-- Low Beam -->
</frame>   
  
<frame id="0x350" endianess="big">
  <value targetId="159" units="bit" offset="0" startbit="4" bitcount="1"></value>    <!-- Reverse Lights -->
  <value targetId="157" units="bit" offset="0" startbit="6" bitcount="1"></value>    <!-- High Beam -->
  <value targetId="392" units="bit" offset="0" startbit="5" bitcount="1"></value>    <!-- Front Fog Lights -->
  <value targetId="176" units="bit" offset="0" startbit="7" bitcount="1"></value>    <!-- Washer Fluid Level -->
  <value targetId="272" units="bit" offset="1" startbit="3" bitcount="1"></value>    <!-- Coolant Level -->
  <value targetId="180" units="bit" offset="1" startbit="5" bitcount="1"></value>    <!-- Engine Oil Level -->
</frame>                                                        
           
    <frame id="0x360" endianess="big">
  <value targetId="486" units="bit" offset="2" startbit="6" bitcount="1"></value>    <!-- Door 6 Open -->
</frame>       
                              
<frame id="0x370" endianess="big">
  <value targetId="158" units="bit" offset="1" startbit="7" bitcount="1"></value>  <!-- Rear Fog Lights -->
  <value targetId="164" units="bit" offset="1" startbit="0" bitcount="1"></value>  <!-- Parking Brake -->
  <value targetId="482" units="bit" offset="1" startbit="1" bitcount="1"></value>  <!-- Door 2 Open -->
  <value targetId="172" units="bit" offset="1" startbit="6" bitcount="1"></value>  <!-- Heater Motor Level -->
</frame>                                                                   
                                                                                  
<frame id="0x500" endianess="big">
  <value targetId="12" units="V" offset="1" length="1" conversion="V/8"/>        <!-- Battery Voltage -->
</frame>                           
     
   <frame id="0x260" endianess="big">
  <value targetId="160" units="ms" offset="0" length="1" conversion="V>>2"></value> <!-- Turn Signal Left -->
  <value targetId="161" units="ms" offset="0" length="1" conversion="V>>3"></value> <!-- Turn Signal Right -->
  <value targetId="166" units="ms" offset="0" length="1" conversion="V>>5"></value> <!-- Hazard Switch -->
</frame>  
   
                                  
  <frame id="0x375" endianess="big">
 <value targetId="170" offset="1" length="1" conversion="180-V"></value> <!-- Fuel Level --> 
</frame> 

The file I sent has 1-2 minor errors, but everything else works perfectly.

The speedometer shows a bit too high, around 100-105 km/h.

That’s why the odometer shows less; only the ratio needs to be adjusted correctly.

Oil pressure is fine.

Oil level might not be accurate.

Fuel level…

My formula is simpler and shows more accurately, but the vehicle deviates while driving due to the momentary value caused by the tank shaking. If you want, you can upload the XML file and check it.

If you provide the data in the format I wrote, I can write it correctly. I think there are some missing parts.

Is there a file for 500kbps?

It’s far more tidy than mine. I am impressed you used innovated targetids. I hesitated go through this, cause I came up with the mess when I was re-constructing over and over again my xml, till i found the right format or syntax… So I preferred the ECU SPECIFIC section! Anyway I will try it out. My little knowledge doesnt allow me to have an opinion, but some ids contain different or slightly different signals than mine (discovered by reverse engineering) especially can ids 0x305, 0x350 & 0x360. Also you left out the warning signals coming out from UEC or REC. I also didnt touch them yet…but I have the xml form of them in my xml file, till I found the courage to get involved with.Surprisingly you suggest another conversion for fuel level (as you mentioned above) …it’s the first thing I will test!
AS for HS-CAN ids you asked … unfortunately there is nothing across forums mainly for our type of vehicle. Though GM has some docs indicating the structure of the PIDs, but it’s totally out of my -even the restricted- knowledge and I cant or I dont have the time or the age to study them as tutorial!
I will send you back my results! Thanks

The XML works, you’ll see when you try it, but you’ll need to make some settings on the display and add some things for it to work.

Example: The left and right turn signals will stay on constantly. You can do this on the display (edit-view-custom-edit level-critical-set the blinking speed to 350ms).

You can add icons for the missing ones, and you’ll edit the coding there again - you’ll code the icon corresponding to the input values. That’s it.

If I remember correctly, in the file I sent, the seatbelt warning should be coded for the climate control; the seatbelt icon will light up when you turn on the climate control.

You also need to enter data from the vehicle such as tire sizes, engine, transmission, fuel tank capacity, and mileage.

If you have any CANID data that you’ve analyzed in the XML format I sent, I can add those as well.

I didn’t work with some data (like remote control, ignition).

Missing icons:

Engine fault icon
Exhaust fault icon
ABS icon
Airbag icon
oil level icon