Length constant: Difference between revisions

From formulasearchengine
Jump to navigation Jump to search
en>Addbot
m Bot: Migrating 1 interwiki links, now provided by Wikidata on d:q6522488
en>Yobot
m WP:CHECKWIKI error fixes using AWB (10093)
 
Line 1: Line 1:
'''OBD-II PIDs''' ([[On-board diagnostics]] '''Parameter IDs''') are codes used to request data from a vehicle, used as a diagnostic tool.
She is known by the name of Myrtle Shryock. One of the issues she loves most is to study comics and she'll be beginning some thing else alongside with it. North Dakota is her birth location but she will have to transfer 1 day or another. Hiring is his profession.<br><br>Here is my web blog: [http://www.kindrasdesigns-testing.com/index.php?do=/profile-12578/info/ kindrasdesigns-testing.com]
 
[[SAE International|SAE]] standard J/1979 defines many PIDs, but manufacturers also define many more PIDs specific to their vehicles. All light duty vehicles (i.e. less than 8,500 pounds) sold in [[North America]] since 1996, as well as medium duty vehicles (i.e. 8,500-14,000 pounds) beginning in 2005, and heavy duty vehicles (i.e. greater than 14,000 pounds) beginning in 2010{{citation needed|date=May 2013}}, are required to support OBD-II diagnostics, using a standardized [[Data link connector (automotive)|data link connector]], and a subset of the SAE J/1979 defined PIDs (or SAE J/1939 as applicable for medium/heavy duty vehicles), primarily for state mandated [[vehicle emissions control|emissions]] [[vehicle inspection|inspections]].
 
Typically, an [[auto mechanic|automotive technician]] will use PIDs with a [[Scan tool (automotive)|scan tool]] connected to the vehicle's OBD-II connector.
* The technician enters the PID
* The scan tool sends it to the vehicle's [[controller–area network]] (CAN)-bus, VPW, PWM, ISO, [[Key Word Protocol|KWP]]. After 2008, CAN only)
* A device on the bus recognizes the PID as one it is responsible for, and reports the value for that PID to the bus
* The scan tool reads the response, and displays it to the technician
 
== Modes ==
There are ten modes of operation described in the latest OBD-II standard SAE J1979.  They are as follows:
 
