Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
Preloaded Examples
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Monterey Phoenix
MP Model Collection
Preloaded Examples
Commits
bd2ef1c2
Commit
bd2ef1c2
authored
3 years ago
by
Giammarco, Kristin M
Browse files
Options
Downloads
Patches
Plain Diff
Update Manufacturing_Process.mp
parent
fa0b5256
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
models/Application_examples/Manufacturing_Process.mp
+271
-70
271 additions, 70 deletions
models/Application_examples/Manufacturing_Process.mp
with
271 additions
and
70 deletions
models/Application_examples/Manufacturing_Process.mp
+
271
−
70
View file @
bd2ef1c2
...
...
@@ -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;
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment