คำสั่งคุม Servo
ใช้คำสั่ง PLSF, PLSY, DRVI, DRVA และ ZRN ของ PLC Samkoon คุม Servo R8 ตั้งแต่หมุนต่อเนื่อง หมุนตามจำนวน Pulse เดินแบบ Increment และ Absolute กลับจุด Home ไปจนถึงเขียน Sequence 3 Step
PLSF สั่ง Servo หมุนต่อเนื่องตามความถี่ PLSY หมุนตามจำนวน Pulse ส่วน DRVI และ DRVA เดินแบบ Increment และ Absolute พร้อมช่วงเร่งและลดความเร็ว และ ZRN กลับจุด Home โดยอ่าน Sensor — เช็ค M8134 กับ D8140 เพื่อรู้ว่าเดินเสร็จหรือยังและอยู่ตำแหน่งไหน แล้วนำไปเขียน Sequence
อัพเดทล่าสุด: 26 ตุลาคม 2569
คุม Servo ด้วยคำสั่ง High Speed Output
EP นี้ต่อจาก EP.12 ที่สั่ง Enable Servo ได้แล้ว คราวนี้มาใช้คำสั่ง High Speed Output ของ PLC สั่ง Servo ให้หมุนแบบต่างๆ ตั้งแต่หมุนต่อเนื่อง หมุนตามจำนวนรอบ เดินไปตำแหน่งที่กำหนด กลับจุด Home ไปจนถึงเขียน Sequence ให้ Servo เดินเองเป็นลูป
อุปกรณ์ในคลิปคือ PLC Samkoon FAs กับ Servo Drive Samkoon R8 (AC220V) โดย PLC ส่ง Pulse ที่ขา Y0 และสัญญาณทิศทางที่ขา Y4
Address ที่ใช้ในคลิป
| Address | หน้าที่ |
|---|---|
| M500 → Y001 | Enable Servo |
| Y000 | ขาส่ง Pulse |
| Y004 | ขา Direction |
| M501 | สั่ง PLSF |
| M502 | สั่ง PLSY |
| M503 / M504 | สั่ง DRVI หมุนไป / หมุนกลับ |
| M505 / M506 | สั่ง DRVA ไปตำแหน่ง A (0) / ตำแหน่ง B (100,000) |
| M507 | Reset Pulse (ล้าง D8140 เป็น 0) |
| M508 | Home (ZRN) |
| X000 | Proximity Sensor ที่จุด Home |
| M600 / M601 | Start Servo Sequence / Stop Servo |
| D600 | Stage ปัจจุบันของ Sequence |
Pulse กับความเร็วรอบ
ความเร็วรอบของ Motor ขึ้นกับค่า Pulse per revolution ของ Drive ซึ่งค่าเริ่มต้นคือ 10,000 แปลว่าจ่าย 10,000 Pulse Motor จะหมุน 1 รอบ
- ความถี่ 10,000 Hz = หมุน 1 รอบต่อวินาที
- ความถี่ 5,000 Hz = หมุน 1 รอบต่อ 2 วินาที
- ความถี่ 20,000 Hz = หมุน 2 รอบต่อวินาที
PLC ส่ง Pulse ได้สูงสุด 200 kHz (200,000 Hz) ซึ่งพอสำหรับหลาย Application ถ้าโหลดหนักก็ต้องทดเกียร์ ส่วนถ้าอยากเปลี่ยนค่า Pulse per revolution ให้ไปตั้ง Config ใน Drive เอง รายละเอียดการจูน ค่า Inertia และ Config อื่นๆ อยู่ในคู่มือ R8 series servo instruction detailed manual (ภาษาอังกฤษ) ดาวน์โหลดได้ที่ หน้าดาวน์โหลด
PLSF — หมุนต่อเนื่องตามความถี่
PLSF ส่ง Pulse ออกไปเรื่อยๆ ตามความถี่ที่กำหนด Servo จึงหมุนต่อเนื่อง
LD M501
PLSF K5000 Y0
K5000— ความถี่ 5,000 HzY0— ขาที่ส่ง Pulse
ขั้นตอนในคลิป
- Download โปรแกรมแล้วเข้า Monitor
- สั่ง M500 เพื่อ Enable Servo
- สั่ง M501 ให้ PLSF ทำงาน — Motor หมุน 1 รอบต่อ 2 วินาที (ลองนับดูได้ 2 วินาทีต่อรอบพอดี)
- อยากให้เร็วขึ้นก็เพิ่มค่า K เช่นเปลี่ยนเป็น
K20000แล้ว Download ใหม่ Motor จะหมุนเร็วขึ้นมาก
PLSY — หมุนตามจำนวน Pulse
PLSY เพิ่ม Parameter มาอีกตัวคือจำนวน Pulse จึงสั่งได้ว่าจะให้หมุนกี่รอบ
LD M502
PLSY K5000 K20000 Y0
K5000— ความถี่ 5,000 HzK20000— จำนวน Pulse (20,000 Pulse = 2 รอบ)Y0— ขาที่ส่ง Pulse
สั่ง M502 แล้ว Motor หมุน 2 รอบแล้วหยุดเอง
กำหนดทิศทางเริ่มต้นใน Drive (P05.17)
ก่อนใช้คำสั่งที่มีขา Direction คลิปตั้งทิศทางการหมุนเริ่มต้นที่ Drive ให้ชัดเจนก่อน
- ที่ Drive กดปุ่ม MODE จนเจอเมนู Param
- เลือก P05.17 (Reverse the instruction pulse signal) ค่าเริ่มต้นคือ 0
- เปลี่ยนเป็น 2 แล้วยืนยันค่า
- Drive จะขึ้น AL113 เตือนว่าต้องปิดแล้วเปิดไฟ Drive ใหม่ ค่านี้จึงจะมีผล
| ค่า P05.17 | ความหมาย |
|---|---|
| 0 | Pulse และ Sign ไม่กลับ (ค่าเริ่มต้น) |
| 1 | กลับ Pulse ไม่กลับ Sign |
| 2 | ไม่กลับ Pulse กลับ Sign (ทิศทาง) — ค่าที่ใช้ในคลิป |
| 3 | กลับทั้ง Pulse และ Sign |
Special Register สำหรับ High Speed Output
ในตารางของคู่มือ PLC มี 2 คอลัมน์ที่สำคัญมากสำหรับงาน Sequence
Pulse Outputting Status Register (คอลัมน์ที่ 3)
| ขา Pulse | Register | ความหมาย |
|---|---|---|
| Y000 | M8134 | ON ขณะกำลังส่ง Pulse |
| Y001 | M8135 | ON ขณะกำลังส่ง Pulse |
| Y002 | M8136 | ON ขณะกำลังส่ง Pulse |
| Y003 | M8137 | ON ขณะกำลังส่ง Pulse |
เป็น Bit ที่ อ่านได้อย่างเดียว (Read Only) แก้ค่าเองไม่ได้ และเป็นตัวสำคัญที่ใช้เช็คว่า Servo เดินเสร็จแล้วหรือยัง
Pulse Accumulation Counter (คอลัมน์ที่ 4)
| ขา Pulse | Register |
|---|---|
| Y000 | D8140 |
| Y001 | D8142 |
| Y002 | D8144 |
| Y003 | D8146 |
PLC จดไว้ว่าส่ง Pulse ออกไปแล้วกี่ Pulse จึงใช้ Monitor ได้ว่า Servo หมุนไปถึงตำแหน่งไหนแล้ว ค่านี้เป็น Double Word (32-bit signed) Address ของแต่ละขาจึงเพิ่มทีละ 2
ลองใส่ M8134 กับ D8140 ใน Monitor แล้วสั่ง PLSF จะเห็น M8134 เป็น ON และ D8140 นับขึ้นไปเรื่อยๆ พอสั่งหยุด M8134 กลับเป็น OFF และ D8140 หยุดนับ
DRVI — เดินแบบ Increment
DRVI (Drive Increment) สั่งให้หมุนเพิ่มจากตำแหน่งเดิมตามจำนวน Pulse ที่กำหนด และมีช่วงเร่งและลดความเร็วให้ด้วย คำสั่งรับ Parameter 6 ตัว
LD M503
DRVI K5000 K20000 K1000 K1000 Y0 Y4
| ลำดับ | Parameter | ค่าในคลิป |
|---|---|---|
| 1 | Freq — ความถี่เป้าหมาย | K5000 |
| 2 | Number — จำนวน Pulse | K20000 (2 รอบ) |
| 3 | AC — Accelerate | K1000 |
| 4 | DC — Decelerate | K1000 |
| 5 | Pulse — ขาส่ง Pulse | Y0 |
| 6 | Direct — ขา Direction | Y4 |
ถ้าสั่ง Motor หมุนโดยไม่มี Acceleration/Deceleration ความถี่จะกระโดดขึ้นและหยุดทันที ค่า AC และ DC ทำให้ความถี่ค่อยๆ ไต่ขึ้นถึงความถี่เป้าหมาย แล้วค่อยๆ ลดลงก่อนหยุด ตามกราฟ Frequency Adjustment Curve ในคลิป
สั่ง M503 ทีหนึ่ง Motor หมุน 2 รอบ สั่งอีกทีก็หมุนต่ออีก 2 รอบ
หมุนกลับทาง
ใส่จำนวน Pulse เป็นค่าติดลบ Motor จะหมุนกลับทาง ในคลิปคัดลอก Rung เดิมมาแล้วแก้แค่จำนวน Pulse ใช้กับ M504
LD M504
DRVI K5000 K-20000 K1000 K1000 Y0 Y4
DRVA — เดินแบบ Absolute
DRVA สั่งให้ไปที่ตำแหน่งที่ระบุ (นับจากตำแหน่ง 0) ไม่ใช่การบวกเพิ่ม จึงใช้สั่งกลับจุดเริ่มต้นได้ด้วย ในคลิปสร้างตำแหน่ง A กับ B
LD M505
DRVA K100000 K0 K10000 K10000 Y0 Y4
LD M506
DRVA K100000 K100000 K10000 K10000 Y0 Y4
- ตำแหน่ง A — ความถี่ 100,000 Hz ไปตำแหน่ง 0
- ตำแหน่ง B — ความถี่ 100,000 Hz ไปตำแหน่ง 100,000
- AC และ DC เป็น K10000 ทั้งคู่
ล้างค่าตำแหน่งก่อนเริ่ม
ถ้า D8140 มีค่าค้างอยู่จากคำสั่งก่อนหน้า ควรล้างเป็น 0 ก่อน ในคลิปใช้ M507 (Reset Pulse) สั่ง MOVD (Move แบบ Double Word เพราะ D8140 เป็น 32-bit)
LD M507
MOVD K0 D8140
ทดสอบ: กด Reset ให้ D8140 เป็น 0 แล้วสั่งไปตำแหน่ง B — Motor เร่งความเร็วไปถึงตำแหน่ง 100,000 แล้วหยุด สั่งตำแหน่ง A ก็หมุนกลับมาที่ตำแหน่ง 0
ZRN — กลับจุด Home ด้วย Sensor
DRVA สั่งกลับตำแหน่ง 0 ได้ก็จริง แต่ควรยึด Hardware เป็นหลัก คือติดตั้ง Limit Switch หรือ Sensor ไว้ที่จุดเริ่มต้น คำสั่ง Homing จะอ้างอิงจาก Sensor ตัวนั้นแทนการนับ Pulse
คำสั่ง Homing แบบง่ายคือ ZRN (Return Zero) ซึ่งรับ Parameter 7 ตัว
LD M508
ZRN K-10000 K-1000 K1000 K1000 X0 Y0 Y4
| ลำดับ | Parameter | ค่าในคลิป |
|---|---|---|
| 1 | Back — ความเร็วตอนหมุนกลับหาจุดเริ่มต้น | K-10000 (ค่าติดลบ และไม่เร็วมาก) |
| 2 | Crew (Creep) — ความเร็วหลังเจอ Sensor | K-1000 (ช้ามากๆ จะได้ไม่เลยไปไกล) |
| 3 | AC — Accelerate | K1000 |
| 4 | DC — Decelerate | K1000 |
| 5 | NearSignal — Input ของ Sensor | X0 (Proximity Sensor) |
| 6 | Pulse | Y0 |
| 7 | Direct | Y4 |
ลำดับการทำงาน
- หมุนกลับหาจุด Home ด้วยความเร็ว Back
- เมื่อ Sensor เจอวัตถุ เปลี่ยนเป็นความเร็ว Creep
- หมุนช้าๆ ต่อจนเลย Sensor ไปแล้วจึงหยุด
เขียน Servo Sequence
โจทย์ในคลิป: ให้ Motor หมุน 2 รอบแบบเร็ว จากนั้นหมุนต่ออีก 1 รอบแบบช้า แล้วหมุนกลับตำแหน่งเริ่มต้นด้วยความเร็วสูงสุด รวม 3 Step แล้ววนเป็นลูปไปเรื่อยๆ
ใช้ D600 เก็บ Stage ปัจจุบัน แต่ละ Stage สั่ง DRVA ไปตำแหน่งของตัวเอง และย้ายไป Stage ถัดไปเมื่อ D8140 เท่ากับตำแหน่งเป้าหมาย และ M8134 มีขอบขาลง (Pulse เพิ่งส่งจบ)
ทดสอบ Sequence
- Compile แล้ว Download ลง PLC เข้า Monitor
- Enable Servo (M500)
- ก่อนเริ่ม Sequence ให้ D8140 เป็น 0 ก่อน (คลิปแนะนำว่าเพิ่มเงื่อนไขเช็ค D8140 = 0 ไว้ใน Rung Start ด้วยก็ดี)
- สั่ง M600 — Motor หมุน 2 รอบ ต่ออีก 1 รอบ แล้วหมุนกลับ และวนเป็นลูป
- ปล่อย M600 แล้วลูปก็ยังทำงานต่อตาม Logic ที่เขียนไว้ จนกว่าจะกด Stop Servo (M601) ซึ่งหยุดทันที
- หลังหยุดอย่าลืมสั่ง Homing เพื่อให้ตำแหน่งกลับมาเริ่มที่ 0 ใหม่
สรุป
- PLSF หมุนต่อเนื่องตามความถี่ ส่วน PLSY หมุนตามจำนวน Pulse
- DRVI เดินเพิ่มจากตำแหน่งเดิม (ใส่ค่าติดลบเพื่อกลับทาง) ส่วน DRVA ไปตำแหน่งที่ระบุ ทั้งคู่มีช่วงเร่งและลดความเร็ว
- ZRN กลับจุด Home โดยอ้างอิง Sensor
- M8134 บอกว่ากำลังส่ง Pulse อยู่ และ D8140 บอกตำแหน่งปัจจุบัน ใช้สองตัวนี้คุมจังหวะของ Sequence
ตอนต่อไปจะเริ่มเรื่องการสื่อสารกับอุปกรณ์อื่นด้วย Modbus Protocol
ตอนถัดไป
14. พื้นฐาน Modbus Protocol สำหรับ PLC
ควรอ่านก่อน:
มีคำถาม? ติดต่อทีมงาน
