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/Stop — Start (X10) + self-hold พร้อม interlock ของ Stop (NC X11)
X10M0X11M0
ตั้งค่าเริ่มต้นตอนเปิดเครื่อง: D200 = 0 (Idle)
M8150MOVK0, D200
N1การข้าม Stage
Stage 0 → 1: ระบบกำลังทำงาน + ตรวจพบชิ้นงาน → เริ่มตรวจ
D200 = K0M0X0MOVK1, D200
Stage 1 → 2: ผลตรวจ OK (X1 ขอบขาขึ้น) → เข้าสาย Accept
D200 = K1X1MOVK2, D200
Stage 1 → 3: ผลตรวจ NG (X2 ขอบขาขึ้น) → เข้าสาย Reject
D200 = K1X2MOVK3, D200
N2Output ไปกระบอกลม
Output Stage 2: สั่งกระบอก Accept (Y0) ขณะอยู่ใน Stage OK
D200 = K2Y0
Output Stage 3: สั่งกระบอก Reject (Y1) ขณะอยู่ใน Stage NG
D200 = K3Y1
N3จบรอบ + เคาน์เตอร์ OK/NG
OK เสร็จ (Stage 2 + X3 ขอบขาขึ้น) → INC เคาน์เตอร์ OK (D210) แล้วกลับ Idle
D200 = K2X3INCD210, D210
D200 = K2X3MOVK0, D200
NG เสร็จ (Stage 3 + X3 ขอบขาขึ้น) → INC เคาน์เตอร์ NG (D211) แล้วกลับ Idle
D200 = K3X3INCD211, D211
D200 = K3X3MOVK0, D200
N4ความปลอดภัย: บังคับ Idle เมื่อ Stop
บังคับกลับไป Idle เมื่อระบบหยุด (M0 OFF) — ป้องกันค้าง state
M0MOVK0, D200
Network count: 5, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

I/O Assignment

AddressRoleNote
X0เซ็นเซอร์ตรวจชิ้นงาน (NO)เซนเซอร์ตรวจจับชิ้นงานที่จุดรอตรวจ
X1สัญญาณ OK จากการตรวจ (NO)จาก Vision System / QC sensor — ติดเมื่อผ่าน
X2สัญญาณ NG จากการตรวจ (NO)จาก Vision System / QC sensor — ติดเมื่อไม่ผ่าน
X3เซ็นเซอร์จบรอบ (NO)Limit switch ที่ปลายทางเดินชิ้นงาน หรือ timer pulse
X10ปุ่ม Start (NO)ปุ่มสตาร์ทระบบ momentary
X11ปุ่ม Stop (NC)ปุ่มหยุด NC — ตัดวงจรเมื่อกด
Y0กระบอก Accept (สาย OK)
Y1กระบอก Reject (สาย NG)

Parameters ที่ปรับได้

D200default: 0

Stage ปัจจุบัน (0=Idle, 1=Inspect, 2=OK, 3=NG) — Monitor ผ่าน HMI เพื่อดูสถานะแบบ real-time

D210default: 0

เคาน์เตอร์ OK (รีเซ็ตผ่าน HMI ด้วย MOV K0 D210 จากปุ่ม)

D211default: 0

เคาน์เตอร์ NG (รีเซ็ตผ่าน 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