เวลาที่เราอ่านข้อมูลจาก CAN bus ด้วยเครื่องมืออย่าง SavvyCAN หรือแม้แต่ Serial Monitor เรามักจะเห็นข้อมูลหน้าตาประมาณนี้
ID: 0x201 Data: 01 3C 4F 00 00 FF 00 80
คำถามคือ…
ตัวเลขพวกนี้แปลว่าอะไร?
จริง ๆ แล้วข้อมูลเหล่านี้อาจเป็น
- ความเร็วรถ
- อุณหภูมิแบตเตอรี่
- แรงดันไฟฟ้า
- สถานะระบบต่าง ๆ
แต่ปัญหาคือ CAN bus ส่งมาเป็น raw data ซึ่งมนุษย์อ่านไม่รู้เรื่อง
ตรงนี้เองที่ DBC File เข้ามาช่วย
พูดง่าย ๆ คือ DBC File = คู่มือแปลภาษา CAN bus
มันบอกว่า
ข้อมูลแต่ละบิตใน message หมายถึงอะไร

โครงสร้างพื้นฐานของ DBC File
ไฟล์ DBC เป็นไฟล์ข้อความที่มีนามสกุล (.dbc) ที่บอกโครงสร้างของข้อมูลใน CAN bus เช่น
- Message
- Signal
- bit position
- scaling
- unit
สามารถใช้ Text editor ทั่วไปเปิดอ่านได้ ตัวอย่างโครงสร้างแบบง่าย
BO_ 200 SpeedMessage: 8 ECU
SG_ VehicleSpeed : 3|12@0+ (0.1,0) [0|400] "km/h" ECU
ลองแปลทีละส่วน
1️⃣ Message definition
BO_ 200 SpeedMessage: 8 ECU
ความหมายคือ
- BO_ → บอกว่านี่คือ CAN Message
- 200 → CAN ID (บอกเป็นเลขฐาน 10)
- SpeedMessage → ชื่อข้อความ
- 8 → ขนาดข้อมูล 8 byte
- ECU → ชื่อโหนดที่ส่งข้อมูล
2️⃣ Signal definition
SG_ VehicleSpeed : 3|12@0+ (0.1,0) [0|400] "km/h" ECU
อันนี้คือ Signal ที่อยู่ใน CAN message
แปลความหมายได้ว่า
- “VehicleSpeed” → ชื่อสัญญาณ
- “3|12” → สัญญาณเริ่มที่ bit 3 มีความยาว 12 bit
- “@0” → เรียงแบบ Big-endian หรือ Motorola คือ Most Significant Byte (MSB) มาก่อน (บันทึกใน Byte ที่อยู่ก่อน)
- หากเป็น “@1” จะหมายถึง เรียงแบบ Little-endian หรือ Intel คือ Least Significant Byte (LSB) มาก่อน (บันทึกใน Byte ที่อยู่ก่อน)
- “+” → ค่าเป็น unsigned มีค่าบวกเท่านั้น
- หากเป็น “-“ หมายถึงค่าแบบ signed คือเป็นได้ทั้ง บวกและลบ
- (0.1,0) → scale = 0.1 offset = 0 ค่าจริงเท่ากับค่าที่อ่านได้คูณ Scale และบวกด้วย Offset
- [0|400] → ช่วงค่า ต่ำสุด 0 และสูงสุด 400
- km/h → หน่วยวัดของสัญญาณ

ตัวอย่างการตีความสัญญาณ
หากบันทึกค่า CAN ID 0xC8 (เท่ากับ 200 ในเลขฐาน 10) ในตำแหน่งบิตที่ 3 (ซึ่งอยู่ไบต์แรก) ถึง บิตที่ 12 (ซึ่งอยู่ไบต์ที่สอง) มาได้ดังรูป

เนื่องจากเป็น Big endian และ Start bit = 3 จึงเริ่มอ่านที่บิตที่ 3 ซึ่งอยู่ในไบต์ที่ 0 ก่อน สัญญาณมีความยาว 12 bit ค่าที่อ่านได้คือ 0b0011 1011 0110 หรือ 0x3B6 แปลงเป็นเลขฐาน 10 ได้เท่ากับ 950
การแปลงเป็นค่าจริงจะต้องนำ 950 ไปคูณกับค่า Scale (ในที่นี้คือ 0.1) และบวกกับ Offset (ในที่นี้คือ 0) ดังนั้นค่าจรงคือ 95 ซึ่งก็คือความเร็วรถ 95 km/h
เรื่องที่สับสนที่สุดใน DBC File: Endian
เวลาศึกษา DBC file หลายคนจะงงกับคำว่า
Big-endian (Motorola style) และ Little-endian (Intel style)
โดยเฉพาะตอนอ่าน syntax แบบนี้ “3|12@0+” หรือ “3|12@1+”
ตรง “@1” และ “@0″ นี่แหละคือเรื่อง Endian
โดย “@0” คือ Big endian และ “@1” คือ Little endian
มี 2 เรื่องที่ต้องเข้าใจให้ชัด
1️⃣ Endian คือการเรียง “Byte” ไม่ใช่ “Bit”
หลายคนเข้าใจผิดว่า Endian คือการกลับลำดับ bit
จริง ๆ แล้วไม่ใช่
Endian คือการกำหนดลำดับของ Byte
ภายในไบต์ ลำดับของบิตยังเรียงเหมือนเดิมเสมอ
1 byte = 8 bits
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
ลำดับบิตนี้ ไม่เปลี่ยน
Endian เปลี่ยนแค่ลำดับของ byte
ตัวอย่างข้อมูล 16 bit
HEX: 89 1A
Big-endian (Motorola)
byte ที่สำคัญที่สุดมาก่อน
[89] [1A]
MSB LSB
Little-endian (Intel)
byte ที่สำคัญน้อยมาก่อน
[89] [1A]
LSB MSB
ดังนั้น
Endian = การสลับ byte order ไม่ใช่การสลับ bit order
Signal ที่อยู่ในไบต์เดียว ทั้งรูปแบบ Big endian และ Little จะไม่มีความแตกต่างกัน

