[Ovmsdev] OBDII vehicle chicken-n-egg issue

Craig Leres leres at xse.com
Sun Oct 2 10:17:06 HKT 2022

I cloned the OBDII module when I started work on the C6 Corvette and 2nd 
gen CTS modules. Trying to debug my C6 Corvette canbus issues I'm not 
understanding how OBD polling works.

What I see when I look at vehicle_obdii.cpp is that there is a list of 
pids that are polled. However, OvmsVehicleOBDII::IncomingPollReply() is 
the only place that *enables* polling:

     case 0x0c:  // Engine RPM
       if (value2 == 0)
         { // Car engine is OFF
         { // Car engine is ON

I can only assume "engine RPM" canbus frames are always sent by the 
vehicle (not unreasonable); but then I don't understand why we are 
polling for it? I guess I would expect ms_v_env_on state changes to 
happen in SOvmsVehicleOBDII::IncomingFrameCan1(). But maybe 
OvmsVehicleOBDII::IncomingPollReply() gets engine RPM frames since they 
are on the list of things we're polling for? So if we didn't handle them 
in IncomingPollReply() we'd have to add a IncomingFrameCan1() routine?

Playing around with savvycan I find it's possible to have the C6 
Corvette, with engine running, to not be "on" but still send canbus 
frames to savvycan (at least until *it* gives up and disconnects). This 
makes me think I'm getting into a situation where ovms does not detect 
that the car is on but not because the canbus is not working due to 
logic errors on my part. Certainly "can can1 status" reports a similar 
number of tx fails when compared to my working vehicle (2nd gen Cadillac).


More information about the OvmsDev mailing list