บัญชี

PLC
ขั้นสูง
10 นาที

แก้ปัญหาข้อมูล Modbus แสดงผลแปลกๆ

วิธีแก้ปัญหาค่าข้อมูลไม่ตรงเมื่อ PLC อ่านจาก Modbus Device เนื่องจาก Endianness ใช้คำสั่ง ROLD สลับ bit เพื่อให้ได้ค่า Floating Point ที่ถูกต้อง

อัพเดทล่าสุด: 9/2/2569

ปัญหา Modbus Endianness ใน PLC

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

สาเหตุของปัญหา

ปัญหานี้เกิดจากความแตกต่างของ Endianness ระหว่างอุปกรณ์ โดยเฉพาะกับข้อมูล 32-bit ที่มีโอกาสเกิดการสลับตำแหน่งระหว่าง 16-bit แรกกับ 16-bit หลัง

ตัวอย่างปัญหา

  • D0 (16-bit แรก): มีค่า 15796
  • D1 (16-bit ที่สอง): มีค่า -25441

เมื่อนำมาต่อกันและแสดงผลเป็น Floating Point จะได้ค่าที่ไม่ถูกต้อง

วิธีแก้ปัญหา

1. ใช้คำสั่ง ROL (Rotate Left)

ใช้คำสั่ง ROLD (ROL Double Word) เพื่อสลับตำแหน่งของ 16-bit แรกกับ 16-bit หลัง

ROLD D0 K16 D20

คำอธิบาย:

  • D0: Register ที่ต้องการสลับ
  • K16: จำนวน bit ที่ต้องการหมุน (16 bit)
  • D20: Register ปลายทางที่เก็บผลลัพธ์

2. การทดสอบผลลัพธ์

หลังจากใช้คำสั่ง ROLD แล้ว ค่าที่อ่านได้จาก D20 จะเป็นค่าที่ถูกต้อง เช่น 0.088

เคล็ดลับการตรวจสอบ

  1. เปรียบเทียบค่า: เปรียบเทียบค่าที่อ่านได้จาก PLC กับค่าที่แสดงบนอุปกรณ์โดยตรง
  2. ทดสอบ Endian Swap: หากพบความไม่ตรงกัน ลองใช้คำสั่ง ROLD เพื่อสลับ Endianness
  3. ใช้ Simulator: ทดสอบกับ PLC Simulator ก่อนนำไปใช้จริง

การแก้ปัญหาที่พบบ่อย

ปัญหา: ค่าที่อ่านได้จาก Floating Point ไม่ถูกต้อง

วิธีแก้: ใช้คำสั่ง ROLD เพื่อสลับ Endianness ของข้อมูล 32-bit

ปัญหา: ไม่แน่ใจว่าต้องสลับ Endian หรือไม่

วิธีแก้:
  1. อ่านค่าจากอุปกรณ์โดยตรง
  2. เปรียบเทียบกับค่าใน PLC
  3. หากไม่ตรงกัน ลองใช้ ROLD

สรุป

ปัญหา Modbus Endianness เป็นปัญหาที่พบได้บ่อยในระบบอุตสาหกรรมที่มีการใช้อุปกรณ์จากผู้ผลิตต่างกัน การแก้ปัญหานี้ทำได้ง่ายด้วยการใช้คำสั่ง ROLD เพื่อสลับตำแหน่ง bit ก่อนนำไปประมวลผลเป็น Floating Point ซึ่งจะช่วยให้ได้ค่าที่ถูกต้องตรงกับที่อุปกรณ์แสดง