2️⃣ Start bit ใน DBC ทำให้คนงง
ใน DBC syntax เราจะเห็นรูปแบบนี้ ซึ่งเป็นตัวบอกตำแหน่งบิตของ Signal ใน CAN Message และบอกประเภทของ Endian
3|12@0+
ซึ่ง หมายถึง Signal แบบ Big endian มีความยาว 12 บิต เริ่มที่บิตที่ 3 ซึ่งในกรณี Big endian นี้ บิตเริ่มต้นที่ระบุจะเป็น Most Significant bit (MSb)
หรืออีกหนึ่งตัวอย่าง
3|12@1+
ซึ่ง หมายถึง Signal แบบ Little endian มีความยาว 12 บิต เริ่มที่บิตที่ 3 ซึ่งในกรณี Little endian นี้ บิตเริ่มต้นที่ระบุจะเป็น Least Significant bit (MSb)
ต่อไปนี้เป็นแผนภาพลำดับบิตและไบต์แสดง Signal ทั้งสองแบบ

แล้วจะหา DBC File มาจากไหน?
หลังจากรู้แล้วว่า DBC File คือ dictionary ของ CAN bus
คำถามต่อมาที่หลายคนสงสัยคือ
แล้วเราจะหา DBC file มาใช้ได้จากที่ไหน?
คำตอบคือมีหลายทาง ตั้งแต่ ฟรี ไปจนถึงระดับอุตสาหกรรม
1️⃣ จากผู้ผลิต (วิธีที่ดีที่สุด แต่หายาก)
วิธีที่ถูกต้องที่สุดคือ ผู้ผลิตรถหรืออุปกรณ์เป็นคนให้ DBC มา
เช่น
- ผู้ผลิต ECU
- ผู้ผลิต BMS
- ผู้ผลิต inverter
- ผู้ผลิต charger
ในงานพัฒนา OEM หรือ Tier-1 supplier
ไฟล์ DBC จะเป็น ส่วนหนึ่งของเอกสารสื่อสารระหว่างทีม
ข้อดี
- ถูกต้อง 100%
- มีคำอธิบายครบ
- ใช้พัฒนา software ได้ทันที
ข้อเสีย
- มักเป็น ข้อมูลปิด
2️⃣ ซื้อจากบริษัทที่รวบรวมข้อมูล
มีบริษัทหลายแห่งที่ทำธุรกิจขาย CAN database
ตัวอย่างเครื่องมือในวงการยานยนต์ เช่น
- Vector CANalyzer
- Vehicle Spy
- CCS Electronics
บางบริษัทมี database ของรถหลายรุ่นให้ซื้อ
ข้อดี
- มีข้อมูลครบ
- ประหยัดเวลา reverse engineering
ข้อเสีย
- ราคาค่อนข้างสูง
3️⃣ หา DBC ฟรีจากอินเทอร์เน็ต
มีหลายโครงการที่เปิดเผย DBC ฟรี เช่น
ใน
- GitHub
- forum ของนักพัฒนา
- community EV
ตัวอย่างที่พบได้บ่อย เช่น
- รถไฟฟ้า DIY
- ระบบ BMS บางยี่ห้อ
- โครงการ open-source EV
ข้อดี
- ฟรี
- เรียนรู้ได้เร็ว
ข้อเสีย
- อาจไม่ครบ
- อาจไม่ตรงกับรุ่นรถ
4️⃣ สร้าง DBC เอง (Reverse Engineering)
อีกวิธีที่ใช้กันมากในงานวิจัยคือ
สร้าง DBC ด้วยตัวเอง
โดยใช้เครื่องมือวิเคราะห์ CAN เช่น
- SavvyCAN
- Wireshark สำหรับ CAN
- เครื่องมือจาก Vector
กระบวนการจะประมาณนี้
1️⃣ ดัก CAN bus
2️⃣ บันทึก log
3️⃣ วิเคราะห์ bit ที่เปลี่ยน
4️⃣ ตั้งชื่อ signal
5️⃣ สร้าง DBC
วิธีนี้เรียกว่า
CAN Reverse Engineering


Leave a Reply