Intermediate
14 rungs
8 I/O

ลำดับการทำงาน 2 กระบอก 4 จังหวะ (A+ B+ A− B−)

4-Stage Pneumatic Cylinder Sequence (A+ B+ A− B−)

Sequence แบบเครื่องปั๊มลม 2 กระบอก 4 ขั้น — D200 เก็บ stage ปัจจุบัน, ข้าม stage เมื่อ reed switch ถึง — วนลูปอัตโนมัติ

หลักการ

เครื่องปั๊มลม / pick-and-place ส่วนใหญ่ใช้กระบอกลม 2 ตัว (A และ B) ทำงาน ตามลำดับ 4 จังหวะ:

A+ : กระบอก A ออก   (โซลินอยด์ Y0 ติด)
B+ : กระบอก B ออก   (โซลินอยด์ Y2 ติด)
A− : กระบอก A กลับ  (Y0 ดับ → spring return หรือ Y1 ติดถ้าเป็น double)
B− : กระบอก B กลับ  (Y2 ดับ หรือ Y3 ติด)

State Machine ทำไมใช้ D-tag?

วงจรแบบนี้ครั้งเก่าใช้ S coil หรือ M coil หลายตัว แต่:

  • มากกว่า 4-5 stage → S/M coil อ่านยาก, debug ลำบาก
  • D-tag (D200) เก็บเลข stage = 1, 2, 3, 4 — กระชับและขยายต่อง่าย
  • HMI แสดง stage ปัจจุบัน ได้ทันที (โชว์ค่า D200)

Logic การข้าม Stage

ใช้ reed switch (เซ็นเซอร์แม่เหล็กที่กระบอกลม) ตรวจตำแหน่ง:

  • X1 = A extended (ออกสุด)
  • X2 = A retracted (กลับสุด)
  • X3 = B extended
  • X4 = B retracted
Stage 1 (D200=1): สั่ง Y0 (A+) → รอ X1 (A สุด) → D200=2
Stage 2 (D200=2): สั่ง Y2 (B+) → รอ X3 (B สุด) → D200=3
Stage 3 (D200=3): ดับ Y0 (A−) → รอ X2 (A กลับ) → D200=4
Stage 4 (D200=4): ดับ Y2 (B−) → รอ X4 (B กลับ) → D200=1 (วนลูป)

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

First scan (M8150) → D200 = 0 (Idle)
  ↓
กด Start (X0) → M0 ติด, D200 = 1
  ↓
┌─ Stage 1: Y0 ติด (A+), รอ X1 ────┐
│  ↓ X1 ON → D200 = 2              │
├─ Stage 2: Y2 ติด (B+), รอ X3 ────┤
│  ↓ X3 ON → D200 = 3              │
├─ Stage 3: Y0 ดับ (A−), รอ X2 ────┤
│  ↓ X2 ON → D200 = 4              │
├─ Stage 4: Y2 ดับ (B−), รอ X4 ────┤
│  ↓ X4 ON → D200 = 1 (loop)       │
└──────────────────────────────────┘
  ↓
กด Stop (X5) → M0 ดับ → D200 = 0 → กระบอกทุกตัวกลับเข้า home

ความปลอดภัย

ใส่ Cycle Timeout เผื่อกระบอกค้าง (เช่น ลมเบาเกินไป ระยะติด) ตัวอย่างนี้ตั้ง Timeout 10 วินาทีต่อ stage — ถ้าเกินจะตั้ง Fault flag M99 และหยุดทั้งหมดเพื่อให้ผู้ใช้ตรวจ

ขยายเพิ่ม

  • เพิ่ม Cycle counter (CTU CV0) เพื่อนับชิ้นที่ผลิตได้
  • เพิ่ม HMI Step display ดูแลกราฟิก stage 1-4
  • เพิ่ม Pause บน X6 ที่หยุดในตำแหน่งปัจจุบัน (ไม่รีเซ็ต D200)

โปรแกรม PLC

ลำดับการทำงาน 2 กระบอก 4 จังหวะ (A+ B+ A− B−) — 4-Stage Pneumatic Cylinder Sequence (A+ B+ A− B−)
Sequence แบบเครื่องปั๊มลม 2 กระบอก 4 ขั้น — D200 เก็บ stage ปัจจุบัน, ข้าม stage เมื่อ reed switch ถึง — วนลูปอัตโนมัติ
N0Start/Stop + ตั้งค่า Stage เริ่มต้น
Latch Start/Stop — Start (X0) + self-hold พร้อม Stop (NC X5)
X0M0X5M0
ขอบขาขึ้นของปุ่ม Start — เริ่มที่ Stage 1
X0MOVK1, D200
รีเซ็ต Stage เมื่อระบบหยุด → D200 = 0
M0MOVK0, D200
N1สั่ง Solenoid ตาม Stage
Stage 1: A+ (Y0) — ดันกระบอก A ออกขณะ D200 = 1
D200 = K1M0Y0
Stage 2: B+ (Y2) — ดันกระบอก B ออกขณะ D200 = 2 (Y0 ยังติดอยู่)
D200 = K2M0Y2
เก็บ Y0 ติดไว้ระหว่าง Stage 2 (กระบอก A ยังออกอยู่)
D200 = K2M0Y0
Stage 3: เก็บ Y2 ติดไว้ (B ยังออกอยู่), Y0 ดับแล้ว (A−)
D200 = K3M0Y2
N2ข้าม Stage ด้วย reed switch
Stage 1 → 2 เมื่อ reed กระบอก A (X1) ยืนยันว่าออกสุดแล้ว
X1D200 = K1MOVK2, D200
Stage 2 → 3 เมื่อ reed กระบอก B (X3) ยืนยันว่าออกสุดแล้ว
X3D200 = K2MOVK3, D200
Stage 3 → 4 เมื่อ reed กระบอก A (X2) ยืนยันว่ากลับสุดแล้ว
X2D200 = K3MOVK4, D200
Stage 4 → 1 เมื่อ reed กระบอก B (X4) ยืนยันว่ากลับสุดแล้ว (วนลูป)
X4D200 = K4MOVK1, D200
N3ตรวจจับ Fault + นับชิ้น
Timeout ของแต่ละ Stage — 10 วินาที (รีเซ็ตเมื่อ D200 เปลี่ยน)
M0TONTV0, K100
ถ้า Timeout ทำงาน (T0) → ตั้ง Fault flag (M99)
T0SETM99
เคาน์เตอร์รอบ — นับชิ้นที่เสร็จแล้วเมื่อข้ามจาก Stage 4 → 1
X4D200 = K4CTUCV0, K9999
Network count: 4, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

I/O Assignment

AddressRoleNote
X0ปุ่ม Start (NO)
X1Reed switch กระบอก A ออกสุดติดเมื่อกระบอก A ออกสุด
X2Reed switch กระบอก A กลับสุด
X3Reed switch กระบอก B ออกสุด
X4Reed switch กระบอก B กลับสุด
X5ปุ่ม Stop (NC)
Y0Solenoid A+ (สั่งกระบอก A ออก)
Y2Solenoid B+ (สั่งกระบอก B ออก)

Parameters ที่ปรับได้

D200default: 0

Stage ปัจจุบัน (0=Idle, 1-4=Running) — แสดงบน HMI

M99default: 0

Fault flag — ติดเมื่อ Timeout ของ Stage เกิน 10 วินาที

CV0default: 0

เคาน์เตอร์รอบ — เพิ่มขึ้นทุกรอบที่จบครบ

TV0 / K100default: 10s

Timeout ของ Stage — ลดเป็น K50 (5s) สำหรับเครื่องเร็ว, เพิ่มเป็น K200 (20s) สำหรับ stroke ช้า

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

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

ทำไมใช้ LDW= D200 K1 แทน contact ปกติ?

LDW= คือ word-compare contact — เปรียบเทียบ D200 กับ K1 แล้ว ON ถ้าเท่ากัน ใช้แทน LD M1 ที่ตามหลักของ S coil (เช่น LD S0 = stage 0 active) ดีกว่าเพราะ D200 ค่าเดียวเก็บ 65,536 stage ได้ ในขณะ M coil ใช้ 1 bit/stage

ทำไม Stage 2 ต้อง 'OUT Y0' ซ้ำอีกครั้ง?

เพราะ Y0 เป็น output ปกติ (ไม่ใช่ SET/RST) ถ้าไม่มี LD ติด Y0 จะดับ ใน Stage 2 กระบอก A ยังอยู่ในตำแหน่ง extended — ต้องเก็บ Y0 ติดไว้จนกว่าจะถึง Stage 3 (A−)

ทำไม Stage 3 ไม่มี Y0?

Stage 3 = A− (กระบอก A กลับเข้า) — ดับ Y0 ทำให้กระบอกหดด้วย spring return ถ้าใช้ double-acting cylinder ต้องเพิ่ม Y1 (solenoid retract) ใน rung แยกต่างหากในเงื่อนไข D200=3

ถ้าเซ็นเซอร์เสีย เครื่องจะทำอย่างไร?

Stage timeout 10s จะเข้าทำงาน → set M99 = Fault, หยุดทุกอย่าง ผู้ใช้ต้องเช็คเซ็นเซอร์/ลม/กลไก แล้วกด Reset (เพิ่ม rung: LDP X6 / RST M99 / MOV K0 D200 ตามต้องการ)

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

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