หน้าแรกคู่มือServoการใช้งาน PLC กับ Servo Drive ผ่าน Modbus RS485 | คู่มือ
SERVOเริ่มต้น · Beginner20 นาที

การใช้งาน 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

ชุดอุปกรณ์สำหรับบทความนี้

ราคาชุดอุปกรณ์

฿13,380

ทำไมต้องใช้ 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
35PS_24V24V
43PULS-Y0 (Pulse)
39SIGN-Y4 (Direction)
9DI1Y1 (Enable แบบสายสัญญาณ ไม่บังคับ)
11COM24V (ต่อเมื่อใช้ 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-00Axis address (Slave ID)1
P09-01Baud rate5 = 57600 (2 = 9600)
P09-02Parity check0 = 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 ในคลิป

แถวPortHandle codeSlave registerSlave countMaster registerComment
010x06 (Write single register)H0015 (P00-21)1D0Servo Internal Enable
110x03 (Read holding register)H1300 (P13-00)1D2Servo Operation Status
210x03 (Read holding register)H1302 (P13-02)1D4Motor Speed (rpm)
310x03 (Read holding register)H130C (P13-12)2D6Input Pulse Count
410x03 (Read holding register)H1319 (P13-25)2D8Driver Temperature
510x03 (Read holding register)H1350 (P13-80)2D10Total 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

Servo R8 ผ่าน Modbus RS485 + คำสั่ง Pulse
MBUS อ่าน/เขียน Table servo ผ่าน COM1, Enable ด้วย Y1 (ทางเลือก), DRVI เดินหน้า/ถอยหลัง 600000 Pulse และ DRVA กลับตำแหน่ง 0
N0Config + Data
M100 สั่ง MBUS ผ่าน COM1 ใช้ Table servo (D100 = Information Code, D102 = Index)
M100MBUSK1, servo, D100, D102
M8151 (ON ตลอดขณะ PLC RUN) คัดลอกตัวนับ Pulse ของ Y0 จาก D8140 มาไว้ที่ D1000
M8151MOVDD8140, D1000
N1Enable
M0 สั่ง Y1 ไปขา DI1 ของ Drive (ใช้เมื่อ Enable ด้วยสายสัญญาณแทน Modbus)
M0Y1
N2Commands
M1 เดินหน้า: DRVI 600000 Pulse ที่ 100000 Hz, AC/DC 1000, Pulse Y0, Direction Y4
M1DRVIK600000, K100000, K1000, K1000, Y0, Y4
M2 ถอยหลัง: DRVI -600000 Pulse
M2DRVIK-600000, K100000, K1000, K1000, Y0, Y4
M3 กลับศูนย์: DRVA ไปตำแหน่ง 0, AC/DC 10000
M3DRVAK0, K100000, K10000, K10000, Y0, Y4
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

ถ้าไม่ใช้ Modbus ก็สั่ง Enable ด้วย Y1 ได้ แต่ในคลิปใช้ D0 ผ่าน Modbus แทน

6. Monitor ผ่านสาย LAN

ระหว่าง Monitor PLC กับ Servo แนะนำให้ใช้สาย LAN เพราะสะดวกกว่าสาย USB-C

  1. Config → Project Setting → แท็บ Net ตั้ง IP ของ PLC ให้อยู่วงเดียวกับคอมพิวเตอร์ และเช็กด้วย Ping Test
  2. Communication Setting เลือก Network แล้วกด Test ให้ขึ้น Success
  3. Tool → Monitor ถ้า MBUS กำลังรัน ค่า Index จะวิ่งไปเรื่อยๆ
  4. สร้าง 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

Servo Sequence 3 ขั้นวนลูป
M10 เริ่ม (D7500 = 1, SET M11) แต่ละขั้นสั่ง DRVA แล้วใช้ขอบขาลงของ M8134 ข้ามไปขั้นถัดไป ขั้น 3 วนกลับขั้น 1 ปิด M11 เพื่อหยุด
N0Sequence
M10 เริ่ม Sequence: ตั้ง D7500 = 1 และ SET M11 (Sequence Running)
M10MOVK1, D7500SETM11, K1
ขั้น 1: DRVA ไปตำแหน่ง 200000 ที่ 50000 Hz, ส่ง Pulse เสร็จ (M8134 ขอบขาลง) → D7500 = 2
M11D7500 = K1DRVAK200000, K50000, K2000, K2000, Y0, Y4M8134↓MOVK2, D7500
ขั้น 2: DRVA กลับตำแหน่ง 0, หน่วง T0 100 ms แล้ว M8134 ขอบขาลง → D7500 = 3
M11D7500 = K2DRVAK0, K50000, K2000, K2000, Y0, Y4TONTV0, K1T0M8134↓MOVK3, D7500
ขั้น 3: DRVA ไปตำแหน่ง 100000 ที่ 100000 Hz, หน่วง T1 100 ms แล้ว M8134 ขอบขาลง → กลับ D7500 = 1
M11D7500 = K3DRVAK100000, K100000, K2000, K2000, Y0, Y4TONTV1, K1T1M8134↓MOVK1, D7500
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

เมื่อต้องการหยุด Sequence ให้ปิด M11

9. ดูสถานะ Servo ที่หน้าจอ Drive

หน้าจอความหมาย
PruPosition mode, Enable แล้วและ Servo กำลังทำงาน
PrdPosition mode พร้อม (Ready) แต่ยังไม่ถูก Enable
PnrServo ไม่พร้อม เช่น ไฟเลี้ยง 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

25 นาทีขั้นสูง · Advanced