บันทึกตำแหน่ง Servo (Teach) + เล่นซ้ำ (Playback)
โปรแกรม Teach-and-Play สำหรับ servo — ผู้ใช้ jog มอเตอร์ไปตำแหน่งที่ต้องการ แล้วกด Save เพื่อบันทึก (เก็บได้ 10 ตำแหน่งใน D1000-D1009) พอกด Playback จะ EDRVA ไปทีละตำแหน่งตามลำดับด้วย indexed addressing
หลักการ
โปรแกรมนี้แบ่งเป็น 2 โหมด สลับด้วย X10 (Teach/Playback toggle):
┌─────────────────────┐
│ X10 = OFF (Teach) │
│ │
│ X0 → Jog+ │
│ X1 → Jog− │
│ X2↑ → Save to │
│ D1000[Z0] │
│ Z0 = Z0 + 1 │
│ X3↑ → Clear All │
└─────────────────────┘
│
┌────────┴────────┐
│ X10 = ON (Play) │
│ │
│ X4↑ → Run │
│ Z1 = 0 │
│ M10 = 1 │
│ EDRVA D1000[Z1]│
│ M8134↓ → Z1++ │
│ Z1 ≥ D250 → │
│ RST M10 │
└─────────────────┘
Teach mode (X10 = OFF)
- X0 (Jog+) — ขณะกดค้าง → motor หมุนไปข้างหน้าด้วย
PLSFต่อเนื่อง - X1 (Jog−) — ขณะกดค้าง → motor หมุนถอยหลังด้วย
PLSF - X2 (Save) — ขอบขาขึ้น → copy ค่า D8140 (pulse accumulator ปัจจุบัน)
ไปที่
D1000[Z0]แล้ว INC Z0. เต็ม 10 slot → Z0 ไม่เพิ่มอีก (เขียนทับ slot สุดท้าย) - X3 (Clear All) — ขอบขาขึ้น →
FMOV K0 D1000 K10+ Z0 = 0. รีเซ็ตทั้งหมด
Playback mode (X10 = ON)
- X4 (Run) — กดเพื่อเริ่ม playback — สั่ง
EDRVAไปยังD1000[Z1]ทีละตำแหน่ง - เมื่อ pulse เสร็จ (M8134↓) → INC Z1, ไป slot ถัดไป
- Z1 ถึงจำนวน saved positions (D250) → Reset Z1, หยุด (รอกด Run อีกครั้ง)
ตัวแปรสำคัญ
| Register | Purpose |
|---|---|
| D1000 – D1009 | Saved positions (10 slots) |
| Z0 | Teach write index (0–9) |
| Z1 | Playback read index (0–9) |
| D250 | Number of saved positions |
| D8140 | Pulse accumulator ของ Y0 (ตำแหน่งปัจจุบันจริงของ motor) |
| M10 | Playback running flag |
⚠ หมายเหตุเรื่อง Homing
โปรแกรมนี้ไม่ได้ทำ Homing อัตโนมัติ — ผู้ใช้ควร ZRN home ก่อนเริ่ม Teach
ไม่งั้น pulse counter D8140 จะเริ่มจากค่าสุ่ม (ค้างจากครั้งก่อน) ทำให้ตำแหน่งที่
บันทึกอ้างจุดศูนย์ผิด
สามารถเพิ่ม rung ZRN ได้ (ดู docs/plc/complete-plc/13-servo-commands สำหรับ ZRN syntax)
โปรแกรม PLC
I/O Assignment
| Address | Role | Note |
|---|---|---|
| X0 | Jog+ button (hold to move forward) | ใช้ตอน Teach mode เท่านั้น |
| X1 | Jog− button (hold to move backward) | ใช้ตอน Teach mode เท่านั้น |
| X2 | Save position button (NO, edge) | กดเพื่อบันทึกตำแหน่งปัจจุบัน |
| X3 | Clear All button (NO, edge) | ล้างตำแหน่งที่บันทึกไว้ทั้งหมด |
| X4 | Run playback button (NO, edge) | ใช้ตอน Playback mode เท่านั้น |
| X10 | Mode selector switch (OFF=Teach, ON=Playback) | toggle switch หรือ selector |
| Y0 | Pulse output to servo | |
| Y4 | Direction output to servo |
Parameters ที่ปรับได้
D1000 - D1009default: 0Saved positions (10 slots). อ่าน/เขียนจาก HMI ได้เพื่อดูว่าบันทึกอะไรไว้
D250default: 0Number of saved positions (เพิ่มขึ้นทุกครั้งที่ Save). Playback จะวิ่งถึง D250 slot แล้วหยุด
Z0 / Z1default: 0Teach write index / Playback read index. Z1 สามารถ preset ก่อนกด Run เพื่อเริ่มจากกลาง sequence
PLSF K5000 Y0default: 5 kHzJog speed. เพิ่ม = jog เร็ว แต่อาจ overshoot ตำแหน่งเป้าหมาย
EDRVA K10000default: 10 kHzPlayback speed
อุปกรณ์ที่แนะนำ
คำถามที่พบบ่อย
D1000[Z0] ทำงานยังไง?
Z0 เป็น Index register — ใช้ offset address ตอน scan. D1000[Z0] เมื่อ Z0=0 → D1000, Z0=3 → D1003, Z0=5 → D1005 etc. ทำให้เขียน indexed table ได้ง่ายโดยไม่ต้องเขียน rung ซ้ำ 10 ครั้ง
ทำไม Jog ใช้ PLSF ไม่ใช่ DRVI?
PLSF = continuous pulse ที่ frequency คงที่ (ไม่มีเป้าหมาย pulse count). DRVI ต้องกำหนดจำนวน pulse ล่วงหน้า. Jog ต้องการให้ motor หมุนขณะกดปุ่มเท่านั้น — ปล่อยปุ่ม = หยุดทันที. PLSF ทำได้เพราะหยุดทันทีเมื่อเงื่อนไขปิด
ถ้าอยาก Save เกิน 10 ตำแหน่งทำยังไง?
เพิ่มขนาด storage และ max index: (1) เปลี่ยน AW< Z0 K10 เป็น K20 (หรือจำนวนที่ต้องการ) ใน 3 rungs ของ Save (2) FMOV K0 D1000 K20 ตอน Clear All ต้องตรงกัน (3) Address range: D1000-D1019 ถ้า 20 slot
Teach mode กด Save แต่ไม่บันทึก?
เช็ค: (1) X10 ต้องเป็น OFF (Teach mode) (2) Z0 ต้อง < 10 (ไม่เต็ม) — ถ้าเต็มต้อง Clear All ก่อน (3) X2 ต้องเป็น momentary ที่ถูก detect ขอบขาขึ้น — ถ้าต่อค้างก็จะบันทึกครั้งเดียวตอน scan แรก
ตำแหน่งที่เล่นซ้ำไม่ตรงกับตอน Teach?
ต้อง Home (ZRN) ก่อน teach ทุกครั้งที่เปิดเครื่องใหม่ เพราะ D8140 (pulse accumulator) จะเริ่มจากค่าค้างเก่า ถ้าไม่ Home, ค่าที่ Save ไว้จะเป็น 'offset จาก จุดสุ่ม' ไม่ใช่ 'offset จาก home'
เอกสารที่เกี่ยวข้อง
วิธีนำเข้าไฟล์ใน SamSoar2022
- ดาวน์โหลดไฟล์
servo-teaching.csvจากแท็บ CSV ด้านบน - เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
- เมนู File → Import → เลือกไฟล์
.csvที่เพิ่งดาวน์โหลด - กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
- ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC

