=== English Version below. ===
Dieser Eintrag beschäftigt sich mit der automatisierten Steuerung der Klimakammer "TempEvent T 340/40/5". Die folgende Anleitung wurde als vorbereitenden Schritt für die Kalibrierung von flachen Pt100-Temperatursensoren, die im elektromagnetischen Rückwärtskalorimeter verwendet werden, erarbeitet. Die Theorie dazu kann [[https://teamweb.uni-mainz.de/sites/ag-maas/bwec/BWEC%20Theses/Bachelorarbeit_Samet_Katilmis.pdf "Bachelorarbeit|hier]] nachgelesen werden. Diese Anleitung verlangt die Installation des Python Pakets "calibration", das [[https://gitlab.rlp.net/emp/temperature/-/tree/master/calibration|hier]] zu finden ist
== Die Vorgehensweise für die Datenaufnahme von kommerziellen Pt100-Sensoren verläuft analog zur folgenden Anleitung ==
=== 0.1.) Softwareseitige Schritte ===
sudo apt install update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.8
sudo apt install python3-pip
pip3 install wheel
pip3 install setuptools
pip3 install twine
cd ~
cd
python3 setup.py bdist_wheel
pip3 install
cd ~
sudo chmod 666 /dev/ttyUSB0
=== 0.2.) Hardwareseitige Schritte ===
- Die flachen Sensoren und Referenzsensoren zeichnen sich durch mehrere Merkmale aus, die **ALLE** bekannt sein müssen, aber leicht herauszufinden sind:
- die ID, die an jedem Kabel gekennzeichnet ist
- die Position, an der gemessen wird. Die Positionen der Referenzsensoren wird sich allerdings selten ändern. Die Positionen der flachen Sensoren bestimmt sich durch den Mittelpunkt der Wicklungsfläche des Platindrahtes.
- Das Koordinatensystem kann man sich legen wie man will, bis jetzt war es immer in Einheiten von Millimetern. Steht man vor dem Submodul ist der Koordinatenursprung an der hinteren unteren rechten Ecke der Alveole. Es handelt sich um ein linkshändigen Koordinatensystem.
- der Channel, an dem der Sensor angeschlossen ist
- die Kassette, auf der sich der Channel befindet
- das digitale Multimeter (AGILENT=1, KEYSIGHT=2), an das die Kassette angeschlossen ist
- die Zugehörigkeit der Sensoren zu ihren Submodulen
- Am Terminal der Klimakammer wird "Tau-und Kondensschutz" eingestellt
- Am Terminal der Klimakammer wird das Prüfgut auf den Sensor gestellt, der mit einem blau/gelben Kabel einsam mit der Kammer verbunden ist. Es gibt drei Wahlmöglichkeiten für das Prüfgut. Dass man das korrekte Prüfgut eingestellt hat, kann man überprüfen, indem man zuvor erwähnten Sensor in der Hand hält und am Display der Klimakammer beobachtet, ob sich die Temperatur ändert.
=== 1.) Datenaufnahme ===
nachdem alle Merkmale notiert worden sind, kann der Datenaufnahmealgorithmus beginnen. In einem Python3 wird nach der Installation das Paket folgendermaßen importiert.
>from calibration.Datenaufnahme import *
Danach müssen von verschiedenen Klassen Instanzen erstellt werden:
* Sensor
* Plateau
* Submodule
* Run
* Sensor() bekommt folgende Parameter übergeben:
- die *eindeutige* ID, die auf dem Kabel zu finden ist
- 'sent' oder 'flat' für Referenzsensoren oder flache Sensoren
- die Zahl 1 oder 2 für AGILENT oder KEYSIGHT
- die Kassette: [1,2]
- den Channel: [1,2,3,4,5,6,7,8,9,10]
- die Position in form einer Liste, z.B: [256,106,91]
* Plateau() bekommt folgende Parameter übergeben:
- einen String, der eindeutig und in aufsteigender Reihenfolge vorkommen solle, z.B: "01"
- die Temperatur in °C als float oder int
- die Zeit in Sekunden, die für das Erreichen der Temperatur aufgewendet werden soll als float oder int,
* Submodule() bekommt folgende Parameter übergeben:
- einen String, der eindeutig das Submodul beschreibt
- eine Liste der Sensor-Instanzen (Referenzsensoren) die zum Submodul gehören
- eine Liste der Sensor-Instanzen (flache Sensoren) die zum Submodul gehören
* Run() bekommt folgende Parameter übergeben:
- eine natürliche Zahl, mit der die Verzeichnisse für die Datenaufnahme erstellt werden
- eine liste, die **ALLE** Sensor-Instanzen enthält
- eine liste, die **ALLE** Plateau-Instanzen enthält, in der **gewünschten** Reihenfolge der Temperaturanfahrten
- eine liste, die **ALLE** Submodule-Instanzen enthält
All diese Klassen besitzen zudem den Parameter 'information'. Es wird dringend empfohlen, diesen zu benutzen, um alle Informationen, die nicht als Parameter übergeben wurden, zu dokumentieren.
Die Datenaufnahme wird gestartet, indem von der Instanz von Run() die Methode run(sudo = True) aufgerufen wird.
=== Beispielhafter Code: ===
from calibration.Datenaufnahme import *
S001 = Sensor("S001", "sent", 1, 1, 1, position=[253, 106, 91])
S002 = Sensor("S002", "sent", 1, 1, 2, position=[253, 106, 13])
S003 = Sensor("S003", "sent", 1, 1, 3, position=[253, -6, 91])
S004 = Sensor("S004", "sent", 1, 1, 4, position=[253, -6, 13])
S005 = Sensor("S005", "sent", 1, 1, 5, position=[62, 106, 91])
S006 = Sensor("S006", "sent", 1, 1, 6, position=[62, 106, 13])
S007 = Sensor("S007", "sent", 1, 1, 7, position=[62, -6, 91])
S008 = Sensor("S008", "sent", 1, 1, 8, position=[62, -6, 13])
S009 = Sensor("S009", "sent", 1, 1, 9, position=[154, 105, 49])
S010 = Sensor("S010", "sent", 1, 1, 10, position=[154, -4, 49])
P001 = Sensor("P001", "core", 2, 1, 1, position=[106, 1, 13])
P002 = Sensor("P002", "core", 2, 1, 2, position=[232, 63, 25])
P003 = Sensor("P003", "core", 2, 1, 3, position=[106, 38, 75])
P004 = Sensor("P004", "core", 2, 1, 4, position=[232, 99, 87])
S011 = Sensor("S011", "sent", 1, 2, 1, position=[253, 106, 91])
S012 = Sensor("S012", "sent", 1, 2, 2, position=[253, 106, 13])
S013 = Sensor("S013", "sent", 1, 2, 3, position=[253, -6, 91])
S014 = Sensor("S014", "sent", 1, 2, 4, position=[253, -6, 13])
S015 = Sensor("S015", "sent", 1, 2, 5, position=[62, 106, 91])
S016 = Sensor("S016", "sent", 1, 2, 6, position=[62, 106, 13])
S017 = Sensor("S017", "sent", 1, 2, 7, position=[62, -6, 91])
S018 = Sensor("S018", "sent", 1, 2, 8, position=[62, -6, 13])
S019 = Sensor("S019", "sent", 1, 2, 9, position=[154, 105, 49])
S020 = Sensor("S020", "sent", 1, 2, 10, position=[154, -4, 49])
P005 = Sensor("P005", "core", 2, 1, 5, position=[106, 1, 13])
P006 = Sensor("P006", "core", 2, 1, 6, position=[232, 63, 25])
P007 = Sensor("P007", "core", 2, 1, 7, position=[106, 38, 75])
P008 = Sensor("P008", "core", 2, 1, 8, position=[232, 99, 87])
S021 = Sensor("S021", "sent", 1, 3, 1, position=[253, 106, 91])
S022 = Sensor("S022", "sent", 1, 3, 2, position=[253, 106, 13])
S023 = Sensor("S023", "sent", 1, 3, 3, position=[253, -6, 91])
S024 = Sensor("S024", "sent", 1, 3, 4, position=[253, -6, 13])
S025 = Sensor("S025", "sent", 1, 3, 5, position=[62, 106, 91])
S026 = Sensor("S026", "sent", 1, 3, 6, position=[62, 106, 13])
S027 = Sensor("S027", "sent", 1, 3, 7, position=[62, -6, 91])
S028 = Sensor("S028", "sent", 1, 3, 8, position=[62, -6, 13])
S029 = Sensor("S029", "sent", 1, 3, 9, position=[154, 105, 49])
S030 = Sensor("S030", "sent", 1, 3, 10, position=[154, -4, 49])
P009 = Sensor("P009", "core", 2, 1, 9, position=[106, 1, 13])
P010 = Sensor("P010", "core", 2, 1, 10, position=[232, 63, 25])
P011 = Sensor("P011", "core", 2, 2, 11, position=[106, 38, 75])
P012 = Sensor("P012", "core", 2, 2, 12, position=[232, 99, 87])
sentinelsS1 = [S001, S002, S003, S004, S005, S006, S007, S008, S009, S010]
flatsS1 = [P001, P002, P003, P004]
sentinelsS2 = [S011, S012, S013, S014, S015, S016, S017, S018, S019, S020]
flatsS2 = [P001, P002, P003, P004]
sentinelsS3 = [S021, S022, S023, S024, S025, S026, S027, S028, S029, S030]
flatsS3 = [P001, P002, P003, P004]
pl_stay = 4.5*3600
PL_01 = Plateau("01", -5, stay=pl_stay)
PL_02 = Plateau("02", -10, stay=pl_stay)
PL_03 = Plateau("03", -15, stay=pl_stay)
PL_04 = Plateau("04", -20, stay=pl_stay)
PL_05 = Plateau("05", -25, stay=pl_stay)
PL_06 = Plateau("06", -30, stay=pl_stay)
PL_07 = Plateau("07", -25, stay=pl_stay)
PL_08 = Plateau("08", -20, stay=pl_stay)
PL_09 = Plateau("09", -15, stay=pl_stay)
PL_10 = Plateau("10", -10, stay=pl_stay)
PL_11 = Plateau("11", -5, stay=pl_stay)
plateaulist = [PL_01, PL_02, PL_03, PL_04, PL_05,
PL_06, PL_07, PL_08, PL_09, PL_10, PL_11]
sensorlist = [*sentinelsS1, *flatsS1,
*sentinelsS2, *flatsS2,
*sentinelsS3, *flatsS3]
submodulelist = [
Submodule('001', sentinelsS1, flatsS1),
Submodule('002', sentinelsS2, flatsS2),
Submodule('003', sentinelsS3, flatsS3),
]
R = Run(125, sensorlist=sensorlist, plateaulist=plateaulist, N=10, submodulelist=submodulelist,
information='hier sollten wichtige Informationen stehen')
R.run(sudo=True)
Nachdem das Skript startet, werden laufend die Widerstände der übergebenen Temperatursensoren aufgezeichnet und in entsprechende Dateien geschrieben.