Project

General

Profile

Feature #26195

[OEE] Performance : ปรับค่าที่แสดงบนกราฟ Production Plan vs Actual #kiro

Added by Suphawan Phiwngam 22 days ago. Updated 6 days ago.

Status:
Closed
Priority:
High
Start date:
03/24/2026
Due date:
% Done:

0%

Estimated time:

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

#1

Updated by Suphawan Phiwngam 20 days ago

  • Priority changed from Normal to High
#2

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 จริงเท่านั้น

#3

Updated by Supparoek Sariphan 9 days ago

  • Subject changed from [OEE] Performance : ปรับค่าที่แสดงบนกราฟ Production Plan vs Actual to [OEE] Performance : ปรับค่าที่แสดงบนกราฟ Production Plan vs Actual #kiro
#4

Updated by Suphawan Phiwngam 6 days ago

  • Status changed from Resolved to Closed

Also available in: Atom PDF