{| class="wikitable"
! Mode (hex) !! Description
|-
| align="center" | [[#Mode 01|<tt>01</tt>]] || Show current data
|-
| align="center" | [[#Mode 02|<tt>02</tt>]] || Show freeze frame data
|-
| align="center" | [[#Mode 03|<tt>03</tt>]] || Show stored Diagnostic Trouble Codes
|-
| align="center" | [[#Mode 04|<tt>04</tt>]] || Clear Diagnostic Trouble Codes and stored values
|-
| align="center" | [[#Mode 05|<tt>05</tt>]] || Test results, oxygen sensor monitoring (non CAN only)
|-
| align="center" | <tt>06</tt> || Test results, other component/system monitoring (Test results, oxygen sensor monitoring for CAN only)
|-
| align="center" | <tt>07</tt> || Show pending Diagnostic Trouble Codes (detected during current or last driving cycle)
|-
| align="center" | <tt>08</tt> || Control operation of on-board component/system
|-
| align="center" | [[#Mode 09|<tt>09</tt>]] || Request vehicle information
|-
| align="center" | <tt>0A</tt> || Permanent [[Diagnostic Trouble Code]]s (DTCs) (Cleared DTCs)
|}
 
Vehicle manufacturers are not required to support all modes. Each manufacturer may define additional modes above #9 (e.g.: mode 22 as defined by SAE J2190 for Ford/GM, mode 21 for Toyota) for other information e.g. the voltage of the traction battery in a [[hybrid electric vehicle]] (HEV).<ref>{{cite web|title=Escape PHEV TechInfo - PIDs|url=http://www.eaa-phev.org/wiki/Escape_PHEV_TechInfo#PIDs|work=Electric Auto Association - Plug in Hybrid Electric Vehicle|accessdate=11 December 2013}}</ref>
 
== Standard PIDs ==
The table below shows the standard OBD-II PIDs as defined by SAE J1979. The expected response for each PID is given, along with information on how to translate the response into meaningful data. Again, not all vehicles will support all PIDs and there can be manufacturer-defined custom PIDs that are not defined in the OBD-II standard.
 
Note that modes 1 and 2 are basically identical, except that Mode 1 provides current information, whereas Mode 2 provides a snapshot of the same data taken at the point when the last [[Table of OBD-II Codes|diagnostic trouble code]] was set. The exceptions are PID 01, which is only available in Mode 1, and PID 02, which is only available in Mode 2. If Mode 2 PID 02 returns zero, then there is no snapshot and all other Mode 2 data is meaningless.
 
When using Bit-Encoded-Notation, quantities like C4 means bit 4 from data byte C. Each bit is numerated from 0 to 7, so 7 is the most significant bit and 0 is the least significant bit.
 
{| class="wikitable"
|- align=center
| colspan=8 | A
| colspan=8 | B
| colspan=8 | C
| colspan=8 | D
|- align=center
| A7 || A6 || A5 || A4 || A3 || A2 || A1 || A0
| B7 || B6 || B5 || B4 || B3 || B2 || B1 || B0
| C7 || C6 || C5 || C4 || C3 || C2 || C1 || C0
| D7 || D6 || D5 || D4 || D3 || D2 || D1 || D0
|}
 
=== Mode <tt>01</tt> ===
{| class="wikitable" style="text-align: center"
! PID<BR>(hex)
! Data bytes returned
! Description
! Min value
! Max value
! Units
! Formula{{efn|name=formula|In the formula column, letters A, B, C, etc. represent the decimal equivalent of the first, second, third, etc. bytes of data.  Where a (?) appears, contradictory or incomplete information was available. <!-- Someone with a copy of the 2006 SAE HS-3000 should fact-check these.-->}}
|-
| <tt>00</tt>
| 4
| align=left | PIDs supported [01 - 20]
|
|
|
| align=left | Bit encoded [A7..D0] == [PID $01..PID $20] [[#Mode 1 PID 00|See below]]
|-
| <tt>01</tt>
| 4
| align=left | Monitor status since DTCs cleared. (Includes malfunction indicator lamp (MIL) status and number of DTCs.)
|
|
|
| align=left | Bit encoded. [[#Mode 1 PID 01|See below]]
|-
| <tt>02</tt>
| 2
| align=left | Freeze DTC
|
|
|
| align=left |
|-
| <tt>03</tt>
| 2
| align=left | Fuel system status
|
|
|
| align=left | Bit encoded. [[#Mode 1 PID 03|See below]]
|-
| <tt>04</tt>
| 1
| align=left | Calculated engine load value
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>05</tt>
| 1
| align=left | Engine coolant temperature
| -40
| 215
| °C
| align=left | A-40
|-
| <tt>06</tt>
| 1
| align=left | Short term fuel % trim&mdash;Bank 1
| -100  Subtracting Fuel (Rich Condition)
| 99.22 Adding Fuel (Lean Condition)
| %
| align=left | (A-128) * 100/128
|-
| <tt>07</tt>
| 1
| align=left | Long term fuel % trim&mdash;Bank 1
| -100  Subtracting Fuel (Rich Condition)
| 99.22 Adding Fuel (Lean Condition)
| %
| align=left | (A-128) * 100/128
|-
| <tt>08</tt>
| 1
| align=left | Short term fuel % trim&mdash;Bank 2
| -100  Subtracting Fuel (Rich Condition)
| 99.22 Adding Fuel (Lean Condition)
| %
| align=left | (A-128) * 100/128
|-
| <tt>09</tt>
| 1
| align=left | Long term fuel % trim&mdash;Bank 2
| -100  Subtracting Fuel (Rich Condition)
| 99.22 Adding Fuel (Lean Condition)
| %
| align=left | (A-128) * 100/128
|-
| <tt>0A</tt>
| 1
| align=left | Fuel pressure
| 0
| 765
| kPa (gauge)
| align=left | A*3
|-
| <tt>0B</tt>
| 1
| align=left | Intake manifold absolute pressure
| 0
| 255
| kPa (absolute)
| align=left | A
|-
| <tt>0C</tt>
| 2
| align=left | Engine RPM
| 0
| 16,383.75
| rpm
| align=left | ((A*256)+B)/4
|-
| <tt>0D</tt>
| 1
| align=left | Vehicle speed
| 0
| 255
| km/h
| align=left | A
|-
| <tt>0E</tt>
| 1
| align=left | Timing advance
| -64
| 63.5
| ° relative to #1 cylinder
| align=left | A/2 - 64
|-
| <tt>0F</tt>
| 1
| align=left | Intake air temperature
| -40
| 215
| °C
| align=left | A-40
|-
| <tt>10</tt>
| 2
| align=left | MAF air flow rate
| 0
| 655.35
| grams/sec
| align=left | ((A*256)+B) / 100
|-
| <tt>11</tt>
| 1
| align=left | Throttle position
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>12</tt>
| 1
| align=left | Commanded secondary air status
|
|
|
| align=left | Bit encoded. [[#Mode 1 PID 12|See below]]
|-
| <tt>13</tt>
| 1
| align=left | Oxygen sensors present
|
|
|
| align=left | [A0..A3] == Bank 1, Sensors 1-4.  [A4..A7] == Bank 2...
|-
| <tt>14</tt>
| 2
| align=left | Bank 1, Sensor 1:<BR>Oxygen sensor voltage,<BR>Short term fuel trim
| <BR>0<BR>-100(lean)
| <BR>1.275<BR>99.2(rich)
| Volts<BR>%
| align=left | A/200<BR>(B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
|-
| <tt>15</tt>
| 2
| align=left | Bank 1, Sensor 2:<BR>Oxygen sensor voltage,<BR>Short term fuel trim
| <BR>0<BR>-100(lean)
| <BR>1.275<BR>99.2(rich)
| Volts<BR>%
| align=left | A/200<BR>(B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
|-
| <tt>16</tt>
| 2
| align=left | Bank 1, Sensor 3:<BR>Oxygen sensor voltage,<BR>Short term fuel trim
| <BR>0<BR>-100(lean)
| <BR>1.275<BR>99.2(rich)
| Volts<BR>%
| align=left | A/200<BR>(B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
|-
| <tt>17</tt>
| 2
| align=left | Bank 1, Sensor 4:<BR>Oxygen sensor voltage,<BR>Short term fuel trim
| <BR>0<BR>-100(lean)
| <BR>1.275<BR>99.2(rich)
| Volts<BR>%
| align=left | A/200<BR>(B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
|-
| <tt>18</tt>
| 2
| align=left | Bank 2, Sensor 1:<BR>Oxygen sensor voltage,<BR>Short term fuel trim
| <BR>0<BR>-100(lean)
| <BR>1.275<BR>99.2(rich)
| Volts<BR>%
| align=left | A/200<BR>(B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
|-
| <tt>19</tt>
| 2
| align=left | Bank 2, Sensor 2:<BR>Oxygen sensor voltage,<BR>Short term fuel trim
| <BR>0<BR>-100(lean)
| <BR>1.275<BR>99.2(rich)
| Volts<BR>%
| align=left | A/200<BR>(B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
|-
| <tt>1A</tt>
| 2
| align=left | Bank 2, Sensor 3:<BR>Oxygen sensor voltage,<BR>Short term fuel trim
| <BR>0<BR>-100(lean)
| <BR>1.275<BR>99.2(rich)
| Volts<BR>%
| align=left | A/200<BR>(B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
|-
| <tt>1B</tt>
| 2
| align=left | Bank 2, Sensor 4:<BR>Oxygen sensor voltage,<BR>Short term fuel trim
| <BR>0<BR>-100(lean)
| <BR>1.275<BR>99.2(rich)
| Volts<BR>%
| align=left | A/200<BR>(B-128) * 100/128 (if B==$FF, sensor is not used in trim calc)
|-
| <tt>1C</tt>
| 1
| align=left | OBD standards this vehicle conforms to
|
|
|
| align=left | Bit encoded. [[#Mode 1 PID 1C|See below]]
|-
| <tt>1D</tt>
| 1
| align=left | Oxygen sensors present
|
|
|
| align=left | Similar to PID 13, but [A0..A7] == [B1S1, B1S2, B2S1, B2S2, B3S1, B3S2, B4S1, B4S2]
|-
| <tt>1E</tt>
| 1
| align=left | Auxiliary input status
|
|
|
| align=left | A0 == Power Take Off (PTO) status (1 == active)<BR>[A1..A7] not used
|-
| <tt>1F</tt>
| 2
| align=left | Run time since engine start
| 0
| 65,535
| seconds
| align=left | (A*256)+B
|-
| <tt>20</tt>
| 4
| align=left | PIDs supported [21 - 40]
|
|
|
| align=left | Bit encoded [A7..D0] == [PID $21..PID $40] [[#Mode 1 PID 00|See below]]
|-
| <tt>21</tt>
| 2
| align=left | Distance traveled with malfunction indicator lamp (MIL) on
| 0
| 65,535
| km
| align=left | (A*256)+B
|-
| <tt>22</tt>
| 2
| align=left | Fuel Rail Pressure (relative to manifold vacuum)
| 0
| 5177.265
| kPa
| align=left | ((A*256)+B) * 0.079
|-
| <tt>23</tt>
| 2
| align=left | Fuel Rail Pressure (diesel, or gasoline direct inject)
| 0
| 655,350
| kPa (gauge)
| align=left | ((A*256)+B) * 10
|-
| <tt>24</tt>
| 4
| align=left | O2S1_WR_lambda(1):<BR>Equivalence Ratio<BR>Voltage
| 0<BR>0
| 1.999<BR>7.999
| N/A<BR>V
| align=left | ((A*256)+B)*2/65535 or ((A*256)+B)/32768<BR>((C*256)+D)*8/65535 or ((C*256)+D)/8192
|-
| <tt>25</tt>
| 4
| align=left | O2S2_WR_lambda(1):<BR>Equivalence Ratio<BR>Voltage
| 0<BR>0
| 2<BR>8
| N/A<BR>V
| align=left | ((A*256)+B)*2/65535<BR>((C*256)+D)*8/65535
|-
| <tt>26</tt>
| 4
| align=left | O2S3_WR_lambda(1):<BR>Equivalence Ratio<BR>Voltage
| 0<BR>0
| 2<BR>8
| N/A<BR>V
| align=left | ((A*256)+B)*2/65535<BR>((C*256)+D)*8/65535
|-
| <tt>27</tt>
| 4
| align=left | O2S4_WR_lambda(1):<BR>Equivalence Ratio<BR>Voltage
| 0<BR>0
| 2<BR>8
| N/A<BR>V
| align=left | ((A*256)+B)*2/65535<BR>((C*256)+D)*8/65535
|-
| <tt>28</tt>
| 4
| align=left | O2S5_WR_lambda(1):<BR>Equivalence Ratio<BR>Voltage
| 0<BR>0
| 2<BR>8
| N/A<BR>V
| align=left | ((A*256)+B)*2/65535<BR>((C*256)+D)*8/65535
|-
| <tt>29</tt>
| 4
| align=left | O2S6_WR_lambda(1):<BR>Equivalence Ratio<BR>Voltage
| 0<BR>0
| 2<BR>8
| N/A<BR>V
| align=left | ((A*256)+B)*2/65535<BR>((C*256)+D)*8/65535
|-
| <tt>2A</tt>
| 4
| align=left | O2S7_WR_lambda(1):<BR>Equivalence Ratio<BR>Voltage
| 0<BR>0
| 2<BR>8
| N/A<BR>V
| align=left | ((A*256)+B)*2/65535<BR>((C*256)+D)*8/65535
|-
| <tt>2B</tt>
| 4
| align=left | O2S8_WR_lambda(1):<BR>Equivalence Ratio<BR>Voltage
| 0<BR>0
| 2<BR>8
| N/A<BR>V
| align=left | ((A*256)+B)*2/65535<BR>((C*256)+D)*8/65535
|-
| <tt>2C</tt>
| 1
| align=left | Commanded [[Exhaust gas recirculation|EGR]]
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>2D</tt>
| 1
| align=left | EGR Error
| -100
| 99.22
| %
| align=left | (A-128) * 100/128
|-
| <tt>2E</tt>
| 1
| align=left | Commanded evaporative purge
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>2F</tt>
| 1
| align=left | Fuel Level Input
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>30</tt>
| 1
| align=left | # of warm-ups since codes cleared
| 0
| 255
| N/A
| align=left | A
|-
| <tt>31</tt>
| 2
| align=left | Distance traveled since codes cleared
| 0
| 65,535
| km
|  align=left |(A*256)+B
|-
| <tt>32</tt>
| 2
| align=left | Evap. System Vapor Pressure
| -8,192
| 8,192
| Pa
| align=left | ((A*256)+B)/4 (A and B are [[two's complement]] signed)
|-
| <tt>33</tt>
| 1
| align=left | Barometric pressure
| 0
| 255
| kPa (Absolute)
| align=left | A
|-
| <tt>34</tt>
| 4
| align=left | O2S1_WR_lambda(1):<BR>Equivalence Ratio<BR>Current
| 0<BR>-128
| 1.999<BR>127.99
| N/A<BR>mA
| align=left | ((A*256)+B)/32,768<BR>((C*256)+D)/256 - 128
|-
| <tt>35</tt>
| 4
| align=left | O2S2_WR_lambda(1):<BR>Equivalence Ratio<BR>Current
| 0<BR>-128
| 2<BR>128
| N/A<BR>mA
| align=left | ((A*256)+B)/32,768<BR>((C*256)+D)/256 - 128
|-
| <tt>36</tt>
| 4
| align=left | O2S3_WR_lambda(1):<BR>Equivalence Ratio<BR>Current
| 0<BR>-128
| 2<BR>128
| N/A<BR>mA
| align=left | ((A*256)+B)/32768<BR>((C*256)+D)/256 - 128
|-
| <tt>37</tt>
| 4
| align=left | O2S4_WR_lambda(1):<BR>Equivalence Ratio<BR>Current
| 0<BR>-128
| 2<BR>128
| N/A<BR>mA
| align=left | ((A*256)+B)/32,768<BR>((C*256)+D)/256 - 128
|-
| <tt>38</tt>
| 4
| align=left | O2S5_WR_lambda(1):<BR>Equivalence Ratio<BR>Current
| 0<BR>-128
| 2<BR>128
| N/A<BR>mA
| align=left | ((A*256)+B)/32,768<BR>((C*256)+D)/256 - 128
|-
| <tt>39</tt>
| 4
| align=left | O2S6_WR_lambda(1):<BR>Equivalence Ratio<BR>Current
| 0<BR>-128
| 2<BR>128
| N/A<BR>mA
| align=left | ((A*256)+B)/32,768<BR>((C*256)+D)/256 - 128
|-
| <tt>3A</tt>
| 4
| align=left | O2S7_WR_lambda(1):<BR>Equivalence Ratio<BR>Current
| 0<BR>-128
| 2<BR>128
| N/A<BR>mA
| align=left | ((A*256)+B)/32,768<BR>((C*256)+D)/256 - 128
|-
| <tt>3B</tt>
| 4
| align=left | O2S8_WR_lambda(1):<BR>Equivalence Ratio<BR>Current
| 0<BR>-128
| 2<BR>128
| N/A<BR>mA
| align=left | ((A*256)+B)/32,768<BR>((C*256)+D)/256 - 128
|-
| <tt>3C</tt>
| 2
| align=left | Catalyst Temperature<BR>Bank 1, Sensor 1
| -40
| 6,513.5
| °C
| align=left | ((A*256)+B)/10 - 40
|-
| <tt>3D</tt>
| 2
| align=left | Catalyst Temperature<BR>Bank 2, Sensor 1
| -40
| 6,513.5
| °C
| align=left | ((A*256)+B)/10 - 40
|-
| <tt>3E</tt>
| 2
| align=left | Catalyst Temperature<BR>Bank 1, Sensor 2
| -40
| 6,513.5
| °C
| align=left | ((A*256)+B)/10 - 40
|-
| <tt>3F</tt>
| 2
| align=left | Catalyst Temperature<BR>Bank 2, Sensor 2
| -40
| 6,513.5
| °C
| align=left | ((A*256)+B)/10 - 40
|-
| <tt>40</tt>
| 4
| align=left | PIDs supported [41 - 60]
|
|
|
| align=left | Bit encoded [A7..D0] == [PID $41..PID $60] [[#Mode 1 PID 00|See below]]
|-
| <tt>41</tt>
| 4
| align=left | Monitor status this drive cycle
|
|
|
| align=left | Bit encoded. [[#Mode 1 PID 41|See below]]
|-
| <tt>42</tt>
| 2
| align=left | Control module voltage
| 0
| 65.535
| V
| align=left | ((A*256)+B)/1000
|-
| <tt>43</tt>
| 2
| align=left | Absolute load value
| 0
| 25,700
| %
| align=left | ((A*256)+B)*100/255
|-
| <tt>44</tt>
| 2
| align=left | Command equivalence ratio
| 0
| 2
| N/A
| align=left | ((A*256)+B)/32768
|-
| <tt>45</tt>
| 1
| align=left | Relative throttle position
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>46</tt>
| 1
| align=left | Ambient air temperature
| -40
| 215
| °C
| align=left | A-40
|-
| <tt>47</tt>
| 1
| align=left | Absolute throttle position B
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>48</tt>
| 1
| align=left | Absolute throttle position C
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>49</tt>
| 1
| align=left | Accelerator pedal position D
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>4A</tt>
| 1
| align=left | Accelerator pedal position E
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>4B</tt>
| 1
| align=left | Accelerator pedal position F
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>4C</tt>
| 1
| align=left | Commanded throttle actuator
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>4D</tt>
| 2
| align=left | Time run with MIL on
| 0
| 65,535
| minutes
| align=left | (A*256)+B
|-
| <tt>4E</tt>
| 2
| align=left | Time since trouble codes cleared
| 0
| 65,535
| minutes
| align=left | (A*256)+B
|-
| <tt>4F</tt>
| 4
| align=left | Maximum value for equivalence ratio, oxygen sensor voltage, oxygen sensor current, and intake manifold absolute pressure
| 0, 0, 0, 0
| 255, 255, 255, 2550
|, V, mA, kPa
| align=left | A, B, C, D*10
|-
| <tt>50</tt>
| 4
| align=left | Maximum value for air flow rate from mass air flow sensor
| 0
| 2550
| g/s
| align=left | A*10, B, C, and D are reserved for future use
|-
| <tt>51</tt>
| 1
| align=left | Fuel Type
|
|
|
| align=left | From fuel type table [[#Fuel Type Coding|see below]]
|-
| <tt>52</tt>
| 1
| align=left | Ethanol fuel %
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>53</tt>
| 2
| align=left | Absolute Evap system Vapor Pressure
| 0
| 327.675
| kPa
| align=left | ((A*256)+B)/200
|-
| <tt>54</tt>
| 2
| align=left | Evap system vapor pressure
| -32,767
| 32,768
| Pa
| align=left | ((A*256)+B)-32767
|-
| <tt>55</tt>
| 2
| align=left | Short term secondary oxygen sensor trim bank 1 and bank 3
| -100
| 99.22
| %
| align=left | (A-128)*100/128<BR>(B-128)*100/128
|-
| <tt>56</tt>
| 2
| align=left | Long term secondary oxygen sensor trim bank 1 and bank 3
| -100
| 99.22
| %
| align=left | (A-128)*100/128<BR>(B-128)*100/128
|-
| <tt>57</tt>
| 2
| align=left | Short term secondary oxygen sensor trim bank 2 and bank 4
| -100
| 99.22
| %
| align=left | (A-128)*100/128<BR>(B-128)*100/128
|-
| <tt>58</tt>
| 2
| align=left | Long term secondary oxygen sensor trim bank 2 and bank 4
| -100
| 99.22
| %
| align=left | (A-128)*100/128<BR>(B-128)*100/128
|-
| <tt>59</tt>
| 2
| align=left | Fuel rail pressure (absolute)
| 0
| 655,350
| kPa
| align=left | ((A*256)+B) * 10
|-
| <tt>5A</tt>
| 1
| align=left | Relative accelerator pedal position
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>5B</tt>
| 1
| align=left | Hybrid battery pack remaining life
| 0
| 100
| %
| align=left | A*100/255
|-
| <tt>5C</tt>
| 1
| align=left | Engine oil temperature
| -40
| 210
| °C
| align=left | A - 40
|-
| <tt>5D</tt>
| 2
| align=left | Fuel injection timing
| -210.00
| 301.992
| °
| align=left | (((A*256)+B)-26,880)/128
|-
| <tt>5E</tt>
| 2
| align=left | Engine fuel rate
| 0
| 3212.75
| L/h
| align=left | ((A*256)+B)*0.05
|-
| <tt>5F</tt>
| 1
| align=left | Emission requirements to which vehicle is designed
|
|
|
| align=left | Bit Encoded
|-
| <tt>60</tt>
| 4
| align=left | PIDs supported [61 - 80]
|
|
|
| align=left | Bit encoded [A7..D0] == [PID $61..PID $80] [[#Mode 1 PID 00|See below]]
|-
| <tt>61</tt>
| 1
| align=left | Driver's demand engine - percent torque
| -125
| 125
| %
| align=left | A-125
|-
| <tt>62</tt>
| 1
| align=left | Actual engine - percent torque
| -125
| 125
| %
| align=left | A-125
|-
| <tt>63</tt>
| 2
| align=left | Engine reference torque
| 0
| 65,535
| Nm
| align=left | A*256+B
|-
| <tt>64</tt>
| 5
| align=left | Engine percent torque data
| -125
| 125
| %
| align=left | A-125 Idle<BR>B-125 Engine point 1<BR>C-125 Engine point 2<BR>D-125 Engine point 3<BR>E-125 Engine point 4
|-
| <tt>65</tt>
| 2
| align=left | Auxiliary input / output supported
|
|
|
| align=left | Bit Encoded
|-
| <tt>66</tt>
| 5
| align=left | Mass air flow sensor
|
|
|
| align=left |
|-
| <tt>67</tt>
| 3
| align=left | Engine coolant temperature
|
|
|
| align=left |
|-
| <tt>68</tt>
| 7
| align=left | Intake air temperature sensor
|
|
|
| align=left |
|-
| <tt>69</tt>
| 7
| align=left | Commanded EGR and EGR Error
|
|
|
| align=left |
|-
| <tt>6A</tt>
| 5
| align=left | Commanded Diesel intake air flow control and relative intake air flow position
|
|
|
| align=left |
|-
| <tt>6B</tt>
| 5
| align=left | Exhaust gas recirculation temperature
|
|
|
| align=left |
|-
| <tt>6C</tt>
| 5
| align=left | Commanded throttle actuator control and relative throttle position
|
|
|
| align=left |
|-
| <tt>6D</tt>
| 6
| align=left | Fuel pressure control system
|
|
|
| align=left |
|-
| <tt>6E</tt>
| 5
| align=left | Injection pressure control system
|
|
|
| align=left |
|-
| <tt>6F</tt>
| 3
| align=left | Turbocharger compressor inlet pressure
|
|
|
| align=left |
|-
| <tt>70</tt>
| 9
| align=left | Boost pressure control
|
|
|
| align=left |
|-
| <tt>71</tt>
| 5
| align=left | Variable Geometry turbo (VGT) control
|
|
|
| align=left |
|-
| <tt>72</tt>
| 5
| align=left | Wastegate control
|
|
|
| align=left |
|-
| <tt>73</tt>
| 5
| align=left | Exhaust pressure
|
|
|
| align=left |
|-
| <tt>74</tt>
| 5
| align=left | Turbocharger RPM
|
|
|
| align=left |
|-
| <tt>75</tt>
| 7
| align=left | Turbocharger temperature
|
|
|
| align=left |
|-
| <tt>76</tt>
| 7
| align=left | Turbocharger temperature
|
|
|
| align=left |
|-
| <tt>77</tt>
| 5
| align=left | Charge air cooler temperature (CACT)
|
|
|
| align=left |
|-
| <tt>78</tt>
| 9
| align=left | Exhaust Gas temperature (EGT) Bank 1
|
|
|
| align=left | Special PID.  [[#Mode 1 PID 78|See below]]
|-
| <tt>79</tt>
| 9
| align=left | Exhaust Gas temperature (EGT) Bank 2
|
|
|
| align=left | Special PID.  [[#Mode 1 PID 78|See below]]
|-
| <tt>7A</tt>
| 7
| align=left | Diesel particulate filter (DPF)
|
|
|
| align=left |
|-
| <tt>7B</tt>
| 7
| align=left | Diesel particulate filter (DPF)
|
|
|
| align=left |
|-
| <tt>7C</tt>
| 9
| align=left | Diesel Particulate filter (DPF) temperature
|
|
|
| align=left |
|-
| <tt>7D</tt>
| 1
| align=left | NOx NTE control area status
|
|
|
| align=left |
|-
| <tt>7E</tt>
| 1
| align=left | PM NTE control area status
|
|
|
| align=left |
|-
| <tt>7F</tt>
| 13
| align=left | Engine run time
|
|
|
| align=left |
|-
| <tt>80</tt>
| 4
| align=left | PIDs supported [81 - A0]
|
|
|
| align=left | Bit encoded [A7..D0] == [PID $81..PID $A0] [[#Mode 1 PID 00|See below]]
|-
| <tt>81</tt>
| 21
| align=left | Engine run time for Auxiliary Emissions Control Device(AECD)
|
|
|
| align=left |
|-
| <tt>82</tt>
| 21
| align=left | Engine run time for Auxiliary Emissions Control Device(AECD)
|
|
|
| align=left |
|-
| <tt>83</tt>
| 5
| align=left | NOx sensor
|
|
|
| align=left |
|-
| <tt>84</tt>
|
| align=left | Manifold surface temperature
|
|
|
| align=left |
|-
| <tt>85</tt>
|
| align=left | NOx reagent system
|
|
|
| align=left |
|-
| <tt>86</tt>
|
| align=left | Particulate matter (PM) sensor
|
|
|
| align=left |
|-
| <tt>87</tt>
|
| align=left | Intake manifold absolute pressure
|
|
|
| align=left |
|-
| <tt>A0</tt>
| 4
| align=left | PIDs supported [A1 - C0]
|
|
|
| align=left | Bit encoded [A7..D0] == [PID $A1..PID $C0] [[#Mode 1 PID 00|See below]]
|-
| <tt>C0</tt>
| 4
| align=left | PIDs supported [C1 - E0]
|
|
|
| align=left | Bit encoded [A7..D0] == [PID $C1..PID $E0] [[#Mode 1 PID 00|See below]]
|-
| <tt>C3</tt>
| ?
| align=left | ?
| ?
| ?
| ?
| align=left | Returns numerous data, including Drive Condition ID and Engine Speed*
|-
| <tt>C4</tt>
| ?
| align=left | ?
| ?
| ?
| ?
| align=left | B5 is Engine Idle Request<BR>B6 is Engine Stop Request*
|-
! PID<BR>(hex)
! Data bytes returned
! Description
! Min value
! Max value
! Units
! Formula{{efn|name=formula}}
|}
 
=== Mode <tt>02</tt> ===
Mode <tt>02</tt> accepts the same PIDs as mode <tt>01</tt>, with the same meaning, but information given is from when the freeze frame was created.
 
You have to send the frame number in the data section of the message.
 
{| class="wikitable" style="text-align: center"
! PID<BR>(hex)
! Data bytes returned
! Description
! Min value
! Max value
! Units
! Formula{{efn|name=formula}}
|-
| <tt>02</tt>
| 2
| align=left | DTC that caused freeze frame to be stored.
|
|
|
| align=left | BCD encoded. [[#Mode 3 (no PID required)|Decoded as in mode 3]]
|}
 
=== Mode <tt>03</tt> ===
{| class="wikitable" style="text-align: center"
! PID<BR>(hex)
! Data bytes returned
! Description
! Min value
! Max value
! Units
! Formula{{efn|name=formula}}
|-
| N/A
| n*6
| align=left | Request trouble codes
|
|
|
| align=left | 3 codes per message frame, BCD encoded.  [[#Mode 3 (no PID required)|See below]]
|}
 
=== Mode <tt>04</tt> ===
{| class="wikitable" style="text-align: center"
! PID<BR>(hex)
! Data bytes returned
! Description
! Min value
! Max value
! Units
! Formula{{efn|name=formula}}
|-
| N/A
| 0
| align=left | Clear trouble codes / Malfunction indicator lamp (MIL) / Check engine light
|
|
|
| align=left | Clears all stored trouble codes and turns the MIL off.
|}
 
=== Mode <tt>05</tt> ===
{| class="wikitable" style="text-align: center"
! PID<BR>(hex)
! Data bytes returned
! Description
! Min value
! Max value
! Units
! Formula{{efn|name=formula}}
|-
| <tt>0100</tt>
|
| align=left | OBD Monitor IDs supported ($01 – $20)
|
|
|
| align=left |
|-
| <tt>0101</tt>
|
| align=left | O2 Sensor Monitor Bank 1 Sensor 1
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>0102</tt>
|
| align=left | O2 Sensor Monitor Bank 1 Sensor 2
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>0103</tt>
|
| align=left | O2 Sensor Monitor Bank 1 Sensor 3
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>0104</tt>
|
| align=left | O2 Sensor Monitor Bank 1 Sensor 4
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>0105</tt>
|
| align=left | O2 Sensor Monitor Bank 2 Sensor 1
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>0106</tt>
|
| align=left | O2 Sensor Monitor Bank 2 Sensor 2
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>0107</tt>
|
| align=left | O2 Sensor Monitor Bank 2 Sensor 3
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>0108</tt>
|
| align=left | O2 Sensor Monitor Bank 2 Sensor 4
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>0109</tt>
|
| align=left | O2 Sensor Monitor Bank 3 Sensor 1
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>010A</tt>
|
| align=left | O2 Sensor Monitor Bank 3 Sensor 2
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>010B</tt>
|
| align=left | O2 Sensor Monitor Bank 3 Sensor 3
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>010C</tt>
|
| align=left | O2 Sensor Monitor Bank 3 Sensor 4
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>010D</tt>
|
| align=left | O2 Sensor Monitor Bank 4 Sensor 1
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>010E</tt>
|
| align=left | O2 Sensor Monitor Bank 4 Sensor 2
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>010F</tt>
|
| align=left | O2 Sensor Monitor Bank 4 Sensor 3
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>0110</tt>
|
| align=left | O2 Sensor Monitor Bank 4 Sensor 4
| 0.00
| 1.275
| Volts
| align=left | 0.005 Rich to lean sensor threshold voltage
|-
| <tt>0201</tt>
|
| align=left | O2 Sensor Monitor Bank 1 Sensor 1
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>0202</tt>
|
| align=left | O2 Sensor Monitor Bank 1 Sensor 2
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>0203</tt>
|
| align=left | O2 Sensor Monitor Bank 1 Sensor 3
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>0204</tt>
|
| align=left | O2 Sensor Monitor Bank 1 Sensor 4
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>0205</tt>
|
| align=left | O2 Sensor Monitor Bank 2 Sensor 1
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>0206</tt>
|
| align=left | O2 Sensor Monitor Bank 2 Sensor 2
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>0207</tt>
|
| align=left | O2 Sensor Monitor Bank 2 Sensor 3
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>0208</tt>
|
| align=left | O2 Sensor Monitor Bank 2 Sensor 4
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>0209</tt>
|
| align=left | O2 Sensor Monitor Bank 3 Sensor 1
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>020A</tt>
|
| align=left | O2 Sensor Monitor Bank 3 Sensor 2
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>020B</tt>
|
| align=left | O2 Sensor Monitor Bank 3 Sensor 3
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>020C</tt>
|
| align=left | O2 Sensor Monitor Bank 3 Sensor 4
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>020D</tt>
|
| align=left | O2 Sensor Monitor Bank 4 Sensor 1
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>020E</tt>
|
| align=left | O2 Sensor Monitor Bank 4 Sensor 2
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>020F</tt>
|
| align=left | O2 Sensor Monitor Bank 4 Sensor 3
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
| <tt>0210</tt>
|
| align=left | O2 Sensor Monitor Bank 4 Sensor 4
| 0.00
| 1.275
| Volts
| align=left | 0.005 Lean to Rich sensor threshold voltage
|-
! PID<BR>(hex)
! Data bytes returned
! Description
! Min value
! Max value
! Units
! Formula{{efn|name=formula}}
|}
 
=== Mode <tt>09</tt> ===
{| class="wikitable" style="text-align: center"
! PID<BR>(hex)
! Data bytes returned
! Description
! Min value
! Max value
! Units
! Formula{{efn|name=formula}}
|-
| <tt>00</tt>
| 4
| align=left | Mode 9 supported PIDs (01 to 20)
|
|
|
| align=left | Bit encoded. [A7..D0] = [PID $01..PID $20] [[#Mode 1 PID 00|See below]]
|-
| <tt>01</tt>
| 1
| align=left | VIN Message Count in PID <tt>02</tt>. Only for ISO 9141-2, ISO 14230-4 and SAE J1850.
|
|
|
| align=left | Usually value will be 5.
|-
| <tt>02</tt>
| 17-20
| align=left | [[Vehicle Identification Number]] (VIN)
|
|
|
| align=left | 17-char VIN, ASCII-encoded and left-padded with null chars (<tt>0x00</tt>) if needed to.
|-
| <tt>03</tt>
| 1
| align=left | Calibration ID message count for PID <tt>04</tt>. Only for ISO 9141-2, ISO 14230-4 and SAE J1850.
|
|
|
| align=left | It will be a multiple of 4 (4 messages are needed for each ID).
|-
| <tt>04</tt>
| 16
| align=left | Calibration ID
|
|
|
| align=left | Up to 16 ASCII chars. Data bytes not used will be reported as null bytes (<tt>0x00</tt>).
|-
| <tt>05</tt>
| 1
| align=left | Calibration verification numbers (CVN) message count for PID <tt>06</tt>. Only for ISO 9141-2, ISO 14230-4 and SAE J1850.
|
|
|
| align=left |
|-
| <tt>06</tt>
| 4
| align=left | Calibration Verification Numbers (CVN)
|
|
|
| align=left | Raw data left-padded with null characters (<tt>0x00</tt>). Usually displayed as hex string.
|-
| <tt>07</tt>
| 1
| align=left | In-use performance tracking message count for PID <tt>08</tt>. Only for ISO 9141-2, ISO 14230-4 and SAE J1850.
|
|
|
| align=left | 8 if sixteen (16) values are required to be reported, 9 if eighteen (18) values are required to be reported, and 10 if twenty (20) values are required to be reported (one message is required to report two values).
|-
| <tt>08</tt>
|
| align=left | In-use performance tracking
|
|
|
| align=left |
|-
| <tt>09</tt>
| 1
| align=left | ECU name message count for PID <tt>0A</tt>
|
|
|
| align=left |
|-
| <tt>0A</tt>
| 20
| align=left | ECU name
|
|
|
| align=left | ASCII-coded. Right-padded with null chars (<tt>0x00</tt>).
|-
| <tt>0B</tt>
|
| align=left | In-use performance tracking
|
|
|
| align=left |
|-
! PID<BR>(hex)
! Data bytes returned
! Description
! Min value
! Max value
! Units
! Formula{{efn|name=formula}}
|}
 
{{notelist|close}}
 
=== Bitwise encoded PIDs ===
Some of the PIDs in the above table cannot be explained with a simple formula.  A more elaborate explanation of these data is provided here:
 
==== Mode 1 PID <tt>00</tt> ====
A request for this PID returns 4 bytes of data. Each bit, from [[Most significant bit|MSB]] to [[Least significant bit|LSB]], represents one of the next 32 PIDs and is giving information about if it is supported.
 
For example, if the car response is <tt>BE1FA813</tt>, it can be decoded like this:
 
{| class="wikitable"
|- align="center"
! scope="col" | Hexadecimal
| colspan="4" | <tt>B</tt> || colspan="4" | <tt>E</tt>
| colspan="4" | <tt>1</tt> || colspan="4" | <tt>F</tt>
| colspan="4" | <tt>A</tt> || colspan="4" | <tt>8</tt>
| colspan="4" | <tt>1</tt> || colspan="4" | <tt>3</tt>
|- align="center"
! scope="col" | Binary
| <tt>1</tt> || <tt>0</tt> || <tt>1</tt> || <tt>1</tt> || <tt>1</tt> || <tt>1</tt> || <tt>1</tt> || <tt>0</tt>
| <tt>0</tt> || <tt>0</tt> || <tt>0</tt> || <tt>1</tt> || <tt>1</tt> || <tt>1</tt> || <tt>1</tt> || <tt>1</tt>
| <tt>1</tt> || <tt>0</tt> || <tt>1</tt> || <tt>0</tt> || <tt>1</tt> || <tt>0</tt> || <tt>0</tt> || <tt>0</tt>
| <tt>0</tt> || <tt>0</tt> || <tt>0</tt> || <tt>1</tt> || <tt>0</tt> || <tt>0</tt> || <tt>1</tt> || <tt>1</tt>
|-
! scope="col" | Supported?
| {{Yes}} ||  {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} ||  {{No}}
|  {{No}} ||  {{No}} ||  {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}}
| {{Yes}} ||  {{No}} || {{Yes}} ||  {{No}} || {{Yes}} ||  {{No}} ||  {{No}} ||  {{No}}
|  {{No}} ||  {{No}} ||  {{No}} || {{Yes}} ||  {{No}} ||  {{No}} || {{Yes}} || {{Yes}}
|- align="center"
! scope="col" | PID number
| <tt>01</tt> || <tt>02</tt> || <tt>03</tt> || <tt>04</tt> || <tt>05</tt> || <tt>06</tt> || <tt>07</tt> || <tt>08</tt>
| <tt>09</tt> || <tt>0A</tt> || <tt>0B</tt> || <tt>0C</tt> || <tt>0D</tt> || <tt>0E</tt> || <tt>0F</tt> || <tt>10</tt>
| <tt>11</tt> || <tt>12</tt> || <tt>13</tt> || <tt>14</tt> || <tt>15</tt> || <tt>16</tt> || <tt>17</tt> || <tt>18</tt>
| <tt>19</tt> || <tt>1A</tt> || <tt>1B</tt> || <tt>1C</tt> || <tt>1D</tt> || <tt>1E</tt> || <tt>1F</tt> || <tt>20</tt>
|}
 
So, supported PIDs are: <tt>01</tt>, <tt>03</tt>, <tt>04</tt>, <tt>05</tt>, <tt>06</tt>, <tt>07</tt>, <tt>0C</tt>, <tt>0D</tt>, <tt>0E</tt>, <tt>0F</tt>, <tt>10</tt>, <tt>11</tt>, <tt>13</tt>, <tt>15</tt>, <tt>1C</tt>, <tt>1F</tt> and <tt>20</tt>
 
==== Mode 1 PID <tt>01</tt> ====
A request for this PID returns 4 bytes of data.
 
The first byte contains two pieces of information. Bit <tt>A7</tt> ([[Most significant bit|MSB]] of byte A, the first byte) indicates whether or not the MIL (check engine light) is illuminated.  Bits <tt>A6</tt> through <tt>A0</tt> represent the number of diagnostic trouble codes currently flagged in the ECU.
 
The second, third, and fourth bytes give information about the availability and completeness of certain on-board tests.  Note that test '''availability''' is indicated by set (<tt>1</tt>) bit and '''completeness''' is indicated by reset (<tt>0</tt>) bit.
 
{| class="wikitable"
! Bit
! Name
! Definition
|-
| <tt>A7</tt>
| MIL
| Off or On, indicates if the CEL/MIL is on (or should be on)
|-
| <tt>A6</tt>-<tt>A0</tt>
| DTC_CNT
| Number of confirmed emissions-related DTCs available for display.
|-
| <tt>B7</tt>
| RESERVED
| Reserved (should be <tt>0</tt>)
|-
| <tt>B3</tt>
| ''NO NAME''
| <tt>0</tt> = Spark ignition monitors supported<br/> <tt>1</tt> = Compression ignition monitors supported
|}
 
Here are the common bit B definitions, they are test based.
 
{| class="wikitable"
! !! Test available !! Test incomplete
|- align="center"
! scope="row" | Misfire
| <tt>B0</tt> || <tt>B4</tt>
|- align="center"
! scope="row" | Fuel System
| <tt>B1</tt> || <tt>B5</tt>
|- align="center"
! scope="row" | Components
| <tt>B2</tt> || <tt>B6</tt>
|}
 
The third and fourth bytes are to be interpreted differently depending on if the engine is [[spark plug|spark]] [[ignition system|ignition]] or [[Diesel engine|compression ignition]]. In the second (B) byte, bit 3 indicates how to interpret the C and D bytes, with <tt>0</tt> being spark and <tt>1</tt> (set) being compression.
 
The bytes C and D for spark ignition monitors:
{| class="wikitable"
! !! Test available !! Test incomplete
|- align="center"
! scope="row" | Catalyst
| <tt>C0</tt> || <tt>D0</tt>
|- align="center"
! scope="row" | Heated Catalyst
| <tt>C1</tt> || <tt>D1</tt>
|- align="center"
! scope="row" | Evaporative System
| <tt>C2</tt> || <tt>D2</tt>
|- align="center"
! scope="row" | Secondary Air System
| <tt>C3</tt> || <tt>D3</tt>
|- align="center"
! scope="row" | A/C Refrigerant
| <tt>C4</tt> || <tt>D4</tt>
|- align="center"
! scope="row" | Oxygen Sensor
| <tt>C5</tt>|| <tt>D5</tt>
|- align="center"
! scope="row" | Oxygen Sensor Heater
| <tt>C6</tt> || <tt>D6</tt>
|- align="center"
! scope="row" | EGR System
| <tt>C7</tt>|| <tt>D7</tt>
|}
 
And the bytes C and D for compression ignition monitors:
 
{| class="wikitable"
! !! Test available !! Test incomplete
|- align="center"
! scope="row" | NMHC Catalyst{{efn|NMHC ''may'' stand for Non-Methane HydroCarbons, but J1979 does not enlighten us.}}
| <tt>C0</tt> || <tt>D0</tt>
|- align="center"
! scope="row" | NOx/SCR Monitor
| <tt>C1</tt> || <tt>D1</tt>
|- align="center"
! scope="row" | Boost Pressure
| <tt>C3</tt> || <tt> D3</tt>
|- align="center"
! scope="row" | Exhaust Gas Sensor
| <tt>C5</tt> || <tt>D5</tt>
|- align="center"
! scope="row" | PM filter monitoring
| <tt>C6</tt> || <tt>D6</tt>
|- align="center"
! scope="row" | EGR and/or VVT System
| <tt>C7</tt> || <tt>D7</tt>
|}
 
{{notelist|close}}
 
==== Mode 1 PID <tt>41</tt> ====
A request for this PID returns 4 bytes of data.
The first byte is always zero. The second, third, and fourth bytes give information about the availability and completeness of certain on-board tests.  Note that test '''availability''' is represented by a set (<tt>1</tt>) bit and '''completeness''' is represented by a reset (<tt>0</tt>) bit:
 
{| class="wikitable"
! !! Test enabled !! Test incomplete
|- align="center"
! scope="row" | Reserved
| <tt>B3</tt> || <tt>B7</tt>
|- align="center"
! scope="row" | Components
| <tt>B2</tt> || <tt>B6</tt>
|- align="center"
! scope="row" | Fuel System
| <tt>B1</tt> || <tt>B5</tt>
|- align="center"
! scope="row" | Misfire
| <tt>B0</tt> || <tt>B4</tt>
|- align="center"
! scope="row" | EGR System
| <tt>C7</tt> || <tt>D7</tt>
|- align="center"
! scope="row" | Oxygen Sensor Heater
| <tt>C6</tt> || <tt>D6</tt>
|- align="center"
! scope="row" | Oxygen Sensor
| <tt>C5</tt> || <tt>D5</tt>
|- align="center"
! scope="row" | A/C Refrigerant
| <tt>C4</tt> || <tt>D4</tt>
|- align="center"
! scope="row" | Secondary Air System
| <tt>C3</tt> || <tt>D3</tt>
|- align="center"
! scope="row" | Evaporative System
| <tt>C2</tt> || <tt>D2</tt>
|- align="center"
! scope="row" | Heated Catalyst
| <tt>C1</tt> || <tt>D1</tt>
|- align="center"
! scope="row" | Catalyst
| <tt>C0</tt> || <tt>D0</tt>
|}
 
==== Mode 1 PID 78 ====
A request for this PID will return 9 bytes of data.
The first byte is a bit encoded field indicating which [[Exhaust gas temperature|EGT]] sensors are supported:
 
{| class="wikitable"
! Byte !! Description
|-
| align="center" | <tt>A</tt> || Supported EGT sensors
|-
| align="center" | <tt>B</tt>-<tt>C</tt> || Temperature read by EGT11
|-
| align="center" | <tt>D</tt>-<tt>E</tt> || Temperature read by EGT12
|-
| align="center" | <tt>F</tt>-<tt>G</tt> || Temperature read by EGT13
|-
| align="center" | <tt>H</tt>-<tt>I</tt> || Temperature read by EGT14
|}
 
The first byte is bit-encoded as follows:
 
{| class="wikitable"
! Bit !! Description
|-
| align="center" | <tt>A7</tt>-<tt>A4</tt> || Reserved
|-
| align="center" | <tt>A3</tt> || EGT bank 1, sensor 4 Supported?
|-
| align="center" | <tt>A2</tt> || EGT bank 1, sensor 3 Supported?
|-
| align="center" | <tt>A1</tt> || EGT bank 1, sensor 2 Supported?
|-
| align="center" | <tt>A0</tt> || EGT bank 1, sensor 1 Supported?
|}
 
The remaining bytes are 16 bit integers indicating the temperature in degrees Celsius in the range -40 to 6513.5 (scale 0.1), using the usual <math>(A \times 256 + B) / 10 - 40</math> formula (MSB is A, LSB is B). Only values for which the corresponding sensor is supported are meaningful.
 
The same structure applies to PID <tt>79</tt>, but values are for sensors of bank 2.
 
==== Mode 3 (no PID required) ====
A request for this mode returns a list of the DTCs that have been set. The list is encapsulated using the [[ISO 15765-2]] protocol.
 
If there are two or fewer DTCs (4 bytes) they are returned in an ISO-TP Single Frame (SF).  Three or more DTCs in the list are reported in multiple frames, with the exact count of frames dependent on the communication type and addressing details.
 
Each trouble code requires 2 bytes to describe.  The text description of a trouble code may be decoded as follows.  The first character in the trouble code is determined by the first two bits in the first byte:
 
{| class="wikitable"
! <tt>A7</tt>-<tt>A6</tt> !! First DTC character
|-
| align="center" | 00 || <tt>'''P'''</tt> - Powertrain
|-
| align="center" | 01 || <tt>'''C'''</tt> - Chassis
|-
| align="center" | 10 || <tt>'''B'''</tt> - Body
|-
| align="center" | 11 || <tt>'''U'''</tt> - Network
|}
 
The four following digits are [[Binary-coded decimal|BCD]] encoded. The second character in the DTC is a number defined by the following table:
 
{| class="wikitable"
! <tt>A5</tt>-<tt>A4</tt> !! Second DTC character
|-
| align="center" | 00 || <tt>0</tt>
|-
| align="center" | 01 || <tt>1</tt>
|-
| align="center" | 10 || <tt>2</tt>
|-
| align="center" | 11 || <tt>3</tt>
|}
 
The third character in the DTC is a number defined by
 
{| class="wikitable"
! <tt>A3</tt>-<tt>A0</tt> !! Third DTC character
|-
| align="center" | 0000 || <tt>0</tt>
|-
| align="center" | 0001 || <tt>1</tt>
|-
| align="center" | 0010 || <tt>2</tt>
|-
| align="center" | 0011 || <tt>3</tt>
|-
| align="center" | 0100 || <tt>4</tt>
|-
| align="center" | 0101 || <tt>5</tt>
|-
| align="center" | 0110 || <tt>6</tt>
|-
| align="center" | 0111 || <tt>7</tt>
|-
| align="center" | 1000 || <tt>8</tt>
|-
| align="center" | 1001 || <tt>9</tt>
|-
| align="center" | 1010 || <tt>A</tt>
|-
| align="center" | 1011 || <tt>B</tt>
|-
| align="center" | 1100 || <tt>C</tt>
|-
| align="center" | 1101 || <tt>D</tt>
|-
| align="center" | 1110 || <tt>E</tt>
|-
| align="center" | 1111 || <tt>F</tt>
|}
 
The fourth and fifth characters are defined in the same way as the third, but using bits <tt>B7</tt>-<tt>B4</tt> and <tt>B3</tt>-<tt>B0</tt>. The resulting five-character code should look something like "<tt>U0158</tt>" and can be looked up in a table of OBD-II DTCs. Hexadecimal characters (0-9, A-F), while relatively rare, are allowed in the last 3 positions of the code itself.
 
=== Enumerated PIDs ===
Some PIDs are to be interpreted specially, and aren't necessarily exactly bitwise encoded, or in any scale.
The values for these PIDs are [[Enumerated type|enumerated]].
 
==== Mode 1 PID <tt>03</tt> ====
A request for this PID returns 2 bytes of data.
The first byte describes fuel system #1.
 
{| class="wikitable"
! Value !! Description
|-
| align="center" | 1 || Open loop due to insufficient engine temperature
|-
| align="center" | 2 || Closed loop, using oxygen sensor feedback to determine fuel mix
|-
| align="center" | 4 || Open loop due to engine load OR fuel cut due to deceleration
|-
| align="center" | 8 || Open loop due to system failure
|-
| align="center" | 16 || Closed loop, using at least one oxygen sensor but there is a fault in the feedback system
|}
 
Any other value is an invalid response. There can only be one bit set at most.
 
The second byte describes fuel system #2 (if it exists) and is encoded identically to the first byte.
 
==== Mode 1 PID <tt>12</tt> ====
A request for this PID returns a single byte of data which describes the secondary air status.
 
{| class="wikitable"
! Value !! Description
|-
| align="center" | 1 || Upstream of catalytic converter
|-
| align="center" | 2 || Downstream of catalytic converter
|-
| align="center" | 4 || From the outside atmosphere or off
|-
| align="center" | 8 || Pump commanded on for diagnostics
|}
 
Any other value is an invalid response. There can only be one bit set at most.
 
==== Mode 1 PID <tt>1C</tt> ====
A request for this PID returns a single byte of data which describes which OBD standards this ECU was designed to comply with.  The different values the data byte can hold are shown below, next to what they mean:
 
{| class="wikitable"
! Value !! Description
|-
| align="center" | 1 || OBD-II as defined by the [[California Air Resources Board|CARB]]
|-
| align="center" | 2 || OBD as defined by the [[United States Environmental Protection Agency|EPA]]
|-
| align="center" | 3 || OBD and OBD-II
|-
| align="center" | 4 || OBD-I
|-
| align="center" | 5 || Not OBD compliant
|-
| align="center" | 6 || EOBD (Europe)
|-
| align="center" | 7 || EOBD and OBD-II
|-
| align="center" | 8 || EOBD and OBD
|-
| align="center" | 9 || EOBD, OBD and OBD II
|-
| align="center" | 10 || JOBD (Japan)
|-
| align="center" | 11 || JOBD and OBD II
|-
| align="center" | 12 || JOBD and EOBD
|-
| align="center" | 13 || JOBD, EOBD, and OBD II
|-
| align="center" | 14 || Reserved
|-
| align="center" | 15 || Reserved
|-
| align="center" | 16 || Reserved
|-
| align="center" | 17 || Engine Manufacturer Diagnostics (EMD)
|-
| align="center" | 18 || Engine Manufacturer Diagnostics Enhanced (EMD+)
|-
| align="center" | 19 || Heavy Duty On-Board Diagnostics (Child/Partial) (HD OBD-C)
|-
| align="center" | 20 || Heavy Duty On-Board Diagnostics (HD OBD)
|-
| align="center" | 21 || World Wide Harmonized OBD (WWH OBD)
|-
| align="center" | 22 || Reserved
|-
| align="center" | 23 || Heavy Duty Euro OBD Stage I without NOx control (HD EOBD-I)
|-
| align="center" | 24 || Heavy Duty Euro OBD Stage I with NOx control (HD EOBD-I N)
|-
| align="center" | 25 || Heavy Duty Euro OBD Stage II without NOx control (HD EOBD-II)
|-
| align="center" | 26 || Heavy Duty Euro OBD Stage II with NOx control (HD EOBD-II N)
|-
| align="center" | 27 || Reserved
|-
| align="center" | 28 || Brazil OBD Phase 1 (OBDBr-1)
|-
| align="center" | 29 || Brazil OBD Phase 2 (OBDBr-2)
|-
| align="center" | 30 || Korean OBD (KOBD)
|-
| align="center" | 31 || India OBD I (IOBD I)
|-
| align="center" | 32 || India OBD II (IOBD II)
|-
| align="center" | 33 || Heavy Duty Euro OBD Stage VI (HD EOBD-IV)
|-
| align="center" | 34-250 || Reserved
|-
| align="center" | 251-255 || Not available for assignment (SAE [[J1939]] special meaning)
|}
 
==== Fuel Type Coding ====
'''Mode 1 PID <tt>51</tt>''' returns a value from an enumerated list giving the fuel type of the vehicle.  The fuel type is returned as a single byte, and the value is given by the following table:
 
{| class="wikitable"
! Value !! Description
|-
| align="center" | 0 || Not available
|-
| align="center" | 1 || Gasoline
|-
| align="center" | 2 || Methanol
|-
| align="center" | 3 || Ethanol
|-
| align="center" | 4 || Diesel
|-
| align="center" | 5 || [[Liquefied petroleum gas|LPG]]
|-
| align="center" | 6 || [[Compressed natural gas|CNG]]
|-
| align="center" | 7 || Propane
|-
| align="center" | 8 || Electric
|-
| align="center" | 9 || [[Bi-fuel vehicle|Bifuel]] running Gasoline
|-
| align="center" | 10 || Bifuel running Methanol
|-
| align="center" | 11 || Bifuel running Ethanol
|-
| align="center" | 12 || Bifuel running LPG
|-
| align="center" | 13 || Bifuel running CNG
|-
| align="center" | 14 || Bifuel running Propane
|-
| align="center" | 15 || Bifuel running Electricity
|-
| align="center" | 16 || Bifuel running electric and combustion engine
|-
| align="center" | 17 || Hybrid gasoline
|-
| align="center" | 18 || Hybrid Ethanol
|-
| align="center" | 19 || Hybrid Diesel
|-
| align="center" | 20 || Hybrid Electric
|-
| align="center" | 21 || Hybrid running electric and combustion engine
|-
| align="center" | 22 || Hybrid Regenerative
|-
| align="center" | 23 || Bifuel running diesel
|}
 
Any other value is reserved by ISO/SAE. There are currently no definitions for [[flexible-fuel vehicle]].
 
== Non-standard PIDs ==
The majority of all OBD-II PIDs in use are non-standard. For most modern vehicles, there are many more functions supported on the OBD-II interface than are covered by the standard PIDs, and there is relatively minor overlap between vehicle manufacturers for these non-standard PIDs.
 
There is very limited information available in the public domain for non-standard PIDs. The primary source of information on non-standard PIDs across different manufacturers is maintained by the US-based [[Equipment and Tool Institute]] and only available to members. The price of ETI membership for access to scan codes starts from {{USD|7500}}.<ref name=eti-faq>
{{cite web
  | last =
  | first =
  | authorlink =
  | coauthors =
  | title = ETI Full Membership FAQ
  | work =
  | publisher =
  | date =
  | url = http://www.etools.org/FullMembershipFAQ
  | doi =
  | accessdate = 29 November 2013}}
showing cost of access to OBD-II PID documentation
</ref>
 
However, even ETI membership will not provide full documentation for non-standard PIDs. ETI state:<ref name=eti-faq />
<blockquote>
Some OEMs refuse to use ETI as a one-stop source of scan tool information. They prefer to do business with each tool company separately. These companies also require that you enter into a contract with them. The charges vary but here is a snapshot of today's{{when|date=November 2013}} per year charges as we know them:<br />
GM          $50,000<br />
Honda      $5,000<br />
Suzuki      $1,000<br />
BMW        $7,000 plus $1,000 per update. Updates occur every quarter. (This is more now, but do not have exact number)<br />
</blockquote>
 
== CAN (11-bit) Bus format ==
The PID query and response occurs on the vehicle's CAN Bus. Standard OBD requests and responses use functional addresses. The diagnostic reader initiates a query using CAN ID $7DF, which acts as a broadcast address, and accepts responses from any ID in the range $7E8 to $7EF. ECUs that can respond to OBD queries listen both to the functional broadcast ID of $7DF and one assigned ID in the range $7E0 to $7E7. Their response has an ID of their assigned ID plus 8 e.g. $7E8 through $7EF.
 
This approach allows up to eight ECUs, each independently responding to OBD queries. The diagnostic reader can use the ID in the ECU response frame to continue communication with a specific ECU. In particular, multi-frame communication requires a response to the specific ECU ID rather than to ID $7DF.
 
CAN bus may also be used for communication beyond the standard OBD messages. Physical addressing uses particular CAN IDs for specific modules (e.g., 720 for the instrument cluster in Fords) with proprietary frame payloads.
 
=== Query ===
The functional PID query is sent to the vehicle on the CAN bus at ID 7DFh, using 8 data bytes.
The bytes are:
{| class="wikitable"
|-
!
! colspan="8" |Byte
|-
! width = 8% | PID Type
! width=22% | 0
! width=22% | 1
! width=22% | 2
! width=5% | 3
! width=5% | 4
! width=5% | 5
! width=5% | 6
! width=5% | 7
|-
| SAE Standard
| Number of<br>additional<br>data bytes:<br>2
| Mode<br>01 = show current data;<br>02 = freeze frame;<br>etc.
| PID code<br>(e.g.: 05 = Engine coolant temperature)
|colspan=5| not used<br>(may be 55h)
|-
| Vehicle specific
| Number of<br>additional<br>data bytes:<br>3
| Custom mode: (e.g.: 22 = enhanced data)
|colspan=2| PID code<br>(e.g.: 4980h)
|colspan=4| not used<br>(may be 00h or 55h)
|}
 
=== Response ===
The vehicle responds to the PID query on the CAN bus with message IDs that depend on which module responded. Typically the engine or main ECU responds at ID 7E8h. Other modules, like the hybrid controller or battery controller in a Prius, respond at 07E9h, 07EAh, 07EBh, etc. These are 8h higher than the physical address the module responds to. Even though the number of bytes in the returned value is variable, the message uses 8 data bytes regardless ([[CAN bus]] protocol form Frameformat with 8 data bytes).
The bytes are:
{| class="wikitable"
|-
!
! colspan="8" |Byte
|-
! width = 15% | PID Type
! width=12% | 0
! width=26% | 1
! width=21% | 2
! width=5% | 3
! width=5% | 4
! width=5% | 5
! width=5% | 6
! width=5% | 7
|-
| SAE Standard<br>7E8h, <br>7E9h, <br>7EAh, <br>etc.
| Number of<br>additional<br>data bytes:<br>3 to 6
| Custom mode<br>Same as query, except that 40h is added to the mode value. So:<br>41h = show current data;<br>42h = freeze frame;<br>etc.
| PID code<br>(e.g.: 05 = Engine coolant temperature)
| value of the specified parameter, byte 0
| value, byte 1 (optional)
| value, byte 2 (optional)
| value, byte 3 (optional)
| not used<br>(may be 00h or 55h)
|-
| Vehicle specific<br>7E8h, or 8h + physical ID of module.
| Number of<br>additional<br>data bytes:<br>4to 7
| Custom mode: same as query, except that 40h is added to the mode value.(e.g.: 62h = response to mode 22h request)
|colspan=2| PID code<br>(e.g.: 4980h)
| value of the specified parameter, byte 0
| value, byte 1 (optional)
| value, byte 2 (optional)
| value, byte 3 (optional)
|-
| Vehicle specific<br>7E8h, or 8h + physical ID of module.
| Number of<br>additional<br>data bytes:<br>3
| 7Fh this a general response usually indicating the module doesn't recognize the request.
| Custom mode: (e.g.: 22h = enhanced diagnostic data by PID, 21h = enhanced data by offset)
| 31h
|colspan=4| not used<br>(may be 00h)
|}
 
==See also==
* [[On-board diagnostics]]
* [[Engine control unit]]
 
==References==
{{reflist}}
 
==External links==
* [http://www.engine-codes.com/ OBD-II Error Codes Definition], description and repair information for most makes of vehicles.
* [http://www.totalcardiagnostics.com/support/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=23 Generic/Manufacturer OBD2 Codes and Their Meanings]
* [http://www.datsc.com/Technical-Resources OBD error code definitions], including manufacturer-specific codes.
* [http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CONSLEG:1998L0069:19981228:EN:PDF Directive 98/69/EC of the European Parliament and of the Council of 13 October 1998].
* [http://www.auterraweb.com/aboutcan.html CAN Bus Vehicles] Partial list of 2003-2007 vehicles which support the OBD-II CAN bus standard.
* [http://kbmsystems.net/files/Engine%20ECU%20Fault%20Code%20Reading%20with%20OBDKey.pdf Fault Code Examples] Sample fault code data read using the OBDKey Bluetooth, OBDKey USB and OBDKey WLAN vehicle interface units.
 
[[Category:Technology-related lists|OBD-II Codes]]
[[Category:Automotive technologies|On Board Diagnostics]]

Latest revision as of 13:30, 5 May 2014

She is known by the name of Myrtle Shryock. One of the issues she loves most is to study comics and she'll be beginning some thing else alongside with it. North Dakota is her birth location but she will have to transfer 1 day or another. Hiring is his profession.

Here is my web blog: kindrasdesigns-testing.com