Skip to content
Snippets Groups Projects
Commit bd2ef1c2 authored by Giammarco, Kristin M's avatar Giammarco, Kristin M
Browse files

Update Manufacturing_Process.mp

parent fa0b5256
No related branches found
No related tags found
No related merge requests found
......@@ -3,115 +3,316 @@
│*│ │ Model of Manufacturing Process │ │
│*│ │ Created by John Palmer in August, 2014. │ │
│*│ │ Edited by Keane Reynolds in July, 2021. │ │
│*│ │ Edited by Pamela Dyer in July and August, 2021. │ │
│*│ │ Edited by Pamela Dyer in July and August, 2021. │ │
│*│ │ Edited by Kristin Giammarco in January, 2022 to │ │
│*│ │ add cost attributes and local and global cost │ │
│*│ │ calculations. │ │
│*│ └────────────────────────────────────────────────────┘ │
│*│ │
│*│ ┌─[ Purpose ]────────────────────────────────────────┐ │
│*│ │ To demonstrate a model of a system manufacturing │ │
│*│ │ process. │ │
│*│ │ To demonstrate a cost analysis in a model of a │ │
│*│ │ system manufacturing process. │ │
│*│ └────────────────────────────────────────────────────┘ │
│*│ │
│*│ ┌─[ Description ]────────────────────────────────────┐ │
│*│ │ This model demonstrates application of Monterey │ │
│*│ │ Phoenix Modeling to Manufacturing Product Systems. │ │
│*│ │ This is an example pre-dating the MP-Firebird │ │
│*│ │ application that was used to generate scenarios │ │
│*│ │ for separately estimating probability, time, and │ │
│*│ │ cost of each of these scenarios. MP version 4 may │ │
│*│ │ be used to conduct such analysis with its native │ │
│*│ │ capabilities. │ │
│*│ │ │ │
│*│ │ Ultimately, this model demonstrates a │ │
│*│ │ manufacturing system made from standard ROOT │ │
│*│ │ statements, "or" logic, SHARE ALL statements, │ │
│*│ │ iteration, and scope limits. This manufacturing │ │
│*│ │ system has several actors simultaniously │ │
│*│ │ performing jobs, so users may look to this model │ │
│*│ │ for a simple way of designing a system. │ │
│*│ │ This model demonstrates a cost analysis application│ │
│*│ │ of Monterey Phoenix modeling to a manufacturing │ │
│*│ │ process. This model was originally composed using │ │
│*│ │ Eagle6, a prototype MP user interface. Eagle6 did │ │
│*│ │ not implement COORDINATE statements, probabilities,│ │
│*│ │ or event attributes so the original model used │ │
│*│ │ SHARE ALL to simulate COORDINATE and performed cost│ │
│*│ │ calculations externally. The 2014 model was │ │
│*│ │ implemented in MP version 4 to demonstrate │ │
│*│ │ integration of cost analysis capability in MP. │ │
│*│ └────────────────────────────────────────────────────┘ │
│*│ │
│*│ ┌─[ References ]─────────────────────────────────────┐ │
│*│ │ None. │ │
│*│ │ Palmer, John. "Utilization of Monterey Phoenix │ │
│*│ │ Modeling to Expedite Cost Estimation in │ │
│*│ │ Manufacturing Systems." Stevens Institute of │ │
│*│ │ Technology Master's Project, September 2014. │ │
│*│ └────────────────────────────────────────────────────┘ │
│*│ │
│*│ ┌─[ Search Terms ]───────────────────────────────────┐ │
│*│ │ behavior, manufacturing process; event sharing; │ │
│*│ │ local scope; nested iteration │ │
│*│ │ behavior, manufacturing process; analysis, cost; │ │
│*│ │ reports, local; reports, global │ │
│*│ └────────────────────────────────────────────────────┘ │
│*│ │
│*│ ┌─[ Instructions ]───────────────────────────────────┐ │
│*│ │ Run for Scope 1. │ │
│*│ ├─[ Run Statistics ]─────────────────────────────────┤ │
│*│ │ Scope 1: 8 traces in approx. 1.4 min. │ │
│*│ │ Scope 1: 8 traces in less than 1 sec. │ │
│*│ └────────────────────────────────────────────────────┘ │
└*┴───────────────────────────────────────────────────────*/
SCHEMA Manufacturing_System
ROOT SYSTEM: (* Incoming_Material
Multi_Axis_Machine
Media_Finish
Send_to_Inspector
ROOT SYSTEM: Incoming_Material
Multi_Axis_Machine
Media_Finish
Send_to_Inspector
(* Rejected
Rework
Send_to_Inspector
*)
[ Rejected
Rework
Send_to_Inspector
]
Accepted
( ( Turning_Machine_1
Milling_Machine_1
Turning_Machine_2
Milling_Machine_2 ) |
( Multitask_1 Multitask_2 )
)
Accepted
( Turning_Machine_1
Milling_Machine_1
Turning_Machine_2
Milling_Machine_2 |
<<0.7>> Multitask_1
Multitask_2 )
Send_to_Inspector2
Send_to_Inspector2
(* Rejected2
Rework2
Send_to_Inspector2
*)
[ Rejected2
Rework2
Send_to_Inspector2
]
Accepted2
Accepted2
Surface_Treatment
Package_Part
Ship_Part
*);
Surface_Treatment
Package_Part
Ship_Part
;
ROOT INSPECTOR: (* <0..3> Inspect
( Accept | Reject )
*);
ROOT INSPECTOR: (* <0..2> Inspect
( Accept | <<0.2>> Reject )
*);
Inspect: CheckPart ProvideAnswer;
Inspect: CheckPart ProvideAnswer;
COORDINATE $x: Send_to_Inspector FROM SYSTEM,
$y: Inspect FROM INSPECTOR
DO ADD $x PRECEDES $y; OD;
COORDINATE $x: Accept FROM INSPECTOR,
$y: Accepted FROM SYSTEM
DO ADD $x PRECEDES $y; OD;
COORDINATE $x: Reject FROM INSPECTOR,
$y: Rejected FROM SYSTEM
DO ADD $x PRECEDES $y; OD;
ROOT INSPECTOR2: (* <0..3> Inspect2
( Accept2 | Reject2 )
*);
ROOT INSPECTOR2: (* <0..2> Inspect2
( Accept2 | <<0.1>> Reject2 )
*);
Inspect2: CheckPart2 ProvideAnswer2;
Inspect2: CheckPart2 ProvideAnswer2;
COORDINATE $x: Send_to_Inspector2 FROM SYSTEM,
$y: Inspect2 FROM INSPECTOR2
DO ADD $x PRECEDES $y; OD;
COORDINATE $x: Accept2 FROM INSPECTOR2,
$y: Accepted2 FROM SYSTEM
DO ADD $x PRECEDES $y; OD;
COORDINATE $x: Reject2 FROM INSPECTOR2,
$y: Rejected2 FROM SYSTEM
DO ADD $x PRECEDES $y; OD;
/* ------- Add duration and cost attributes (hours) ------- */
ATTRIBUTES{ number cost, trace_cost, weighted_cost,
accumulated_max_cost, accumulated_min_cost,
accumulated_costs,
trace_unique_id,
largest_cost_trace_id, smallest_cost_trace_id,
trace_time;
bool c_max, c_min;};
COORDINATE $e: Incoming_Material DO SET $e.duration AT LEAST 2;
$e.cost:= 65; OD;
COORDINATE $e: Multi_Axis_Machine DO SET $e.duration AT LEAST 12;
$e.cost:= 225; OD;
COORDINATE $e: Media_Finish DO SET $e.duration AT LEAST 7;
$e.cost:= 110; OD;
COORDINATE $e: Send_to_Inspector DO SET $e.duration AT LEAST 0.5;
$e.cost:= 65; OD;
COORDINATE $e: Accepted DO SET $e.duration AT LEAST 2;
$e.cost:= 125; OD;
COORDINATE $e: Multitask_1 DO SET $e.duration AT LEAST 8;
$e.cost:= 195; OD;
COORDINATE $e: Multitask_2 DO SET $e.duration AT LEAST 8;
$e.cost:= 195; OD;
COORDINATE $e: Send_to_Inspector2 DO SET $e.duration AT LEAST 0.5;
$e.cost:= 65; OD;
COORDINATE $e: Accepted2 DO SET $e.duration AT LEAST 2;
$e.cost:= 125; OD;
COORDINATE $e: Surface_Treatment DO SET $e.duration AT LEAST 7;
$e.cost:= 145; OD;
COORDINATE $e: Package_Part DO SET $e.duration AT LEAST 0.5;
$e.cost:= 45; OD;
COORDINATE $e: Ship_Part DO SET $e.duration AT LEAST 1.5;
$e.cost:= 95; OD;
COORDINATE $e: Milling_Machine_1 DO SET $e.duration AT LEAST 6;
$e.cost:= 165; OD;
COORDINATE $e: Milling_Machine_2 DO SET $e.duration AT LEAST 6;
$e.cost:= 165; OD;
COORDINATE $e: Rejected DO SET $e.duration AT LEAST 2.5;
$e.cost:= 125; OD;
COORDINATE $e: Rejected2 DO SET $e.duration AT LEAST 2.5;
$e.cost:= 125; OD;
COORDINATE $e: Rework DO SET $e.duration AT LEAST 8;
$e.cost:= 150; OD;
COORDINATE $e: Rework2 DO SET $e.duration AT LEAST 8;
$e.cost:= 150; OD;
COORDINATE $e: Turning_Machine_1 DO SET $e.duration AT LEAST 6;
$e.cost:= 170; OD;
COORDINATE $e: Turning_Machine_2 DO SET $e.duration AT LEAST 6;
$e.cost:= 170; OD;
/* Comment in below statement to print the individual event costs */
/*COORDINATE $e: $$EVENT
DO ADD $e has_cost SAY ("$" $e.cost ); OD;*/
/* Create table of action rates and times */
TABLE Trace_cost_and_time_table { TITLE("Action Rates and Time Required");
TABS string Event,
number Action_Rate_dollars,
number Cycle_Time_hours,
number Action_Cost_dollars;
};
CLEAR Trace_cost_and_time_table;
COORDINATE $e: $$EVENT
DO
IF $e.cost > 0 AND $e.duration.largest > 0 THEN
Trace_cost_and_time_table <|
Event: SAY($e),
Action_Rate_dollars: $e.cost,
Cycle_Time_hours: $e.duration.largest,
Action_Cost_dollars: $e.cost * $e.duration.largest;
trace_cost+:= ($e.cost*$e.duration.largest);
trace_time+:= ($e.duration.largest);
FI;
OD;
/* Find the highest-cost trace */
IF GLOBAL.accumulated_max_cost < THIS.trace_cost THEN
GLOBAL.accumulated_max_cost:= THIS.trace_cost;
GLOBAL.largest_cost_trace_id := trace_id;
FI;
/* Find the lowest-cost trace */
IF GLOBAL.accumulated_min_cost >= THIS.trace_cost OR
GLOBAL.accumulated_min_cost == 0
THEN
GLOBAL.accumulated_min_cost:= THIS.trace_cost;
GLOBAL.smallest_cost_trace_id := trace_id;
FI;
/* Find the total of all trace costs for the denominator of
the average cost calculation */
GLOBAL.accumulated_costs +:= THIS.trace_cost;
/* Store trace duration data in a graph container for later
accessing by GLOBAL section */
GRAPH trace_data { };
WITHIN trace_data{
Node$x: NEW(trace_cost);
Node$x.trace_unique_id := trace_id;
Node$x.trace_cost := THIS.trace_cost;
};
/* Annotate each trace with table and SAY statements */
SHOW Trace_cost_and_time_table;
SAY("Trace Cost: $"trace_cost);
SAY("Trace Time: "trace_time" hours");
/* Create and print global reports */
GLOBAL
/* Create table summarizing trace data */
TABLE trace_data_summary {
TABS number Trace_Number,
number Trace_Probability,
string Trace_Cost,
number Weighted_Cost,
string Maximum_Cost,
string Minimum_Cost; };
WITHIN trace_data{
FOR Node$x
DO
weighted_cost +:= Node$x.trace_cost * #$$TP(Node$x.trace_unique_id);
IF Node$x.trace_cost == accumulated_max_cost
THEN c_max:= true;
ELSE c_max:= false; FI;
IF Node$x.trace_cost == accumulated_min_cost
THEN c_min:= true;
ELSE c_min:= false; FI;
trace_data_summary <|
Trace_Number: Node$x.trace_unique_id,
Trace_Probability: #$$TP(Node$x.trace_unique_id),
Trace_Cost: SAY( "$"Node$x ),
Weighted_Cost: weighted_cost,
Maximum_Cost: SAY ( c_max ),
Minimum_Cost: SAY ( c_min );
OD;
};
SHOW trace_data_summary;
ROOT SysInsp: (* <1..3> Send_to_Inspector
Inspect
( Reject Rejected | Accept Accepted )
*);
/*Create summary report */
REPORT Summary_Statistics_Report {
TITLE ("Scope "$$scope" Summary Statistics"); };
INSPECTOR, SysInsp SHARE ALL Inspect, Accept, Reject;
SysInsp, SYSTEM SHARE ALL Send_to_Inspector, Accepted, Rejected;
SAY("There are " #$$TRACE " traces total." )
=> Summary_Statistics_Report;
SAY ("Average cost assuming equal trace probabilities is: $"
accumulated_costs/#$$TRACE"." )
=> Summary_Statistics_Report;
ROOT SysInsp2: (*<1..3> Send_to_Inspector2
Inspect2
( Reject2 Rejected2 | Accept2 Accepted2 )
*);
SAY ("Expected cost based on trace probabilities is: $"
weighted_cost"." )
=> Summary_Statistics_Report;
SAY("Trace "largest_cost_trace_id " has a max cost of $"
accumulated_max_cost"." )
=> Summary_Statistics_Report;
SysInsp2, SYSTEM SHARE ALL Send_to_Inspector2, Accepted2, Rejected2;
INSPECTOR2, SysInsp2 SHARE ALL Inspect2, Accept2, Reject2;
SAY("Trace "smallest_cost_trace_id " has a min cost of $"
accumulated_min_cost"." )
=> Summary_Statistics_Report;
SHOW Summary_Statistics_Report;
SHOW ACTIVITY DIAGRAM SYSTEM;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment