เซอร์โวเคลื่อนที่เป็นลำดับ 3 ตำแหน่ง
เซอร์โวเดินอัตโนมัติ 3 ตำแหน่ง (20000 → 50000 → 0 pulse) ด้วย EDRVA พร้อมตรวจจับ pulse เสร็จ (M8134↓) เพื่อข้ามสเตจ — วนซ้ำจนกด Stop
หลักการ
โปรแกรมสั่ง servo ให้เดินอัตโนมัติระหว่าง 3 ตำแหน่งแบบ absolute position โดยใช้คำสั่ง EDRVA (Enhanced Drive Absolute) ของ Samkoon PLC และตรวจจับว่า pulse เสร็จแล้วด้วยการดูขอบขาลงของ M8134 (Pulse Output Status flag สำหรับ Y0)
Sequence Flow
กด Start (X0)
↓
M0 ติด (self-hold), D600 = 1
↓
┌─────────────────────────────────────┐
│ Stage 1: EDRVA → position 20000 │ (2 รอบ @ 10k pulse/rev)
│ Stage 2: EDRVA → position 50000 │ (5 รอบ)
│ Stage 3: EDRVA → position 0 (home) │
└─────────────────────────────────────┘
↓ M8134↓ (pulse done) → advance D600
↓
วนลูปจนกด Stop (X1)
ลำดับการทำงาน
- กด Start (X0) → M0 = 1, D600 = 1 (เริ่ม Stage 1)
- Stage 1: สั่ง EDRVA ไปตำแหน่ง 20,000 pulse (2 รอบ ที่ default 10k pulse/rev)
- เมื่อ pulse เสร็จ (M8134↓) → D600 = 2
- Stage 2: สั่ง EDRVA ไปตำแหน่ง 50,000 pulse (5 รอบ)
- เมื่อ pulse เสร็จ → D600 = 3
- Stage 3: สั่ง EDRVA กลับไปตำแหน่ง 0 (home)
- เมื่อ pulse เสร็จ → D600 = 1 (วนกลับ Stage 1)
กด Stop (X1) ตอนไหนก็ได้ — M0 จะ OFF, sequence หยุด (แต่ motor จะวิ่งจบ stage ปัจจุบันก่อนค่อยหยุด เพราะ EDRVA ถูก triggered แล้วค้างไว้)
ทำไมใช้ EDRVA แทน DRVA?
EDRVA (Enhanced DRVA) ให้ข้อได้เปรียบสำคัญ:
- Pulse Number และ Frequency สามารถถูกเปลี่ยนระหว่างที่ instruction กำลังทำงานอยู่
- เหมาะกับงานที่ต้องปรับ speed แบบ real-time (HMI ผู้ใช้ปรับ freq กลางคัน)
- เปลี่ยนเป้าหมายกลางทางได้ (abort + resteer)
DRVA ธรรมดา lock ค่าตอนเริ่ม execute — ต้องรอ pulse เสร็จแล้วค่อยเปลี่ยน
ทำไมใช้ EDRVA (Absolute) ไม่ใช่ EDRVI (Incremental)?
- EDRVA อ้างอิง ตำแหน่งสัมบูรณ์ ที่นับจาก home → sequence เชื่อถือได้ แม้ pulse counter (D8140) จะเพี้ยนระหว่างรอบ
- EDRVI (Incremental) จะบวกทุกรอบ ทำให้ error ทบกันเร็ว — ไม่เหมาะกับงาน cyclic
โปรแกรม PLC
I/O Assignment
| Address | Role | Note |
|---|---|---|
| X0 | Start button (NO) | กดเพื่อเริ่ม sequence |
| X1 | Stop button (NC) | กดเพื่อหยุด (motor จะวิ่งจบ stage ปัจจุบันก่อน) |
| Y0 | Pulse output to servo drive | ต้องเป็น transistor output PLC (รุ่น MT, ไม่ใช่ MR) |
| Y4 | Direction output to servo drive |
Parameters ที่ปรับได้
D600default: 0Current stage (0=Idle, 1-3=Running). Monitor via HMI
K20000 / K50000 / K0default: pulse positionsTarget positions ต่อ stage. แก้ตามงานจริง (default 10k pulse/rev → 2 รอบ, 5 รอบ, home)
K10000default: 10,000 HzPulse frequency (speed). เพิ่ม = เร็วขึ้น แต่ motor ต้องรับไหว
K100 / K100default: 100 ms accel / 100 ms decelAcceleration + deceleration ramp. เพิ่มเวลา = smoother แต่ cycle time ยาวขึ้น
อุปกรณ์ที่แนะนำ
คำถามที่พบบ่อย
ทำไมใช้ LDF M8134 (falling edge)?
M8134 เป็น Pulse Output Status flag — ติด (ON) เมื่อ Y0 กำลังออก pulse, ดับ (OFF) เมื่อ pulse เสร็จ. ขอบขาลง (LDF) = ขณะที่ pulse กำลังจะเสร็จ → ปลอดภัยที่สุดในการ trigger stage ถัดไป (ถ้าใช้ LD M8134 หรือ LDI M8134 อาจติดหลายรอบ scan = stage ข้ามเร็วเกินไป)
Motor ไม่หมุนเลย?
เช็ค: (1) PLC เป็น Transistor output (MT) ไม่ใช่ Relay (MR) (2) ขา Y0 ต่อไป Pulse-, Y4 ต่อไป Direction- ของ servo drive (3) Servo drive ตั้งเป็น Position Control mode (P05.17 = 2) (4) Servo Enable ต่ออยู่ (Y1 หรือ Modbus enable)
ตำแหน่งไม่ตรงกับที่สั่ง?
Servo drive default = 10,000 pulse ต่อ 1 รอบ motor. ถ้าเพลาต่อกับ gear หรือ screw, ตำแหน่งสุดท้ายจะเป็น 'pulse / 10000 × gear_ratio × screw_pitch' (mm) ปรับ target K20000 ให้ตรงกับระยะจริง
ทำไมไม่ใช้ DRVI (Increment)?
Increment = บวกทีละรอบ ทำให้ error สะสมเร็ว ถ้า motor slip หรือ pulse หายแม้แต่นิดเดียว position counter กับ physical position จะเพี้ยนขึ้นเรื่อยๆ. Absolute (EDRVA) อ้างอิงจาก home แต่ละรอบ = reliable กว่า. DRVI เหมาะกับงาน jog หรือ step-feed ที่ไม่ต้องการตำแหน่งแน่นอน
เอกสารที่เกี่ยวข้อง
วิธีนำเข้าไฟล์ใน SamSoar2022
- ดาวน์โหลดไฟล์
servo-positioning-sequence.csvจากแท็บ CSV ด้านบน - เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
- เมนู File → Import → เลือกไฟล์
.csvที่เพิ่งดาวน์โหลด - กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
- ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC

