Intermediate
11 rungs
7 I/O

เซอร์โว Homing ด้วยคำสั่ง ZRN — หาตำแหน่ง 0 อัตโนมัติ

Servo Homing with ZRN (Auto Find Zero)

หาตำแหน่ง 0 อัตโนมัติด้วย limit switch — เข้าหาเร็ว, ปาดลำดับช้า, แล้ว reset position counter

หลักการ

หลังจาก PLC เปิด/ปิดไฟ เซอร์โวไม่รู้ว่าตำแหน่งจริงในโลกอยู่ที่ไหน — รู้เพียงว่า encoder จาก power-on ตอนนี้ = ตำแหน่งสมมติ 0 ของ PLC

Homing คือการหา mechanical zero ที่อ้างอิงกับ machine จริง (เช่น left endpoint ของ X-axis, top of Z-axis)

คำสั่ง ZRN

SamSoar2022 มีคำสั่ง ZRN (Zero Return) สำหรับ homing โดยเฉพาะ:

ZRN K1000 K10000 K100 K100 X10 Y0 Y4
    │     │      │    │    │   │  │
    │     │      │    │    │   │  └─ Direction Y
    │     │      │    │    │   └──── Pulse Y (Y0 = pulse output)
    │     │      │    │    └──────── Home limit X (X10 = home switch)
    │     │      │    └───────────── Decel time (ms)
    │     │      └────────────────── Accel time (ms)
    │     └───────────────────────── Approach freq (find speed, fast)
    └─────────────────────────────── Creep freq (lock-in speed, slow)

Sequence ZRN ทำอะไร

  1. Approach — pulse ออกที่ความถี่สูง (10 kHz) ไปทิศ home (Y4 OFF = ลบ)
  2. ถึงเซ็นเซอร์ X10 ON → decelerate
  3. Creep — pulse ความถี่ต่ำ (1 kHz) ออกจาก switch แล้วกลับเข้า switch ช้าๆ
  4. ขอบขาขึ้น X10 ครั้งที่ 2 (precise) → หยุด, D8140 (current position) = 0

ทำไมต้อง 2-stage (fast + slow)?

Limit switch มี hysteresis ทางกล ~0.1-1mm ถ้าเข้าหาเร็วๆ แล้วหยุดทันทีที่ trigger → ตำแหน่งจริงเปลี่ยนตาม inertia ของ motor ที่เบรกไม่ทัน

Creep stage ทำให้:

  • Motor ออกจาก switch (เพื่อ trigger ขอบขาขึ้นอีกครั้ง)
  • กลับเข้าช้าๆ → switch trigger ที่จุดเดียวกันเสมอ → repeatability ±0.01mm

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

First scan
  ↓
M0 (homed flag) = 0 (not homed)
  ↓
กด Home button (X0) → M1 (homing in progress) ติด
  ↓
ZRN เริ่มทำงาน:
  - Approach 10 kHz → ทิศ - (Y4 OFF)
  - X10 ON → decel
  - Creep 1 kHz กลับ → ขอบขาขึ้น X10 อีกครั้ง
  - D8140 = 0
  - M8134 (pulse done) ↓ falling edge
  ↓
Detect M8134↓ → SET M0 (homed), RST M1 (done)
  ↓
แสดงไฟ "READY" Y3
ตอนนี้ DRVA / EDRVA ใช้ค่าจริงได้แล้ว

ความปลอดภัย

  • Soft limit X axis — ตั้งใน servo drive: ห้ามวิ่งเกิน +X (เผื่อ home miss)
  • Timeout — เพิ่ม timer 30s, ถ้า ZRN ไม่จบภายในเวลา → SET fault
  • อย่า ZRN ระหว่าง normal operation — มันคือ blocking instruction

ขยายเพิ่ม

  • Auto home on power-upLD M8150 / SET M0_request
  • Multi-axis — ZRN ตัวที่ 2 ใช้ Y2 pulse + Y6 dir + X11 limit
  • Encoder home (Z-pulse) — ใช้ X กำหนดเป็น Z-pulse แทน limit switch (precise ระดับ pulse)

โปรแกรม PLC

เซอร์โว Homing ด้วยคำสั่ง ZRN — หาตำแหน่ง 0 อัตโนมัติ — Servo Homing with ZRN (Auto Find Zero)
หาตำแหน่ง 0 อัตโนมัติด้วย limit switch — เข้าหาเร็ว, ปาดลำดับช้า, แล้ว reset position counter
N0ปุ่ม Home + สถานะ
ปุ่ม Home (X0) — เริ่ม homing ถ้ายังไม่ได้ทำอยู่และปุ่ม Stop ยังไม่กด
X0M1X1SETM1
ล้าง Homed flag (M0) ทุกครั้งที่เริ่ม homing ใหม่ — ถือว่า zero เก่าใช้ไม่ได้
X0RSTM0
N1คำสั่ง ZRN Homing
ZRN — Creep 1kHz, Approach 10kHz, Accel/Decel 100ms, Home X10, Pulse Y0, Dir Y4
M1ZRNK1000, K10000, K100, K100, X10, Y0, Y4
N2ตรวจจับ Homing เสร็จ
ตรวจจับ homing เสร็จ — ขอบขาลงของ M8134 (Y0 pulse-out flag) → SET M0, RST M1
M8134M1SETM0
ตรวจจับ homing เสร็จ — ล้าง M1 (homing-in-progress)
M8134M1RSTM1
N3ยกเลิก + ไฟแสดงสถานะ
ปุ่ม Stop (X1) — ยกเลิก homing ถ้ากดระหว่างทาง
X1RSTM1
ไฟ Ready (Y3) — ติดเมื่อ homed แล้ว (M0)
M0Y3
ไฟ Homing-in-progress (Y5)
M1Y5
N4Fault จาก Timeout
Timeout ของ homing — 30 วินาที (3000 × 10ms = 30s)
M1TONTV0, K3000
ถ้า T0 ทำงาน (homing ใช้เวลาเกิน 30s) → ตั้ง Fault flag (M99) แล้วยกเลิก
T0SETM99
ยกเลิก homing เมื่อมี Fault
M99RSTM1
Network count: 5, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

I/O Assignment

AddressRoleNote
X0ปุ่ม Home (NO)กดเพื่อเริ่ม Auto-home
X1ปุ่ม Stop (NC)
X10Home limit switch (NO)เซ็นเซอร์ที่ตำแหน่ง home (mechanical end-stop)
Y0Pulse output ไป servo drive
Y4Direction output (OFF = ทิศ home, ON = ทิศตรงข้าม)
Y3ไฟ Ready (homed)
Y5ไฟ Homing-in-progress

Parameters ที่ปรับได้

K1000 (creep freq)default: 1 kHz

ความเร็ว Creep — ปาดช้าๆ. ลดค่า = แม่นยำขึ้น แต่ homing ช้าลง

K10000 (approach freq)default: 10 kHz

ความเร็ว Approach — เข้าหา home เร็ว. ปรับตาม motor + ระยะทาง

TV0 / K3000default: 30s

Timeout — ยกเลิกถ้า homing ใช้เวลาเกินกำหนด

M0default: 0

Homed flag — TRUE เฉพาะเมื่อ D8140 == 0 ตรงกับ machine zero

M1default: 0

Homing กำลังดำเนินการ

M99default: 0

Fault flag — ติดเมื่อ Timeout

อุปกรณ์ที่แนะนำ

คำถามที่พบบ่อย

ทำไมไม่ใช้ DRVI ลบ pulse + limit switch แทน ZRN?

ทำได้ แต่: (1) ต้องเขียน logic เอง 2-stage approach + creep (~10 rungs) (2) ZRN ฮาร์ดแวร์ใน PLC ทำให้ accurate ตามขอบขาขึ้น X10 จริง (interrupt-based) ไม่ขึ้นกับ scan time ZRN ดีกว่าในทุกแง่

ทำไม home limit ต้อง NO ไม่ใช่ NC?

ZRN ต้อง trigger บน rising edge — switch ต้อง OFF ตอนปกติ, ON ตอนถึง home NC จะ ON ตลอดทาง → ZRN จะหยุดทันทีที่เริ่ม สำหรับ safety end-stop ใช้ NC แยกต่างหาก ต่อกับ servo Driver E-Stop input

ZRN กลับมาที่จุดเดิมทุกครั้งไหม?

ใช่ — ตามขอบขาขึ้นของ X10 ระหว่าง creep stage repeatability ขึ้นกับ: (1) Switch hysteresis ทางกล (~0.01-0.1mm) (2) Creep speed (ช้ากว่า = ดีกว่า) (3) Encoder resolution (ปกติ 10000 PPR = 0.001mm ต่อ pulse) ใช้งานทั่วไปได้ ±0.01mm

ZRN block PLC จนเสร็จไหม?

ไม่ — เป็น non-blocking M8134 (pulse output flag) จะ ON ระหว่าง ZRN ทำงาน, OFF เมื่อเสร็จ ใช้ LDF M8134 detect ขอบขาลงเพื่อทราบว่า done อย่าใช้ XCALL/CJP บล็อกระหว่างนี้

วิธีนำเข้าไฟล์ใน SamSoar2022

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