State Machine คัดแยก OK / NG
สเตตแมชชีน 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 │
└──────────┬───┘ │
└──────────────────┘
ลำดับการทำงาน
- Stage 0 — Idle: รอ Start + เซนเซอร์ชิ้นงาน (X0) พบชิ้นงาน → ไป Stage 1
- Stage 1 — Inspecting: รอสัญญาณผลตรวจจาก Vision/Sensor
- X1 ติด → OK → ไป Stage 2
- X2 ติด → NG → ไป Stage 3
- Stage 2 — OK: ดันกระบอกลม Y0, รอ Cycle Complete (X3) → นับ OK (D210) + กลับ Idle
- 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
I/O Assignment
| Address | Role | Note |
|---|---|---|
| X0 | Part detection sensor (NO) | เซนเซอร์ตรวจจับชิ้นงานที่จุดรอตรวจ |
| X1 | Inspection OK signal (NO) | จาก Vision System / QC sensor — ติดเมื่อผ่าน |
| X2 | Inspection NG signal (NO) | จาก Vision System / QC sensor — ติดเมื่อไม่ผ่าน |
| X3 | Cycle complete sensor (NO) | Limit switch ที่ปลายทางเดินชิ้นงาน หรือ timer pulse |
| X10 | Start button (NO) | ปุ่มสตาร์ทระบบ momentary |
| X11 | Stop button (NC) | ปุ่มหยุด NC — ตัดวงจรเมื่อกด |
| Y0 | Accept cylinder (OK path) | |
| Y1 | Reject cylinder (NG path) |
Parameters ที่ปรับได้
D200default: 0Current stage (0=Idle, 1=Inspect, 2=OK, 3=NG). Monitor via HMI to see live state
D210default: 0OK count (resettable via HMI — use MOV K0 D210 from a button)
D211default: 0NG 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
- ดาวน์โหลดไฟล์
state-machine-ok-ng.csvจากแท็บ CSV ด้านบน - เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
- เมนู File → Import → เลือกไฟล์
.csvที่เพิ่งดาวน์โหลด - กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
- ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC
