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 สเตจ
ข้อควรระวัง
- ถ้าระบบต้องการ สเตจ >5 ตัว แนะนำใช้ D-tag pattern (เหมือนโปรแกรมนี้) ไม่ใช่ S coil แบบเก่า
- ให้ Vision/Inspector ส่งสัญญาณ X1 (OK) กับ X2 (NG) ให้ exclusive กัน (ไม่ติดพร้อมกัน)
- X3 (Cycle Complete) ควรเป็น limit switch ที่เซ็นเซอร์ด้านปลายของทางเดินชิ้นงาน หรือ timer จบรอบ
- ใช้ขอบขาขึ้น (
ANDP) ตรวจจับสัญญาณ — กัน race ที่ signal ค้างหลายรอบ scan
ลำดับการทำงาน
- อินพุตStage 0 — Idle (D200 = 0)รอ Start (X10) + เซนเซอร์ชิ้นงาน (X0)พบชิ้นงาน → เข้า Stage 1
- เงื่อนไขStage 1 — Inspecting (D200 = 1)รอผลตรวจจาก Vision/Sensor — X1 (OK) กับ X2 (NG) ต้อง exclusiveแยกเส้นทางX1 = OKStage 2 — Accept (D200 = 2)ดันกระบอกลม Y0 · รอ Cycle Complete (X3) · นับ OK (INC D210)X2 = NGStage 3 — Reject (D200 = 3)ดันกระบอกลม Y1 · รอ Cycle Complete (X3) · นับ NG (INC D211)
- รีเซ็ตX3↑ → วนกลับ Stage 0 (Idle)ทั้งสองเส้นทางจบที่ Cycle Complete แล้วกลับไปรอชิ้นงานถัดไปใช้ขอบขาขึ้น (ANDP) ตรวจสัญญาณ กัน race ที่ signal ค้างหลายรอบ scan
โปรแกรม PLC
I/O Assignment
| Address | Role | Note |
|---|---|---|
| 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: 0Stage ปัจจุบัน (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
- ดาวน์โหลดไฟล์
state-machine-ok-ng.csvจากแท็บ CSV ด้านบน - เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
- เมนู File → Import → เลือกไฟล์
.csvที่เพิ่งดาวน์โหลด - กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
- ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC
