เกจวัด OBD2 ทำงานยังไง? อธิบาย CANBUS และ ทดลองดูข้อมูล CANBUS จริงบนรถ

แชร์บทความ

สวัสดีครับ วันนี้เราจะมาคุยกันเรื่อง เกจวัด OBD2 กันครับ หลายคนอาจเคยเห็นอุปกรณ์ที่เอาไว้เสียบกับพอร์ต OBD ของรถ แล้วขึ้นค่าต่าง ๆ เช่น รอบเครื่องยนต์ ความเร็ว หรืออุณหภูมิ ซึ่งหลายคนก็สงสัยว่า ไอ้เจ้าตัวนี้มันทำงานยังไง แล้วมันไปเอาข้อมูลมาจากตรงไหน ค่าที่ได้มันจริงหรือหลอกกันแน่

สำหรับท่านใดที่ไม่อยากอ่าน ผมได้ทำคลิปอธิบายเนื้อหาทั้งหมดไว้แล้วครับ สามารถรับชมคลิปเต็มได้ที่

และมีอีกคลิปที่รีวิวการทำงานและเปรียบ เกจวัด OBD2 แต่ละแบบไว้ สามารถรับชมคลิปเต็มได้ที่

CANBUS คืออะไร

แล้วข้อมูลที่ เกจวัด OBD2 ดึงมา มันอยู่ที่ไหน?
คำตอบคือ มันอยู่ใน CANBUS (Controller Area Network BUS) ซึ่งเปรียบเสมือน “ระบบอินเทอร์เน็ตภายในรถ”

CANBUS คืออะไร

CANBUS ทำงานยังไง?

  • รถยนต์สมัยใหม่มี ECU หลายตัว เช่น ECU เครื่องยนต์, ECU เกียร์, ECU ABS
  • ECU เหล่านี้ต้องสื่อสารกันตลอดเวลา เพื่อให้รถทำงานได้อย่างสมบูรณ์
  • CANBUS คือเครือข่ายกลางที่เชื่อม ECU เหล่านี้เข้าด้วยกัน ด้วยสายไฟเพียง 2 เส้น (CAN High, CAN Low)
  • เวลามีข้อมูล เช่น “รอบเครื่องยนต์” หรือ “ความเร็วรถ” มันจะถูกส่งออกมาเป็นข้อความดิจิทัลที่มี CAN ID + Data

ยกตัวอย่างง่าย ๆ:

  • ECU เครื่องยนต์ส่งค่า RPM ออกมา → ECU ที่หน้าปัดก็รับไปแสดงบนมาตรวัด
  • ECU เกียร์ส่งสถานะเกียร์ → ECU เครื่องยนต์ใช้ข้อมูลนั้นคำนวณแรงบิด

ทั้งหมดนี้คือสิ่งที่ CANBUS ทำงานเบื้องหลังแบบเรียลไทม์

CANBUS Message คืออะไร?

เวลารถยนต์สื่อสารกัน ข้อมูลไม่ได้วิ่งออกมาเป็นตัวเลขชัด ๆ อย่าง “รอบเครื่องยนต์ = 2000” หรือ “ความเร็ว = 60” หรอกนะครับ แต่มันจะออกมาในรูปแบบที่เรียกว่า CANBUS Message หรือ “เฟรมข้อมูล”

canbus message

โครงสร้างของ CANBUS Message

เฟรมข้อมูลหนึ่งชุดจะมี 2 ส่วนหลัก ๆ:

  1. CAN ID → ตัวระบุว่า ข้อความนี้มาจาก ECU ตัวไหน หรือเกี่ยวข้องกับข้อมูลอะไร เช่น เครื่องยนต์, เกียร์, ABS
  2. Size → ค่าขนาดของ Data ที่ถูกส่งออกมา
  3. Data → ค่าตัวเลขดิบที่ถูกส่งออกมา

ตัวอย่างเช่น:

CANID: 0x0C
Size: 0x08
DATA: 0x0A 0x3B 0x00 0x00 0x15 0x00 0x00 0x00

ข้อมูลชุดนี้ ECU อื่น ๆ ที่อยู่บนรถก็จะฟังอยู่ แล้วใครที่ต้องการใช้ก็จะหยิบเอาไปแปลค่าเอง

CAN Message ไม่ได้บอกตรง ๆ

สมมุติว่าเราอยากรู้รอบเครื่องยนต์ (RPM) ข้อมูลใน Data มันไม่ได้เขียนว่า “2000 รอบต่อนาที” ตรง ๆ นะครับ แต่จะเป็นตัวเลขดิบ เช่น 0x0A 0x3B แล้วต้องมีสูตรแปลงค่าอีกที

ตัวอย่างเช่น:

RPM = (Data[0] * 256 + Data[1]) / 4

ถ้า Data[0] = 0x0A และ Data[1] = 0x3B → ได้ค่า 2619/4 = 654.75 รอบต่อนาที

ทำไม CAN Message ไม่ส่งข้อมูลตรง ๆ?

1. เรื่องของ ประหยัดพื้นที่สื่อสาร

CANBUS ออกแบบมาให้ส่งข้อมูลได้เร็วมาก ๆ แต่ Data ของ 1 Message มีได้สูงสุด 8 ไบต์ (64 บิต) เท่านั้น

  • ถ้า ECU ต้องส่งค่าหลายอย่าง เช่น RPM, อุณหภูมิ, แรงดัน มันต้องอัดรวมกันใน Message เดียว
  • การส่งเลขดิบแบบ “2000” (เป็นทศนิยมเต็ม ๆ) มันเปลืองบิตเกินไป
  • ดังนั้นวิธีแก้คือ → ส่งเป็น “ค่าดิบ” ที่ย่อแล้ว เช่น 0x1F 0x40 แล้วค่อยใช้สูตรคำนวณให้ได้ค่าจริง

2. เรื่องของ มาตรฐานและความเข้ากันได้

ค่าที่วิ่งบน CANBUS ต้องใช้ร่วมกันได้หลาย ECU หลายรุ่น

  • ถ้าแต่ละค่ายรถส่งเลขตรง ๆ ไม่เหมือนกัน รถจะอ่านค่าผิด
  • เลยต้องกำหนดสูตรมาตรฐาน เช่น “รอบเครื่องคูณด้วย 0.25” หรือ “อุณหภูมิบวกด้วย -40”
  • เพื่อให้ทุก ECU แปลค่าออกมาเหมือนกัน

3. เรื่องของ ความละเอียด (Resolution) ช่วงของข้อมูล

สมมุติว่าเราต้องการแสดงรอบเครื่อง 0 – 8000 RPM

  • ถ้าส่งเลขตรง ๆ 2000 RPM → ต้องใช้ตัวเลขใหญ่ → เปลืองบิต
  • แต่ถ้าเราบอกว่า “ค่าดิบ 1 หน่วย = 0.25 รอบ”
    • ค่า 2000 RPM → จะถูกส่งเป็น 8000 (เพราะ 8000 × 0.25 = 2000)
    • แบบนี้สามารถเก็บรายละเอียดได้แม่นยำขึ้นในพื้นที่เท่าเดิม

4. เรื่องของ Offset (ค่าชดเชย)

บางค่าต้องการจุดเริ่มต้นที่ไม่ใช่ศูนย์ เช่น อุณหภูมิ

  • ข้อมูลดิบที่ส่งออกมาอาจเริ่มจาก 0 = -40 °C
  • ดังนั้นสูตรจริง ๆ คือ: อุณหภูมิจริง = ค่าดิบ - 40
  • ถ้า ECU ส่งค่า 60 → จริง ๆ คือ 20 °C

ตัวอย่างจริง

RPM

  • Data[0] และ Data[1] รวมกันเป็นตัวเลข
  • สูตร: RPM = (Data[0] * 256 + Data[1]) / 4
  • ทำไมต้องหารด้วย 4? → เพราะ 1 หน่วยดิบ = 0.25 RPM

อุณหภูมิน้ำหล่อเย็น (Coolant Temp)

  • ใช้ Data[0] ตัวเดียว
  • สูตร: Temp = Data[0] - 40
  • ถ้า Data[0] = 100 → อุณหภูมิจริง = 60 °C

สรุปง่าย ๆ

CANBUS ไม่ส่งข้อมูลตรง ๆ เพราะ:

  • ต้อง ประหยัดพื้นที่ (1 Message แค่ 8 ไบต์)
  • ต้อง ใช้ร่วมกันได้ ตามมาตรฐาน
  • ต้อง แปลงค่า เพื่อให้ละเอียดและแม่นยำ
  • ต้องมี Offset สำหรับค่าที่ไม่เริ่มจากศูนย์

พูดง่าย ๆ เลยครับ รถส่งข้อมูลมาเป็น “รหัสลับ” ส่วนเกจ OBD2 หรือเครื่องสแกนเนอร์ก็มี “สูตรถอดรหัส” ให้แปลเป็นค่าจริง ๆ

sniffer canbus message

เกจ OBD2 เอาข้อมูลจาก Message ยังไง

เกจ OBD2 ที่เราเสียบเข้าไป มันทำงานเหมือน “คนแปลภาษา” ครับ

  1. มันฟัง CAN Message ที่วิ่งอยู่บนรถตลอดเวลา
  2. เลือกเฉพาะ ID ที่เกี่ยวข้อง เช่น รอบเครื่อง, อุณหภูมิ, ความเร็ว
  3. แปลง Data ดิบด้วยสูตร → กลายเป็นค่าจริง
  4. แสดงผลออกมาเป็นตัวเลขหรือกราฟที่เราเห็นบนหน้าจอ

พูดง่าย ๆ เลยคือ รถส่งข้อมูลเป็น ภาษาดิจิทัล (CAN Message) ส่วนเกจ OBD2 ทำหน้าที่ “ล่าม” แปลเป็นภาษาคน

OBD2 คืออะไร

อย่างแรกเลยต้องบอกก่อนว่า รถยนต์ทุกคันในยุคใหม่ช่วงปี 2005 จนถึงปัจะมี OBD2 Port อยู่แล้วครับ มันคือพอร์ตกลางที่ใช้เชื่อมต่อกับ ECU หรือคอมพิวเตอร์ในรถ เพื่อให้เราสามารถอ่านค่าต่าง ๆ ได้

ค่าที่อ่านได้ก็มีเยอะมาก เช่น รอบเครื่องยนต์ (RPM), ความเร็ว, อุณหภูมิน้ำหล่อเย็น, ค่าแรงดันอากาศในท่อร่วม หรือแม้แต่โค้ดความผิดปกติ (DTC) เวลารถมีปัญหา ซึ่งทั้งหมดนี้คือมาตรฐานกลางที่เรียกว่า OBD2

เกจวัด OBD2 ทำงานยังไง

ทีนี้เกจวัด OBD2 ที่เราเสียบใช้งาน มันไม่ได้ซับซ้อนเลยครับ มันก็แค่:

  1. เสียบเข้าพอร์ต OBD2 → พอเสียบปุ๊บ เกจก็เชื่อมเข้ากับ CANBUS ของรถทันที
  2. ส่งคำสั่งขอข้อมูล → เกจจะส่ง request ไปหา ECU ว่า ขอรอบเครื่องยนต์หน่อย ขออุณหภูมิน้ำหล่อเย็นหน่อย
  3. ECU ส่งข้อมูลกลับมา → ECU ก็ตอบกลับมาเป็นข้อมูลดิบในรูปแบบดิจิทัล
  4. เกจวัดแปลงค่าแล้วแสดงผล → ข้อมูลดิบพวกนี้ก็ถูกแปลงเป็นตัวเลขบนจอที่เราเห็น เช่น RPM, ความเร็ว, อุณหภูมิ

ดังนั้นเวลาคุณเห็นตัวเลขขึ้นบนเกจ มันก็คือข้อมูลจริง ๆ ที่วิ่งอยู่บน CANBUS เพียงแต่เกจทำหน้าที่แปลงให้เราอ่านง่ายเท่านั้นเอง

ทดสอบเกจวัด obd2

การทำงานของเกจ OBD2

  1. OBD2 Gauge → ส่งคำสั่ง (Request) ไปบน CANBUS
    • คำสั่งที่ส่งออกไปอยู่ในรูปแบบ OBD2 PID Request
    • ถูกส่งด้วย CAN ID = 0x7DF (มาตรฐาน broadcast request)
    • ทุก ECU ที่รองรับจะฟังข้อความนี้ แต่โดยปกติ ECU เครื่องยนต์ (0x7E8) จะเป็นคนตอบ
  2. ECU → ตอบกลับ (Response)
    • ECU จะตอบด้วย CAN ID = 0x7E8, 0x7E9 … ขึ้นอยู่กับว่าเป็น ECU ตัวไหน
    • คำตอบจะมีค่า Data ที่เป็นข้อมูลจริง เช่น RPM, ความเร็ว, อุณหภูมิ

ตัวอย่าง CAN Message จริง ๆ

1. เกจ OBD2 ขอค่า RPM

Request (จากเกจ OBD2 → ECU)

ID: 0x7DF
Size: 0x08
DATA: 02 01 0C 00 00 00 00 00
  • 02 = ความยาว (2 ไบต์มีคำสั่ง)
  • 01 = โหมด 1 (ขอค่าการทำงานจริง – Current Data)
  • 0C = PID สำหรับ RPM

Response (ECU เครื่องยนต์ตอบกลับ)

ID: 0x7E8
Size: 0x08
DATA: 04 41 0C 1A F8 00 00 00
  • 41 = ตอบกลับโหมด 1
  • 0C = PID ที่ถูกถาม (RPM)
  • 1A F8 = ค่าดิบ

สูตรคำนวณ RPM:

RPM = (256 * 0x1A + 0xF8) / 4  
RPM = (256*26 + 248) / 4 = 6904 / 4 = 1726 รอบ/นาที

2. เกจ OBD2 ขอค่าอุณหภูมิน้ำหล่อเย็น

Request

ID: 0x7DF
Size: 0x08
DATA: 02 01 05 00 00 00 00 00
  • 05 = PID สำหรับ Coolant Temperature

Response

ID: 0x7E8
Size: 0x08
DATA: 03 41 05 5C 00 00 00 00
  • 5C = ค่าดิบ (92)

สูตรคำนวณ Temp:

Temp = 92 - 40 = 52 °C

3. เกจ OBD2 ขอค่าความเร็วรถ

Request

ID: 0x7DF
Size: 0x08 
DATA: 02 01 0D 00 00 00 00 00
  • 0D = PID สำหรับ Vehicle Speed

Response

ID: 0x7E8
Size: 0x08
DATA: 03 41 0D 28 00 00 00 00
  • 28 = ค่าดิบ (40) → ความเร็วจริง = 40 km/h

สรุป

  • เกจ OBD2 ไม่ได้แค่ฟังอย่างเดียว แต่มันจะ ส่ง CAN Message (Request) ออกไปบน ID 0x7DF
  • ECU ที่เกี่ยวข้อง (เช่น ECU เครื่องยนต์) จะ ตอบกลับบน ID 0x7E8/0x7E9
  • ข้อมูลที่ตอบกลับมาจะอยู่ในรูปแบบ Data ดิบ ซึ่งต้องแปลงด้วยสูตร (PID-specific formula)

ค่า PIDs พิเศษ (Extended PIDs) คืออะไร

1. มาตรฐาน OBD2 PID

  • โดยทั่วไป OBD2 มี PID มาตรฐาน (Mode 01 PID) ที่เหมือนกันทุกยี่ห้อ เช่น RPM (0C), ความเร็วรถ (0D), อุณหภูมิน้ำหล่อเย็น (05)
  • จุดประสงค์คือให้ ทุกเครื่องสแกน OBD2 อ่านได้ โดยไม่ต้องรู้รายละเอียดของรถ

2. PIDs พิเศษ (Extended / Proprietary PIDs)

  • ผู้ผลิตรถยนต์แต่ละรายมักจะเพิ่ม ค่าเฉพาะ ที่ ไม่อยู่ในมาตรฐานกลาง เช่น
    • ความร้อนน้ำมันเกียร์ (Transmission Oil Temp)
    • ความร้อนไอเสีย (EGT – Exhaust Gas Temperature)
    • ค่าแรงดันลมยาง (TPMS – Tire Pressure Monitoring System)
    • ระดับน้ำมันเครื่อง
    • แรงดันน้ำมันเกียร์อัตโนมัติ
    • แรงดันน้ำมันเชื้อเพลิงแบบละเอียด
  • ข้อมูลพวกนี้มักถูกเก็บใน ECU แต่ ไม่เปิดเผยสู่มาตรฐาน OBD2 → ต้องใช้ “สูตรลับ” ของค่ายนั้น ๆ

3. เราจะหาข้อมูล PIDs พิเศษได้อย่างไร

  • ค่า PIDs พิเศษ ไม่มีในคู่มือ OBD2 มาตรฐาน
  • ต้องอาศัยวิธี Reverse Engineering หรือใช้เครื่องมือเฉพาะของศูนย์บริการ
  • บางค่ายเปิดเผยเอกสาร (เช่น Toyota Techstream, Ford IDS) แต่บางค่ายเก็บเป็นความลับ
ค่า PIDs OBD2

ตัวอย่าง CAN Message ของค่า PIDs พิเศษ

สมมุติใช้ โหมด Service 22 (Extended PID Mode) → เป็นโหมดที่ผู้ผลิตใช้เรียกข้อมูลเฉพาะ

ตัวอย่าง 1: ความร้อนน้ำมันเกียร์ (Transmission Oil Temperature)

Request (OBD Gauge → ECU TCM)

ID: 0x7E0
Size: 0x08
DATA: 03 22 1940 00 00 00 00 00
  • 22 = Mode Extended PID
  • 1940 = PID ความร้อนน้ำมันเกียร์ (ตัวอย่างของ Toyota/Ford บางรุ่น)

Response (ECU ตอบกลับ)

ID: 0x7E8
Size: 0x08
DATA: 04 62 1940 5A 00 00 00 00
  • 62 = ตอบกลับโหมด 22
  • 1940 = PID เดิมที่ถูกถาม
  • 5A = ค่าดิบ (90)

สูตรคำนวณ

Temp = Raw - 40  
= 90 - 40 = 50 °C

ตัวอย่าง 2: ค่าแรงดันลมยาง (TPMS – Tire Pressure)

Request

ID: 0x7E0
Size: 0x08
DATA: 03 22 2221 00 00 00 00 00
  • 2221 = PID ลมยาง

Response

ID: 0x7E8
Size: 0x08
DATA: 05 62 2221 2C 00 00 00 00
  • 2C = ค่าดิบ (44)

สูตรคำนวณ

Pressure = Raw * 0.25  
= 44 * 0.25 = 11 PSI

ตัวอย่าง 3: Exhaust Gas Temperature (EGT)

Request

ID: 0x7E0
Size: 0x08
DATA: 03 22 1830 00 00 00 00 00

Response

ID: 0x7E8
Size: 0x08
DATA: 05 62 1830 01 F4 00 00 00
  • 01F4 = ค่าดิบ (500)

สูตรคำนวณ

EGT = Raw - 40  
= 500 - 40 = 460 °C

สรุป

  • มาตรฐาน OBD2 PID → ทุกคันอ่านได้ เช่น RPM, ความเร็ว, น้ำหล่อเย็น
  • Extended / Proprietary PIDs → แล้วแต่ค่ายรถ เช่น ความร้อนน้ำมันเกียร์, แรงดันลมยาง, อุณหภูมิไอเสีย
  • ส่วนใหญ่ใช้ Mode 22 (Extended PID) และ CAN ID = 0x7E0 (Request) / 0x7E8 (Response)
  • ต้องใช้ สูตรคำนวณพิเศษ ตามที่ผู้ผลิตกำหนดนี่คือสิ่งที่หลายคนไม่รู้เวลาไปซื้อเกจวัด OBD2 ทั่วไป — ผมสรุปให้ในเชิงคำพูดแบบใช้ลงเว็บได้เลยนะครับ
lufi xs อ่านความร้อนเกียร์

เกจวัด OBD2 กับ PIDs พิเศษ: ทำไมถึงอ่านไม่ได้ทุกคัน?

เกจวัดทั่วไปอ่านอะไรได้บ้าง?

เกจวัด OBD2 ที่ขายตามท้องตลาดส่วนใหญ่ จะรองรับแค่ OBD2 Standard PIDs ซึ่งเป็นค่ากลางที่ทุกค่ายรถต้องมี เช่น

  • รอบเครื่องยนต์ (PID 0C)
  • ความเร็วรถ (PID 0D)
  • อุณหภูมิน้ำหล่อเย็น (PID 05)
  • ปริมาณอากาศไหลเข้า (MAF)
  • ค่า Throttle Position

เพราะค่าพวกนี้ถูกกำหนดไว้ในมาตรฐาน OBD2 Mode 01 PID → ดังนั้นเกจวัดทั่วไปจึงสามารถใช้งานได้กับรถเกือบทุกยี่ห้อ

แล้ว PIDs พิเศษคืออะไร?

PIDs พิเศษ (Extended / Proprietary PIDs) คือค่าที่ ผู้ผลิตรถยนต์กำหนดเอง ไม่ได้อยู่ในมาตรฐานกลาง เช่น:

  • ความร้อนน้ำมันเกียร์ (Transmission Oil Temp)
  • แรงดันลมยาง (TPMS)
  • Exhaust Gas Temperature (EGT)
  • แรงดันน้ำมันเชื้อเพลิงละเอียด (Fuel Rail Pressure – แบบขยาย)

ปัญหา คือ:

  • แต่ละค่ายรถใช้ CAN ID, PID, และสูตรคำนวณไม่เหมือนกัน
  • เช่น Toyota อาจใช้ CAN ID 0x7E0 + PID 0x1940 แต่ Ford อาจใช้ 0x7E1 + PID 0x2210
  • เกจวัดทั่วไปที่ไม่ได้ตั้งค่าเฉพาะ → จะไม่รู้จัก “รหัส” เหล่านี้เลย
ultragauge อ่านความร้อนเกียร์

ทำไมต้องมี “สมการคำนวณ”?

เวลารถส่งค่ามา มันไม่ได้ส่งตรงว่า “อุณหภูมิ = 90 °C” แต่จะส่งเป็น Data ดิบ เช่น 0x5A → แล้วต้องเอามาคำนวณตามสูตร:

Temp = Raw - 40

หรือ RPM:

RPM = (DataA * 256 + DataB) / 4

ดังนั้นถ้าเกจวัดไม่ได้ถูกตั้งสูตรที่ถูกต้อง → ตัวเลขที่แสดงออกมาจะผิดพลาดทันที

ทำไมเกจวัดทั่วไปอ่านไม่ได้ทุกคัน?

  1. PIDs พิเศษไม่ใช่มาตรฐานกลาง → แต่ละค่ายรถมีโครงสร้างต่างกัน
  2. CAN ID แตกต่างกัน → ECU แต่ละค่ายใช้ ID ไม่ตรงกัน
  3. สูตรคำนวณต่างกัน → แม้เป็นค่าเดียวกัน เช่น “ความร้อนน้ำมันเกียร์” แต่ Toyota, Ford, Honda อาจใช้สูตรไม่เหมือนกัน
  4. เกจวัดทั่วไปถูกล็อกมาแค่ค่ามาตรฐาน → จึงอ่านได้แค่รอบเครื่อง, ความเร็ว, น้ำหล่อเย็น

แล้วถ้าต้องการจะอ่านค่า PIDs พิเศษจะทำอย่างไร

ถ้าต้องการอ่าน PIDs พิเศษ จริง ๆ ต้องใช้เกจวัดหรืออุปกรณ์ที่สามารถ:

  • กำหนด CAN ID เองได้ (ว่าจะส่ง Request ไปที่ ECU ตัวไหน)
  • กำหนด PID เองได้ (ไม่จำกัดแค่ PID มาตรฐาน)
  • ตั้งสูตรคำนวณเองได้ (Scaling, Offset, Unit)

เกจวัดระดับโปร หรืออุปกรณ์สแกน OBD ขั้นสูง (เช่น Lufi, ScanGauge, UltraGauge, หรือเกจที่ใช้ OBD Custom PID) จะเปิดให้ผู้ใช้ “ใส่สูตรเอง” ได้ → แบบนี้ถึงจะอ่านค่าพิเศษได้ตรงตามรถแต่ละยี่ห้อ

สามารถสั่งซื้อเกจวัดที่สามารถตั้งค่า PIDs พิเศษได้ดังนี้

สามารถสอบถามหรือติดตามผลงานอัพเดทได้ที่

Leave a Reply

Your email address will not be published. Required fields are marked *