Intermediate
7 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)

ทำไมใช้ 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

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

  1. อินพุต
    กด Start (X0)
    ปุ่มเริ่มเดิน sequence (NO)
    latch ขอบขาขึ้น
  2. ประมวลผล
    M0 ติด (self-hold), D600 = 1
    ค้างสถานะเดิน + ตั้ง stage เริ่มต้นเป็น Stage 1
  3. เอาต์พุต
    Stage 1: EDRVA → ตำแหน่ง 20000
    2 รอบ @ 10k pulse/rev — เดินด้วย Y0 (pulse) + Y4 (dir)
    M8134↓ (pulse เสร็จ) → D600 = 2
  4. เอาต์พุต
    Stage 2: EDRVA → ตำแหน่ง 50000
    5 รอบ
    M8134↓ (pulse เสร็จ) → D600 = 3
  5. เอาต์พุต
    Stage 3: EDRVA → ตำแหน่ง 0 (home)
    กลับตำแหน่งอ้างอิง
    M8134↓ (pulse เสร็จ) → D600 = 1
  6. เงื่อนไข
    วนลูปจนกด Stop (X1)
    D600 วนกลับ Stage 1 ทุกครั้งที่จบ Stage 3 — เดินต่อเนื่องจนกด Stop
    กด Stop ตอนไหนก็ได้ M0 จะ OFF แต่ motor วิ่งจบ stage ปัจจุบันก่อนค่อยหยุด เพราะ EDRVA ถูก triggered ค้างไว้

โปรแกรม PLC

เซอร์โวเคลื่อนที่เป็นลำดับ 3 ตำแหน่ง — Servo Positioning Sequence
เซอร์โวเดินอัตโนมัติ 3 ตำแหน่ง (20000 → 50000 → 0 pulse) ด้วย EDRVA พร้อมตรวจจับ pulse เสร็จ (M8134↓) เพื่อข้ามสเตจ — วนซ้ำจนกด Stop
N0Start/Stop + ตั้งค่า Stage เริ่มต้น
Latch Start/Stop — Start (X0) + self-hold พร้อม Stop (NC X1)
X0M0X1M0
ตั้งค่า Stage บนขอบขาขึ้นของ Start — ทำให้เริ่มที่ Stage 1 เสมอ
X0MOVK1, D600
รีเซ็ต Stage เมื่อระบบหยุด (M0 OFF) → D600 = 0 (Idle)
M0MOVK0, D600
N1Output EDRVA แต่ละ Stage
Stage 1: EDRVA → ตำแหน่ง 20000 (freq 10 kHz, accel/decel 100ms, Y0 pulse, Y4 dir)
D600 = K1M0EDRVAK20000, K10000, K100, K100, Y0, Y4
Stage 2: EDRVA → ตำแหน่ง 50000 (freq 10 kHz)
D600 = K2M0EDRVAK50000, K10000, K100, K100, Y0, Y4
Stage 3: EDRVA → กลับ home (ตำแหน่ง 0)
D600 = K3M0EDRVAK0, K10000, K100, K100, Y0, Y4
N2ข้าม Stage เมื่อ Pulse เสร็จ
บนขอบขาลงของ M8134 (pulse เสร็จ) แตกขนาน 3 ทาง: Stage 1→2, Stage 2→3, Stage 3→วนกลับ 1
M8134D600 = K1MOVK2, D600D600 = K2MOVK3, D600D600 = K3MOVK1, D600
Network count: 3, 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