การใช้งาน PLC กับ Servo Drive ผ่าน Modbus RS485 | คู่มือ
สอนต่อ PLC Samkoon FAs-32MT-AC-E กับ Servo R8 400W ทั้งสาย Pulse และ RS485 ตั้งค่า Modbus ให้ตรงกับ Drive สร้าง Modbus Table สั่ง Enable Servo และอ่าน RPM, สถานะ, จำนวน Pulse, อุณหภูมิ Drive และเวลาทำงานรวม แล้วสั่งหมุนด้วย DRVI / DRVA
ต่อขา 485A/485B ของ PLC เข้าขา 12/14 ของ Servo R8 ตั้ง COM 1(485) ของ PLC เป็น Modbus master 57600, 8, None, 1 ให้ตรงกับค่า Default ของ Drive แล้วสร้าง Modbus Table ที่แปลงเลขพารามิเตอร์เป็น Hex (P00-21 → H0015) ใช้ MBUS เขียน Servo Enable และอ่าน RPM, สถานะ, Pulse, อุณหภูมิ และเวลาทำงานของ Drive มาที่ D ของ PLC
อัพเดทล่าสุด: 26 ตุลาคม 2569
ทำไมต้องใช้ Modbus RS485 กับ Servo
ถ้าต่อแค่สายสัญญาณ Digital I/O เราสั่ง Enable และส่ง Pulse ได้ แต่จะไม่รู้ข้อมูลภายใน Drive เช่น RPM ทิศทาง อุณหภูมิของ Drive หรือเวลาที่ทำงานมาแล้ว ข้อมูลเหล่านี้ต้องอ่านผ่าน Modbus RS485 และยังใช้ Modbus สั่ง Enable Servo แทนการใช้ Digital Output ของ PLC ได้ด้วย
ในเดโมของคลิป ค่า D0 ใน PLC ผูกกับพารามิเตอร์ Enable ของ Drive เมื่อเปลี่ยน D0 จาก 0 เป็น 1 Servo ก็ถูก Enable ล็อกแกนทันที จากนั้นสั่งหมุนด้วย DRVI / DRVA ได้ตามปกติ ระหว่างหมุนก็อ่าน RPM, จำนวน Pulse, อุณหภูมิ Drive (เช่น 270 = 27.0 องศา) และเวลาทำงานรวมมาแสดงได้ ในคลิปยังต่อหน้าจอ HMI เข้ากับ PLC ผ่านสาย LAN เพื่อแสดงค่าเหล่านี้ให้ผู้ใช้ดูด้วย
อุปกรณ์ที่ใช้ในคลิป
- ชุด Servo 400W รุ่น R8-2204P-N + มอเตอร์ 60HK-A01330-CS2B2-A มาพร้อม Drive, Motor, สายกำลังและสาย Encoder
- PLC FAs-32MT-AC-E (Transistor Output) มีพอร์ต LAN, RS485 สำหรับ Modbus และขยาย I/O ได้
- คู่มือ Servo R8 แบบละเอียด (ดาวน์โหลดได้จากหน้า Download ของ Factonation) ใช้ดูเลขพารามิเตอร์
1. ต่อสาย Control Terminal (CN1)
| ขา Drive | ชื่อ | ต่อกับ PLC |
|---|---|---|
| 35 | PS_24V | 24V |
| 43 | PULS- | Y0 (Pulse) |
| 39 | SIGN- | Y4 (Direction) |
| 9 | DI1 | Y1 (Enable แบบสายสัญญาณ ไม่บังคับ) |
| 11 | COM | 24V (ต่อเมื่อใช้ DI1) |
- PLC แบบ Transistor รุ่นนี้ออก Pulse ความถี่สูงได้ 4 ช่อง คือ Y0–Y3 จึงเก็บ Y0–Y3 ไว้สำหรับ Pulse และใช้ Y4 เป็นสัญญาณทิศทาง
- Output ของ PLC เป็นแบบ NPN ต้องต่อ COM ของกลุ่ม Output ที่ใช้ไป 0V ในคลิปต่อ 0V เข้า COM0 (กลุ่มของ Y0) และ COM2 (กลุ่มของ Y4)
- ขา DI1 (ขา 9) โดย Default ของ Drive คือ Servo Enable ถ้าใช้ Modbus สั่ง Enable แล้ว ไม่ต้องต่อขา 9 และ 11 ก็ได้
2. ต่อสาย RS485
- 485A ของ PLC → ขา 12 (485/A) ของ Drive
- 485B ของ PLC → ขา 14 (485/B) ของ Drive
พอร์ตนี้คือ COM 1 ของ PLC (ขั้วด้านขวาล่าง)
3. ตั้งค่าการสื่อสาร
ฝั่ง Drive (กลุ่มพารามิเตอร์ P09)
| พารามิเตอร์ | ชื่อ | ค่า Default |
|---|---|---|
| P09-00 | Axis address (Slave ID) | 1 |
| P09-01 | Baud rate | 5 = 57600 (2 = 9600) |
| P09-02 | Parity check | 0 = 8-None-1 |
ในคลิปใช้ค่า Default ทั้งหมด ถ้าในเครือข่ายมีอุปกรณ์อื่นที่ต้องใช้ 9600 ให้เปลี่ยน P09-01 เป็น 2 ที่หน้า Drive (กด Mode เข้าเมนูตั้งพารามิเตอร์แล้วไปที่ P09-01) และอย่าลืมเปลี่ยนฝั่ง PLC ให้ตรงกัน
ฝั่ง PLC (SamSoar2022)
ไปที่ Config → Project Setting → Communication → แท็บ COM 1(485)
- Baudrate 57600, Databits 8, Stopbits 1, Checkcode NONE (ตรงกับ Drive)
- Protocol Modbus master
- Station number 0 เพราะ PLC เป็น Master
4. สร้าง Modbus Table
คลิกขวาที่ Modbus table → Add modbus table (ในคลิปตั้งชื่อ servo) ก่อนเขียนต้องรู้ว่าข้อมูลที่สนใจอยู่ตำแหน่งไหน อ่านกี่ชุด และข้อมูลนั้นคืออะไร โดยดูจากคู่มือ Drive
แปลงเลขพารามิเตอร์เป็น Hex Address
แปลงเฉพาะ 2 หลักหลัง ของพารามิเตอร์เป็นเลขฐาน 16 ส่วน 2 หลักหน้า (กลุ่ม) ใช้ตามเดิม (ใช้เครื่องคิดเลขแบบ Programmer ช่วยได้)
- P00-21 → H0015 (21 ฐานสิบ = 15 ฐานสิบหก)
- P13-12 → H130C (12 ฐานสิบ = 0C ฐานสิบหก)
P00-21 คือ Servo internal enable ค่าปกติเป็น 0 (Enable ตามสัญญาณ IO) ถ้าเป็น 1 คือ Servo always enabled
Table servo ในคลิป
| แถว | Port | Handle code | Slave register | Slave count | Master register | Comment |
|---|---|---|---|---|---|---|
| 0 | 1 | 0x06 (Write single register) | H0015 (P00-21) | 1 | D0 | Servo Internal Enable |
| 1 | 1 | 0x03 (Read holding register) | H1300 (P13-00) | 1 | D2 | Servo Operation Status |
| 2 | 1 | 0x03 (Read holding register) | H1302 (P13-02) | 1 | D4 | Motor Speed (rpm) |
| 3 | 1 | 0x03 (Read holding register) | H130C (P13-12) | 2 | D6 | Input Pulse Count |
| 4 | 1 | 0x03 (Read holding register) | H1319 (P13-25) | 2 | D8 | Driver Temperature |
| 5 | 1 | 0x03 (Read holding register) | H1350 (P13-80) | 2 | D10 | Total Running Time |
- Port = 1 เพราะคุยกับ Slave ID 1 (P09-00)
- Trigger Mode ทุกแถวเป็น ModbusMode_Loop คือเมื่อรัน MBUS จะวนส่งคำสั่งในตารางไปเรื่อยๆ
- P13-12 คือจำนวน Pulse ทั้งหมดที่ Servo ได้รับมา (เหมือนประวัติของ Drive) ไม่ใช่ค่าของฝั่ง PLC
- P13-00 คือสถานะ Servo (0 ไม่พร้อม, 1 พร้อม, 2 กำลังทำงาน, 3 ผิดปกติ) ส่วนอุณหภูมิ Drive และเวลาทำงานรวมมีหน่วย 0.1 (0.1 องศา และ 0.1 วินาที)
หมายเหตุเรื่องการนับ Address
ส่วนนี้ไม่ได้อยู่ในคลิป แต่ช่วยกันสับสนเวลาใช้โปรแกรม Master ตัวอื่น
Address นับจาก 0 — Hex Address ที่ได้คือ Address จริงในเฟรม Modbus (เลขกลุ่มเป็น Byte สูง เลขลำดับเป็น Byte ต่ำ ตามคู่มือ R8) ซึ่งนับจาก 0 ใส่ใน Slave Register ของ SamSoar2022 ได้ตรงๆ ไม่ต้องบวก 1 ถ้าใช้โปรแกรม Master ที่นับจาก 1 (Base 1) ให้บวก 1
5. เขียน Ladder
ในคลิป M100 สั่ง MBUS ที่ COM1 ใช้ Table servo เก็บ Information Code ที่ D100 (ถ้าสื่อสารแล้วเกิด Error ดู Code ได้จากตารางในคู่มือ) และ Index ของคำสั่งที่กำลังทำที่ D102 ซึ่งจะวนไปเรื่อยๆ ตาม Trigger Mode แบบ Loop
ถ้าไม่ใช้ Modbus ก็สั่ง Enable ด้วย Y1 ได้ แต่ในคลิปใช้ D0 ผ่าน Modbus แทน
6. Monitor ผ่านสาย LAN
ระหว่าง Monitor PLC กับ Servo แนะนำให้ใช้สาย LAN เพราะสะดวกกว่าสาย USB-C
- Config → Project Setting → แท็บ Net ตั้ง IP ของ PLC ให้อยู่วงเดียวกับคอมพิวเตอร์ และเช็กด้วย Ping Test
- Communication Setting เลือก Network แล้วกด Test ให้ขึ้น Success
- Tool → Monitor ถ้า MBUS กำลังรัน ค่า Index จะวิ่งไปเรื่อยๆ
- สร้าง Monitor List ใส่ D0, D2, D4, D6, D8, D10 จะเห็นค่าที่อ่านมาจาก Drive เช่น Total Running Time ที่นับเพิ่มขึ้นเรื่อยๆ ขณะ Drive ทำงาน
7. ทบทวนคำสั่ง DRVI / DRVA
- DRVI (Increment) ส่ง Pulse เพิ่มไปจากตำแหน่งปัจจุบันเท่าไร ในคลิปใช้ 600000 Pulse ความถี่ K100000 = 100,000 Hz ค่า Default ของ Drive นี้คือ 10,000 Pulse ต่อ 1 รอบ (ปรับได้ แต่ในคลิปใช้ Default) AC และ DC คือเวลาเร่งและลดความเร็ว ใส่ไว้เล็กน้อยไม่ให้กระชาก
- DRVA (Absolute) ระบุตำแหน่ง Pulse ที่ต้องการไปเลย เช่น แกนค้างอยู่ที่ 75382 สั่ง DRVA ไปตำแหน่ง 0 มอเตอร์จะหมุนกลับจนตำแหน่งเป็น 0 แล้วหยุด
8. ทำงานเป็น Sequence
ใช้ D7500 เก็บขั้นปัจจุบัน (1–3) และใช้ M8134 ซึ่งติดอยู่ระหว่างที่ Y0 กำลังส่ง Pulse เมื่อส่งเสร็จจะดับลง ขอบขาลงของ M8134 จึงใช้บอกว่าขั้นนั้นทำเสร็จแล้วให้ไปขั้นถัดไป ในคลิปขั้นที่ 2 และ 3 ใส่ TON 100 ms (K1) คั่นก่อนเช็กขอบขาลงของ M8134
เมื่อต้องการหยุด Sequence ให้ปิด M11
9. ดูสถานะ Servo ที่หน้าจอ Drive
| หน้าจอ | ความหมาย |
|---|---|
| Pru | Position mode, Enable แล้วและ Servo กำลังทำงาน |
| Prd | Position mode พร้อม (Ready) แต่ยังไม่ถูก Enable |
| Pnr | Servo ไม่พร้อม เช่น ไฟเลี้ยง Drive ดับ |
ในคลิปเมื่อปิด Enable หน้าจอเปลี่ยนจาก Pru เป็น Prd และเมื่อปิดไฟ Drive ขึ้น Pnr
สรุป
ต่อ RS485 แค่ 2 เส้น (485A → ขา 12, 485B → ขา 14) ตั้ง PLC เป็น Modbus master ที่ Baud rate ตรงกับ Drive แล้วสร้าง Modbus Table จากเลขพารามิเตอร์ที่แปลงเป็น Hex ก็สั่ง Enable Servo และอ่านข้อมูลภายใน Drive (สถานะ, RPM, Pulse, อุณหภูมิ, เวลาทำงาน) มาไว้ใน PLC หรือแสดงบน HMI ได้ ส่วนการสั่งตำแหน่งยังใช้ DRVI / DRVA ผ่านสาย Pulse ตามเดิม แนวคิดเดียวกันนี้ใช้กับการต่อ HMI กับ Servo ได้ด้วย
บทถัดไป
ระบบ Teaching Servo ควบคุมด้วยมือ | เทคนิคสอน Servo Motor
มีคำถาม? ติดต่อทีมงาน

