แก้ปัญหาข้อมูล 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
เคล็ดลับการตรวจสอบ
- เปรียบเทียบค่า: เปรียบเทียบค่าที่อ่านได้จาก PLC กับค่าที่แสดงบนอุปกรณ์โดยตรง
- ทดสอบ Endian Swap: หากพบความไม่ตรงกัน ลองใช้คำสั่ง ROLD เพื่อสลับ Endianness
- ใช้ Simulator: ทดสอบกับ PLC Simulator ก่อนนำไปใช้จริง
การแก้ปัญหาที่พบบ่อย
ปัญหา: ค่าที่อ่านได้จาก Floating Point ไม่ถูกต้อง
วิธีแก้: ใช้คำสั่ง ROLD เพื่อสลับ Endianness ของข้อมูล 32-bitปัญหา: ไม่แน่ใจว่าต้องสลับ Endian หรือไม่
วิธีแก้:- อ่านค่าจากอุปกรณ์โดยตรง
- เปรียบเทียบกับค่าใน PLC
- หากไม่ตรงกัน ลองใช้ ROLD
สรุป
ปัญหา Modbus Endianness เป็นปัญหาที่พบได้บ่อยในระบบอุตสาหกรรมที่มีการใช้อุปกรณ์จากผู้ผลิตต่างกัน การแก้ปัญหานี้ทำได้ง่ายด้วยการใช้คำสั่ง ROLD เพื่อสลับตำแหน่ง bit ก่อนนำไปประมวลผลเป็น Floating Point ซึ่งจะช่วยให้ได้ค่าที่ถูกต้องตรงกับที่อุปกรณ์แสดง
มีคำถาม? ติดต่อทีมงาน