Intermediate
9 rungs
4 I/O

เซอร์โวเคลื่อนที่เป็นลำดับ 3 ตำแหน่ง

Servo Positioning Sequence

เซอร์โวเดินอัตโนมัติ 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)

ลำดับการทำงาน

  1. กด Start (X0) → M0 = 1, D600 = 1 (เริ่ม Stage 1)
  2. Stage 1: สั่ง EDRVA ไปตำแหน่ง 20,000 pulse (2 รอบ ที่ default 10k pulse/rev)
  3. เมื่อ pulse เสร็จ (M8134↓) → D600 = 2
  4. Stage 2: สั่ง EDRVA ไปตำแหน่ง 50,000 pulse (5 รอบ)
  5. เมื่อ pulse เสร็จ → D600 = 3
  6. Stage 3: สั่ง EDRVA กลับไปตำแหน่ง 0 (home)
  7. เมื่อ 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

เซอร์โวเคลื่อนที่เป็นลำดับ 3 ตำแหน่ง — Servo Positioning Sequence
เซอร์โวเดินอัตโนมัติ 3 ตำแหน่ง (20000 → 50000 → 0 pulse) ด้วย EDRVA พร้อมตรวจจับ pulse เสร็จ (M8134↓) เพื่อข้ามสเตจ — วนซ้ำจนกด Stop
N0Start/Stop latch — Start (X0) + self-hold with Stop(NC X1)
X0M0X1M0
N1Init stage on Start rising edge — ensures sequence starts at Stage 1
X0MOVK1, D600
N2Reset stage when system stopped (M0 off) → D600 = 0 (Idle)
M0MOVK0, D600
N3Stage 1: EDRVA → position 20000 (freq 10 kHz, accel/decel 100ms, Y0 pulse, Y4 dir)
D600 = K1M0EEDRVAK20000, K10000, K100, K100, Y0, Y4
N4Stage 2: EDRVA → position 50000 (freq 10 kHz)
D600 = K2M0EEDRVAK50000, K10000, K100, K100, Y0, Y4
N5Stage 3: EDRVA → home (position 0)
D600 = K3M0EEDRVAK0, K10000, K100, K100, Y0, Y4
N6Pulse done in Stage 1 (M8134 falling edge) → D600 = 2
M8134D600 = K1MOVK2, D600
N7Pulse done in Stage 2 → D600 = 3
M8134D600 = K2MOVK3, D600
N8Pulse done in Stage 3 → loop back to Stage 1
M8134D600 = K3MOVK1, D600
Rung count: 9, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

I/O Assignment

AddressRoleNote
X0Start button (NO)กดเพื่อเริ่ม sequence
X1Stop button (NC)กดเพื่อหยุด (motor จะวิ่งจบ stage ปัจจุบันก่อน)
Y0Pulse output to servo driveต้องเป็น transistor output PLC (รุ่น MT, ไม่ใช่ MR)
Y4Direction output to servo drive

Parameters ที่ปรับได้

D600default: 0

Current stage (0=Idle, 1-3=Running). Monitor via HMI

K20000 / K50000 / K0default: pulse positions

Target positions ต่อ stage. แก้ตามงานจริง (default 10k pulse/rev → 2 รอบ, 5 รอบ, home)

K10000default: 10,000 Hz

Pulse frequency (speed). เพิ่ม = เร็วขึ้น แต่ motor ต้องรับไหว

K100 / K100default: 100 ms accel / 100 ms decel

Acceleration + 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

  1. ดาวน์โหลดไฟล์ servo-positioning-sequence.csv จากแท็บ CSV ด้านบน
  2. เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
  3. เมนู File → Import → เลือกไฟล์ .csv ที่เพิ่งดาวน์โหลด
  4. กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
  5. ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC