ABB ACS580 มี Modbus RTU มาในตัว (Embedded Fieldbus หรือ EFB) ไม่ต้องซื้อการ์ดเสริม แต่คู่มือมันหนามากและตัวเลขสเกลกระจายอยู่คนละที่กัน
บทความนี้คือสิ่งที่ผมทดสอบกับไดรฟ์จริงจนได้ค่าที่ตรงกับหน้าจอ keypad ทุกตัว
ตั้งค่าที่ตัวไดรฟ์ก่อน
| พารามิเตอร์ | ตั้งเป็น |
|---|---|
| 58.01 | Modbus RTU |
| 58.03 | Slave ID (เลือกเอง) |
| 58.04 | 9600 |
| 58.05 | 8 EVEN 1 |
| 58.14 | No action |
| 58.33 | 0 (addressing mode) |
| 58.06 | Refresh ← ต้องกดทุกครั้งหลังแก้อะไรในกลุ่ม 58 |
⚠️ สองตัวที่คนพลาดบ่อย:
- 58.05 เป็น 8E1 ไม่ใช่ 8N1 — อุปกรณ์ Modbus ส่วนใหญ่ใช้ 8N1 แต่ ABB ตั้งมาเป็น even parity ถ้าฝั่ง ESP32 ตั้ง
SERIAL_8N1จะคุยกันไม่รู้เรื่องเลย - 58.33 ต้องเป็น 0 ไม่งั้นอ่าน parameter register ไม่ได้ (process data ยังอ่านได้ ทำให้หลงคิดว่าต่อสำเร็จแล้ว)
และอย่าลืมว่า ACS580 ต้องคุมทิศทางรับ/ส่งเอง ใช้โมดูล RS-485 ที่มีขา RE/DE ไม่ใช่แบบ auto-direction (รายละเอียดอยู่ในบทความเรื่องเลือกโมดูล RS-485)
Process Data — อ่านได้เสมอ
แอดเดรสที่ใช้ในโค้ดคือ register − 40001
| แอดเดรส | register | คืออะไร | สเกล |
|---|---|---|---|
| 0 | 40001 | Control Word (เขียน) | 0x047E = พร้อม/หยุด · 0x047F = RUN |
| 1 | 40002 | Reference 1 (เขียน Hz) | 20000 = 100% ของความถี่สูงสุด |
| 3 | 40004 | Status Word | bit0=Ready 1=Active 2=Running 3=Fault 7=Warning 8=AtSetpoint |
| 4 | 40005 | Actual 1 = ความถี่จริง | 20000 = ความถี่สูงสุด |
กับดักสองข้อตรงนี้
Status Word อยู่ที่แอดเดรส 3 ไม่ใช่ 4 — ผมเสียเวลาไปนานเพราะไล่นับต่อจาก reference แล้วคิดว่าต้องเป็น 2 หรือ 4
สเกลคือ 20000 ไม่ใช่ 10000 ซึ่งต่างจากไดรฟ์หลายยี่ห้อ ถ้าใช้ 10000 ค่าจะออกมาเป็นครึ่งเดียวพอดี ทำให้หลงคิดว่าไดรฟ์วิ่งช้ากว่าที่สั่ง
| |
Parameter Register — อ่านทีละตัวเท่านั้น
สูตรแปลง: register = 40000 + (กลุ่ม × 100) + ดัชนี แล้ว แอดเดรส = register − 40001
| พารามิเตอร์ | แอดเดรส | หาร | หน่วย |
|---|---|---|---|
| 01.07 กระแสมอเตอร์ | 106 | 1 | A (หยาบ — เป็นจำนวนเต็ม) |
| 01.08 กระแส % | 107 | 1 | %Ie |
| 01.10 แรงบิด % | 109 | 100 | % |
| 01.11 แรงดัน DC bus | 110 | 10 | V |
| 01.13 แรงดันขาออก | 112 | 1 | V |
| 01.14 กำลังขาออก | 113 | 10 | kW |
| 01.15 กำลัง % | 114 | 10 | %Pn |
| 04.01 ฟอลต์ปัจจุบัน | 400 | 1 | รหัส |
| 05.10 อุณหภูมิบอร์ดควบคุม | 509 | 1 | °C |
| 05.11 อุณหภูมิอินเวอร์เตอร์ | 510 | 1 | % |
ตัวหารที่ใช้คือค่าตามหน้าจอ (display value) ไม่ใช่ค่า FbEq ในคู่มือ — จุดนี้ทำให้หลายคนได้ค่าผิดสเกลไปสิบเท่า
⚠️ ต้องอ่านทีละตัว (count = 1)
พารามิเตอร์บางตัวเป็น 32 บิต ซึ่ง EFB อ่านไม่ได้เลย จะตอบ exception กลับมา และถ้าคุณอ่านเป็นบล็อกที่คร่อมตัว 32 บิตเข้าไป ทั้งบล็อกจะพังไปด้วย ไม่ใช่แค่ตัวเดียว
พารามิเตอร์ที่อ่านไม่ได้: 01.06 (ความถี่ — ใช้ Actual1 ที่แอดเดรส 4 แทน), 01.50/01.51 (kWh/GWh), 05.01/05.02/05.04 (ตัวนับชั่วโมง)
ถ้าจำเป็นต้องใช้ตัวนับพลังงานจริง ๆ มีสองทาง: ให้ ESP32 นับเวลาเดินเครื่องเอง หรือ map เข้า Data I/O ผ่าน 58.106 ขึ้นไป แล้วอ่านที่แอดเดรส 5 เป็นต้นไป
เกร็ดที่ต้องรู้ถ้าจะสั่งงานจริง
รอบต่อนาที (RPM) มีสเกลซ้อนอีกชั้น
01.01 ที่แอดเดรส 100 ไม่ได้เป็น 1 = 1 rpm แต่เป็น 20000 = ค่าใน 46.01 (Speed scaling)
ต้องอ่าน 46.01 (แอดเดรส 4600, หาร 1) มาก่อน แล้วค่อยคำนวณ:
| |
ตรงกับที่หน้าจอ keypad แสดงพอดี
สั่งหมุนกลับทาง ต้องตั้งสองพารามิเตอร์
ส่งค่า reference ติดลบอย่างเดียวไม่พอ ต้องตั้งด้วย:
- 20.21 Direction = Request (0)
- 30.13 Minimum frequency = −50.00 Hz (ค่าดิบ −500, หาร 10)
ถ้า 30.13 ยังเป็น 0 ค่าลบที่ส่งไปจะถูกตัดทิ้ง แล้วมอเตอร์จะไปหยุดที่ 0 Hz แทนที่จะหมุนกลับ
เขียนพารามิเตอร์ผ่าน FC06 ได้
ตั้งค่าไดรฟ์จากระยะไกลได้เลย เช่น เขียน 20.21 ที่แอดเดรส 2020 หรือ 30.13 ที่แอดเดรส 3012 — สะดวกมากถ้าทำหน้าเว็บควบคุมบน ESP32
แรงดันขาออกที่วัดด้วยมัลติมิเตอร์จะไม่ตรง
ถ้าเอามัลติมิเตอร์ไปวัดขาออกของอินเวอร์เตอร์แล้วได้ค่าแปลก ๆ (ผมวัดได้ 309V ขณะที่ register บอก 192–200V) register คือค่าที่ถูก เพราะขาออกเป็นสัญญาณ PWM ซึ่งมัลติมิเตอร์ทั่วไปวัดไม่ได้ ไดรฟ์คำนวณค่าจริงตามเส้น V/f ของมันเอง
ระวังเรื่อง Control Word ตอนใช้งานจริง
ถ้าจะให้คนกดปุ่ม start/stop ที่หน้าไดรฟ์ตามปกติ อย่าส่ง Control Word ไปเรื่อย ๆ เพราะถ้า CW เป็น 0 ไดรฟ์จะขึ้นเตือน Emergency stop (OFF2) — ให้ปล่อย 20.01 เป็น terminal แล้วใช้ Modbus อ่านค่าอย่างเดียว
การส่ง CW แบบ keep-alive ควรทำเฉพาะตอนทดสอบที่ต้องการสั่ง RUN ผ่าน fieldbus จริง ๆ เท่านั้น
สรุปสิ่งที่ต้องระวัง
- 8E1 ไม่ใช่ 8N1
- 58.33 = 0 ไม่งั้นอ่าน parameter ไม่ได้
- 58.06 Refresh ทุกครั้งหลังแก้กลุ่ม 58
- Status Word อยู่แอดเดรส 3
- สเกล 20000 ไม่ใช่ 10000
- อ่าน parameter ทีละตัว ห้ามอ่านเป็นบล็อก
- ใช้โมดูล RS-485 ที่คุม DE เองได้