การอ่านค่าเซนเซอร์ผ่าน HMI ด้วย Modbus RTU/RS485
เรียนรู้วิธีการ Config HMI ให้อ่านค่าเซนเซอร์โดยตรงผ่าน Modbus RTU/RS485 ไม่ต้องใช้ PLC เป็นตัวกลาง พร้อมการตั้งค่า Slave ID และการต่อสาย RS485
บทความนี้สอนวิธี config HMI Samkoon ให้อ่านค่าเซนเซอร์หลายตัวผ่าน Modbus RTU/RS485 ได้โดยตรงโดยไม่ต้องใช้ PLC เป็นตัวกลาง ครอบคลุมการตั้ง Slave ID ที่ไม่ซ้ำกัน การต่อสาย RS485 แบบ Multi-Drop และการอ่านค่าจาก Input Register (FC04) มาแสดงบน Numeric Display
อัพเดทล่าสุด: 8/7/2569
ราคาชุดอุปกรณ์
การอ่านค่าเซนเซอร์ผ่าน HMI โดยตรงด้วย Modbus RTU/RS485
การอ่านค่าเซนเซอร์ผ่าน HMI โดยตรงเป็นวิธีที่มีประสิทธิภาพเมื่อต้องการแสดงผลค่าข้อมูลเพียงอย่างเดียว โดยไม่จำเป็นต้องใช้ PLC เป็นตัวกลาง บทความนี้จะสอนวิธีการ Config HMI ให้สามารถอ่านค่าจากเซนเซอร์หลายตัวผ่าน Modbus RTU/RS485
ความเข้าใจพื้นฐานเกี่ยวกับ Modbus Communication
บทบาทของอุปกรณ์
- HMI: ทำหน้าที่เป็น Modbus Master
- เซนเซอร์: ทำหน้าที่เป็น Slave แต่ละตัว
กฎสำคัญสำหรับ Slave ID
- เซนเซอร์แต่ละตัวต้องมี Slave ID ที่ไม่ซ้ำกัน
- ค่า Default มักจะเป็น 1
- สามารถเปลี่ยน Slave ID ได้ตามคู่มือของผู้ผลิต
การเชื่อมต่อสาย RS485
วิธีการต่อสายที่ถูกต้อง
การต่อสายต้องเป็นแบบ Multi-Drop ดังนี้:
- ต่อขั้วให้ตรงกัน: A+ ต่อเข้ากับ A+ และ B- ต่อเข้ากับ B- ของทุกอุปกรณ์บนบัสเดียวกัน
- เชื่อมต่อเป็นลูกโซ่: Master → Slave 1 → Slave 2 → Slave 3...
สิ่งที่ควรหลีกเลี่ยง
- ห้าม ต่อข้าม: Master → Slave 2 โดยข้าม Slave 1
- ในงานจริงควรใช้สายแบบ Twisted Pair และทำ Shield
การอ่านคู่มือเซนเซอร์
ตัวอย่างการอ่าน Register Map
สำหรับเซนเซอร์วัดอุณหภูมิและความชื้น:
Temperature:
- Function Code: 04 (Input Register)
- Address: 3X0001 (Register 1)
- Data Type: 16-bit
Humidity:
- Function Code: 04 (Input Register)
- Address: 3X0002 (Register 2)
- Data Type: 16-bit
Holding Register:
- Function Code: 03
- Address: ขึ้นต้นด้วย 4X
สรุปสั้นๆ Input Register อ่านด้วย Function Code 04 (Address 3X) ส่วน Holding Register ใช้ Function Code 03 (Address 4X)
การเปลี่ยน Slave ID และการแปลงเลขฐาน
การเปลี่ยน Slave ID (Device Address) ของเซนเซอร์ ทำได้โดยการเขียนค่าไปที่ Register Address 0X0101 ซึ่งเป็นเลขฐาน 16 หากโปรแกรมต้องใส่เป็นเลขฐาน 10 ต้องแปลงก่อน:
0X0101 (เลขฐาน 16) = 257 (เลขฐาน 10)
เคล็ดลับ: ใช้ Calculator โหมด Programmer ในการแปลง
การตั้งค่า HMI Connection Service
ขั้นตอนการ Config
- เลือกโปรโตคอล: Modbus RTU
- กำหนดบทบาท: HMI เป็น Master
- ตั้ง Communication Parameters:
Baud Rate: 9600 Data Bits: 8 Parity: None Stop Bits: 1
การตั้งค่า Advanced Mode
- เปลี่ยนจาก Standard Mode เป็น Extended Mode
- จำเป็นเมื่อต้องอ่านค่าจาก Slave มากกว่า 1 ตัว เพราะทำให้สามารถกำหนด Slave ID แยกในแต่ละ Address ได้
การสร้าง Numeric Display
ขั้นตอนการตั้งค่า
-
เลือก Data Type:
- 16-bit Signed Integer (สำหรับค่าทั่วไป)
- 32-bit หรือ Float (สำหรับข้อมูลที่ซับซ้อน)
-
กำหนด Address:
Temperature Slave 1: 3X0001 Humidity Slave 1: 3X0002 Temperature Slave 2: 3X0001 Humidity Slave 2: 3X0002 -
ตั้งค่า Decimal Places: ปรับตาม Scaling ของเซนเซอร์
ตัวอย่างการตั้งค่า Address
- Slave 1 Temperature: Slave ID = 1, Address = 3X0001
- Slave 1 Humidity: Slave ID = 1, Address = 3X0002
- Slave 2 Temperature: Slave ID = 2, Address = 3X0001
- Slave 2 Humidity: Slave ID = 2, Address = 3X0002
การแก้ปัญหาที่พบบ่อย
ปัญหาการสื่อสาร
- ตรวจสอบ Communication Parameters ให้ตรงกันทุกอุปกรณ์
- ยืนยัน Slave ID ไม่ซ้ำกัน
- ตรวจสอบการต่อสาย ต้องเป็น Multi-Drop ที่ถูกต้อง
ปัญหาข้อมูลไม่ถูกต้อง
- ตรวจสอบ Data Type ให้ตรงกับคู่มือ
- ปรับ Scaling/Decimal Places ให้เหมาะสม
- ยืนยัน Register Address ตามเอกสาร
สรุป
การอ่านค่าเซนเซอร์ผ่าน HMI โดยตรงด้วย Modbus RTU/RS485 เป็นวิธีที่ง่ายและมีประสิทธิภาพสำหรับการแสดงผลข้อมูล โดยไม่ต้องใช้ PLC เป็นตัวกลาง จุดสำคัญคือการทำความเข้าใจคู่มือของเซนเซอร์ การตั้งค่า Communication Parameters ที่ถูกต้อง และการเชื่อมต่อสายแบบ Multi-Drop ที่เหมาะสม เมื่อทำตามขั้นตอนเหล่านี้แล้ว จะสามารถอ่านค่าจากเซนเซอร์หลายตัวได้อย่างมีประสิทธิภาพ
คำถามที่พบบ่อย
- อ่านค่าเซนเซอร์ผ่าน HMI ต้องใช้ PLC เป็นตัวกลางไหม?
- ไม่ต้อง ถ้าเซนเซอร์รองรับ Modbus RTU ให้ HMI ทำหน้าที่เป็น Modbus Master อ่านค่าจากเซนเซอร์ที่เป็น Slave ได้โดยตรงผ่าน RS485 เหมาะกับงานที่ต้องการแค่แสดงผลค่า ไม่ต้องประมวลผลลอจิกเพิ่ม
- อ่านค่าจากเซนเซอร์ควรใช้ Function Code อะไร?
- ค่าที่วัดได้ เช่น อุณหภูมิและความชื้น ปกติอยู่ใน Input Register อ่านด้วย Function Code 04 (3X) ส่วน Holding Register (FC03, 4X) มักใช้สำหรับตั้งค่า เช่น เปลี่ยน Slave ID ของเซนเซอร์ ต้องเทียบกับ Register Map ในคู่มือของเซนเซอร์รุ่นนั้น
- ต่อเซนเซอร์หลายตัวบนสาย RS485 เส้นเดียวได้ไหม?
- ได้ ต่อแบบ Multi-Drop เป็นลูกโซ่จาก Master ไป Slave ทีละตัว โดยจับ A+ กับ B- ขนานกันทุกตัว และเซนเซอร์แต่ละตัวต้องตั้ง Slave ID ไม่ให้ซ้ำกัน
มีคำถาม? ติดต่อทีมงาน
