Intermediate
9 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 สเตจ

ข้อควรระวัง

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

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

  1. อินพุต
    Stage 0 — Idle (D200 = 0)
    รอ Start (X10) + เซนเซอร์ชิ้นงาน (X0)
    พบชิ้นงาน → เข้า Stage 1
  2. เงื่อนไข
    Stage 1 — Inspecting (D200 = 1)
    รอผลตรวจจาก Vision/Sensor — X1 (OK) กับ X2 (NG) ต้อง exclusive
    แยกเส้นทาง
    X1 = OK
    Stage 2 — Accept (D200 = 2)
    ดันกระบอกลม Y0 · รอ Cycle Complete (X3) · นับ OK (INC D210)
    X2 = NG
    Stage 3 — Reject (D200 = 3)
    ดันกระบอกลม Y1 · รอ Cycle Complete (X3) · นับ NG (INC D211)
  3. รีเซ็ต
    X3↑ → วนกลับ Stage 0 (Idle)
    ทั้งสองเส้นทางจบที่ Cycle Complete แล้วกลับไปรอชิ้นงานถัดไป
    ใช้ขอบขาขึ้น (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 แตกขนานจากคอนแทค D200=K1 ตัวเดียว — OK (X1 ขอบขาขึ้น) → Stage 2, NG (X2 ขอบขาขึ้น) → Stage 3
D200 = K1X1MOVK2, D200X2MOVK3, 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