1.0.24 • Published 6 months ago

overall-equipment-effectiveness v1.0.24

Weekly downloads
-
License
MIT
Repository
gitlab
Last release
6 months ago

Overall Equipment Effectiveness

OEE (Overall Equipment Effectiveness) is a metric used to measure the efficiency and productivity of a manufacturing process. It's calculated using the following formula:

OEE = Availability × Performance × Quality

Definitions:

Availability: Measures the percentage of time the equipment is actually running and producing good parts.

Availability = Operating Time / Planned Production Time

Performance: Measures how well the equipment is running compared to its maximum potential speed.

Ideal Cycle Time = Planned Production Time / Total Parts to be Produced

Performance = (Ideal Cycle Time × Total Parts Produced) / Operating Time

Quality: Measures the percentage of good parts produced compared to the total parts produced.

Quality = Good Parts / Total Parts Produced

Steps to Calculate OEE:

  1. Gather Data:

    • Operating Time: The total time the equipment was actively producing parts.
    • Planned Production Time: The total time the equipment was scheduled to be running and producing parts.
    • Total Parts Produced: The total number of parts produced during the operating time.
    • Total Parts to be Produced: The target number of parts to be produced during the planned production time.
    • Good Parts: The number of parts that meet quality standards.
  2. Calculate Availability:

    Availability = Operating Time / Planned Production Time

  3. Calculate Ideal Cycle Time:

    Ideal Cycle Time = Planned Production Time / Total Parts to be Produced

  4. Calculate Performance:

    Performance = (Ideal Cycle Time × Total Parts Produced) / Operating Time

  5. Calculate Quality:

    Quality = Good Parts / Total Parts Produced

  6. Calculate OEE or Score:

    OEE = Availability × Performance × Quality

By following these steps and plugging in the appropriate values, you can calculate the Overall Equipment Effectiveness (OEE) of your manufacturing process. OEE is expressed as a percentage, representing the efficiency of the manufacturing operation.

Methods

function calculateAvailability(operatingTime: number, plannedProductionTime: number): number;
function calculateIdealCycleTime(plannedProductionTime: number, totalPartsToBeProduced: number): number;
function calculatePerformance(idealCycleTime: number, operatingTime: number, totalPartsProduced: number): number;
function calculateQuality(goodParts: number, totalPartsProduced: number): number;
function calculateRejectedParts(totalPartsProduced: number, goodParts: number): number;
function calculateGoodParts(totalPartsProduced: number, rejectedParts: number): number;
function calculateOEE(availability: number, performance: number, quality: number): number;
function calculateScore(availability: number, performance: number, quality: number): number;
function calculateDowntime(plannedDowntime: number, unplannedDowntime: number, ...others: number[]): number;
function calculatePlannedProductionTime(shiftDuration: number, totalBreakTime: number): number;
function calculateStar(score: number): number;
function classifyLevel(score: number): string;

Getters

get availability(): number;
get idealCycleTime(): number;
get performance(): number;
get quality(): number;
get score(): number;
get identifier(): string | null;
get timestamp(): {date: number | null, month: number | null, year: number | null};
get shift(): string | number | null;
get rejectedParts(): number;
get goodParts(): number;
get totalPartsProduced(): number;
get totalPartsToBeProduced(): number;
get operatingTime(): number;
get plannedProductionTime(): number;
get downtime(): number;
get summary(): {
  score: number;
  availability: number;
  performance: number;
  quality: number;
};
get report(): {
  score: number;
  availability: number;
  performance: number;
  quality: number;
  identifier: string | null;
  shift: string | number | null;
  timestamp: {date: number | null, month: number | null, year: number | null};
  level: string;
  star: number;
};
get level(): string;
get star(): number;
get docs(): {
  terminology: {
    availability: string;
    idealCycleTime: string;
    performance: string;
    quality: string;
    score: string;
    downtime: string;
  };
  formulas: {
    availability: string;
    idealCycleTime: string;
    performance: string;
    quality: string;
    score: string;
    star: string;
    operatingTime: string;
    downtime: string;
    plannedProductionTime: string;
    rejectedParts: string;
  };
  parameters: {
    operatingTime: string;
    plannedProductionTime: string;
    totalPartsProduced: string;
    totalPartsToBeProduced: string;
    goodParts: string;
    rejectedParts: string;
    shift: string;
    date: string;
  };
  miscellaneous: {
    downtime: {
      plannedDowntime: string;
      unplannedDowntime: string;
      changeoverDowntime: string;
      minorStops: string;
    };
    level: {
      WorldClass: string;
      Excellent: string;
      Good: string;
      Average: string;
      Poor: string;
    };
  };
};

Usage

Example:

import {OverallEquipmentEffectiveness} from "overall-equipment-effectiveness";

const data = {
  // Time in minutes
  operatingTime: 450,
  plannedProductionTime: 480,

  // Production statistics in units
  totalPartsProduced: 900,
  totalPartsToBeProduced: 1000,
  goodParts: 850,

  // Machine details
  identifier: "Oxtica CNC Milling", // string | null | undefined
  shift: 3, // string | number | null | undefined

  // Date information (timestamp can be undefined)
  timestamp: {date: 14, month: 11, year: 2023},
};

const OEE = new OverallEquipmentEffectiveness(data);

console.log("\n");
console.log(`Identifier: ${OEE.identifier}`);
console.log(`Availability: ${(OEE.availability * 100).toFixed(1)} %`);
console.log(`Performance: ${(OEE.performance * 100).toFixed(1)} %`);
console.log(`Quality: ${(OEE.quality * 100).toFixed(1)} %`);
console.log(`Score: ${(OEE.score * 100).toFixed(1)} %`);
console.log(`Star: ${OEE.star.toFixed(2)}`);
console.log(`Shift: ${OEE.shift}`);
console.log(`Date: ${OEE.timestamp.date}`);
console.log(`Month: ${OEE.timestamp.month}`);
console.log(`Year: ${OEE.timestamp.year}`);
console.log(`Level: ${OEE.level}`);
console.log("\n");

console.log(`Rejected Parts: ${OEE.rejectedParts}`);
console.log(`Good Parts: ${OEE.goodParts}`);
console.log(`Total Parts Produced: ${OEE.totalPartsProduced}`);
console.log(`Total Parts To Be Produced: ${OEE.totalPartsToBeProduced}`);
console.log("\n");

console.log(`Ideal Cycle Time: ${OEE.idealCycleTime}`);
console.log(`Operating Time: ${OEE.operatingTime}`);
console.log(`Planned Production Time: ${OEE.plannedProductionTime}`);
console.log(`Downtime: ${OEE.downtime}`);
console.log("\n");

console.log("Summary: ");
console.log(OEE.summary);
console.log("\n");

console.log("Report: ");
console.log(OEE.report);
console.log("\n");

console.log("Formulas: ");
console.log(OEE.docs.formulas);
console.log(`\n`);

// console.log(OEE.docs.terminology);
// console.log(`\n`);

// console.log(OEE.docs.parameters);
// console.log(`\n`);

console.log("Downtime: ");
console.log(OEE.docs.miscellaneous.downtime);
console.log(`\n`);

Output:

Identifier: Oxtica CNC Milling
Availability: 93.8 %
Performance: 96.0 %
Quality: 94.4 %
Score: 85.0 %
Star: 4.25
Shift: 3
Date: 14
Month: 11
Year: 2023
Level: Excellent


Rejected Parts: 50
Good Parts: 850
Total Parts Produced: 900
Total Parts To Be Produced: 1000


Ideal Cycle Time: 0.48
Operating Time: 450
Planned Production Time: 480
Downtime: 30


Summary:
{
  score: 0.8499999999999999,
  availability: 0.9375,
  performance: 0.96,
  quality: 0.9444444444444444
}


Report:
{
  score: 0.8499999999999999,
  availability: 0.9375,
  performance: 0.96,
  quality: 0.9444444444444444,
  identifier: 'Oxtica CNC Milling',
  shift: 3,
  timestamp: { date: 14, month: 11, year: 2023 },
  star: 4.249999999999999,
  level: 'Excellent'
}


Formulas:
{
  availability: 'operatingTime / plannedProductionTime',
  idealCycleTime: 'plannedProductionTime / totalPartsProduced',
  performance: '(idealCycleTime * totalPartsProduced) / operatingTime',
  quality: 'goodParts / totalPartsProduced',
  score: 'availability * performance * quality',
  star: 'score * 5',
  operatingTime: 'plannedProductionTime - downtime',
  downtime: 'plannedDowntime + unplannedDowntime + ...others',
  plannedProductionTime: 'shiftDuration - totalBreakTime',
  rejectedParts: 'totalPartsProduced - goodParts',
  goodParts: "totalPartsProduced - rejectedParts"
}


Downtime:
{
  plannedDowntime: 'Scheduled periods when the equipment is intentionally stopped for maintenance, setup, adjustments, or planned changeovers. Planned downtime is usually known in advance.',
  unplannedDowntime: 'Unscheduled stoppages that occur due to unexpected issues, such as equipment breakdowns, tool failures, or other unforeseen problems. Unplanned downtime is often disruptive and requires immediate attention to resolve the issue and resume production.',
  changeoverDowntime: 'Time taken to switch the manufacturing process from producing one product to another. Changeovers involve adjusting machinery, replacing tooling, and configuring settings for the new product.',
  minorStops: 'Short stoppages that do not require a full line shutdown but still cause interruptions in the production process. These stops could be due to small issues like jams, misfeeds, or minor malfunctions.'
}
1.0.24

6 months ago

1.0.23

6 months ago

1.0.22

6 months ago

1.0.21

6 months ago

1.0.20

6 months ago

1.0.19

6 months ago

1.0.18

6 months ago

1.0.17

6 months ago

1.0.16

6 months ago

1.0.15

6 months ago

1.0.14

6 months ago

1.0.13

6 months ago

1.0.12

6 months ago

1.0.11

6 months ago

1.0.10

6 months ago

1.0.9

6 months ago

1.0.8

6 months ago

1.0.7

7 months ago

1.0.6

7 months ago

1.0.5

7 months ago

1.0.4

7 months ago

1.0.3

7 months ago

1.0.2

7 months ago

1.0.1

7 months ago

1.0.0

7 months ago