Intermediate
10 rungs
8 I/O

State Machine คัดแยก OK / NG

OK / NG Sorting State Machine

สเตตแมชชีน 4 สเตจ สำหรับเครื่องคัดแยกชิ้นงาน — ตรวจจับชิ้นงาน → รอผลตรวจ → แยกแขน OK หรือ NG → กระบอกลมผลัก, พร้อมเคาน์เตอร์นับแยก OK/NG

หลักการ

เครื่องจักรคัดแยกชิ้นงานใช้ state machine ที่มี 4 สเตจชัดเจน โดยเก็บสเตจปัจจุบันใน D200 (0=Idle, 1=Inspecting, 2=OK, 3=NG) แทนการใช้ State Coil (S0/S1/...) หลายตัว

ข้อดีของ D-tag pattern:

  • ขยายสเตจได้ง่าย (เพิ่ม stage → เพิ่ม rung เดียว)
  • แก้บั๊กได้ตรงจุด (monitor D200 ดูว่าติดค้างสเตจไหน)
  • Scale ได้ดีเมื่อมี >5 สเตจ

Flow Diagram

          ┌────────────┐
          │ Stage 0    │◄─────────────┐
          │ Idle       │              │
          └─────┬──────┘              │
                │ Start (X10) +       │
                │ Part sensor (X0)    │
                ▼                     │
          ┌────────────┐              │
          │ Stage 1    │              │
          │ Inspecting │              │
          └─┬────────┬─┘              │
     OK(X1)│        │ NG(X2)          │
            ▼        ▼                │
   ┌──────────┐  ┌──────────┐         │
   │ Stage 2  │  │ Stage 3  │         │
   │ Accept   │  │ Reject   │         │
   │ (Y0 ON)  │  │ (Y1 ON)  │         │
   └────┬─────┘  └─────┬────┘         │
        │ X3↑          │ X3↑          │
        │ +INC D210    │ +INC D211    │
        └──────────┬───┘              │
                   └──────────────────┘

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

  1. Stage 0 — Idle: รอ Start + เซนเซอร์ชิ้นงาน (X0) พบชิ้นงาน → ไป Stage 1
  2. Stage 1 — Inspecting: รอสัญญาณผลตรวจจาก Vision/Sensor
    • X1 ติด → OK → ไป Stage 2
    • X2 ติด → NG → ไป Stage 3
  3. Stage 2 — OK: ดันกระบอกลม Y0, รอ Cycle Complete (X3) → นับ OK (D210) + กลับ Idle
  4. Stage 3 — NG: ดันกระบอกลม Y1, รอ Cycle Complete (X3) → นับ NG (D211) + กลับ Idle

ข้อควรระวัง

  • ถ้าระบบต้องการ สเตจ >5 ตัว แนะนำใช้ D-tag pattern (เหมือนโปรแกรมนี้) ไม่ใช่ S coil แบบเก่า
  • ให้ Vision/Inspector ส่งสัญญาณ X1 (OK) กับ X2 (NG) ให้ exclusive กัน (ไม่ติดพร้อมกัน)
  • X3 (Cycle Complete) ควรเป็น limit switch ที่เซ็นเซอร์ด้านปลายของทางเดินชิ้นงาน หรือ timer จบรอบ
  • ใช้ขอบขาขึ้น (ANDP) ตรวจจับสัญญาณ — กัน race ที่ signal ค้างหลายรอบ scan

โปรแกรม PLC

State Machine คัดแยก OK / NG — OK / NG Sorting State Machine
สเตตแมชชีน 4 สเตจ สำหรับเครื่องคัดแยกชิ้นงาน — ตรวจจับชิ้นงาน → รอผลตรวจ → แยกแขน OK หรือ NG → กระบอกลมผลัก, พร้อมเคาน์เตอร์นับแยก OK/NG
N0Start/Stop latch — Start (X10) + self-hold with Stop(NC X11) interlock
X10M0X11M0
N1First-scan init: D200 = 0 (Idle)
M8150MOVK0, D200
N2Stage 0 → 1: system running + part detected → start inspecting
D200 = K0M0X0MOVK1, D200
N3Stage 1 → 2: inspection result OK (X1 rising) → accept branch
D200 = K1X1MOVK2, D200
N4Stage 1 → 3: inspection result NG (X2 rising) → reject branch
D200 = K1X2MOVK3, D200
N5Stage 2 output: drive accept cylinder Y0 while in OK stage
D200 = K2Y0
N6Stage 3 output: drive reject cylinder Y1 while in NG stage
D200 = K3Y1
N7OK complete (stage 2 + X3 rising edge) → INC OK counter D210, return to Idle
D200 = K2X3INCD210
D200 = K2X3MOVK0, D200
N8NG complete (stage 3 + X3 rising edge) → INC NG counter D211, return to Idle
D200 = K3X3INCD211
D200 = K3X3MOVK0, D200
N9Force return to Idle when system stopped (M0 off) — prevents stuck state
M0MOVK0, D200
Rung count: 10, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

I/O Assignment

AddressRoleNote
X0Part detection sensor (NO)เซนเซอร์ตรวจจับชิ้นงานที่จุดรอตรวจ
X1Inspection OK signal (NO)จาก Vision System / QC sensor — ติดเมื่อผ่าน
X2Inspection NG signal (NO)จาก Vision System / QC sensor — ติดเมื่อไม่ผ่าน
X3Cycle complete sensor (NO)Limit switch ที่ปลายทางเดินชิ้นงาน หรือ timer pulse
X10Start button (NO)ปุ่มสตาร์ทระบบ momentary
X11Stop button (NC)ปุ่มหยุด NC — ตัดวงจรเมื่อกด
Y0Accept cylinder (OK path)
Y1Reject cylinder (NG path)

Parameters ที่ปรับได้

D200default: 0

Current stage (0=Idle, 1=Inspect, 2=OK, 3=NG). Monitor via HMI to see live state

D210default: 0

OK count (resettable via HMI — use MOV K0 D210 from a button)

D211default: 0

NG count (resettable via HMI)

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

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

ทำไมใช้ ANDP (rising edge) กับ X1/X2/X3 แทน AND ธรรมดา?

เพื่อป้องกันการนับซ้ำ หาก X3 (cycle complete) ค้างอยู่เป็น 1 หลายรอบ scan, AND ธรรมดาจะ INC counter และ reset state ซ้ำหลายครั้งในรอบเดียว ขอบขาขึ้น (ANDP) จะทำงานแค่ 1 scan ต่อการติดของสัญญาณ 1 ครั้ง

ถ้า Vision ส่ง X1 และ X2 ติดพร้อมกันจะเกิดอะไร?

ใน rung 3 จะมี priority ตาม scan order — rung ที่เขียนก่อนชนะ (ในที่นี้คือ X1=OK ชนะ X2=NG) แนะนำให้ fix ที่ฝั่ง Vision/Inspector ให้ส่งสัญญาณ exclusive

ถ้าต้องการเพิ่ม stage (เช่น pre-inspect cleaning) ต้องแก้ตรงไหน?

เพิ่ม rung transition ใหม่ (LDW= D200 KN → MOV KN+1 D200) และ output rung (LDW= D200 KN → OUT Y...) ไม่ต้องแก้โครงสร้างเดิม

Reset counter จาก HMI ทำยังไง?

ใส่ปุ่ม HMI ที่เขียน M100 ON เมื่อกด แล้วเพิ่ม rung: LD M100 / MOV K0 D210 / MOV K0 D211 เพื่อเคลียร์ทั้ง 2 เคาน์เตอร์

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

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