ระบบสื่อสารยานยนต์

CAN ตัดสินสิทธิ์ส่งอย่างไรเมื่อหลายโหนดเริ่มพร้อมกัน

เข้าใจการเปรียบเทียบบิตระหว่างส่ง แยกการรอสิทธิ์จากเฟรมผิดพลาด และใช้ลำดับเวลากับตัวอย่างสมมติเพื่อตรวจเหตุข้อมูลล่าช้า

เมื่อข้อมูลบนเครือข่าย CAN มาถึงช้ากว่าที่คาด คำถามแรกไม่ควรมีเพียงว่าสายขาดหรือกล่องเสีย เพราะข้อความอาจเตรียมพร้อมแล้วแต่ยังรอโอกาสใช้บัสอยู่ การตัดสินสิทธิ์ส่งเรียกว่า arbitration เป็นกลไกที่ทำให้หลายโหนดใช้คู่สายร่วมกันได้โดยไม่ต้องมีผู้ควบคุมคอยเรียกทีละตัว บทความนี้อธิบายหลักการในเครือข่ายที่ตั้งค่าอย่างถูกต้อง แล้วใช้สถานการณ์สมมติเพื่อแยกการรอปกติออกจากความผิดพลาด โดยไม่กำหนดรหัสข้อความของรถจริง

ผู้ส่งเปรียบเทียบสิ่งที่ส่งกับสิ่งที่ปรากฏบนบัส

ในช่วงตัดสินสิทธิ์ โหนดที่กำลังส่งจะอ่านระดับบนบัสด้วย ถ้าโหนดหนึ่งปล่อยบิต recessive แต่พบว่าบัสเป็น dominant แสดงว่ามีผู้ส่งอีกตัวมีสิทธิ์เหนือกว่าในตำแหน่งนั้น โหนดแรกจึงเลิกแข่งขันและเปลี่ยนเป็นผู้รับ ส่วนข้อความที่ชนะเดินหน้าต่อได้ กลไกนี้ทำงานทีละบิตตามลำดับที่ส่งออกมา ไม่ใช่การส่งข้อความทั้งหมดให้ชนกันแล้วสุ่มเวลาลองใหม่ หลักการดังกล่าวช่วยอธิบายว่าทำไมผู้แพ้สิทธิ์จึงไม่เท่ากับผู้สร้างเฟรมผิดพลาด

คำว่าลำดับความสำคัญเป็นคุณสมบัติของข้อความที่แข่งขันในครั้งนั้น ไม่ใช่ตำแหน่งถาวรของกล่องหนึ่งบนรถ กล่องเดียวอาจมีหลายข้อความที่มีสิทธิ์ต่างกัน การกล่าวว่ารหัสตัวเลขต่ำชนะใช้ได้เมื่อเปรียบเทียบรูปแบบที่เหมาะสม แต่เมื่อมีเฟรมฐาน เฟรมขยาย หรือชนิดเฟรมต่างกัน ต้องดูบิตในส่วน arbitration ที่ส่งจริงด้วย การอ่านบันทึกจึงควรเก็บชนิดเฟรมประกอบ หลีกเลี่ยงจัดอันดับจากตัวเลขที่หน้าจอแสดงเพียงช่องเดียว

ภาพอธิบาย 1การตัดสินสิทธิ์ส่งทีละบิต
  1. เริ่มส่งพร้อมกัน

    โหนด ก และ ข พบว่าบัสว่างและเริ่มส่วนตัดสินสิทธิ์

  2. อ่านขณะส่ง

    ข ส่ง recessive แต่พบบัสเป็น dominant จึงทราบว่ามีข้อความสิทธิ์สูงกว่า

  3. เปลี่ยนเป็นผู้รับ

    ข หยุดแข่งขัน ส่วน ก ส่งเฟรมต่อ การแพ้สิทธิ์ไม่ใช่เฟรมผิดพลาด

ผู้แพ้การตัดสินสิทธิ์เปลี่ยนเป็นผู้รับ โดยเฟรมของผู้ชนะเดินหน้าต่อ

ตัวอย่างสมมติของการรอที่ไม่ใช่ความเสียหาย

สมมติชุดฝึกแรงดันต่ำมีข้อความ ก และ ข พร้อมเริ่มหลังบัสว่างพร้อมกัน โดยกำหนดให้ ก ชนะตามส่วนตัดสินสิทธิ์ ข จึงรอ สมมติจากบันทึกที่วัดจริงในชุดฝึก ก ใช้เวลา 0.24 มิลลิวินาที และมีช่วงเว้นก่อนเริ่มข้อความถัดไป 0.006 มิลลิวินาที หากไม่มีข้อความอื่นแทรก ข จะเริ่มได้หลังจากนั้นประมาณ 0.246 มิลลิวินาที ตัวเลขนี้เป็นเพียงเงื่อนไขของตัวอย่าง ไม่ใช่ระยะเวลาคงที่ของเฟรม CAN ทุกแบบ

หากโปรแกรมผู้รับต้องเห็น ข ภายใน 0.20 มิลลิวินาที เงื่อนไขสมมตินี้ทำให้ส่งไม่ทันได้แม้ไม่มีข้อผิดพลาดทางไฟฟ้าเลย แต่ถ้าเวลาที่กำหนดคือ 2 มิลลิวินาที การรอรอบเดียวนี้ยังไม่ทำให้พลาดกำหนด ประเด็นจึงอยู่ที่ความสัมพันธ์ระหว่างเวลาที่อนุญาตกับเวลารอจริง ไม่ใช่แค่มองว่า ข ช้ากว่า ก ทั้งนี้ยังต้องรวมเวลาที่ข้อมูลรอในโปรแกรมต้นทางและเวลาประมวลผลปลายทางก่อนตัดสินผลทั้งระบบ

นำไปใช้แยกเวลารอออกจากเวลาส่ง

  1. เริ่มจากนิยามอาการให้วัดได้ เช่น ช่วงห่างของข้อความยาวขึ้น หรือข้อมูลถึงผู้ใช้ช้า ทั้งสองอย่างไม่ใช่ตัววัดเดียวกัน
  2. อ่านบันทึกที่มีเวลา ชนิดเฟรม และสถานะข้อผิดพลาด โดยตรวจว่าฮาร์ดแวร์กำหนดเวลา ณ ต้นเฟรมหรือปลายเฟรม
  3. ทำเครื่องหมายข้อความที่ครองบัสก่อนข้อความที่สนใจ แล้วเปรียบเทียบช่วงปกติกับช่วงที่เกิดอาการ
  4. หากมีบันทึกจากโปรแกรมต้นทาง ให้เทียบเวลาที่ข้อมูลพร้อมส่งกับเวลาที่ปรากฏบนบัส เพื่อแยกคิวในซอฟต์แวร์ออกจากการรอสิทธิ์
  5. สรุปเฉพาะสิ่งที่ข้อมูลรองรับ หากมีเพียงบันทึกบนสาย ให้รายงานช่วงที่เห็นข้อความ ไม่สรุปเวลาที่ต้นทางเริ่มสร้างข้อมูล

วิธีนี้มีประโยชน์เมื่อพบอาการเฉพาะช่วงข้อมูลหนาแน่น ตัวอย่างเช่นบันทึกสมมติแสดงว่าข้อความ ข มาช้าทุกครั้งที่มีชุดข้อความอื่นอยู่ก่อนหน้า แต่ไม่มีเฟรมผิดพลาดเพิ่ม ความสัมพันธ์นี้สนับสนุนให้ตรวจตารางการส่งและคิวก่อน อย่างไรก็ตามบันทึกจากจุดเดียวอาจไม่เห็นทุกฝั่งของเกตเวย์ และคำว่าไม่มีข้อผิดพลาดต้องหมายถึงเครื่องมือรองรับการรายงานข้อผิดพลาดชนิดนั้นจริง ไม่ใช่เพียงหน้าจอซ่อนข้อมูลไว้

ภาพอธิบาย 2เวลารอของ ข ในชุดฝึกสมมติ
  1. ก ใช้บัส

    เฟรม ก ครองบัส 0.24 มิลลิวินาทีในตัวอย่าง

  2. เว้นก่อนส่ง

    เพิ่มช่วงเว้น 0.006 มิลลิวินาที เมื่อไม่มีข้อความอื่นแทรก

  3. ข เริ่มได้

    รวมรอ 0.246 มิลลิวินาที จึงเกินกำหนดสมมติ 0.20 มิลลิวินาทีแม้ไม่มีข้อผิดพลาดทางไฟฟ้า

คำนวณจากเวลาเฟรมและช่วงเว้นที่สมมติในบทความ ไม่ใช่ค่าคงที่ของ CAN

ข้อผิดพลาดในการตีความลำดับความสำคัญ

ลำดับความสำคัญสูงไม่ได้ทำให้ข้อความตัดกลางเฟรมที่กำลังส่งอยู่ หากข้อความเร่งด่วนพร้อมหลังอีกเฟรมเริ่มแล้วก็ยังมีเวลารอส่วนที่เหลือ ขณะเดียวกันภาระบัสเฉลี่ยต่ำไม่ได้รับประกันว่าจะไม่มีช่วงรอสั้น ๆ ที่ยาวเกินข้อกำหนด เพราะข้อความอาจมารวมกันเป็นชุด การดูค่าเฉลี่ยหนึ่งวินาทีจึงอาจกลบเหตุการณ์ที่กินเวลาเพียงเศษมิลลิวินาที ต้องเลือกช่วงวิเคราะห์ให้สัมพันธ์กับเวลาที่ระบบต้องตอบสนอง

อีกความเข้าใจผิดคือใช้ชื่อกล่องหรือความสำคัญต่อผู้ขับมาทำนายสิทธิ์ส่งทันที เราไม่ทราบการกำหนดลำดับของผู้ผลิตจากชื่ออุปกรณ์ และไม่ควรแก้รหัสข้อความเพื่อให้ข้อมูลของตนแทรกก่อนในรถจริง การแก้เช่นนั้นกระทบทั้งตัวกรองและความหมายในชั้นแอปพลิเคชัน บทความนี้ใช้สำหรับอ่านหลักฐานและวางคำถามตรวจสอบ ไม่ใช่แนวทางปรับตารางการสื่อสารหรือฉีดข้อความเข้าระบบรถ

ตรวจสอบผลด้วยลำดับเหตุที่ทำซ้ำได้

การยืนยันสมมติฐานควรเปรียบเทียบช่วงการทำงานที่มีเงื่อนไขใกล้กัน ระบุจำนวนเหตุการณ์ที่พบและช่วงเวลารอสูงสุดที่สังเกตได้ หากข้อความช้าเกิดพร้อมการเพิ่มเฟรมผิดพลาด การอธิบายด้วยการรอสิทธิ์อย่างเดียวไม่เพียงพอ ในทางกลับกันถ้าพบว่าข้อมูลเริ่มปรากฏบนบัสช้าตั้งแต่ก่อนช่วงใช้งานหนาแน่น ควรย้อนตรวจเวลาสร้างข้อมูล การบันทึกเก็บทั้งเหตุการณ์ที่สนับสนุนและเหตุการณ์ที่ขัดแย้งจะช่วยไม่ให้ติดอยู่กับข้อสรุปแรก

แหล่งอ้างอิงและอ่านเพิ่มเติม

เรียบเรียงคำอธิบายและตัวอย่างขึ้นใหม่จากหลักการในแหล่งข้อมูลต่อไปนี้

  1. Addressing, Arbitration and Identification: How the Message Reaches the Controller · Kvaser
  2. CAN Frame Types · Kvaser

เล่มที่ลงลึกเรื่องนี้

อ่านต่อเรื่องใกล้กัน

ถามเรื่องหนังสือ ตะกร้า