"# The scooter is our system level assembly, you can choose the AggregationLayer\n",
"# The scooter is our system level assembly, you can choose the AggregationLayer\n",
"# But the hiercarchy (SYSTEM > ASSEMBLY > SUBASSEMBLY) must be in order.\n",
"# But the hiercarchy (SYSTEM > ASSEMBLY > SUBASSEMBLY) must be in order.\n",
...
...
%% Cell type:markdown id:c9328cd1 tags:
%% Cell type:markdown id:c9328cd1 tags:
# FAIRe Qualitäts-KPI
# FAIRe Qualitäts-KPI
%% Cell type:markdown id:2ee8746d tags:
%% Cell type:markdown id:2ee8746d tags:
## Einführung
## Einführung
FAIR Quality KPIs schaffen eine transparente und nachvollziehbare Entscheidungsgrundlage. In dieser Lerneinheit sollen sie die Methodik erlernen, indem sie LEGO Autos zusammenbauen, deren Quality KPIs bestimmen und miteinander vergleichen.
FAIR Quality KPIs schaffen eine transparente und nachvollziehbare Entscheidungsgrundlage. In dieser Lerneinheit sollen sie die Methodik erlernen, indem sie LEGO Autos zusammenbauen, deren Quality KPIs bestimmen und miteinander vergleichen.
### Werkzeug für den Zusammenbau
### Werkzeug für den Zusammenbau
Der Zusammenbau der Autos erfolgt virtuell. Als Werkzeug steht Ihnen das Modul `classes` zur Verfügung. In diesem sind unterschiedliche Klassen und Methoden implementiert (Objektorientierung). Sie erzeugen jeweils Objekte der Klassen. Ein Objekt ist dabei die virtuelle Abbildung eines realen Bauteiles. Die Eigenschaften des Bauteiles werden über die Eigenschaften des Objektes abgebildet.
Der Zusammenbau der Autos erfolgt virtuell. Als Werkzeug steht Ihnen das Modul `classes` zur Verfügung. In diesem sind unterschiedliche Klassen und Methoden implementiert (Objektorientierung). Sie erzeugen jeweils Objekte der Klassen. Ein Objekt ist dabei die virtuelle Abbildung eines realen Bauteiles. Die Eigenschaften des Bauteiles werden über die Eigenschaften des Objektes abgebildet.
### Berechnung der Quality KPIs
### Berechnung der Quality KPIs
KPIs (Key Performance Indikatoren) sind Kenngrößen des Systems. Sie werden über Berechnungsvorschriften bestimmt. Diese Berechnungsvorschriften sind von Ihnen als python-Funktionen im Modul `calculation_rules` zu implementieren.
KPIs (Key Performance Indikatoren) sind Kenngrößen des Systems. Sie werden über Berechnungsvorschriften bestimmt. Diese Berechnungsvorschriften sind von Ihnen als python-Funktionen im Modul `calculation_rules` zu implementieren.
### Datenblätter
### Datenblätter
Für den Zusammenbau stehen Ihnen verschiedene Bauteile in unterschiedlichen Ausführungen zur Verfügung. Sie nutzen die Datenblätter, die als `json-Dateien` zur Verfügung gestellt werden, um Ihre Autos zusammenzubauen.
Für den Zusammenbau stehen Ihnen verschiedene Bauteile in unterschiedlichen Ausführungen zur Verfügung. Sie nutzen die Datenblätter, die als `json-Dateien` zur Verfügung gestellt werden, um Ihre Autos zusammenzubauen.
%% Cell type:markdown id:1c702114 tags:
%% Cell type:markdown id:1c702114 tags:
## Eigene Module und Minimalbeispiel
## Eigene Module und Minimalbeispiel
Für die Ausarbeitung nutzen wir zwei eigene Module (Python-Dateien), die im Ordner `functions` gespeichert sind.
Für die Ausarbeitung nutzen wir zwei eigene Module (Python-Dateien), die im Ordner `functions` gespeichert sind.
Das Modul `calculation_rules` erweitern Sie während der Ausarbeitung. Um die Änderungen zu nutzen, müssen Sie das Notebook neu starten.
Das Modul `calculation_rules` erweitern Sie während der Ausarbeitung. Um die Änderungen zu nutzen, müssen Sie das Notebook neu starten.
Im Modul `classes` befinden sich die komplette Klassen und Funktionen zur Verwendung.
Im Modul `classes` befinden sich die komplette Klassen und Funktionen zur Verwendung.
Mit einem Minimalbeispiel wird Ihnen gezeigt, wie sie die Module nutzen.
Mit einem Minimalbeispiel wird Ihnen gezeigt, wie sie die Module nutzen.
%% Cell type:markdown id:6d3310be tags:
%% Cell type:markdown id:6d3310be tags:
### Modul classes
### Modul classes
Enthält `LegoComponent, LegoAssembly, AggregationLayer, KPIEncoder` und die Funktion `print_assembly_tree`.
Enthält `LegoComponent, LegoAssembly, AggregationLayer, KPIEncoder` und die Funktion `print_assembly_tree`.
`LegoComponent` bildet einzelne Komponenten ab, während `LegoAssembly` zusammengesetzte Aggregationsebenen abdeckt, also Bauteil, Baugruppe und System. Zur Unterscheidung dient die Klasse Aggregationlayer, diese ist für `LegoComponent` immer `Component` (Komponente), muss für `LegoAssembly` entsprechend auf `SYSTEM`(System) , `ASSEMBLY`(Baugruppe) oder `SUBASSEMBLY`(Bauteil) gesetzt werden.
`LegoComponent` bildet einzelne Komponenten ab, während `LegoAssembly` zusammengesetzte Aggregationsebenen abdeckt, also Bauteil, Baugruppe und System. Zur Unterscheidung dient die Klasse Aggregationlayer, diese ist für `LegoComponent` immer `Component` (Komponente), muss für `LegoAssembly` entsprechend auf `SYSTEM`(System) , `ASSEMBLY`(Baugruppe) oder `SUBASSEMBLY`(Bauteil) gesetzt werden.
Wir bauen aus Achse, Rahmen und Reifen einen Tretroller zusammen.
Wir bauen aus Achse, Rahmen und Reifen einen Tretroller zusammen.
%% Cell type:code id:b2778dee tags:
%% Cell type:code id:b2778dee tags:
``` python
``` python
# import modules
# import modules
importjson
importjson
importpprint
importpprint
fromfunctionsimportcalculation_rules
fromfunctionsimportcalculation_rules
# Importing all modules one by one to provide an overview
# Importing all modules one by one to provide an overview
# The next commented line would provide the same result in one line
# The next commented line would provide the same result in one line
# from functions.classes import *
# from functions.classes import *
fromfunctions.classesimportLegoComponent
fromfunctions.classesimportLegoComponent
fromfunctions.classesimportLegoAssembly
fromfunctions.classesimportLegoAssembly
fromfunctions.classesimportAggregationLayer
fromfunctions.classesimportAggregationLayer
fromfunctions.classesimportKPIEncoder
fromfunctions.classesimportKPIEncoder
fromfunctions.classesimportprint_assembly_tree
fromfunctions.classesimportprint_assembly_tree
# When you are writing code yourself later, you might want to copy
# When you are writing code yourself later, you might want to copy
# these imports to avoid rerunning the full notebook after restart
# these imports to avoid rerunning the full notebook after restart
```
```
%% Cell type:code id:0b1f9aff tags:
%% Cell type:code id:0b1f9aff tags:
``` python
``` python
# Create the wheels and axles as single components first
# Create the wheels and axles as single components first
# Look up the specific item you want from the provided json files,
# Look up the specific item you want from the provided json files,
# We can get all LegoComponents from this assembly.
# We can get all LegoComponents from this assembly.
# Without parameter 'max_depth' only direct children will be listed.
# Without parameter 'max_depth' only direct children will be listed.
scooter.get_component_list(5)
scooter.get_component_list(5)
```
```
%% Cell type:markdown id:001f1c77 tags:
%% Cell type:markdown id:001f1c77 tags:
### Modul calculation_rules
### Modul calculation_rules
Um für unser System "Tretroller" ein KPI für das Gesamtgewicht zu erzeugen, wurde in `functions.calculation_rules` die Funktion `kpi_sum` definiert. Zusammen mit den Hilfsfunktionen der Klasse können wir nun das KPI Gewicht für das System hinzufügen. Die Massen der einzelnen Komponenten sind in den Datenblättern unter `mass [g]` enthalten.
Um für unser System "Tretroller" ein KPI für das Gesamtgewicht zu erzeugen, wurde in `functions.calculation_rules` die Funktion `kpi_sum` definiert. Zusammen mit den Hilfsfunktionen der Klasse können wir nun das KPI Gewicht für das System hinzufügen. Die Massen der einzelnen Komponenten sind in den Datenblättern unter `mass [g]` enthalten.
%% Cell type:code id:7b60d0fb tags:
%% Cell type:code id:7b60d0fb tags:
``` python
``` python
# test the import
# test the import
calculation_rules.test_function()
calculation_rules.test_function()
```
```
%% Cell type:code id:fe4edad6 tags:
%% Cell type:code id:fe4edad6 tags:
``` python
``` python
# Add mass to assemblies
# Add mass to assemblies
# List all components' mass
# List all components' mass
combined_weight=0
combined_weight=0
forcinscooter.get_component_list(-1):
forcinscooter.get_component_list(-1):
combined_weight+=c.properties["mass [g]"]
combined_weight+=c.properties["mass [g]"]
print("Gesamtgewicht: ",combined_weight,"g")
print("Gesamtgewicht: ",combined_weight,"g")
# Add KPI to system
# Add KPI to system
scooter.properties["mass [g]"]=combined_weight
scooter.properties["mass [g]"]=combined_weight
# We can also add the mass to the subassemblies.
# We can also add the mass to the subassemblies.
# children() returns a dict with a list of added
# children() returns a dict with a list of added
# components and assemblies.
# components and assemblies.
forainscooter.children()["assemblies"]:
forainscooter.children()["assemblies"]:
a_mass=0
a_mass=0
forcina.get_component_list(-1):
forcina.get_component_list(-1):
a_mass+=c.properties["mass [g]"]
a_mass+=c.properties["mass [g]"]
a.properties["mass [g]"]=a_mass
a.properties["mass [g]"]=a_mass
```
```
%% Cell type:code id:c26b36c8 tags:
%% Cell type:code id:c26b36c8 tags:
``` python
``` python
scooter.get_component_list(-1)
scooter.get_component_list(-1)
```
```
%% Cell type:code id:4d56419f tags:
%% Cell type:code id:4d56419f tags:
``` python
``` python
# Look at the full assembly with KPI
# Look at the full assembly with KPI
# Print the full assembly with all levels
# Print the full assembly with all levels
print_assembly_tree(scooter)
print_assembly_tree(scooter)
```
```
%% Cell type:code id:b31416d3 tags:
%% Cell type:code id:b31416d3 tags:
``` python
``` python
# Dump to json file with to_dict() and KPIEncoder
# Dump to json file with to_dict() and KPIEncoder
withopen("scooter.json","w")asfp:
withopen("scooter.json","w")asfp:
json.dump(scooter.to_dict(),fp,cls=KPIEncoder)
json.dump(scooter.to_dict(),fp,cls=KPIEncoder)
# full view is too big for Juypter (try it)
# full view is too big for Juypter (try it)
# pprint.pprint(scooter.to_dict())
# pprint.pprint(scooter.to_dict())
```
```
%% Cell type:markdown id:53793ae8 tags:
%% Cell type:markdown id:53793ae8 tags:
In dieser exportierten json-Datei ('scooter.json') sind die Werte maschinen- und menschenlesbar hinterlegt.
In dieser exportierten json-Datei ('scooter.json') sind die Werte maschinen- und menschenlesbar hinterlegt.
Zusammen mit der Berechnungsvorschrift in `calculation_rules` ist auch die Entstehung des KPI nachvollziehbar und wiederverwendbar dokumentiert und damit 'FAIR'.
Zusammen mit der Berechnungsvorschrift in `calculation_rules` ist auch die Entstehung des KPI nachvollziehbar und wiederverwendbar dokumentiert und damit 'FAIR'.