สายพานพร้อมจัดเก็บกล่อง (Accumulator)
สายพานวิ่งเข้าเมื่อมีที่ว่าง, หยุดเมื่อกล่องสะสมครบ 5 ใบ, วิ่งต่อเมื่อกล่องถูกหยิบออก — ใช้ counter ขึ้น/ลง
หลักการ
ในสายการผลิต ปลายสายพานหนึ่งมักต่อเข้ากับสถานีถัดไปที่ทำงานช้ากว่า (เช่น คนหยิบ packing) จึงต้องมี Accumulator (พื้นที่จอดกล่อง) ระหว่างทางเพื่อให้ระบบไม่ค้าง
PLC ต้อง:
- นับกล่องเข้า (sensor X0) → CV0 += 1
- นับกล่องออก (sensor X1) → CV0 −= 1
- หยุดสายพาน เมื่อ CV0 ≥ 5 (เต็ม)
- เริ่มสายพาน เมื่อ CV0 ≤ 4 (มีที่ว่าง)
Logic Flow
First scan
↓
CV0 = 0 (นับเริ่มที่ 0)
↓
กด Start (X2) → M0 ติด
↓
┌─────────────────────────────┐
│ Sensor IN (X0) ขอบขึ้น │
│ ↓ INC CV0 │
│ Sensor OUT (X1) ขอบขึ้น │
│ ↓ DEC CV0 │
│ │
│ ถ้า CV0 ≥ 5: หยุด conveyor │
│ ถ้า CV0 < 5: วิ่ง conveyor │
└─────────────────────────────┘
ใช้ INC / DEC ไม่ใช่ CTU
CTU (Counter Up) เพิ่มอย่างเดียว ไม่เหมาะกับ accumulator ที่ต้องลด ใช้ INC / DEC ที่เพิ่ม/ลด D register ทีละ 1 ดีกว่า
INC D300 D300 // D300 = D300 + 1
DEC D300 D300 // D300 = D300 − 1
⚠ หมายเหตุ — INC ใน SamSoar2022 ต้องการ 2 operands (source + dest) ปกติเขียน
INC D300 D300(in-place)
ป้องกันการนับซ้ำ
ถ้าใช้ LD X0 / INC D300 D300 ตรงๆ — ถ้ากล่องค้างใต้เซ็นเซอร์
จะนับขึ้นทุก scan (เพิ่ม 100+ ใน 1 วินาที!)
ใช้ LDP (rising edge) แทน — นับเฉพาะตอนกล่องผ่านเข้า/ออก
ลำดับการทำงาน
First scan → D300 = 0
↓
กด Start (X2) → M0 ติด
↓
Sensor IN (X0)↑ → D300 += 1
Sensor OUT (X1)↑ → D300 −= 1 (ถ้ายังไม่เป็น 0)
↓
LDW>= D300 K5 → Conveyor หยุด (ป้องกันกล่องเข้าเพิ่ม)
LDW< D300 K5 → Conveyor วิ่งต่อ
↓
ไฟ Indicator:
Y1 (ติด) = สายพานวิ่ง
Y2 (ติด) = full (≥5 กล่อง)
ขยายเพิ่ม
- Reset count ปุ่ม X3 → MOV K0 D300 (รีเซ็ตเมื่อต้องการ)
- Min spacing เพิ่ม timer 0.3s ระหว่าง LDP เพื่อกัน spurious trigger
- Two accumulators ใช้ D301, D302 + 2 conveyor independent
- HMI display โชว์ "กล่องในระบบ: D300/5"
โปรแกรม PLC
I/O Assignment
| Address | Role | Note |
|---|---|---|
| X0 | Sensor กล่องเข้า (NO) | Photo sensor หัวสายพาน |
| X1 | Sensor กล่องออก (NO) | Photo sensor ปลายสายพาน |
| X2 | ปุ่ม Start (NO) | |
| X3 | ปุ่ม Reset (NO) | |
| X4 | ปุ่ม Stop (NC) | |
| Y1 | คอนแทคเตอร์มอเตอร์สายพาน | |
| Y2 | ไฟเต็ม (สีแดง) |
Parameters ที่ปรับได้
D300default: 0จำนวนกล่องปัจจุบัน (0-5) — แสดงสถานะบน HMI
K5 (ใน LDW< / LDW>=)default: 5จำนวนกล่องสูงสุดในระบบ — ปรับตามพื้นที่จริง
อุปกรณ์ที่แนะนำ
คำถามที่พบบ่อย
ทำไมใช้ INC/DEC แทน CTU/CTD?
CTU (Up Counter) จะ rest ที่ K (preset) ไม่ใช่ 0 และ CTU bit จะ ON เมื่อถึง preset — ออกแบบมาสำหรับ 'นับครบแล้วทำอะไร' INC/DEC เป็นการเพิ่ม/ลด D register ทีละ 1 ตรงไปตรงมากว่า สำหรับ accumulator ที่ต้องนับขึ้นและลง
ถ้ากล่องเข้าและออกพร้อมกัน count จะถูกไหม?
ถ้า X0 และ X1 ขึ้นใน scan เดียวกัน (rare) — D300 +1 แล้ว -1 = ถูก แต่ถ้าเป็นปัญหาจริงให้แยก scan ด้วย ANDF (falling edge ของ X0 ก่อน inc) หรือเพิ่ม debounce timer ที่เซ็นเซอร์
ทำไมต้อง AW> D300 K0 ก่อน DEC?
ป้องกัน underflow — ถ้า D300 = 0 แล้ว DEC จะเป็น -1 (ค่า unsigned overflow เป็น 65535) Sensor X1 อาจ trigger ผิด (เช่น คนเดินผ่าน) ถ้าไม่มีกล่องใน accumulator ก็ไม่ควรลด
เอกสารที่เกี่ยวข้อง
วิธีนำเข้าไฟล์ใน SamSoar2022
- ดาวน์โหลดไฟล์
conveyor-accumulator.csvจากแท็บ CSV ด้านบน - เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
- เมนู File → Import → เลือกไฟล์
.csvที่เพิ่งดาวน์โหลด - กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
- ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC
