Feature #26195
[OEE] Performance : ปรับค่าที่แสดงบนกราฟ Production Plan vs Actual #kiro
0%
Description
Performance ปรับค่าที่แสดงบนกราฟ Production Plan vs Actual with Efficiency Over Time
ยังมีการ group เป็น กะงาน/วัน/สัปดาห์/เดือน ดังเดิม
ลูกค้าต้องการ: (3 แท่ง + 1 เส้น Diff)
| องค์ประกอบ | Label/Color | ความหมาย | ค่าใน histories | มีใน code? |
| P1 (Production Plan) | Plan Product #009a36 | ตาม Job Plan ว่าควรผลิตได้เท่าไหร่ (prorate ตามเวลา) | p_ideal_per_hour | ✅ มี — คำนวณจาก Job Plan × เวลาที่ซ้อน / pointObj_sec (ไม่สนว่าเครื่อง run หรือไม่) |
| P2 (Machine Running) | Ideal Cycle Time #143dad | ตาม cycle time เฉพาะเวลาที่เครื่อง run จริง ควรผลิตได้เท่าไหร่ | ไม่มีแบบ per hour | ⚠️ มีแค่ p_ideal_target (สะสมเป็นจำนวนชิ้น) แต่ไม่มี per hour version |
| A (Actual) | Actual per hour #f69f0d | ผลิตจริง | p_actual_per_hour | ✅ มี |
| Diff (A - P1) | Diff #fd1f9b | ผลต่าง Actual กับ Machine Running ideal | ต้องคำนวณ frontend | ✅ มี |
กราฟปัจจุบันแสดง 2 แท่ง:ปัญหาที่พบ
- p_ideal_per_hour (ตาม Job Plan ทั้งหมด ไม่กรอง run time)
- p_actual_per_hour (actual ต่อชั่วโมง)
แต่ลูกค้าต้องการ 3 แท่ง ซึ่ง ขาดแท่ง P2 (Machine Running ideal per hour) — คือค่า ideal rate เฉพาะช่วงที่เครื่อง run จริง แปลงเป็น per hour
ใน code มี p_ideal_target (accum ชิ้น) ที่คำนวณจาก run time จริง ÷ ideal_cycle_time แต่ไม่มี version per hour ที่จะ plot เป็นแท่งเทียบกับอีก 2 แท่งได้
สิ่งที่ต้องเพิ่ม
ต้องเพิ่ม field ใหม่ใน histories เช่น p_ideal_per_hour_running ที่คำนวณแบบนี้:
// ใน loop timepoint, ภายใน loop actuals ที่ status === "on"
// intersection กับ job → ได้ matched_job
let run_sec = matched_job.end - matched_job.start;
let ideal_parts_running = run_sec / ideal_cycle_time;
let ideal_per_hour_running = (ideal_parts_running * 3600) / pointObj_sec;
p_ideal_per_hour_running += ideal_per_hour_running;
สรุป
- P1 (Production Plan) → p_ideal_per_hour ✅ มีแล้ว
- P2 (Machine Running) → ❌ ขาด ต้องเพิ่ม p_ideal_per_hour_running (ideal rate เฉพาะเวลา run)
- A (Actual) → p_actual_per_hour ✅ มีแล้ว
- Diff → คำนวณจาก A - P1 ที่ frontend ✅ มีแล้ว
- ปรับสีและ Label ตามตาราง
History
Updated by Supparoek Sariphan 10 days ago
- Status changed from New to Resolved
- Assignee changed from Supparoek Sariphan to Suphawan Phiwngam
p_ideal_per_hour_running คำนวณจาก:
ในแต่ละ timepoint จะวนหา actual ที่เครื่อง status === "on" แล้ว intersect กับ job plan ที่ซ้อนอยู่ในช่วงนั้น ได้ run_sec (วินาทีที่เครื่อง run จริงภายใต้ job) จากนั้น:
ideal_parts_running = run_sec / ideal_cycle_time
ideal_per_hour_running = (ideal_parts_running * 3600) / pointObj_sec
สรุปคือ เอาเวลา run จริง ÷ ideal cycle time ได้จำนวนชิ้นที่ควรผลิตได้ แล้วแปลงเป็น per hour โดยหารด้วยความกว้างของ timepoint
ต่างจาก p_ideal_per_hour (P1) ที่ใช้เวลาทั้งหมดของ job plan ไม่สนว่าเครื่อง on หรือ off — ตัวนี้ (P2) นับเฉพาะช่วงที่เครื่อง run จริงเท่านั้น
Updated by Supparoek Sariphan 9 days ago
- Subject changed from [OEE] Performance : ปรับค่าที่แสดงบนกราฟ Production Plan vs Actual to [OEE] Performance : ปรับค่าที่แสดงบนกราฟ Production Plan vs Actual #kiro