เป็นที่ทราบกันดีว่าเราสามารถสื่อสารด้วยรถยนต์ด้วยการส่งข้อความบนเครือข่าย CAN ทว่าเราจำเป็นจะต้องมีไฟล์ฐานข้อมูล dbc เพื่อที่จะแปลงสิ่งที่อยู่ในข้อความออกมาเป็นข้อมูล ซึ่งส่วนใหญ่ไฟล์นี้มักจะถูกปกปิดเป็นความลับของรถยนต์แต่ละยี่ห้อ ทว่าในวงการรถยนต์เองก็ยังมีโปรโตคอลหนึ่งที่เป็นมาตรฐานกลางสามารถใช้ในการสื่อสารกับรถยนต์ส่วนใหญ่ได้ โปรโตคอลนี้คือ ISO15765-4 หรือที่เราเรียกกันจนติดปากว่า OBD2 (On Board Diagnostic) นั่นเอง
OBD นั้นถือกำเนิดขึ้นมาเพื่อใช้สำหรับตรวจสอบสถานะของรถยนตร์ว่าสามารถใช้งานได้ตามมาตรฐานหรือไม่? สำหรับ OBD2 ได้มีข้อกำหนดหลายอย่างเพิ่มเติม หนึ่งในข้อกำหนดที่สำคัญก็คือ รูปแบบของหัวเชื่อมต่อ SAE J1962 ที่เราคุ้นเคยกันดี ซึ่งหัวเชื่อมต่อแบบนี้สามารถทำการสื่อสารผ่านหลากหลายการเชื่อมต่อ แต่ที่นิยมมากที่สุดคือการสื่อสารผ่านเครือข่าย CAN ด้วยโปรโตคอล ISO15765-4
ในการสื่อสารผ่านโปรโตคอล ISO15765-4 นั้นจะต้องใช้งาน baud rate ที่ 250 kb/s หรือ 500 kb/s ขึ้นอยู่กับรถยนต์ที่ทำการสื่อสารด้วย โดยสามารถสื่อสารได้ด้วย identifier 0x7DF (2015) โดยรถยนต์มักจะตอบกลับด้วย identifier 0x7E8 (2024) หรือ 0x7E9 (2025) ขึ้นอยู่กับสิ่งที่ต้องการสื่อสาร องค์ประกอบของแต่ละข้อความแสดงดังภาพด้านล่าง
1. Size: จำนวนไบท์ที่จะตามมา มีค่า 0-7
2. Mode: โปรโตคอล ISO15765-4 จะมีทั้งหมด 9 (00-0A) โหมด ได้แก่
2.1 อ่านข้อมูลปัจจุบัน
2.2 อ่านข้อมูลที่ถูกเก็บไว้
2.3 อ่าน diagnostic trouble code (DTC) ที่ถูกเก็บไว้
2.4 ลบ DTC และข้อมูลที่เก็บไว้
2.5 ผลการทดสอบเซนเซอร์ออกซิเจน
2.6 ผลการทดสอบระบบมอนิเตอร์
2.7 อ่าน diagnostic trouble code (DTC) ที่ยังไม่ถูกแก้ไข
2.8 ควบคุมการทำงานของระบบออนบอร์ด
2.9 อ่าน vehicle information (VIN)
2.10 อ่าน diagnostic trouble code (DTC) ถาวร
3. PID (Process ID): ใช้สำหรับบอกข้อมูลที่เราต้องการอ่าน เช่น เราสามารถอ่านความเร็วรอบได้จาก PID: 0C (13) เป็นต้น โดยสามารถอ้างอิงได้จาก OBD-II PIDs
หลังจากนั้นจึงเป็นส่วนของข้อมูล ในส่วนของรถยนต์นั้นจะตอบกลับมาด้วย identifier 0x7E8 (2024) หรือ 0x7E9 (2025) ขึ้นอยู่กับสิ่งที่ต้องการสื่อสาร ตามด้วย Size ซึ่งเป็นจำนวนไบท์ที่จะตามมาในข้อความนี้ในไบท์ 0 ตามมาด้วยไบท์ 1 จะเป็นโหมดบวกด้วย 0x40 เช่น ถ้าเราต้องการอ่านข้อมูลปัจจุบัน (01) รถยนต์จะตอบกลับมาด้วยโหมด 41 ในไบท์ 1 แล้วจึงตามมาด้วย PID ในไบท์ 2 สุดท้ายข้อมูลจะถูกส่งมาในไบท์ 3 เป็นต้นไป โดยวิธีการแปลงข้อมูลเป็นค่าที่ใช้งานได้จริงสามารถอ้างอิงจาก OBD-II PIDs ยกตัวอย่างเช่น เราส่งข้อความ 02 01 0D ด้วยไอดี 7DF ไปยังรถยนต์ รถยนต์ตอบกลับมา 03 41 0D 32 ด้วยไอดี 7E8 เป็นต้น ซึ่ง 32 hex เท่ากับ 50 ในเลขฐานสิบ สำหรับ PID 0D ให้นำข้อมูลที่ได้ไปคูณด้วย 1 ก็จะได้ความเร็วของรถยนต์ที่ 50 km/h เป็นต้น
ในส่วนของการอ่าน DTC แต่ละโค้ดจะมีตัวอักษรทั้งหมด 5 ตัวซึ่งจัดเก็บในข้อมูล 2 ไบท์ เพราะฉะนั้นถ้ามี DTC มากกว่า 3 โค้ดรถยนต์จะตอบกลับในรูปแบบ ISOTP สำหรับข้อมูลเพิ่มเติมของ DTC สามารถอ้างอิงได้จาก DTC List โดยเราสามารถลบค่า DTC ได้ด้วยการส่งข้อความ 01 04
ในส่วนของการอ่าน VIN ให้ส่งข้อความ 02 09 02 ด้วยไอดี 7DF เนื่องจาก VIN มีความยาวเกินกว่าจะบรรจุในไบท์เดียว การตอบกลับจะอยู่ในรูปแบบ ISOTP โดยข้อมูลที่ได้จะเป็นการส่งตัวหนังสือในแบบ ASCII
หวังว่าบทความนี้จะให้ความรู้ในการสื่อสารกับรถยนต์ด้วยโปรโตคอล ISO15765-4 หรือ OBD2 ท่านสามารถติดต่อทีมงานเทคสแควร์เพื่อติดต่อสอบถามข้อมูลเพิ่มเติมเกี่ยวกับการสื่อสารข้อมูลบนเครือข่าย CAN ที่เหมาะสมกับงานของท่าน
บทความที่เกี่ยวข้อง
การส่งข้อมูลบนเครือข่าย CAN ด้วย ISO transport protocol (ISOTP)