Spaces:
Sleeping
Sleeping
mriusero
commited on
Commit
·
e904c97
1
Parent(s):
4d9a2f5
feat: access data
Browse files- src/production/flow.py +40 -37
- src/production/metrics/machine.py +7 -2
- src/production/metrics/tools.py +1 -1
src/production/flow.py
CHANGED
@@ -12,8 +12,7 @@ def generate_data(state):
|
|
12 |
"""
|
13 |
current_time = state["current_time"] if state["current_time"] else datetime.now()
|
14 |
part_id = state["part_id"] if state["part_id"] else 0
|
15 |
-
|
16 |
-
state['data']['raw'] = []
|
17 |
non_compliance_rates = {
|
18 |
1: 0.05,
|
19 |
2: 0.10,
|
@@ -21,6 +20,14 @@ def generate_data(state):
|
|
21 |
4: 0.07
|
22 |
}
|
23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
for _ in range(1000):
|
25 |
if not state["running"]:
|
26 |
break
|
@@ -30,14 +37,21 @@ def generate_data(state):
|
|
30 |
error = machine_errors[error_key]
|
31 |
downtime = error["downtime"]
|
32 |
|
33 |
-
|
34 |
-
"
|
35 |
-
"
|
36 |
-
"
|
37 |
-
"
|
38 |
-
"
|
39 |
-
"
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
|
42 |
current_time += downtime
|
43 |
else:
|
@@ -51,14 +65,21 @@ def generate_data(state):
|
|
51 |
|
52 |
compliance = 'OK' if (0.3 <= position <= 0.5) and (0.2 <= orientation <= 0.6) else 'NOK'
|
53 |
|
54 |
-
|
55 |
-
"
|
56 |
-
"
|
57 |
-
"
|
58 |
-
"
|
59 |
-
"
|
60 |
-
"
|
61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
|
63 |
print(f" - part {part_id} data generated")
|
64 |
part_id += 1
|
@@ -67,22 +88,4 @@ def generate_data(state):
|
|
67 |
current_time += timedelta(seconds=1)
|
68 |
|
69 |
state["current_time"] = current_time
|
70 |
-
state["part_id"] = part_id
|
71 |
-
|
72 |
-
raw_data = []
|
73 |
-
for row in state['data']['raw']:
|
74 |
-
raw_data.append({
|
75 |
-
"Part ID": row.get("part_id", "N/A"),
|
76 |
-
"Timestamp": row.get("timestamp", "N/A"),
|
77 |
-
"Position": row.get("position", "N/A"),
|
78 |
-
"Orientation": row.get("orientation", "N/A"),
|
79 |
-
"Tool ID": row.get("tool_id", "N/A"),
|
80 |
-
"Compliance": row.get("compliance", "N/A"),
|
81 |
-
"Event": row.get("event", "N/A"),
|
82 |
-
"Error Code": row.get("error_code", "N/A"),
|
83 |
-
"Error Description": row.get("error_description", "N/A"),
|
84 |
-
"Downtime Start": row.get("downtime_start", "N/A"),
|
85 |
-
"Downtime End": row.get("downtime_end", "N/A")
|
86 |
-
})
|
87 |
-
|
88 |
-
state['data']['raw_df'] = pd.DataFrame(raw_data)
|
|
|
12 |
"""
|
13 |
current_time = state["current_time"] if state["current_time"] else datetime.now()
|
14 |
part_id = state["part_id"] if state["part_id"] else 0
|
15 |
+
|
|
|
16 |
non_compliance_rates = {
|
17 |
1: 0.05,
|
18 |
2: 0.10,
|
|
|
20 |
4: 0.07
|
21 |
}
|
22 |
|
23 |
+
# Initialize raw_df if it doesn't exist
|
24 |
+
if 'raw_df' not in state['data']:
|
25 |
+
state['data']['raw_df'] = pd.DataFrame(columns=[
|
26 |
+
"Part ID", "Timestamp", "Position", "Orientation", "Tool ID",
|
27 |
+
"Compliance", "Event", "Error Code", "Error Description",
|
28 |
+
"Downtime Start", "Downtime End"
|
29 |
+
])
|
30 |
+
|
31 |
for _ in range(1000):
|
32 |
if not state["running"]:
|
33 |
break
|
|
|
37 |
error = machine_errors[error_key]
|
38 |
downtime = error["downtime"]
|
39 |
|
40 |
+
new_row = pd.DataFrame([{
|
41 |
+
"Part ID": "N/A",
|
42 |
+
"Timestamp": current_time.strftime("%Y-%m-%d %H:%M:%S"),
|
43 |
+
"Position": "N/A",
|
44 |
+
"Orientation": "N/A",
|
45 |
+
"Tool ID": "N/A",
|
46 |
+
"Compliance": "N/A",
|
47 |
+
"Event": "Machine Error",
|
48 |
+
"Error Code": error_key,
|
49 |
+
"Error Description": error["description"],
|
50 |
+
"Downtime Start": current_time.strftime("%Y-%m-%d %H:%M:%S"),
|
51 |
+
"Downtime End": (current_time + downtime).strftime("%Y-%m-%d %H:%M:%S")
|
52 |
+
}])
|
53 |
+
|
54 |
+
state['data']['raw_df'] = pd.concat([state['data']['raw_df'], new_row], ignore_index=True)
|
55 |
|
56 |
current_time += downtime
|
57 |
else:
|
|
|
65 |
|
66 |
compliance = 'OK' if (0.3 <= position <= 0.5) and (0.2 <= orientation <= 0.6) else 'NOK'
|
67 |
|
68 |
+
new_row = pd.DataFrame([{
|
69 |
+
"Part ID": part_id,
|
70 |
+
"Timestamp": current_time.strftime("%Y-%m-%d %H:%M:%S"),
|
71 |
+
"Position": round(position, 4),
|
72 |
+
"Orientation": round(orientation, 4),
|
73 |
+
"Tool ID": tool_id,
|
74 |
+
"Compliance": compliance,
|
75 |
+
"Event": "N/A",
|
76 |
+
"Error Code": "N/A",
|
77 |
+
"Error Description": "N/A",
|
78 |
+
"Downtime Start": "N/A",
|
79 |
+
"Downtime End": "N/A"
|
80 |
+
}])
|
81 |
+
|
82 |
+
state['data']['raw_df'] = pd.concat([state['data']['raw_df'], new_row], ignore_index=True)
|
83 |
|
84 |
print(f" - part {part_id} data generated")
|
85 |
part_id += 1
|
|
|
88 |
current_time += timedelta(seconds=1)
|
89 |
|
90 |
state["current_time"] = current_time
|
91 |
+
state["part_id"] = part_id
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/production/metrics/machine.py
CHANGED
@@ -2,7 +2,7 @@ import pandas as pd
|
|
2 |
import json
|
3 |
import os
|
4 |
|
5 |
-
def
|
6 |
"""
|
7 |
Calculate machine efficiency metrics from raw production data.
|
8 |
:param raw_data: collection of raw production data containing timestamps, downtime, and compliance information.
|
@@ -62,4 +62,9 @@ def get_machine_metrics(raw_data):
|
|
62 |
"TRS": TRS,
|
63 |
"MTBF": str(mtbf),
|
64 |
"MTTR": str(mttr)
|
65 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
2 |
import json
|
3 |
import os
|
4 |
|
5 |
+
def machine_metrics(raw_data):
|
6 |
"""
|
7 |
Calculate machine efficiency metrics from raw production data.
|
8 |
:param raw_data: collection of raw production data containing timestamps, downtime, and compliance information.
|
|
|
62 |
"TRS": TRS,
|
63 |
"MTBF": str(mtbf),
|
64 |
"MTTR": str(mttr)
|
65 |
+
}
|
66 |
+
|
67 |
+
def fetch_issues(raw_data):
|
68 |
+
df = pd.DataFrame(raw_data)
|
69 |
+
issues = df[df["Event"] == "Machine Error"]
|
70 |
+
return issues[["Timestamp", "Event", "Error Code", "Error Description", "Downtime Start", "Downtime End"]]
|
src/production/metrics/tools.py
CHANGED
@@ -35,7 +35,7 @@ def process_unique_tool(tool, raw_data):
|
|
35 |
return tool, tool_data
|
36 |
|
37 |
|
38 |
-
def
|
39 |
"""
|
40 |
Process the raw production data to extract tool metrics in parallel.
|
41 |
"""
|
|
|
35 |
return tool, tool_data
|
36 |
|
37 |
|
38 |
+
def tools_metrics(raw_data):
|
39 |
"""
|
40 |
Process the raw production data to extract tool metrics in parallel.
|
41 |
"""
|