Advanced
29 rungs
12 I/O

เซอร์โว 2 แกนผ่านเกียร์ — วิ่งความเร็วเท่ากัน + Homing

Dual Geared Servo — Synced Constant Speed + Homing

เซอร์โว 750W 2 ตัวขับจานข้อเหวี่ยงผ่านเกียร์ 1:50 ให้หมุน 15 รอบ/นาที เท่ากัน — Homing ด้วย ZRN แล้ววิ่งต่อเนื่องด้วย EDRVI โหมด continuous (พัลส์ = 0x7FFFFFFF) ที่มี accel/decel ในตัว ล็อกเฟส 2 จานให้หมุดตรงมุมกันด้วย Home Sensor (FAT-16MT มีพัลส์แค่ Y0/Y1)

โจทย์

PLC FAT-16MT-DC-E 1 ตัว คุมเซอร์โว 750W 2 ตัว แต่ละตัวต่อหัวเกียร์ทด 1:50 ต้องการให้ เพลาปลายเกียร์วิ่ง 15 รอบ/นาที เท่ากันทั้ง 2 แกน มี Home Sensor (proximity) ที่เพลาแต่ละตัว ลำดับการทำงาน

การสั่ง ON/OFF เป็น สวิทช์กดค้าง (maintained) ที่ X0กดค้าง X0 = ON, ปล่อย X0 = OFF (ไม่ใช่ปุ่ม Start/Stop แยก จึงไม่ต้อง latch)

  1. กดค้าง X0 (ON) → servo ON, ทั้ง 2 ตัววิ่งช้าๆ (~5 รอบ/นาที) หา Home ตัวที่เจอก่อนหยุดรออีกตัว
  2. ทั้งคู่เจอ Home → ค่อยๆเร่งพร้อมกันจนถึง 15 รอบ/นาที วิ่งเท่ากันตราบที่ยังกดค้าง X0
  3. ปล่อย X0 (OFF) → ทั้งคู่ค่อยๆชะลอแล้วจอดที่ Home (sensor อยู่ใกล้เพลา หมุนไม่ถึง 1 รอบก็เจอ) → servo OFF
  4. กดค้าง X0 อีกครั้ง → วนลูปเดิม ถ้าอยู่ที่ Home อยู่แล้วก็เริ่มที่ขั้น 2 ได้เลย (ปล่อย X0 ระหว่าง homing = ยกเลิกกลับ IDLE; ค้าง X0 ค้างไว้ตอนเปิดไฟ PLC จะไม่ออกตัวเอง ต้องปล่อยแล้วกดใหม่)

ข้อจำกัดฮาร์ดแวร์ที่กำหนดทุกอย่าง

FAT-16MT (และ PLC transistor 16 จุดทุกตัว) มีพอร์ตพัลส์ความเร็วสูง แค่ Y0 กับ Y1 — พอดี 2 แกน แต่ ไม่มีช่องพัลส์สำรอง จึงจัด แกน 1 = Y0, แกน 2 = Y1

คำนวณความถี่ (ยึดค่า PPR ของเซอร์โว — ตัวอย่างนี้ PPR = 10000 พัลส์/รอบมอเตอร์)

RUN  : ปลายเกียร์ 15 rpm → มอเตอร์ 15×50 = 750 rpm → 750/60×10000 = 125,000 Hz
HOME : ปลายเกียร์ ~5 rpm → มอเตอร์ 250 rpm        → ~41,667 Hz  (ใช้ ~K40000)
CREEP: ปลายเกียร์ ~1 rpm → มอเตอร์ 50 rpm         → ~8,333 Hz   (ใช้ ~K8000)
คาบผ่าน Home ที่ 15 rpm = 1 รอบ / 4 วินาที        → เป้า 4000 ms (K400 × 10ms)

125 kHz อยู่ในพิสัย EDRVI (สูงสุด 200 kHz) แต่ ใกล้ขีดจำกัดสำหรับสายพัลส์ single-ended ที่ยาว 10 ม. แนะนำ (ก) ตั้ง electronic gear เป็น PPR = 5000 → 62.5 kHz และ (ข) ใส่ pull-up 1kΩ ไป 24V ที่ Y0/Y1 + สาย twisted-shielded หรือแปลงเป็น line-driver ที่ปลายไดรฟ์ตัวไกล

ทำไม EDRVI (ไม่ใช่ PLSF หรือ DRVI ธรรมดา)

EDRVI (Enhanced DRVI — real-time frequency modulation) ให้ครบทั้ง 3 อย่างที่งานนี้ต้องการ ในคำสั่งเดียว

  • วิ่งต่อเนื่อง — ตั้งจำนวนพัลส์ = K2147483647 (0x7FFFFFFF) → ออกพัลส์ต่อเนื่อง ทางบวกไม่รู้จบ (0x80000000 = ทางลบ) — เป็น sentinel ที่คู่มือรองรับ ไม่ใช่ move ที่จะจบ เฉพาะ EDRVI เท่านั้น ที่ทำได้ EDRVA ไม่มีโหมดนี้
  • accel/decel ในตัว — ตั้งเวลาเร่ง/ชะลอแยกกันได้ (trapezoidal/S-curve) ไม่ต้องไล่ความถี่ ทีละ step ด้วยซอฟต์แวร์ → เข้า RUN ก็ตั้งความถี่เป็น F_run คำสั่งเร่งให้เองนุ่มๆ
  • เปลี่ยนความถี่เรียลไทม์ — แก้รีจิสเตอร์ความถี่ระหว่างวิ่ง คำสั่งคำนวณเส้นโค้งใหม่ พร้อม accel/decel ให้เอง → ใช้ทำ sync trim ได้ตรงๆ

หมายเหตุ: ในโหมด continuous เปลี่ยน "จำนวนพัลส์" ไม่ได้ หลังเริ่มแล้ว — แต่ ความถี่ เปลี่ยนได้ (ซึ่งคือสิ่งที่เราต้องการ) ส่วนเวลา accel/decel ตั้งครั้งเดียวตอนเริ่ม แก้ระหว่างวิ่งไม่ได้

Homing ยังใช้ ZRN (หา proximity แล้วหยุดให้เอง interrupt-based) ZRN กับ EDRVI ใช้พอร์ต Y0/Y1 ร่วมกัน จึง สลับกันทำงานตาม state ไม่เปิดพร้อมกัน

State machine (D100)

0 IDLE → 1 HOMING → 2 RUN → 3 STOPPING → 0
ZRN เปิดเฉพาะ state 1   |   EDRVI (Y0/Y1) เปิด state 2–3
การเร่งเข้าสู่ RUN และการชะลอตอน STOPPING เป็นหน้าที่ของ EDRVI เอง — ไม่มี state RAMP แยก

กลไกปลายเกียร์ = จานหมุน + ข้อเหวี่ยง

ปลายเกียร์เป็น จานกลมหมุนต่อเนื่อง (15 รอบ/นาที) มีหมุดข้อเหวี่ยงที่ริมจาน (เหมือนเพลาข้อเหวี่ยง) ไม่ใช่แผ่นวิ่งเชิงเส้น จึงเป็น การหมุนทางเดียวต่อเนื่อง — ตรงกับ EDRVI continuous พอดี (ไม่มีกลับทิศ ไม่มีลิมิตปลายทาง) Home Sensor จับธงที่ริมจาน 1 ครั้ง/รอบ ใช้เป็นดัชนีตำแหน่งมุม

วิธี Sync — ล็อกเฟส 2 จานให้ตรงกัน (ไม่ใช่แค่ความเร็วเท่า)

เพราะเป็นจานข้อเหวี่ยง 2 ตัวที่ต้องประสานกัน สิ่งที่ต้องคุมคือ เฟส (มุมหมุดตรงกัน) ไม่ใช่แค่ความเร็วเฉลี่ยเท่า — ความถี่ต่างกันนิดเดียวจะสะสมเป็นเฟสเคลื่อนเรื่อยๆ

ทำเป็น phase lock (ตรงกับที่โจทย์อยากให้เทียบเวลาผ่าน Home ของ 2 ตัว): แกน 1 ตรึงที่ F_run เป็น master, ตัวจับเวลาเฟส D340 รีเซ็ตทุกครั้งแกน 1 ผ่าน Home แล้ว จับค่าตอน แกน 2 ผ่าน Home → D342 = แกน 2 ตามหลัง/นำหน้าแกน 1 กี่ 10ms ถ้าหลุดแบนด์ก็เร่ง/หน่วง แกน 2 ชั่วคราว (±Δ) ให้หมุดกลับมาตรงมุม (เริ่มต้นทั้งคู่ homed พร้อมกันจึงตรงเฟสตั้งแต่ต้น ความเร็วเท่ากันเป็นผลพลอยได้) ค่าแบนด์ K5/K200/K395 อิงคาบ 4000ms — ถ้าเปลี่ยน rpm/PPR ต้องปรับ

ทางเลือกที่แม่นกว่า — electronic crankshaft ด้วยตัวนับพัลส์: ZRN ศูนย์ตัวนับสะสม D8140(Y0)/D8142(Y1) เป็น 0 ตอน home อยู่แล้ว พอวิ่ง EDRVI ต่อเนื่อง ผลต่าง D8140 − D8142 คือค่าเฟสเป็นจำนวนพัลส์ตรงๆ (ละเอียดระดับ 1/PPR รอบ) จะ trim จากค่านี้ แทนเวลา Home ก็ได้ แล้วใช้ Home Sensor เป็นตัวตรวจ/รีเซ็ตเฟสเป็นระยะ

หมายเหตุการใช้งานจริง (ต้องจูนหน้างาน)

  • EDRVI operand = DRVI ทุกตัว (<pulses> <freq> <accel> <decel> <pulseY> <dirY>) ต่างแค่ "ความถี่" แก้ระหว่างวิ่งได้ — ในที่นี้ pulses = K2147483647 (continuous +)
  • ลำดับ operand ของ ZRN — ใช้ฟอร์ม creep ก่อน seek ตามตัวอย่าง servo-homing-zrn (คู่มือบางหน้าสลับ seek มาก่อน — ยืนยันตอนคอมไพล์ F4)
  • ทิศทาง — สมมติเดินหน้า = DIR OFF (M8068/M8192~ ปรับ polarity ได้) แกนไหนกลับทิศให้สลับสาย DIR หรือใส่ความถี่ติดลบ
  • หน่วงตอน Servo-ON — มี timer 200ms (T2) กันไม่ให้ ZRN เริ่มก่อนไดรฟ์พร้อม
  • STOPPING ตั้งความถี่เป็น creep แล้วรอ decel (T3 ~1.5s) ก่อนค่อยจอดที่ Home ทีละแกน (ตรงกับ "อาจจะหน่วงเวลานิดหน่อย" ในโจทย์)
  • โปรแกรมนี้เป็น ฉบับร่างสำหรับนำเข้า + คอมไพล์ (F4) + ทดสอบบนฮาร์ดแวร์ แล้วค่อยปรับจูน

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

  1. อินพุต
    กดค้าง X0 (ON, maintained)
    ขอบขาขึ้น X0 ขณะ IDLE → Servo ON (Y6/Y7) + หน่วง 200ms ให้ไดรฟ์พร้อม → เข้า HOMING
    state 0 → 1
  2. ประมวลผล
    HOMING — ZRN ทั้ง 2 แกน ~5 rpm
    แต่ละแกนหา Home เอง (X2/X3) ตัวที่เจอก่อนหยุดรอ จนครบทั้งคู่
    ครบ 2 แกน → RUN
  3. เอาต์พุต
    RUN — EDRVI continuous (0x7FFFFFFF)
    ตั้งความถี่ = F_run, EDRVI เร่งให้เองด้วย accel ในตัว แล้ววิ่งคงที่ 15 rpm
    Phase lock: เทียบเวลาผ่าน Home แกน 2 กับแกน 1 (D342) แล้วปรับ D212 ให้หมุดข้อเหวี่ยงตรงมุมกัน
  4. รีเซ็ต
    ปล่อย X0 (OFF) → STOPPING
    ตั้งความถี่ = creep → EDRVI ชะลอให้เอง รอ ~1.5s แล้วจอดที่ Home ทีละแกน
    จอดครบ 2 แกน → Servo OFF
  5. ประมวลผล
    IDLE (servo off)
    กลับ state 0 — กด ON อีกครั้งวนลูปเดิม (ถ้าอยู่ Home แล้ว ZRN จบเร็ว)

โปรแกรม PLC

เซอร์โว 2 แกนผ่านเกียร์ — วิ่งความเร็วเท่ากัน + Homing — Dual Geared Servo — Synced Constant Speed + Homing
เซอร์โว 750W 2 ตัวขับจานข้อเหวี่ยงผ่านเกียร์ 1:50 ให้หมุน 15 รอบ/นาที เท่ากัน — Homing ด้วย ZRN แล้ววิ่งต่อเนื่องด้วย EDRVI โหมด continuous (พัลส์ = 0x7FFFFFFF) ที่มี accel/decel ในตัว ล็อกเฟส 2 จานให้หมุดตรงมุมกันด้วย Home Sensor (FAT-16MT มีพัลส์แค่ Y0/Y1)
N0Init (first scan)
ตั้งค่าความถี่ + พารามิเตอร์ครั้งแรก (ความถี่ 32-bit ใช้ MOVD; accel/decel + state เป็น 16-bit ใช้ MOV)
M8150MOVDK125000, D220MOVDK40000, D222MOVDK8000, D224MOVDK3000, D330MOVK1000, D230MOVK1000, D232MOVK0, D100
N1Run Demand + Servo Power
X0 เป็นสวิทช์ค้าง (maintained): กดค้าง = ON, ปล่อย = OFF → M0 ตามระดับ X0 โดยตรง (ไม่ต้อง latch/ไม่ใช้ X1)
X0M0
Servo ON ทั้ง 2 ไดรฟ์ ตลอดทุก state ที่ไม่ใช่ IDLE
D100 <> K0Y6Y7
หน่วง 200ms หลัง Servo-ON ก่อนอนุญาตให้ ZRN เริ่ม (ไดรฟ์พร้อม)
D100 <> K0TONTV2, K2
N2Cycle Start → Homing
ขอบขาขึ้น Start ขณะ IDLE → เข้า HOMING และล้าง flag รอบเก่า (Homed1/2, Stopped1/2)
X0D100 = K0MOVK1, D100RSTM20, K1RSTM21, K1RSTM30, K1RSTM31, K1
N3Homing (ZRN, ~5 rpm)
แกน 1 ZRN — creep D224, seek D222, accel/decel 100ms, Home X2, Pulse Y0, Dir Y4 (รอ settle T2)
D100 = K1M20T2ZRND224, D222, K100, K100, X2, Y0, Y4
แกน 2 ZRN — Home X3, Pulse Y1, Dir Y5
D100 = K1M21T2ZRND224, D222, K100, K100, X3, Y1, Y5
แกน 1 เจอ Home → ขอบขาลงของ pulse-flag M8134 (Y0) ตั้ง Homed1
M8134D100 = K1SETM20
แกน 2 เจอ Home → ขอบขาลงของ pulse-flag M8135 (Y1) ตั้ง Homed2
M8135D100 = K1SETM21
ครบทั้ง 2 แกน → เข้า RUN และตั้งความถี่เป้า = F_run (EDRVI เร่งให้เอง)
M20M21D100 = K1MOVK2, D100MOVDD220, D210MOVDD220, D212
N4Continuous Output (EDRVI, 0x7FFFFFFF)
แกน 1 เปิดพัลส์เมื่อ state≥2 และยังไม่ถูกสั่งจอด (M30) — EDRVI วิ่งต่อเนื่องทางบวก
D100 >= K2M30M10
แกน 1 EDRVI — pulses K2147483647 (continuous +), freq D210, accel D230, decel D232, Pulse Y0, Dir Y4
M10EDRVIK2147483647, D210, D230, D232, Y0, Y4
แกน 2 เปิดพัลส์เมื่อ state≥2 และยังไม่ถูกสั่งจอด (M31)
D100 >= K2M31M11
แกน 2 EDRVI — freq D212 (ปรับโดย sync trim), Pulse Y1, Dir Y5
M11EDRVIK2147483647, D212, D230, D232, Y1, Y5
N5Phase Timebase (axis-1 home = phase zero)
ฐานเวลา 10ms (ทำงานช่วงวิ่งพัลส์ state ≥ 2)
D100 >= K2T201TONTV201, K1
ทุก tick: เพิ่มตัวจับเวลาเฟส D340 (เวลาตั้งแต่แกน 1 ผ่าน Home ล่าสุด หน่วย 10ms)
T201ADDDD340, K1, D340
แกน 1 ผ่าน Home (X2) = จุดอ้างอิงเฟส → รีเซ็ต D340 = 0 (รังนี้อยู่หลังรังเพิ่มค่า จึงชนะเมื่อเกิดพร้อมกัน)
X2D100 >= K2MOVDK0, D340
N6Phase Lock (axis 2 → axis 1, per axis-2 home)
แกน 2 ผ่าน Home (X3) → จับ lag เฟส D342 = เวลาหลังแกน 1 ผ่าน Home (0..~400 ×10ms; ใกล้ 0 หรือ 400 = ตรงเฟส)
X3D100 >= K2MOVDD340, D342
ค่าเริ่มต้นทุกครั้งแกน 2 ผ่าน Home: ล็อกที่ F_run (จะถูก override ถ้าเฟสหลุดแบนด์)
X3D100 = K2MOVDD220, D212
แกน 2 ตามหลัง (lag 5..200 ×10ms) → เร่ง +Δ ไล่เฟสให้ทัน (รอบถัดไปประเมินใหม่) — ค่าคงที่อิงคาบ 4000ms
X3D100 = K2D342 > K5D342 <= K200ADDDD220, D330, D212
แกน 2 นำหน้า (lag 200..395 = ผ่าน Home ก่อนแกน 1) → หน่วง −Δ
X3D100 = K2D342 > K200D342 < K395SUBDD220, D330, D212
N7Stop Request → Decelerate to Creep
X0 ปล่อย (ขอบขาลง M0 = X0) ขณะ RUN → STOPPING, ตั้งความถี่ = creep (EDRVI ชะลอให้เอง) ล้าง flag จอด
M0D100 = K2MOVK3, D100MOVDD224, D210MOVDD224, D212RSTM30, K1RSTM31, K1
X0 ปล่อยขณะ HOMING (ยังไม่ถึง RUN) → ยกเลิกกลับ IDLE ทันที (ZRN หยุด, Servo OFF ผ่านรัง Servo Power)
M0D100 = K1MOVK0, D100
ตัวจับเวลารอชะลอถึง creep ~1.5s ก่อนอนุญาตให้จอดที่ Home
D100 = K3TONTV3, K15
N8Park on Home + Servo OFF
แกน 1: หลังชะลอครบ (T3) เจอ Home (X2) → สั่งจอด (M30 ตัด EDRVI Y0 หยุดที่ Home)
X2D100 = K3T3SETM30
แกน 2: หลังชะลอครบ (T3) เจอ Home (X3) → สั่งจอด (M31 ตัด EDRVI Y1)
X3D100 = K3T3SETM31
จอดครบทั้ง 2 แกน → กลับ IDLE (Servo OFF เองผ่านรัง Servo Power)
M30M31D100 = K3MOVK0, D100
N9Indicators
ไฟ Run (Y2) ติดขณะวิ่งพัลส์ (RUN/STOPPING)
D100 >= K2Y2
ไฟ Ready/At-Home (Y3) ติดเมื่อ IDLE และทั้ง 2 แกนอยู่ที่ Home
X2X3D100 = K0Y3
Network count: 10, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

I/O Assignment

AddressRoleNote
X0สวิทช์ ON/OFF แบบกดค้าง (maintained)กดค้าง = ON (วิ่ง), ปล่อย = OFF (หยุด+จอด Home); ขอบขาขึ้นเริ่ม homing
X1(ว่าง — เดิมเป็นปุ่ม Stop)ใช้เป็น E-stop/safety แยกได้ในอนาคต
X2Home proximity แกน 1 (NO)ON เมื่อเพลาถึง Home
X3Home proximity แกน 2 (NO)ON เมื่อเพลาถึง Home
Y0Pulse แกน 1 (high-speed)ZRN/EDRVI ใช้พอร์ตนี้ร่วมกัน
Y1Pulse แกน 2 (high-speed)ZRN/EDRVI ใช้พอร์ตนี้ร่วมกัน
Y2ไฟแสดงสถานะ Run
Y3ไฟแสดงสถานะ Ready / อยู่ที่ Home
Y4Direction แกน 1OFF = เดินหน้า (ใช้ทั้ง ZRN และ EDRVI)
Y5Direction แกน 2OFF = เดินหน้า
Y6Servo-ON แกน 1 (→ ไดรฟ์)
Y7Servo-ON แกน 2 (→ ไดรฟ์)

Parameters ที่ปรับได้

D220default: 125000

F_run — ความถี่วิ่ง 15 รอบ/นาที (Hz) ที่ PPR 10000 ปรับตาม electronic gear จริง

D222default: 40000

ความเร็วหา Home (~5 รอบ/นาที) ใช้เป็น seek speed ของ ZRN

D224default: 8000

Creep — ความเร็วคืบเข้าจอดที่ Home (~1 รอบ/นาที)

D230 / D232default: 1000 / 1000

เวลา accel / decel ของ EDRVI (ms) — มากขึ้น = นุ่มขึ้น ตั้งครั้งเดียว แก้ระหว่างวิ่งไม่ได้

D330default: 3000

ขั้นเร่ง/หน่วงเฟสแกน 2 (Hz) เวลาเฟสหลุดแบนด์ — ใหญ่ไป = แกว่ง เล็กไป = ลู่เข้าช้า

D340 / D342default: 0

ตัวจับเวลาเฟส (รีเซ็ตตอนแกน 1 ผ่าน Home) / ค่า lag เฟสแกน 2 ที่จับได้ (×10ms) — band K5/K200/K395 อิงคาบ 4000ms

TV2 / TV3 / TV201default: K2 / K15 / K1

หน่วง Servo-ON 200ms · รอชะลอถึง creep 1500ms · ฐานเวลา sync 10ms

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

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

ทำไมใช้ EDRVI ไม่ใช่ PLSF หรือ DRVI ธรรมดา?

EDRVI ให้ครบในคำสั่งเดียว: (1) วิ่งต่อเนื่องได้จริงด้วยการตั้งจำนวนพัลส์ = K2147483647 (0x7FFFFFFF) — เป็น sentinel ที่คู่มือรองรับ ไม่ใช่ move ที่จะจบ (2) มี accel/decel ในตัว ไม่ต้องไล่ความถี่ทีละ step แบบ PLSF (3) เปลี่ยนความถี่เรียลไทม์พร้อมเส้นโค้ง accel/decel ให้เอง เหมาะกับ sync trim ส่วน DRVI เป็น move ระยะคงที่และเปลี่ยนค่าระหว่างวิ่งไม่ได้

ตั้งจำนวนพัลส์ K2147483647 มันจะหยุดเมื่อครบไหม?

ไม่ — K2147483647 (0x7FFFFFFF) เป็นค่าพิเศษที่คู่มือกำหนดให้ EDRVI 'ออกพัลส์ต่อเนื่องทางบวกไม่รู้จบ' (0x80000000 = ทางลบ) ไม่ใช่จำนวนพัลส์จริงที่จะนับจนครบแล้วหยุด เฉพาะ EDRVI เท่านั้นที่มีโหมดนี้ EDRVA ไม่มี ข้อแม้คือพอเข้าโหมด continuous แล้วเปลี่ยน 'จำนวนพัลส์' ไม่ได้ แต่ 'ความถี่' เปลี่ยนได้ (ซึ่งคือสิ่งที่เราใช้)

FAT-16MT คุม 2 เซอร์โวได้จริงไหม?

ได้พอดี — PLC transistor 16 จุดมีพอร์ตพัลส์ความเร็วสูงแค่ Y0 กับ Y1 จึงรองรับได้สูงสุด 2 แกน (แกน 1 = Y0, แกน 2 = Y1) ไม่มีช่องสำรอง ถ้าต้องการแกนที่ 3 ต้องขยับไป PLC 32/50/66 จุด (Y0–Y3) หรือรุ่น multi-pulse

ปลายเกียร์เป็นจานข้อเหวี่ยง — ต้องคุมแค่ความเร็ว หรือคุมเฟสด้วย?

ต้องคุม 'เฟส' (มุมหมุดตรงกัน) ไม่ใช่แค่ความเร็วเฉลี่ยเท่า เพราะจาน 2 ตัวที่ประสานกันถ้าเฟสเคลื่อนแม้นิดเดียวกลไกจะเยื้อง/ฝืน โปรแกรมจึงทำ phase lock: ตรึงแกน 1 ที่ F_run เป็น master วัดว่าแกน 2 ผ่าน Home ช้า/เร็วกว่าแกน 1 กี่ 10ms (D342) แล้วเร่ง/หน่วงแกน 2 ชั่วคราวให้หมุดกลับมาตรงมุม เริ่มต้นทั้งคู่ homed พร้อมกันจึงตรงเฟสตั้งแต่แรก ความเร็วเท่ากันเป็นผลพลอยได้ ถ้าต้องการละเอียดกว่านี้ใช้ผลต่างตัวนับพัลส์ D8140−D8142 (electronic crankshaft) แทนเวลา Home ได้

X0 เป็นสวิทช์แบบไหน?

สวิทช์กดค้าง (maintained): กดค้าง X0 = ON (วิ่ง), ปล่อย X0 = OFF (ชะลอแล้วจอดที่ Home) ไม่ต้องมีปุ่ม Stop แยกและไม่ต้อง latch — M0 ตามระดับ X0 ตรงๆ ขอบขาขึ้นของ X0 ขณะ IDLE เป็นตัวเริ่ม homing ปล่อย X0 ระหว่าง homing = ยกเลิกกลับ IDLE และถ้าค้าง X0 ไว้ตั้งแต่เปิดไฟ PLC เครื่องจะไม่ออกตัวเอง (ไม่มีขอบขาขึ้น) ต้องปล่อยแล้วกดใหม่ — กันสตาร์ทเองตอนไฟมา

ตอนปล่อย X0 (OFF) ทำไมต้องรอ ~1.5 วินาทีก่อนจอด?

พอปล่อย X0 เราตั้งความถี่ = creep แล้ว EDRVI จะชะลอจาก 15 rpm ลงมาตามเวลา decel (T3 รอให้ชะลอครบ ~1.5s) จากนั้นแต่ละแกนจะวิ่ง creep จนเจอ Home (หมุนไม่ถึง 1 รอบก็เจอ) แล้วตัด EDRVI หยุดตรง Home — ตรงกับโจทย์ 'อาจจะหน่วงเวลานิดหน่อย' ปรับ T3 ให้พอดีกับเวลา decel จริงได้

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

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