diff --git a/config/config.properties b/config/config.properties
index f928f0f..38b5fc6 100644
--- a/config/config.properties
+++ b/config/config.properties
@@ -1,37 +1,37 @@
-#Tue Jan 26 15:55:46 CET 2021
-autoSaveScanData=true
-simulation=false
-commandExecutionEvents=false
-logDaysToLive=30
-dataScanSaveOutput=false
-userAuthenticator=
-logLevelConsole=Off
-scanStreamerPort=-1
-dataScanSaveScript=false
-dataScanSaveSetpoints=false
-parallelInitialization=false
-versionTrackingManual=true
-hostName=null
-userManagement=false
-instanceName=X06DA
-dataServerPort=-1
-hideServerMessages=true
-serverPort=8080
-versionTrackingEnabled=true
-dataPath={data}/{year}_{month}/{date}/{date}_{time}_{name}
-serverEnabled=true
-dataScanReleaseRecords=false
-depthDimension=0
-dataScanPreserveTypes=false
-logLevel=Fine
-dataScanFlushRecords=true
-logPath={logs}/{date}_{time}
-dataLayout=table
-terminalEnabled=false
-notificationLevel=null
-terminalPort=3579
-createSessionFiles=true
-versionTrackingLogin={context}/svcusr-hlapp_robot
-versionTrackingRemote=git@git.psi.ch\:tell/x06da.git
-dataProvider=txt
-saveCommandStatistics=true
+#Tue Jan 26 15:55:46 CET 2021
+autoSaveScanData=true
+simulation=false
+commandExecutionEvents=false
+logDaysToLive=30
+dataScanSaveOutput=false
+userAuthenticator=
+logLevelConsole=Off
+scanStreamerPort=-1
+dataScanSaveScript=false
+dataScanSaveSetpoints=false
+parallelInitialization=false
+versionTrackingManual=true
+hostName=null
+userManagement=false
+instanceName=X06DA
+dataServerPort=-1
+hideServerMessages=true
+serverPort=8080
+versionTrackingEnabled=true
+dataPath={data}/{year}_{month}/{date}/{date}_{time}_{name}
+serverEnabled=true
+dataScanReleaseRecords=false
+depthDimension=0
+dataScanPreserveTypes=false
+logLevel=Fine
+dataScanFlushRecords=true
+logPath={logs}/{date}_{time}
+dataLayout=table
+terminalEnabled=false
+notificationLevel=null
+terminalPort=3579
+createSessionFiles=true
+versionTrackingLogin={context}/svcusr-hlapp_robot
+versionTrackingRemote=git@git.psi.ch\:tell/x06da.git
+dataProvider=txt
+saveCommandStatistics=true
diff --git a/config/devices - Copy.properties b/config/devices - Copy.properties
index cc3672f..94d25ce 100644
--- a/config/devices - Copy.properties
+++ b/config/devices - Copy.properties
@@ -1,67 +1,67 @@
-img=ch.psi.pshell.prosilica.Prosilica|25001 "PacketSize=1522;PixelFormat=Mono8;BinningX=1;BinningY=1;RegionX=300;RegionY=200;Width=1000;Height=1000"|||false
-gripper_cam=ch.psi.pshell.imaging.MjpegSource|http://129.129.110.114/axis-cgi/mjpg/video.cgi||-1000|
-microscan=ch.psi.pshell.serial.TcpDevice|129.129.100.200:2001|||
-microscan_cmd=ch.psi.pshell.serial.TcpDevice|129.129.100.200:2003|||
-ue=LaserUE|COM4|||false
-#robot=RobotTcp|127.0.0.1:1000|||
-#onewire=ch.psi.pshell.serial.TcpDevice|129.129.126.83:5000|||
-puck_detection=ch.psi.mxsc.PuckDetection|tell-raspberrypi:5556|||
-#robot_modbus=ch.psi.pshell.modbus.ModbusTCP|129.129.126.100:502|||
-#jf1=ch.psi.pshell.modbus.AnalogInput|robot_modbus 0||100|
-#jf2=ch.psi.pshell.modbus.AnalogInput|robot_modbus 1||100|
-#jf3=ch.psi.pshell.modbus.AnalogInput|robot_modbus 2||100|
-#jf4=ch.psi.pshell.modbus.AnalogInput|robot_modbus 3||100|
-#jf5=ch.psi.pshell.modbus.AnalogInput|robot_modbus 4||100|
-#jf6=ch.psi.pshell.modbus.AnalogInput|robot_modbus 5||100|
-#robot_sts=ch.psi.pshell.modbus.AnalogInputArray|robot_modbus 6 6||100|
-#robot_cmd=ch.psi.pshell.modbus.AnalogOutput|robot_modbus 12|||
-#robot_args=ch.psi.pshell.modbus.AnalogOutputArray|robot_modbus 47 12|||
-#robot_req=ch.psi.pshell.modbus.AnalogOutput|robot_modbus 13|||
-#robot_ack=ch.psi.pshell.modbus.AnalogInput|robot_modbus 14|||
-#robot_ret=ch.psi.pshell.modbus.AnalogInputArray|robot_modbus 15 12|||
-#wago_back=ch.psi.pshell.modbus.ModbusTCP|SF-TEST-WAGO1:502|||
-wago=ch.psi.pshell.modbus.ModbusTCP|wago-mxsc-1:502|||
-led_ok_1=ch.psi.pshell.modbus.DigitalInput|wago 0||1000|
-led_ok_2=ch.psi.pshell.modbus.DigitalInput|wago 1||1000|
-led_ok_3=ch.psi.pshell.modbus.DigitalInput|wago 2||1000|
-feedback_local_safety=ch.psi.pshell.modbus.DigitalInput|wago 3||1000|
-feedback_psys_safety=ch.psi.pshell.modbus.DigitalInput|wago 4||1000|
-filling_phase_separator=ch.psi.pshell.modbus.DigitalInput|wago 5||1000|
-filling_dewar=ch.psi.pshell.modbus.DigitalInput|wago 6||1000|
-dewar_level_high_alarm=ch.psi.pshell.modbus.DigitalInput|wago 7||1000|
-guiding_tool_park=ch.psi.pshell.modbus.DigitalInput|wago 8||1000|
-air_pressure_ok=ch.psi.pshell.modbus.DigitalInput|wago 9||1000|false
-n2_pressure_ok=ch.psi.pshell.modbus.DigitalInput|wago 10||1000|
-he_chamber_valve_1=ch.psi.pshell.modbus.DigitalInput|wago 15||1000|
-he_chamber_valve_2=ch.psi.pshell.modbus.DigitalInput|wago 16||1000|
-relays=ch.psi.pshell.modbus.DigitalOutputArray|wago 0 16||1000|
-release_local_safety=ch.psi.pshell.modbus.DigitalOutput|wago 0|||
-release_psys_safety=ch.psi.pshell.modbus.DigitalOutput|wago 1|||
-ln2_main_power=ch.psi.pshell.modbus.DigitalOutput|wago 2|||
-rim_heater=ch.psi.pshell.modbus.DigitalOutput|wago 3|||
-phase_separator_ln2=ch.psi.pshell.modbus.DigitalOutput|wago 4|||
-dewar_ln2=ch.psi.pshell.modbus.DigitalOutput|wago 5|||false
-valve_he_chamber=ch.psi.pshell.modbus.DigitalOutput|wago 6|||
-gripper_dryer=ch.psi.pshell.modbus.DigitalOutput|wago 7|||
-valve_1=ch.psi.pshell.modbus.DigitalOutput|wago 8|||
-valve_2=ch.psi.pshell.modbus.DigitalOutput|wago 9|||
-valve_3=ch.psi.pshell.modbus.DigitalOutput|wago 10|||
-valve_4=ch.psi.pshell.modbus.DigitalOutput|wago 11|||
-#spare_do_1=ch.psi.pshell.modbus.DigitalOutput|wago 12|||
-#spare_do_2=ch.psi.pshell.modbus.DigitalOutput|wago 13|||
-#spare_do_3=ch.psi.pshell.modbus.DigitalOutput|wago 14|||
-#spare_do_4=ch.psi.pshell.modbus.DigitalOutput|wago 15|||
-phase_separator_level=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 0||10000|
-dewar_level=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 1||10000|
-rim_heater_temp=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 2||10000|
-air_pressure=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 3||10000|
-n2_pressure=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 4||10000|
-#spare_ai_1=ch.psi.pshell.modbus.AnalogInput|wago 5|||
-#spare_ai_2=ch.psi.pshell.modbus.AnalogInput|wago 6|||
-#spare_ai_3=ch.psi.pshell.modbus.AnalogInput|wago 7|||
-led_ctrl_1=ch.psi.pshell.modbus.ProcessVariable|wago 0|||
-led_ctrl_2=ch.psi.pshell.modbus.ProcessVariable|wago 1|||
-led_ctrl_3=ch.psi.pshell.modbus.ProcessVariable|wago 2|||
-#spare_ao_3=ch.psi.pshell.modbus.AnalogOutput|wago 3|||
-#cam=ch.psi.pshell.epics.AreaDetector|MX-SAMCAM|||
-#img_back=ch.psi.pshell.imaging.CameraSource|cam||-100|
+img=ch.psi.pshell.prosilica.Prosilica|25001 "PacketSize=1522;PixelFormat=Mono8;BinningX=1;BinningY=1;RegionX=300;RegionY=200;Width=1000;Height=1000"|||false
+gripper_cam=ch.psi.pshell.imaging.MjpegSource|http://129.129.110.114/axis-cgi/mjpg/video.cgi||-1000|
+microscan=ch.psi.pshell.serial.TcpDevice|129.129.100.200:2001|||
+microscan_cmd=ch.psi.pshell.serial.TcpDevice|129.129.100.200:2003|||
+ue=LaserUE|COM4|||false
+#robot=RobotTcp|127.0.0.1:1000|||
+#onewire=ch.psi.pshell.serial.TcpDevice|129.129.126.83:5000|||
+puck_detection=ch.psi.mxsc.PuckDetection|tell-raspberrypi:5556|||
+#robot_modbus=ch.psi.pshell.modbus.ModbusTCP|129.129.126.100:502|||
+#jf1=ch.psi.pshell.modbus.AnalogInput|robot_modbus 0||100|
+#jf2=ch.psi.pshell.modbus.AnalogInput|robot_modbus 1||100|
+#jf3=ch.psi.pshell.modbus.AnalogInput|robot_modbus 2||100|
+#jf4=ch.psi.pshell.modbus.AnalogInput|robot_modbus 3||100|
+#jf5=ch.psi.pshell.modbus.AnalogInput|robot_modbus 4||100|
+#jf6=ch.psi.pshell.modbus.AnalogInput|robot_modbus 5||100|
+#robot_sts=ch.psi.pshell.modbus.AnalogInputArray|robot_modbus 6 6||100|
+#robot_cmd=ch.psi.pshell.modbus.AnalogOutput|robot_modbus 12|||
+#robot_args=ch.psi.pshell.modbus.AnalogOutputArray|robot_modbus 47 12|||
+#robot_req=ch.psi.pshell.modbus.AnalogOutput|robot_modbus 13|||
+#robot_ack=ch.psi.pshell.modbus.AnalogInput|robot_modbus 14|||
+#robot_ret=ch.psi.pshell.modbus.AnalogInputArray|robot_modbus 15 12|||
+#wago_back=ch.psi.pshell.modbus.ModbusTCP|SF-TEST-WAGO1:502|||
+wago=ch.psi.pshell.modbus.ModbusTCP|wago-mxsc-1:502|||
+led_ok_1=ch.psi.pshell.modbus.DigitalInput|wago 0||1000|
+led_ok_2=ch.psi.pshell.modbus.DigitalInput|wago 1||1000|
+led_ok_3=ch.psi.pshell.modbus.DigitalInput|wago 2||1000|
+feedback_local_safety=ch.psi.pshell.modbus.DigitalInput|wago 3||1000|
+feedback_psys_safety=ch.psi.pshell.modbus.DigitalInput|wago 4||1000|
+filling_phase_separator=ch.psi.pshell.modbus.DigitalInput|wago 5||1000|
+filling_dewar=ch.psi.pshell.modbus.DigitalInput|wago 6||1000|
+dewar_level_high_alarm=ch.psi.pshell.modbus.DigitalInput|wago 7||1000|
+guiding_tool_park=ch.psi.pshell.modbus.DigitalInput|wago 8||1000|
+air_pressure_ok=ch.psi.pshell.modbus.DigitalInput|wago 9||1000|false
+n2_pressure_ok=ch.psi.pshell.modbus.DigitalInput|wago 10||1000|
+he_chamber_valve_1=ch.psi.pshell.modbus.DigitalInput|wago 15||1000|
+he_chamber_valve_2=ch.psi.pshell.modbus.DigitalInput|wago 16||1000|
+relays=ch.psi.pshell.modbus.DigitalOutputArray|wago 0 16||1000|
+release_local_safety=ch.psi.pshell.modbus.DigitalOutput|wago 0|||
+release_psys_safety=ch.psi.pshell.modbus.DigitalOutput|wago 1|||
+ln2_main_power=ch.psi.pshell.modbus.DigitalOutput|wago 2|||
+rim_heater=ch.psi.pshell.modbus.DigitalOutput|wago 3|||
+phase_separator_ln2=ch.psi.pshell.modbus.DigitalOutput|wago 4|||
+dewar_ln2=ch.psi.pshell.modbus.DigitalOutput|wago 5|||false
+valve_he_chamber=ch.psi.pshell.modbus.DigitalOutput|wago 6|||
+gripper_dryer=ch.psi.pshell.modbus.DigitalOutput|wago 7|||
+valve_1=ch.psi.pshell.modbus.DigitalOutput|wago 8|||
+valve_2=ch.psi.pshell.modbus.DigitalOutput|wago 9|||
+valve_3=ch.psi.pshell.modbus.DigitalOutput|wago 10|||
+valve_4=ch.psi.pshell.modbus.DigitalOutput|wago 11|||
+#spare_do_1=ch.psi.pshell.modbus.DigitalOutput|wago 12|||
+#spare_do_2=ch.psi.pshell.modbus.DigitalOutput|wago 13|||
+#spare_do_3=ch.psi.pshell.modbus.DigitalOutput|wago 14|||
+#spare_do_4=ch.psi.pshell.modbus.DigitalOutput|wago 15|||
+phase_separator_level=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 0||10000|
+dewar_level=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 1||10000|
+rim_heater_temp=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 2||10000|
+air_pressure=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 3||10000|
+n2_pressure=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 4||10000|
+#spare_ai_1=ch.psi.pshell.modbus.AnalogInput|wago 5|||
+#spare_ai_2=ch.psi.pshell.modbus.AnalogInput|wago 6|||
+#spare_ai_3=ch.psi.pshell.modbus.AnalogInput|wago 7|||
+led_ctrl_1=ch.psi.pshell.modbus.ProcessVariable|wago 0|||
+led_ctrl_2=ch.psi.pshell.modbus.ProcessVariable|wago 1|||
+led_ctrl_3=ch.psi.pshell.modbus.ProcessVariable|wago 2|||
+#spare_ao_3=ch.psi.pshell.modbus.AnalogOutput|wago 3|||
+#cam=ch.psi.pshell.epics.AreaDetector|MX-SAMCAM|||
+#img_back=ch.psi.pshell.imaging.CameraSource|cam||-100|
diff --git a/config/devices.properties b/config/devices.properties
index 2c32260..9a1ff86 100644
--- a/config/devices.properties
+++ b/config/devices.properties
@@ -1,62 +1,62 @@
-cryostage=ch.psi.pshell.epics.Motor|X06DA-ES-CJ:TRX1|||true
-img=ch.psi.pshell.prosilica.Prosilica|204464 "PacketSize=1504;PixelFormat=Mono8;BinningX=1;BinningY=1;RegionX=290;RegionY=130;Width=1000;Height=1000;MulticastEnable=Off"||-200|false
-#gripper_cam=ch.psi.pshell.imaging.MjpegSource|http://axis-accc8ea5e463.psi.ch/axis-cgi/mjpg/video.cgi?camera=1 reopen||-200|false
-#monitoring_cam=ch.psi.pshell.imaging.MjpegSource|http://axis-accc8ea5e463.psi.ch/axis-cgi/mjpg/video.cgi?camera=2 reopen||-200|
-#top_cam=ch.psi.pshell.imaging.MjpegSource|http://axis-accc8ea5e463.psi.ch/axis-cgi/mjpg/video.cgi?camera=3 true||-200|
-#cam=ch.psi.pshell.epics.AreaDetector|MX-SAMCAM|||
-mscan_pin=ch.psi.pshell.serial.TcpDevice|129.129.110.87:2001|||
-mscan_pin_cmd=ch.psi.pshell.serial.TcpDevice|129.129.110.87:2003|||
-mscan_puck=ch.psi.pshell.serial.TcpDevice|129.129.110.88:2001|||
-mscan_puck_cmd=ch.psi.pshell.serial.TcpDevice|129.129.110.88:2003|||
-ue=LaserUE|COM3 50 35|||true
-puck_detection=ch.psi.mxsc.PuckDetection|tell6d-raspberrypi:5556|||
-wago=ch.psi.pshell.modbus.ModbusTCP|tell6d-wago:502|||
-led_ok_1=ch.psi.pshell.modbus.DigitalInput|wago 0||1000|
-led_ok_2=ch.psi.pshell.modbus.DigitalInput|wago 1||1000|
-led_ok_3=ch.psi.pshell.modbus.DigitalInput|wago 2||1000|
-feedback_local_safety=ch.psi.pshell.modbus.DigitalInput|wago 3||1000|
-feedback_psys_safety=ch.psi.pshell.modbus.DigitalInput|wago 4||1000|
-filling_dewar=ch.psi.pshell.modbus.DigitalInput|wago 5||1000|
-dewar_level_high_alarm=ch.psi.pshell.modbus.DigitalInput|wago 6||1000|
-guiding_tool_park_2=ch.psi.pshell.modbus.DigitalInput|wago 7||1000|
-air_pressure_ok=ch.psi.pshell.modbus.DigitalInput|wago 8||1000|false
-n2_pressure_ok=ch.psi.pshell.modbus.DigitalInput|wago 9||1000|
-smc_magnet_status=ch.psi.pshell.modbus.DigitalInput|wago 10||1000|
-smc_mounted_1=ch.psi.pshell.modbus.DigitalInput|wago 11||1000|
-smc_mounted_2=ch.psi.pshell.modbus.DigitalInput|wago 12||1000|
-magnet_release=ch.psi.pshell.modbus.DigitalInput|wago 13||500|
-detector_cleared=ch.psi.pshell.modbus.DigitalInput|wago 14||1000|
-guiding_tool_park=ch.psi.pshell.modbus.DigitalInput|wago 15||1000|
-#spare_di_4=ch.psi.pshell.modbus.DigitalInput|wago 16||1000|
-relays=ch.psi.pshell.modbus.DigitalOutputArray|wago 0 16||1000|
-release_local_safety=ch.psi.pshell.modbus.DigitalOutput|wago 0|||
-release_psys_safety=ch.psi.pshell.modbus.DigitalOutput|wago 1|||
-#spare_do_1=ch.psi.pshell.modbus.DigitalOutput|wago 2|||
-#spare_do_2=ch.psi.pshell.modbus.DigitalOutput|wago 3|||
-#spare_do_3=ch.psi.pshell.modbus.DigitalOutput|wago 4|||
-gripper_dryer=ch.psi.pshell.modbus.DigitalOutput|wago 5|||
-smc_sup_det=ch.psi.pshell.modbus.DigitalOutput|wago 6|||
-valve_1=ch.psi.pshell.modbus.DigitalOutput|wago 7||1000|
-valve_2=ch.psi.pshell.modbus.DigitalOutput|wago 10||1000|
-valve_3=ch.psi.pshell.modbus.DigitalOutput|wago 8||1000|
-valve_4=ch.psi.pshell.modbus.DigitalOutput|wago 11||1000|
-valve_5=ch.psi.pshell.modbus.DigitalOutput|wago 9||1000|
-valve_6=ch.psi.pshell.modbus.DigitalOutput|wago 12||1000|
-valve_7=ch.psi.pshell.modbus.DigitalOutput|wago 13||1000|
-valve_8=ch.psi.pshell.modbus.DigitalOutput|wago 14||1000|
-dewar_level=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 0||10000|
-rim_heater_temp=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 1||10000|
-#spare_ai_1=ch.psi.pshell.modbus.AnalogInput|wago 2|||false
-#spare_ai_2=ch.psi.pshell.modbus.AnalogInput|wago 3|||
-smc_current_rb=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 4||1000|
-#spare_ai_3=ch.psi.pshell.modbus.AnalogInput|wago 5|||
-#spare_ai_4=ch.psi.pshell.modbus.AnalogInput|wago 6|||
-#spare_ai_5=ch.psi.pshell.modbus.AnalogInput|wago 7|||
-led_ctrl_1=ch.psi.pshell.modbus.ProcessVariable|wago 0|||
-led_ctrl_2=ch.psi.pshell.modbus.ProcessVariable|wago 1|||
-led_ctrl_3=ch.psi.pshell.modbus.ProcessVariable|wago 2|||
-smc_current=ch.psi.pshell.modbus.ProcessVariable|wago 3|||
-#th2e=ch.psi.pshell.modbus.ModbusTCP|129.129.110.200|||
-#temperature=ch.psi.pshell.modbus.ReadonlyProcessVariable|th2e 1||10000|
-#humidity=ch.psi.pshell.modbus.ReadonlyProcessVariable|th2e 5||10000|
-#dew_point=ch.psi.pshell.modbus.ReadonlyProcessVariable|th2e 9||10000|
+cryostage=ch.psi.pshell.epics.Motor|X06DA-ES-CJ:TRX1|||true
+img=ch.psi.pshell.prosilica.Prosilica|204464 "PacketSize=1504;PixelFormat=Mono8;BinningX=1;BinningY=1;RegionX=290;RegionY=130;Width=1000;Height=1000;MulticastEnable=Off"||-200|false
+#gripper_cam=ch.psi.pshell.imaging.MjpegSource|http://axis-accc8ea5e463.psi.ch/axis-cgi/mjpg/video.cgi?camera=1 reopen||-200|false
+#monitoring_cam=ch.psi.pshell.imaging.MjpegSource|http://axis-accc8ea5e463.psi.ch/axis-cgi/mjpg/video.cgi?camera=2 reopen||-200|
+#top_cam=ch.psi.pshell.imaging.MjpegSource|http://axis-accc8ea5e463.psi.ch/axis-cgi/mjpg/video.cgi?camera=3 true||-200|
+#cam=ch.psi.pshell.epics.AreaDetector|MX-SAMCAM|||
+mscan_pin=ch.psi.pshell.serial.TcpDevice|129.129.110.87:2001|||
+mscan_pin_cmd=ch.psi.pshell.serial.TcpDevice|129.129.110.87:2003|||
+mscan_puck=ch.psi.pshell.serial.TcpDevice|129.129.110.88:2001|||
+mscan_puck_cmd=ch.psi.pshell.serial.TcpDevice|129.129.110.88:2003|||
+ue=LaserUE|COM3 50 35|||true
+puck_detection=ch.psi.mxsc.PuckDetection|tell6d-raspberrypi:5556|||
+wago=ch.psi.pshell.modbus.ModbusTCP|tell6d-wago:502|||
+led_ok_1=ch.psi.pshell.modbus.DigitalInput|wago 0||1000|
+led_ok_2=ch.psi.pshell.modbus.DigitalInput|wago 1||1000|
+led_ok_3=ch.psi.pshell.modbus.DigitalInput|wago 2||1000|
+feedback_local_safety=ch.psi.pshell.modbus.DigitalInput|wago 3||1000|
+feedback_psys_safety=ch.psi.pshell.modbus.DigitalInput|wago 4||1000|
+filling_dewar=ch.psi.pshell.modbus.DigitalInput|wago 5||1000|
+dewar_level_high_alarm=ch.psi.pshell.modbus.DigitalInput|wago 6||1000|
+guiding_tool_park_2=ch.psi.pshell.modbus.DigitalInput|wago 7||1000|
+air_pressure_ok=ch.psi.pshell.modbus.DigitalInput|wago 8||1000|false
+n2_pressure_ok=ch.psi.pshell.modbus.DigitalInput|wago 9||1000|
+smc_magnet_status=ch.psi.pshell.modbus.DigitalInput|wago 10||1000|
+smc_mounted_1=ch.psi.pshell.modbus.DigitalInput|wago 11||1000|
+smc_mounted_2=ch.psi.pshell.modbus.DigitalInput|wago 12||1000|
+magnet_release=ch.psi.pshell.modbus.DigitalInput|wago 13||500|
+detector_cleared=ch.psi.pshell.modbus.DigitalInput|wago 14||1000|
+guiding_tool_park=ch.psi.pshell.modbus.DigitalInput|wago 15||1000|
+#spare_di_4=ch.psi.pshell.modbus.DigitalInput|wago 16||1000|
+relays=ch.psi.pshell.modbus.DigitalOutputArray|wago 0 16||1000|
+release_local_safety=ch.psi.pshell.modbus.DigitalOutput|wago 0|||
+release_psys_safety=ch.psi.pshell.modbus.DigitalOutput|wago 1|||
+#spare_do_1=ch.psi.pshell.modbus.DigitalOutput|wago 2|||
+#spare_do_2=ch.psi.pshell.modbus.DigitalOutput|wago 3|||
+#spare_do_3=ch.psi.pshell.modbus.DigitalOutput|wago 4|||
+gripper_dryer=ch.psi.pshell.modbus.DigitalOutput|wago 5|||
+smc_sup_det=ch.psi.pshell.modbus.DigitalOutput|wago 6|||
+valve_1=ch.psi.pshell.modbus.DigitalOutput|wago 7||1000|
+valve_2=ch.psi.pshell.modbus.DigitalOutput|wago 10||1000|
+valve_3=ch.psi.pshell.modbus.DigitalOutput|wago 8||1000|
+valve_4=ch.psi.pshell.modbus.DigitalOutput|wago 11||1000|
+valve_5=ch.psi.pshell.modbus.DigitalOutput|wago 9||1000|
+valve_6=ch.psi.pshell.modbus.DigitalOutput|wago 12||1000|
+valve_7=ch.psi.pshell.modbus.DigitalOutput|wago 13||1000|
+valve_8=ch.psi.pshell.modbus.DigitalOutput|wago 14||1000|
+dewar_level=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 0||10000|
+rim_heater_temp=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 1||10000|
+#spare_ai_1=ch.psi.pshell.modbus.AnalogInput|wago 2|||false
+#spare_ai_2=ch.psi.pshell.modbus.AnalogInput|wago 3|||
+smc_current_rb=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 4||1000|
+#spare_ai_3=ch.psi.pshell.modbus.AnalogInput|wago 5|||
+#spare_ai_4=ch.psi.pshell.modbus.AnalogInput|wago 6|||
+#spare_ai_5=ch.psi.pshell.modbus.AnalogInput|wago 7|||
+led_ctrl_1=ch.psi.pshell.modbus.ProcessVariable|wago 0|||
+led_ctrl_2=ch.psi.pshell.modbus.ProcessVariable|wago 1|||
+led_ctrl_3=ch.psi.pshell.modbus.ProcessVariable|wago 2|||
+smc_current=ch.psi.pshell.modbus.ProcessVariable|wago 3|||
+#th2e=ch.psi.pshell.modbus.ModbusTCP|129.129.110.200|||
+#temperature=ch.psi.pshell.modbus.ReadonlyProcessVariable|th2e 1||10000|
+#humidity=ch.psi.pshell.modbus.ReadonlyProcessVariable|th2e 5||10000|
+#dew_point=ch.psi.pshell.modbus.ReadonlyProcessVariable|th2e 9||10000|
diff --git a/config/jcae.properties b/config/jcae.properties
index 2bb0691..7f9e889 100644
--- a/config/jcae.properties
+++ b/config/jcae.properties
@@ -1,11 +1,11 @@
-#Tue Sep 06 15:10:24 CEST 2016
-ch.psi.jcae.ContextFactory.addressList=
-ch.psi.jcae.ContextFactory.serverPort=
-ch.psi.jcae.ContextFactory.maxArrayBytes=20000000
-ch.psi.jcae.ChannelFactory.retries=1
-ch.psi.jcae.ChannelFactory.timeout=500
-ch.psi.jcae.impl.DefaultChannelService.retries=2
-ch.psi.jcae.impl.DefaultChannelService.timeout=1000
-ch.psi.jcae.ContextFactory.autoAddressList=true
-ch.psi.jcae.ContextFactory.useShellVariables=false
-ch.psi.jcae.ContextFactory.addLocalBroadcastInterfaces=false
+#Tue Sep 06 15:10:24 CEST 2016
+ch.psi.jcae.ContextFactory.addressList=
+ch.psi.jcae.ContextFactory.serverPort=
+ch.psi.jcae.ContextFactory.maxArrayBytes=20000000
+ch.psi.jcae.ChannelFactory.retries=1
+ch.psi.jcae.ChannelFactory.timeout=500
+ch.psi.jcae.impl.DefaultChannelService.retries=2
+ch.psi.jcae.impl.DefaultChannelService.timeout=1000
+ch.psi.jcae.ContextFactory.autoAddressList=true
+ch.psi.jcae.ContextFactory.useShellVariables=false
+ch.psi.jcae.ContextFactory.addLocalBroadcastInterfaces=false
diff --git a/config/mail.properties b/config/mail.properties
index e04b672..0657827 100644
--- a/config/mail.properties
+++ b/config/mail.properties
@@ -1,9 +1,9 @@
-#Mon Oct 23 10:53:54 CEST 2017
-auth=None
-from=
-host=
-port=0
-pwd=
-smsSuffix=@sms.switch.ch
-to=
-usr=
+#Mon Oct 23 10:53:54 CEST 2017
+auth=None
+from=
+host=
+port=0
+pwd=
+smsSuffix=@sms.switch.ch
+to=
+usr=
diff --git a/config/plugins.properties b/config/plugins.properties
index 1522a96..ac378ef 100644
--- a/config/plugins.properties
+++ b/config/plugins.properties
@@ -1,21 +1,21 @@
-MXSC-1.10.0\ -\ Back.jar=disabled
-Commands.java=disabled
-Recovery.java=disabled
-MXSC-1.10.0.jar=disabled
-WagoPanel.java=enabled
-LaserUEPanel.java=enabled
-BarcodeReaderPanel.java=enabled
-PuckDetectionPanel.java=enabled
-HexiposiPanel.java=enabled
-MjpegSource2.java=enabled
-LN2.java=disabled
-Hexiposi.java=disabled
-RobotPanel.java=enabled
-SmartMagnetConfig.java=disabled
-SmartMagnetPanel.java=enabled
-LaserUE.java=enabled
-TestZMQ.java=disabled
-RobotModbus.java=disabled
-RobotTcp.java=disabled
-Beeper.java=disabled
-gui.java=disabled
+MXSC-1.10.0\ -\ Back.jar=disabled
+Commands.java=disabled
+Recovery.java=disabled
+MXSC-1.10.0.jar=disabled
+WagoPanel.java=enabled
+LaserUEPanel.java=enabled
+BarcodeReaderPanel.java=enabled
+PuckDetectionPanel.java=enabled
+HexiposiPanel.java=enabled
+MjpegSource2.java=enabled
+LN2.java=disabled
+Hexiposi.java=disabled
+RobotPanel.java=enabled
+SmartMagnetConfig.java=disabled
+SmartMagnetPanel.java=enabled
+LaserUE.java=enabled
+TestZMQ.java=disabled
+RobotModbus.java=disabled
+RobotTcp.java=disabled
+Beeper.java=disabled
+gui.java=disabled
diff --git a/config/settings.properties b/config/settings.properties
index 64cc91b..bdc4555 100644
--- a/config/settings.properties
+++ b/config/settings.properties
@@ -1,19 +1,19 @@
-#Tue Sep 14 16:57:52 CEST 2021
-dry_mount_counter=4
-room_temperature_enabled=false
-pin_offset=-0.0
-puck_types=true
-pin_cleaner_timer=60
-imaging_enabled=false
-dry_timestamp=1.631630809232E9
-roi_h=1000
-led_level=0.0
-beamline_status_enabled=false
-force_dry_mount_count=120
-roi_y=123
-barcode_reader_scan_pucks=false
-cold_position_timeout=3600
-force_dry_timeout=2700
-roi_w=1000
-roi_x=289
-valve_control=false
+#Fri Oct 08 14:33:45 CEST 2021
+dry_mount_counter=2
+room_temperature_enabled=false
+pin_offset=-0.0
+puck_types=true
+pin_cleaner_timer=60
+imaging_enabled=false
+dry_timestamp=1.633696122578E9
+roi_h=1000
+led_level=0.0
+beamline_status_enabled=false
+force_dry_mount_count=12
+roi_y=123
+barcode_reader_scan_pucks=false
+cold_position_timeout=3600
+force_dry_timeout=2700
+roi_w=1000
+roi_x=289
+valve_control=false
diff --git a/config/setup-modbus.properties b/config/setup-modbus.properties
index eb292c1..893fe12 100644
--- a/config/setup-modbus.properties
+++ b/config/setup-modbus.properties
@@ -1,18 +1,18 @@
-#Wed Sep 14 15:16:45 CEST 2016
-configFile={config}/config.properties
-configFileDevices={config}/devices-modbus.properties
-configFilePlugins={config}/plugins.properties
-configFileTasks={config}/tasks.properties
-configPath={home}/config
-contextPath={outp}/context
-dataPath={outp}/data
-devicesPath={home}/devices
-extensionsPath={home}/extensions
-imagesPath={outp}/images
-libraryPath={script}; {script}/Lib
-logPath={outp}/log
-pluginsPath={home}/plugins
-scriptPath={home}/script
-scriptType=py
-sessionsPath={outp}/sessions
-wwwPath={home}/www
+#Wed Sep 14 15:16:45 CEST 2016
+configFile={config}/config.properties
+configFileDevices={config}/devices-modbus.properties
+configFilePlugins={config}/plugins.properties
+configFileTasks={config}/tasks.properties
+configPath={home}/config
+contextPath={outp}/context
+dataPath={outp}/data
+devicesPath={home}/devices
+extensionsPath={home}/extensions
+imagesPath={outp}/images
+libraryPath={script}; {script}/Lib
+logPath={outp}/log
+pluginsPath={home}/plugins
+scriptPath={home}/script
+scriptType=py
+sessionsPath={outp}/sessions
+wwwPath={home}/www
diff --git a/config/setup.properties b/config/setup.properties
index 7ad15eb..87a13e8 100644
--- a/config/setup.properties
+++ b/config/setup.properties
@@ -1,20 +1,20 @@
-#Tue Sep 17 15:06:05 CEST 2019
-configFile={config}/config.properties
-configFileDevices={config}/devices.properties
-configFilePlugins={config}/plugins.properties
-configFileSettings={config}/settings.properties
-configFileTasks={config}/tasks.properties
-configFileVariables={config}/variables.properties
-configPath={home}/config
-contextPath={outp}/context
-dataPath={outp}/data
-devicesPath={home}/devices
-extensionsPath={home}/extensions
-imagesPath={outp}/images
-libraryPath={script}; {script}/Lib
-logPath={outp}/log
-pluginsPath={home}/plugins
-scriptPath={home}/script
-scriptType=py
-sessionsPath={outp}/sessions
-wwwPath={home}/www
+#Tue Sep 17 15:06:05 CEST 2019
+configFile={config}/config.properties
+configFileDevices={config}/devices.properties
+configFilePlugins={config}/plugins.properties
+configFileSettings={config}/settings.properties
+configFileTasks={config}/tasks.properties
+configFileVariables={config}/variables.properties
+configPath={home}/config
+contextPath={outp}/context
+dataPath={outp}/data
+devicesPath={home}/devices
+extensionsPath={home}/extensions
+imagesPath={outp}/images
+libraryPath={script}; {script}/Lib
+logPath={outp}/log
+pluginsPath={home}/plugins
+scriptPath={home}/script
+scriptType=py
+sessionsPath={outp}/sessions
+wwwPath={home}/www
diff --git a/config/tasks.properties b/config/tasks.properties
index 92f138b..15051e4 100644
--- a/config/tasks.properties
+++ b/config/tasks.properties
@@ -1,2 +1,2 @@
-tasks/LedMonitoring=120
-tasks/ColdPositionTimeout=300
+tasks/LedMonitoring=120
+tasks/ColdPositionTimeout=300
diff --git a/config/variables.properties b/config/variables.properties
index dc31509..bde2bbf 100644
--- a/config/variables.properties
+++ b/config/variables.properties
@@ -1,2 +1,2 @@
-#Tue Jul 27 09:59:30 CEST 2021
-FileSequentialNumber=234
+#Mon Sep 27 14:34:33 CEST 2021
+FileSequentialNumber=236
diff --git a/devices/20161117_163816.png.properties b/devices/20161117_163816.png.properties
index be1fd91..002c936 100644
--- a/devices/20161117_163816.png.properties
+++ b/devices/20161117_163816.png.properties
@@ -1,20 +1,20 @@
-#Mon Oct 23 15:10:20 CEST 2017
-flipHorizontally=false
-flipVertically=false
-grayscale=false
-invert=false
-rescaleFactor=1.0
-rescaleOffset=0.0
-roiHeight=-1
-roiWidth=-1
-roiX=0
-roiY=0
-rotation=0.0
-rotationCrop=false
-scale=1.0
-spatialCalOffsetX=NaN
-spatialCalOffsetY=NaN
-spatialCalScaleX=NaN
-spatialCalScaleY=NaN
-spatialCalUnits=mm
-transpose=false
+#Mon Oct 23 15:10:20 CEST 2017
+flipHorizontally=false
+flipVertically=false
+grayscale=false
+invert=false
+rescaleFactor=1.0
+rescaleOffset=0.0
+roiHeight=-1
+roiWidth=-1
+roiX=0
+roiY=0
+rotation=0.0
+rotationCrop=false
+scale=1.0
+spatialCalOffsetX=NaN
+spatialCalOffsetY=NaN
+spatialCalScaleX=NaN
+spatialCalScaleY=NaN
+spatialCalUnits=mm
+transpose=false
diff --git a/devices/A1.properties b/devices/A1.properties
index a35db6d..6739e4f 100644
--- a/devices/A1.properties
+++ b/devices/A1.properties
@@ -1,3 +1,3 @@
-#Wed Jul 14 16:02:00 CEST 2021
-detection=Mechanical
-disabled=false
+#Wed Jul 14 16:02:00 CEST 2021
+detection=Mechanical
+disabled=false
diff --git a/devices/A2.properties b/devices/A2.properties
index ce6347e..57b0ea4 100644
--- a/devices/A2.properties
+++ b/devices/A2.properties
@@ -1,3 +1,3 @@
-#Thu Jun 06 15:47:03 CEST 2019
-detection=Mechanical
-disabled=false
+#Thu Jun 06 15:47:03 CEST 2019
+detection=Mechanical
+disabled=false
diff --git a/devices/A3.properties b/devices/A3.properties
index d21184c..c936a3e 100644
--- a/devices/A3.properties
+++ b/devices/A3.properties
@@ -1,3 +1,3 @@
-#Tue Jan 21 09:46:43 CET 2020
-detection=Mechanical
-disabled=false
+#Tue Jan 21 09:46:43 CET 2020
+detection=Mechanical
+disabled=false
diff --git a/devices/A4.properties b/devices/A4.properties
index 502a5d0..7dad517 100644
--- a/devices/A4.properties
+++ b/devices/A4.properties
@@ -1,3 +1,3 @@
-#Thu Jun 06 15:40:34 CEST 2019
-detection=Mechanical
-disabled=false
+#Thu Jun 06 15:40:34 CEST 2019
+detection=Mechanical
+disabled=false
diff --git a/devices/A5.properties b/devices/A5.properties
index adcc5f3..f886a5f 100644
--- a/devices/A5.properties
+++ b/devices/A5.properties
@@ -1,3 +1,3 @@
-#Tue Jan 21 09:46:49 CET 2020
-detection=Mechanical
-disabled=false
+#Tue Jan 21 09:46:49 CET 2020
+detection=Mechanical
+disabled=false
diff --git a/devices/B1.properties b/devices/B1.properties
index 22f2102..1124ff4 100644
--- a/devices/B1.properties
+++ b/devices/B1.properties
@@ -1,3 +1,3 @@
-#Mon Apr 29 16:18:33 CEST 2019
-detection=Mechanical
-disabled=false
+#Mon Apr 29 16:18:33 CEST 2019
+detection=Mechanical
+disabled=false
diff --git a/devices/B2.properties b/devices/B2.properties
index ea802c8..cc3169b 100644
--- a/devices/B2.properties
+++ b/devices/B2.properties
@@ -1,3 +1,3 @@
-#Mon Apr 29 16:40:00 CEST 2019
-detection=Mechanical
-disabled=false
+#Mon Apr 29 16:40:00 CEST 2019
+detection=Mechanical
+disabled=false
diff --git a/devices/B3.properties b/devices/B3.properties
index ad0f99d..31bcbbc 100644
--- a/devices/B3.properties
+++ b/devices/B3.properties
@@ -1,3 +1,3 @@
-#Tue Sep 01 14:03:17 CEST 2020
-detection=Mechanical
-disabled=false
+#Tue Sep 01 14:03:17 CEST 2020
+detection=Mechanical
+disabled=false
diff --git a/devices/B4.properties b/devices/B4.properties
index 074e71d..a8453b9 100644
--- a/devices/B4.properties
+++ b/devices/B4.properties
@@ -1,3 +1,3 @@
-#Sat Dec 14 17:27:09 CET 2019
-detection=Mechanical
-disabled=false
+#Sat Dec 14 17:27:09 CET 2019
+detection=Mechanical
+disabled=false
diff --git a/devices/B5.properties b/devices/B5.properties
index 86f5d14..e63800a 100644
--- a/devices/B5.properties
+++ b/devices/B5.properties
@@ -1,3 +1,3 @@
-#Thu Apr 01 10:21:16 CEST 2021
-detection=Mechanical
-disabled=false
+#Thu Apr 01 10:21:16 CEST 2021
+detection=Mechanical
+disabled=false
diff --git a/devices/BasePlate.properties b/devices/BasePlate.properties
index 1e25f83..aebdfa4 100644
--- a/devices/BasePlate.properties
+++ b/devices/BasePlate.properties
@@ -1 +1 @@
-#Fri Feb 10 14:35:38 CET 2017
+#Fri Feb 10 14:35:38 CET 2017
diff --git a/devices/C1.properties b/devices/C1.properties
index 52198c1..c16b0ed 100644
--- a/devices/C1.properties
+++ b/devices/C1.properties
@@ -1,3 +1,3 @@
-#Tue Sep 01 08:37:42 CEST 2020
-detection=Mechanical
-disabled=false
+#Tue Sep 01 08:37:42 CEST 2020
+detection=Mechanical
+disabled=false
diff --git a/devices/C2.properties b/devices/C2.properties
index fbcc31c..bcb7f30 100644
--- a/devices/C2.properties
+++ b/devices/C2.properties
@@ -1,3 +1,3 @@
-#Tue Sep 01 13:18:50 CEST 2020
-detection=Mechanical
-disabled=false
+#Tue Sep 01 13:18:50 CEST 2020
+detection=Mechanical
+disabled=false
diff --git a/devices/C3.properties b/devices/C3.properties
index ea61eb4..76324f2 100644
--- a/devices/C3.properties
+++ b/devices/C3.properties
@@ -1,3 +1,3 @@
-#Thu Nov 12 13:39:42 CET 2020
-detection=Mechanical
-disabled=false
+#Thu Nov 12 13:39:42 CET 2020
+detection=Mechanical
+disabled=false
diff --git a/devices/C4.properties b/devices/C4.properties
index c83df35..5c176c6 100644
--- a/devices/C4.properties
+++ b/devices/C4.properties
@@ -1,3 +1,3 @@
-#Tue Dec 01 08:46:40 CET 2020
-detection=Mechanical
-disabled=false
+#Tue Dec 01 08:46:40 CET 2020
+detection=Mechanical
+disabled=false
diff --git a/devices/C5.properties b/devices/C5.properties
index 272762e..bfdfd22 100644
--- a/devices/C5.properties
+++ b/devices/C5.properties
@@ -1,3 +1,3 @@
-#Sat May 01 01:32:19 CEST 2021
-detection=Mechanical
-disabled=false
+#Sat May 01 01:32:19 CEST 2021
+detection=Mechanical
+disabled=false
diff --git a/devices/D1.properties b/devices/D1.properties
index d83b456..be32157 100644
--- a/devices/D1.properties
+++ b/devices/D1.properties
@@ -1,3 +1,3 @@
-#Thu Sep 19 08:23:48 CEST 2019
-detection=Mechanical
-disabled=false
+#Thu Sep 19 08:23:48 CEST 2019
+detection=Mechanical
+disabled=false
diff --git a/devices/D2.properties b/devices/D2.properties
index a5df751..3e0c7a5 100644
--- a/devices/D2.properties
+++ b/devices/D2.properties
@@ -1,3 +1,3 @@
-#Tue Sep 08 09:28:59 CEST 2020
-detection=Mechanical
-disabled=false
+#Tue Sep 08 09:28:59 CEST 2020
+detection=Mechanical
+disabled=false
diff --git a/devices/D3.properties b/devices/D3.properties
index 2e933c9..5572f25 100644
--- a/devices/D3.properties
+++ b/devices/D3.properties
@@ -1,3 +1,3 @@
-#Tue Sep 08 09:29:02 CEST 2020
-detection=Mechanical
-disabled=false
+#Tue Sep 08 09:29:02 CEST 2020
+detection=Mechanical
+disabled=false
diff --git a/devices/D4.properties b/devices/D4.properties
index 1be19b4..ae46e1b 100644
--- a/devices/D4.properties
+++ b/devices/D4.properties
@@ -1,3 +1,3 @@
-#Tue Sep 08 09:29:05 CEST 2020
-detection=Mechanical
-disabled=false
+#Tue Sep 08 09:29:05 CEST 2020
+detection=Mechanical
+disabled=false
diff --git a/devices/D5.properties b/devices/D5.properties
index 9d34242..1afafb7 100644
--- a/devices/D5.properties
+++ b/devices/D5.properties
@@ -1,3 +1,3 @@
-#Tue Sep 08 09:29:08 CEST 2020
-detection=Mechanical
-disabled=false
+#Tue Sep 08 09:29:08 CEST 2020
+detection=Mechanical
+disabled=false
diff --git a/devices/E1.properties b/devices/E1.properties
index 861f9f8..fc64677 100644
--- a/devices/E1.properties
+++ b/devices/E1.properties
@@ -1,3 +1,3 @@
-#Fri Aug 14 14:28:32 CEST 2020
-detection=Mechanical
-disabled=true
+#Fri Aug 14 14:28:32 CEST 2020
+detection=Mechanical
+disabled=true
diff --git a/devices/E2.properties b/devices/E2.properties
index 34dabc7..9b2eeae 100644
--- a/devices/E2.properties
+++ b/devices/E2.properties
@@ -1,3 +1,3 @@
-#Fri Aug 14 10:51:15 CEST 2020
-detection=Mechanical
-disabled=true
+#Fri Aug 14 10:51:15 CEST 2020
+detection=Mechanical
+disabled=true
diff --git a/devices/E3.properties b/devices/E3.properties
index a133c30..b1e3702 100644
--- a/devices/E3.properties
+++ b/devices/E3.properties
@@ -1,3 +1,3 @@
-#Fri Aug 14 10:51:19 CEST 2020
-detection=Mechanical
-disabled=true
+#Fri Aug 14 10:51:19 CEST 2020
+detection=Mechanical
+disabled=true
diff --git a/devices/E4.properties b/devices/E4.properties
index 818280c..5218846 100644
--- a/devices/E4.properties
+++ b/devices/E4.properties
@@ -1,3 +1,3 @@
-#Fri Aug 14 10:51:24 CEST 2020
-detection=Mechanical
-disabled=true
+#Fri Aug 14 10:51:24 CEST 2020
+detection=Mechanical
+disabled=true
diff --git a/devices/E5.properties b/devices/E5.properties
index 7fb793f..96b04c7 100644
--- a/devices/E5.properties
+++ b/devices/E5.properties
@@ -1,3 +1,3 @@
-#Fri Aug 14 10:51:29 CEST 2020
-detection=Mechanical
-disabled=true
+#Fri Aug 14 10:51:29 CEST 2020
+detection=Mechanical
+disabled=true
diff --git a/devices/F1.properties b/devices/F1.properties
index b9fd935..055f1b2 100644
--- a/devices/F1.properties
+++ b/devices/F1.properties
@@ -1,3 +1,3 @@
-#Fri Aug 14 11:31:09 CEST 2020
-detection=Mechanical
-disabled=true
+#Fri Aug 14 11:31:09 CEST 2020
+detection=Mechanical
+disabled=true
diff --git a/devices/F2.properties b/devices/F2.properties
index 12b665e..efdbc09 100644
--- a/devices/F2.properties
+++ b/devices/F2.properties
@@ -1,3 +1,3 @@
-#Fri Aug 14 10:51:39 CEST 2020
-detection=Mechanical
-disabled=true
+#Fri Aug 14 10:51:39 CEST 2020
+detection=Mechanical
+disabled=true
diff --git a/devices/F3.properties b/devices/F3.properties
index 321743f..f439e69 100644
--- a/devices/F3.properties
+++ b/devices/F3.properties
@@ -1,3 +1,3 @@
-#Fri Aug 14 10:51:44 CEST 2020
-detection=Mechanical
-disabled=true
+#Fri Aug 14 10:51:44 CEST 2020
+detection=Mechanical
+disabled=true
diff --git a/devices/F4.properties b/devices/F4.properties
index a0e68f2..9facae9 100644
--- a/devices/F4.properties
+++ b/devices/F4.properties
@@ -1,3 +1,3 @@
-#Fri Aug 14 10:51:47 CEST 2020
-detection=Mechanical
-disabled=true
+#Fri Aug 14 10:51:47 CEST 2020
+detection=Mechanical
+disabled=true
diff --git a/devices/F5.properties b/devices/F5.properties
index 2c095dc..98689a8 100644
--- a/devices/F5.properties
+++ b/devices/F5.properties
@@ -1,3 +1,3 @@
-#Fri Aug 14 10:51:50 CEST 2020
-detection=Mechanical
-disabled=true
+#Fri Aug 14 10:51:50 CEST 2020
+detection=Mechanical
+disabled=true
diff --git a/devices/R1.properties b/devices/R1.properties
index fa91122..c954e1b 100644
--- a/devices/R1.properties
+++ b/devices/R1.properties
@@ -1,3 +1,3 @@
-#Tue Feb 19 12:07:25 CET 2019
-detection=Both
-disabled=false
+#Tue Feb 19 12:07:25 CET 2019
+detection=Both
+disabled=false
diff --git a/devices/R2.properties b/devices/R2.properties
index fa91122..c954e1b 100644
--- a/devices/R2.properties
+++ b/devices/R2.properties
@@ -1,3 +1,3 @@
-#Tue Feb 19 12:07:25 CET 2019
-detection=Both
-disabled=false
+#Tue Feb 19 12:07:25 CET 2019
+detection=Both
+disabled=false
diff --git a/devices/R3.properties b/devices/R3.properties
index fa91122..c954e1b 100644
--- a/devices/R3.properties
+++ b/devices/R3.properties
@@ -1,3 +1,3 @@
-#Tue Feb 19 12:07:25 CET 2019
-detection=Both
-disabled=false
+#Tue Feb 19 12:07:25 CET 2019
+detection=Both
+disabled=false
diff --git a/devices/R4.properties b/devices/R4.properties
index fa91122..c954e1b 100644
--- a/devices/R4.properties
+++ b/devices/R4.properties
@@ -1,3 +1,3 @@
-#Tue Feb 19 12:07:25 CET 2019
-detection=Both
-disabled=false
+#Tue Feb 19 12:07:25 CET 2019
+detection=Both
+disabled=false
diff --git a/devices/R5.properties b/devices/R5.properties
index fa91122..c954e1b 100644
--- a/devices/R5.properties
+++ b/devices/R5.properties
@@ -1,3 +1,3 @@
-#Tue Feb 19 12:07:25 CET 2019
-detection=Both
-disabled=false
+#Tue Feb 19 12:07:25 CET 2019
+detection=Both
+disabled=false
diff --git a/devices/RoomTemperatureBasePlate.properties b/devices/RoomTemperatureBasePlate.properties
index a8e063a..3018a1d 100644
--- a/devices/RoomTemperatureBasePlate.properties
+++ b/devices/RoomTemperatureBasePlate.properties
@@ -1 +1 @@
-#Tue Feb 19 12:07:25 CET 2019
+#Tue Feb 19 12:07:25 CET 2019
diff --git a/devices/Time.properties b/devices/Time.properties
index 33011f0..d29613b 100644
--- a/devices/Time.properties
+++ b/devices/Time.properties
@@ -1,10 +1,10 @@
-#Wed Jun 27 10:48:14 CEST 2018
-maxValue=NaN
-minValue=NaN
-offset=0.0
-precision=-1
-resolution=NaN
-rotation=false
-scale=1.0
-sign_bit=0
-unit=null
+#Wed Jun 27 10:48:14 CEST 2018
+maxValue=NaN
+minValue=NaN
+offset=0.0
+precision=-1
+resolution=NaN
+rotation=false
+scale=1.0
+sign_bit=0
+unit=null
diff --git a/devices/air_pressure.properties b/devices/air_pressure.properties
index e476b09..8679b28 100644
--- a/devices/air_pressure.properties
+++ b/devices/air_pressure.properties
@@ -1,5 +1,5 @@
-#Thu Mar 01 11:13:34 CET 2018
-offset=0.0
-precision=-1
-scale=1.0
-unit=null
+#Thu Mar 01 11:13:34 CET 2018
+offset=0.0
+precision=-1
+scale=1.0
+unit=null
diff --git a/devices/cryostage.properties b/devices/cryostage.properties
index 36ad221..26e6826 100644
--- a/devices/cryostage.properties
+++ b/devices/cryostage.properties
@@ -1,18 +1,18 @@
-#Mon Jul 26 08:33:12 CEST 2021
-offset=0.0
-maxValue=60.0
-rotation=false
-precision=5
-scale=1.0
-estbilizationDelay=0
-maxSpeed=NaN
-resolution=0.0025
-homingType=None
-startRetries=1
-minValue=-3.0
-unit=mm
-defaultSpeed=5.0
-hasEnable=false
-sign_bit=0
-monitorByPosition=false
-minSpeed=1.0
+#Mon Jul 26 08:33:12 CEST 2021
+offset=0.0
+maxValue=60.0
+rotation=false
+precision=5
+scale=1.0
+estbilizationDelay=0
+maxSpeed=NaN
+resolution=0.0025
+homingType=None
+startRetries=1
+minValue=-3.0
+unit=mm
+defaultSpeed=5.0
+hasEnable=false
+sign_bit=0
+monitorByPosition=false
+minSpeed=1.0
diff --git a/devices/cx.properties b/devices/cx.properties
index 1720045..f35f8f1 100644
--- a/devices/cx.properties
+++ b/devices/cx.properties
@@ -1,17 +1,17 @@
-#Fri Aug 10 15:47:53 CEST 2018
-defaultSpeed=2.0
-estbilizationDelay=0
-hasEnable=false
-homingType=None
-maxSpeed=NaN
-maxValue=0.0
-minSpeed=NaN
-minValue=0.0
-offset=0.0
-precision=3
-resolution=0.001
-rotation=false
-scale=1.0
-sign_bit=0
-startRetries=1
-unit=mm
+#Fri Aug 10 15:47:53 CEST 2018
+defaultSpeed=2.0
+estbilizationDelay=0
+hasEnable=false
+homingType=None
+maxSpeed=NaN
+maxValue=0.0
+minSpeed=NaN
+minValue=0.0
+offset=0.0
+precision=3
+resolution=0.001
+rotation=false
+scale=1.0
+sign_bit=0
+startRetries=1
+unit=mm
diff --git a/devices/cz.properties b/devices/cz.properties
index b8877dd..892238d 100644
--- a/devices/cz.properties
+++ b/devices/cz.properties
@@ -1,17 +1,17 @@
-#Fri Aug 10 15:47:15 CEST 2018
-defaultSpeed=2.0
-estbilizationDelay=0
-hasEnable=false
-homingType=None
-maxSpeed=NaN
-maxValue=0.0
-minSpeed=NaN
-minValue=0.0
-offset=0.0
-precision=3
-resolution=0.001
-rotation=false
-scale=1.0
-sign_bit=0
-startRetries=1
-unit=mm
+#Fri Aug 10 15:47:15 CEST 2018
+defaultSpeed=2.0
+estbilizationDelay=0
+hasEnable=false
+homingType=None
+maxSpeed=NaN
+maxValue=0.0
+minSpeed=NaN
+minValue=0.0
+offset=0.0
+precision=3
+resolution=0.001
+rotation=false
+scale=1.0
+sign_bit=0
+startRetries=1
+unit=mm
diff --git a/devices/dew_point.properties b/devices/dew_point.properties
index feb40c3..7528848 100644
--- a/devices/dew_point.properties
+++ b/devices/dew_point.properties
@@ -1,6 +1,6 @@
-#Tue Sep 08 12:55:58 CEST 2020
-unit=null
-offset=0.0
-precision=-1
-sign_bit=0
-scale=1.0
+#Tue Sep 08 12:55:58 CEST 2020
+unit=null
+offset=0.0
+precision=-1
+sign_bit=0
+scale=1.0
diff --git a/devices/dewar_level.properties b/devices/dewar_level.properties
index ac55365..c5ae4b2 100644
--- a/devices/dewar_level.properties
+++ b/devices/dewar_level.properties
@@ -1,6 +1,6 @@
-#Tue Jan 22 10:58:09 CET 2019
-offset=0.0
-precision=2
-scale=0.0032
-sign_bit=0
-unit=%
+#Tue Jan 22 10:58:09 CET 2019
+offset=0.0
+precision=2
+scale=0.0032
+sign_bit=0
+unit=%
diff --git a/devices/dispatcher.properties b/devices/dispatcher.properties
index 5a3e672..4a2df40 100644
--- a/devices/dispatcher.properties
+++ b/devices/dispatcher.properties
@@ -1,11 +1,11 @@
-#Thu May 03 11:54:38 CEST 2018
-disableCompression=false
-keepListeningOnStop=false
-mappingIncomplete=null
-parallelHandlerProcessing=true
-sendAwaitFirstMessage=false
-sendBuildChannelConfig=null
-sendStrategy=null
-sendSyncTimeout=0
-socketType=DEFAULT
-validationInconsistency=null
+#Thu May 03 11:54:38 CEST 2018
+disableCompression=false
+keepListeningOnStop=false
+mappingIncomplete=null
+parallelHandlerProcessing=true
+sendAwaitFirstMessage=false
+sendBuildChannelConfig=null
+sendStrategy=null
+sendSyncTimeout=0
+socketType=DEFAULT
+validationInconsistency=null
diff --git a/devices/dp1.properties b/devices/dp1.properties
index c853c11..89ea939 100644
--- a/devices/dp1.properties
+++ b/devices/dp1.properties
@@ -1,11 +1,11 @@
-#Fri Jul 08 10:53:26 CEST 2016
-motor1=0.0|4.0|8.0|0.0
-motor2=0.0|5.0|3.0|NaN
-motor3=null
-motor4=null
-motor5=null
-motor6=null
-motor7=null
-motor8=null
-positions=Park|Ready|Out|Clear
-precision=-1
+#Fri Jul 08 10:53:26 CEST 2016
+motor1=0.0|4.0|8.0|0.0
+motor2=0.0|5.0|3.0|NaN
+motor3=null
+motor4=null
+motor5=null
+motor6=null
+motor7=null
+motor8=null
+positions=Park|Ready|Out|Clear
+precision=-1
diff --git a/devices/fx.properties b/devices/fx.properties
index 44a1a35..e0186a5 100644
--- a/devices/fx.properties
+++ b/devices/fx.properties
@@ -1,17 +1,17 @@
-#Fri Aug 10 15:47:14 CEST 2018
-defaultSpeed=2.0
-estbilizationDelay=0
-hasEnable=false
-homingType=None
-maxSpeed=NaN
-maxValue=0.0
-minSpeed=NaN
-minValue=0.0
-offset=0.0
-precision=3
-resolution=0.001
-rotation=false
-scale=1.0
-sign_bit=0
-startRetries=1
-unit=mm
+#Fri Aug 10 15:47:14 CEST 2018
+defaultSpeed=2.0
+estbilizationDelay=0
+hasEnable=false
+homingType=None
+maxSpeed=NaN
+maxValue=0.0
+minSpeed=NaN
+minValue=0.0
+offset=0.0
+precision=3
+resolution=0.001
+rotation=false
+scale=1.0
+sign_bit=0
+startRetries=1
+unit=mm
diff --git a/devices/fy.properties b/devices/fy.properties
index 44a1a35..e0186a5 100644
--- a/devices/fy.properties
+++ b/devices/fy.properties
@@ -1,17 +1,17 @@
-#Fri Aug 10 15:47:14 CEST 2018
-defaultSpeed=2.0
-estbilizationDelay=0
-hasEnable=false
-homingType=None
-maxSpeed=NaN
-maxValue=0.0
-minSpeed=NaN
-minValue=0.0
-offset=0.0
-precision=3
-resolution=0.001
-rotation=false
-scale=1.0
-sign_bit=0
-startRetries=1
-unit=mm
+#Fri Aug 10 15:47:14 CEST 2018
+defaultSpeed=2.0
+estbilizationDelay=0
+hasEnable=false
+homingType=None
+maxSpeed=NaN
+maxValue=0.0
+minSpeed=NaN
+minValue=0.0
+offset=0.0
+precision=3
+resolution=0.001
+rotation=false
+scale=1.0
+sign_bit=0
+startRetries=1
+unit=mm
diff --git a/devices/gripper_cam.properties b/devices/gripper_cam.properties
index 6fc903f..ecf3314 100644
--- a/devices/gripper_cam.properties
+++ b/devices/gripper_cam.properties
@@ -1,20 +1,20 @@
-#Thu Jun 28 17:46:46 CEST 2018
-flipHorizontally=false
-flipVertically=false
-grayscale=false
-invert=false
-rescaleFactor=1.0
-rescaleOffset=0.0
-roiHeight=-1
-roiWidth=-1
-roiX=0
-roiY=0
-rotation=0.0
-rotationCrop=false
-scale=1.0
-spatialCalOffsetX=NaN
-spatialCalOffsetY=NaN
-spatialCalScaleX=NaN
-spatialCalScaleY=NaN
-spatialCalUnits=mm
-transpose=false
+#Thu Jun 28 17:46:46 CEST 2018
+flipHorizontally=false
+flipVertically=false
+grayscale=false
+invert=false
+rescaleFactor=1.0
+rescaleOffset=0.0
+roiHeight=-1
+roiWidth=-1
+roiX=0
+roiY=0
+rotation=0.0
+rotationCrop=false
+scale=1.0
+spatialCalOffsetX=NaN
+spatialCalOffsetY=NaN
+spatialCalScaleX=NaN
+spatialCalScaleY=NaN
+spatialCalUnits=mm
+transpose=false
diff --git a/devices/humidity.properties b/devices/humidity.properties
index feb40c3..7528848 100644
--- a/devices/humidity.properties
+++ b/devices/humidity.properties
@@ -1,6 +1,6 @@
-#Tue Sep 08 12:55:58 CEST 2020
-unit=null
-offset=0.0
-precision=-1
-sign_bit=0
-scale=1.0
+#Tue Sep 08 12:55:58 CEST 2020
+unit=null
+offset=0.0
+precision=-1
+sign_bit=0
+scale=1.0
diff --git a/devices/img.properties b/devices/img.properties
index 8ef03e0..9552bf6 100644
--- a/devices/img.properties
+++ b/devices/img.properties
@@ -1,24 +1,24 @@
-#Wed Oct 30 16:03:50 CET 2019
-spatialCalOffsetY=-482.0
-invert=false
-colormapMin=6.4
-spatialCalOffsetX=-476.0
-rotation=90.5119714057
-rotationCrop=true
-scale=1.0
-rescaleFactor=1.0
-grayscale=false
-spatialCalUnits=mm
-flipVertically=false
-roiHeight=964
-spatialCalScaleX=0.49344173073372655
-spatialCalScaleY=0.48738915251539194
-flipHorizontally=false
-colormapAutomatic=false
-colormapMax=18.133
-roiY=17
-roiX=25
-rescaleOffset=0.0
-roiWidth=952
-transpose=false
-colormap=Grayscale
+#Wed Oct 30 16:03:50 CET 2019
+spatialCalOffsetY=-482.0
+invert=false
+colormapMin=6.4
+spatialCalOffsetX=-476.0
+rotation=90.5119714057
+rotationCrop=true
+scale=1.0
+rescaleFactor=1.0
+grayscale=false
+spatialCalUnits=mm
+flipVertically=false
+roiHeight=964
+spatialCalScaleX=0.49344173073372655
+spatialCalScaleY=0.48738915251539194
+flipHorizontally=false
+colormapAutomatic=false
+colormapMax=18.133
+roiY=17
+roiX=25
+rescaleOffset=0.0
+roiWidth=952
+transpose=false
+colormap=Grayscale
diff --git a/devices/led_ctrl.properties b/devices/led_ctrl.properties
index 00dcc48..74f5046 100644
--- a/devices/led_ctrl.properties
+++ b/devices/led_ctrl.properties
@@ -1,8 +1,8 @@
-#Tue Jun 20 15:07:30 CEST 2017
-maxValue=0.4
-minValue=0.0
-offset=0.0
-precision=2
-resolution=NaN
-scale=3.0E-4
-unit=V
+#Tue Jun 20 15:07:30 CEST 2017
+maxValue=0.4
+minValue=0.0
+offset=0.0
+precision=2
+resolution=NaN
+scale=3.0E-4
+unit=V
diff --git a/devices/led_ctrl_1.properties b/devices/led_ctrl_1.properties
index d73bc60..29cb74a 100644
--- a/devices/led_ctrl_1.properties
+++ b/devices/led_ctrl_1.properties
@@ -1,9 +1,9 @@
-#Wed Sep 08 12:06:50 CEST 2021
-minValue=0.0
-unit=V
-offset=0.0
-maxValue=1.0
-precision=2
-sign_bit=0
-scale=3.0E-4
-resolution=NaN
+#Wed Oct 06 09:12:48 CEST 2021
+minValue=0.0
+unit=V
+offset=0.0
+maxValue=1.0
+precision=2
+sign_bit=0
+scale=3.0E-4
+resolution=NaN
diff --git a/devices/led_ctrl_2.properties b/devices/led_ctrl_2.properties
index d73bc60..29cb74a 100644
--- a/devices/led_ctrl_2.properties
+++ b/devices/led_ctrl_2.properties
@@ -1,9 +1,9 @@
-#Wed Sep 08 12:06:50 CEST 2021
-minValue=0.0
-unit=V
-offset=0.0
-maxValue=1.0
-precision=2
-sign_bit=0
-scale=3.0E-4
-resolution=NaN
+#Wed Oct 06 09:12:48 CEST 2021
+minValue=0.0
+unit=V
+offset=0.0
+maxValue=1.0
+precision=2
+sign_bit=0
+scale=3.0E-4
+resolution=NaN
diff --git a/devices/led_ctrl_3.properties b/devices/led_ctrl_3.properties
index d73bc60..29cb74a 100644
--- a/devices/led_ctrl_3.properties
+++ b/devices/led_ctrl_3.properties
@@ -1,9 +1,9 @@
-#Wed Sep 08 12:06:50 CEST 2021
-minValue=0.0
-unit=V
-offset=0.0
-maxValue=1.0
-precision=2
-sign_bit=0
-scale=3.0E-4
-resolution=NaN
+#Wed Oct 06 09:12:48 CEST 2021
+minValue=0.0
+unit=V
+offset=0.0
+maxValue=1.0
+precision=2
+sign_bit=0
+scale=3.0E-4
+resolution=NaN
diff --git a/devices/led_level.properties b/devices/led_level.properties
index 52dee03..1881da2 100644
--- a/devices/led_level.properties
+++ b/devices/led_level.properties
@@ -1,9 +1,9 @@
-#Tue Jun 19 16:41:24 CEST 2018
-maxValue=NaN
-minValue=NaN
-offset=0.0
-precision=-1
-resolution=NaN
-scale=1.0
-sign_bit=0
-unit=null
+#Tue Jun 19 16:41:24 CEST 2018
+maxValue=NaN
+minValue=NaN
+offset=0.0
+precision=-1
+resolution=NaN
+scale=1.0
+sign_bit=0
+unit=null
diff --git a/devices/m1.properties b/devices/m1.properties
index 1cf4553..ec4e670 100644
--- a/devices/m1.properties
+++ b/devices/m1.properties
@@ -1,13 +1,13 @@
-#Fri Jun 30 09:37:38 CEST 2017
-defaultSpeed=1.0
-estbilizationDelay=0
-maxSpeed=10.0
-maxValue=10.0
-minSpeed=0.1
-minValue=-10.0
-offset=0.0
-precision=2
-resolution=NaN
-rotation=false
-scale=1.0
-unit=mm
+#Fri Jun 30 09:37:38 CEST 2017
+defaultSpeed=1.0
+estbilizationDelay=0
+maxSpeed=10.0
+maxValue=10.0
+minSpeed=0.1
+minValue=-10.0
+offset=0.0
+precision=2
+resolution=NaN
+rotation=false
+scale=1.0
+unit=mm
diff --git a/devices/m2.properties b/devices/m2.properties
index 1cf4553..ec4e670 100644
--- a/devices/m2.properties
+++ b/devices/m2.properties
@@ -1,13 +1,13 @@
-#Fri Jun 30 09:37:38 CEST 2017
-defaultSpeed=1.0
-estbilizationDelay=0
-maxSpeed=10.0
-maxValue=10.0
-minSpeed=0.1
-minValue=-10.0
-offset=0.0
-precision=2
-resolution=NaN
-rotation=false
-scale=1.0
-unit=mm
+#Fri Jun 30 09:37:38 CEST 2017
+defaultSpeed=1.0
+estbilizationDelay=0
+maxSpeed=10.0
+maxValue=10.0
+minSpeed=0.1
+minValue=-10.0
+offset=0.0
+precision=2
+resolution=NaN
+rotation=false
+scale=1.0
+unit=mm
diff --git a/devices/monitoring_cam.properties b/devices/monitoring_cam.properties
index fa56b35..70e120f 100644
--- a/devices/monitoring_cam.properties
+++ b/devices/monitoring_cam.properties
@@ -1,20 +1,20 @@
-#Thu Aug 09 11:01:09 CEST 2018
-flipHorizontally=false
-flipVertically=false
-grayscale=false
-invert=false
-rescaleFactor=1.0
-rescaleOffset=0.0
-roiHeight=-1
-roiWidth=-1
-roiX=0
-roiY=0
-rotation=0.0
-rotationCrop=false
-scale=1.0
-spatialCalOffsetX=NaN
-spatialCalOffsetY=NaN
-spatialCalScaleX=NaN
-spatialCalScaleY=NaN
-spatialCalUnits=mm
-transpose=false
+#Thu Aug 09 11:01:09 CEST 2018
+flipHorizontally=false
+flipVertically=false
+grayscale=false
+invert=false
+rescaleFactor=1.0
+rescaleOffset=0.0
+roiHeight=-1
+roiWidth=-1
+roiX=0
+roiY=0
+rotation=0.0
+rotationCrop=false
+scale=1.0
+spatialCalOffsetX=NaN
+spatialCalOffsetY=NaN
+spatialCalScaleX=NaN
+spatialCalScaleY=NaN
+spatialCalUnits=mm
+transpose=false
diff --git a/devices/n2_pressure.properties b/devices/n2_pressure.properties
index e476b09..8679b28 100644
--- a/devices/n2_pressure.properties
+++ b/devices/n2_pressure.properties
@@ -1,5 +1,5 @@
-#Thu Mar 01 11:13:34 CET 2018
-offset=0.0
-precision=-1
-scale=1.0
-unit=null
+#Thu Mar 01 11:13:34 CET 2018
+offset=0.0
+precision=-1
+scale=1.0
+unit=null
diff --git a/devices/p1.properties b/devices/p1.properties
index 07d9ba5..0806c2e 100644
--- a/devices/p1.properties
+++ b/devices/p1.properties
@@ -1,9 +1,9 @@
-#Fri Jun 30 09:37:38 CEST 2017
-maxValue=1000.0
-minValue=0.0
-offset=0.0
-precision=-1
-resolution=NaN
-rotation=false
-scale=1.0
-unit=mm
+#Fri Jun 30 09:37:38 CEST 2017
+maxValue=1000.0
+minValue=0.0
+offset=0.0
+precision=-1
+resolution=NaN
+rotation=false
+scale=1.0
+unit=mm
diff --git a/devices/phase_separator.properties b/devices/phase_separator.properties
index 122f8e9..354a4c3 100644
--- a/devices/phase_separator.properties
+++ b/devices/phase_separator.properties
@@ -1,8 +1,8 @@
-#Wed Feb 28 17:35:59 CET 2018
-maxValue=30000.0
-minValue=0.0
-offset=0.0
-precision=-1
-resolution=NaN
-scale=0.1
-unit=%
+#Wed Feb 28 17:35:59 CET 2018
+maxValue=30000.0
+minValue=0.0
+offset=0.0
+precision=-1
+resolution=NaN
+scale=0.1
+unit=%
diff --git a/devices/phase_separator_level.properties b/devices/phase_separator_level.properties
index 92a5279..f0015d4 100644
--- a/devices/phase_separator_level.properties
+++ b/devices/phase_separator_level.properties
@@ -1,6 +1,6 @@
-#Tue Jun 19 16:41:20 CEST 2018
-offset=-25.81632
-precision=2
-scale=0.003888
-sign_bit=0
-unit=%
+#Tue Jun 19 16:41:20 CEST 2018
+offset=-25.81632
+precision=2
+scale=0.003888
+sign_bit=0
+unit=%
diff --git a/devices/rim_heater_temp.properties b/devices/rim_heater_temp.properties
index e1c3b95..ea3398b 100644
--- a/devices/rim_heater_temp.properties
+++ b/devices/rim_heater_temp.properties
@@ -1,6 +1,6 @@
-#Tue Jun 19 16:41:20 CEST 2018
-offset=-25.81632
-precision=2
-scale=0.003888
-sign_bit=0
-unit=C
+#Tue Jun 19 16:41:20 CEST 2018
+offset=-25.81632
+precision=2
+scale=0.003888
+sign_bit=0
+unit=C
diff --git a/devices/robot x.properties b/devices/robot x.properties
index 02ffbf3..9563e54 100644
--- a/devices/robot x.properties
+++ b/devices/robot x.properties
@@ -1,9 +1,9 @@
-#Tue Sep 12 15:00:38 CEST 2017
-maxValue=NaN
-minValue=NaN
-offset=0.0
-precision=-1
-resolution=NaN
-rotation=false
-scale=1.0
-unit=null
+#Tue Sep 12 15:00:38 CEST 2017
+maxValue=NaN
+minValue=NaN
+offset=0.0
+precision=-1
+resolution=NaN
+rotation=false
+scale=1.0
+unit=null
diff --git a/devices/robot.properties b/devices/robot.properties
index 97f6ad6..8614b40 100644
--- a/devices/robot.properties
+++ b/devices/robot.properties
@@ -1,8 +1,8 @@
-#Thu Jul 21 08:35:47 CEST 2016
-offsetReadAnalogInput=0
-offsetReadAnalogOutput=0
-offsetReadDigitalInput=0
-offsetReadDigitalOutput=0
-offsetWriteAnalogOutput=0
-offsetWriteDigitalOutput=0
-timeout=1000
+#Thu Jul 21 08:35:47 CEST 2016
+offsetReadAnalogInput=0
+offsetReadAnalogOutput=0
+offsetReadDigitalInput=0
+offsetReadDigitalOutput=0
+offsetWriteAnalogOutput=0
+offsetWriteDigitalOutput=0
+timeout=1000
diff --git a/devices/robot_j1.properties b/devices/robot_j1.properties
index bc3a381..effc910 100644
--- a/devices/robot_j1.properties
+++ b/devices/robot_j1.properties
@@ -1,10 +1,10 @@
-#Tue Jun 19 16:41:28 CEST 2018
-maxValue=180.0
-minValue=-180.0
-offset=0.0
-precision=2
-resolution=0.1
-rotation=false
-scale=1.0
-sign_bit=0
-unit=deg
+#Tue Jun 19 16:41:28 CEST 2018
+maxValue=180.0
+minValue=-180.0
+offset=0.0
+precision=2
+resolution=0.1
+rotation=false
+scale=1.0
+sign_bit=0
+unit=deg
diff --git a/devices/robot_j2.properties b/devices/robot_j2.properties
index 6a892bc..483dbce 100644
--- a/devices/robot_j2.properties
+++ b/devices/robot_j2.properties
@@ -1,10 +1,10 @@
-#Tue Jun 19 16:41:28 CEST 2018
-maxValue=127.5
-minValue=-127.5
-offset=0.0
-precision=2
-resolution=0.1
-rotation=false
-scale=1.0
-sign_bit=0
-unit=deg
+#Tue Jun 19 16:41:28 CEST 2018
+maxValue=127.5
+minValue=-127.5
+offset=0.0
+precision=2
+resolution=0.1
+rotation=false
+scale=1.0
+sign_bit=0
+unit=deg
diff --git a/devices/robot_j3.properties b/devices/robot_j3.properties
index 07bff75..57ef9b6 100644
--- a/devices/robot_j3.properties
+++ b/devices/robot_j3.properties
@@ -1,10 +1,10 @@
-#Tue Jun 19 16:41:28 CEST 2018
-maxValue=152.5
-minValue=-152.5
-offset=0.0
-precision=2
-resolution=0.1
-rotation=false
-scale=1.0
-sign_bit=0
-unit=deg
+#Tue Jun 19 16:41:28 CEST 2018
+maxValue=152.5
+minValue=-152.5
+offset=0.0
+precision=2
+resolution=0.1
+rotation=false
+scale=1.0
+sign_bit=0
+unit=deg
diff --git a/devices/robot_j4.properties b/devices/robot_j4.properties
index 41d8586..813162f 100644
--- a/devices/robot_j4.properties
+++ b/devices/robot_j4.properties
@@ -1,10 +1,10 @@
-#Tue Jun 19 16:41:28 CEST 2018
-maxValue=270.0
-minValue=-270.0
-offset=0.0
-precision=2
-resolution=0.1
-rotation=false
-scale=1.0
-sign_bit=0
-unit=deg
+#Tue Jun 19 16:41:28 CEST 2018
+maxValue=270.0
+minValue=-270.0
+offset=0.0
+precision=2
+resolution=0.1
+rotation=false
+scale=1.0
+sign_bit=0
+unit=deg
diff --git a/devices/robot_j5.properties b/devices/robot_j5.properties
index dab429f..e15853d 100644
--- a/devices/robot_j5.properties
+++ b/devices/robot_j5.properties
@@ -1,10 +1,10 @@
-#Tue Jun 19 16:41:28 CEST 2018
-maxValue=132.5
-minValue=-122.5
-offset=0.0
-precision=2
-resolution=0.1
-rotation=false
-scale=1.0
-sign_bit=0
-unit=deg
+#Tue Jun 19 16:41:28 CEST 2018
+maxValue=132.5
+minValue=-122.5
+offset=0.0
+precision=2
+resolution=0.1
+rotation=false
+scale=1.0
+sign_bit=0
+unit=deg
diff --git a/devices/robot_j6.properties b/devices/robot_j6.properties
index d688634..86f954a 100644
--- a/devices/robot_j6.properties
+++ b/devices/robot_j6.properties
@@ -1,10 +1,10 @@
-#Fri Aug 24 14:56:42 CEST 2018
-maxValue=400.0
-minValue=-400.0
-offset=0.0
-precision=2
-resolution=0.1
-rotation=false
-scale=1.0
-sign_bit=0
-unit=deg
+#Fri Aug 24 14:56:42 CEST 2018
+maxValue=400.0
+minValue=-400.0
+offset=0.0
+precision=2
+resolution=0.1
+rotation=false
+scale=1.0
+sign_bit=0
+unit=deg
diff --git a/devices/robot_modbus.properties b/devices/robot_modbus.properties
index 31a13be..5f51544 100644
--- a/devices/robot_modbus.properties
+++ b/devices/robot_modbus.properties
@@ -1,8 +1,8 @@
-#Thu Jul 21 12:02:04 CEST 2016
-offsetReadAnalogInput=0
-offsetReadAnalogOutput=0
-offsetReadDigitalInput=0
-offsetReadDigitalOutput=0
-offsetWriteAnalogOutput=0
-offsetWriteDigitalOutput=0
-timeout=1000
+#Thu Jul 21 12:02:04 CEST 2016
+offsetReadAnalogInput=0
+offsetReadAnalogOutput=0
+offsetReadDigitalInput=0
+offsetReadDigitalOutput=0
+offsetWriteAnalogOutput=0
+offsetWriteDigitalOutput=0
+timeout=1000
diff --git a/devices/robot_rx.properties b/devices/robot_rx.properties
index df63f03..bc44a7f 100644
--- a/devices/robot_rx.properties
+++ b/devices/robot_rx.properties
@@ -1,10 +1,10 @@
-#Tue Jun 19 16:41:28 CEST 2018
-maxValue=180.0
-minValue=-180.0
-offset=0.0
-precision=2
-resolution=0.05
-rotation=true
-scale=1.0
-sign_bit=0
-unit=deg
+#Tue Jun 19 16:41:28 CEST 2018
+maxValue=180.0
+minValue=-180.0
+offset=0.0
+precision=2
+resolution=0.05
+rotation=true
+scale=1.0
+sign_bit=0
+unit=deg
diff --git a/devices/robot_ry.properties b/devices/robot_ry.properties
index a789ebf..da7bc27 100644
--- a/devices/robot_ry.properties
+++ b/devices/robot_ry.properties
@@ -1,10 +1,10 @@
-#Tue Jun 19 16:41:28 CEST 2018
-maxValue=180.0
-minValue=-180.0
-offset=0.0
-precision=-2
-resolution=0.05
-rotation=true
-scale=1.0
-sign_bit=0
-unit=deg
+#Tue Jun 19 16:41:28 CEST 2018
+maxValue=180.0
+minValue=-180.0
+offset=0.0
+precision=-2
+resolution=0.05
+rotation=true
+scale=1.0
+sign_bit=0
+unit=deg
diff --git a/devices/robot_rz.properties b/devices/robot_rz.properties
index 2b88035..852eba0 100644
--- a/devices/robot_rz.properties
+++ b/devices/robot_rz.properties
@@ -1,10 +1,10 @@
-#Tue Jun 19 16:41:28 CEST 2018
-maxValue=360.0
-minValue=-360.0
-offset=0.0
-precision=2
-resolution=0.1
-rotation=true
-scale=1.0
-sign_bit=0
-unit=deg
+#Tue Jun 19 16:41:28 CEST 2018
+maxValue=360.0
+minValue=-360.0
+offset=0.0
+precision=2
+resolution=0.1
+rotation=true
+scale=1.0
+sign_bit=0
+unit=deg
diff --git a/devices/robot_x.properties b/devices/robot_x.properties
index 5cdadcc..5c10107 100644
--- a/devices/robot_x.properties
+++ b/devices/robot_x.properties
@@ -1,10 +1,10 @@
-#Tue Jun 19 16:41:28 CEST 2018
-maxValue=1000.0
-minValue=-1000.0
-offset=0.0
-precision=2
-resolution=0.05
-rotation=false
-scale=1.0
-sign_bit=0
-unit=mm
+#Tue Jun 19 16:41:28 CEST 2018
+maxValue=1000.0
+minValue=-1000.0
+offset=0.0
+precision=2
+resolution=0.05
+rotation=false
+scale=1.0
+sign_bit=0
+unit=mm
diff --git a/devices/robot_y.properties b/devices/robot_y.properties
index eb8022e..ac371ea 100644
--- a/devices/robot_y.properties
+++ b/devices/robot_y.properties
@@ -1,10 +1,10 @@
-#Tue Jun 19 16:41:28 CEST 2018
-maxValue=1000.0
-minValue=-1000.0
-offset=0.0
-precision=2
-resolution=0.05
-rotation=false
-scale=1.0
-sign_bit=0
-unit=null
+#Tue Jun 19 16:41:28 CEST 2018
+maxValue=1000.0
+minValue=-1000.0
+offset=0.0
+precision=2
+resolution=0.05
+rotation=false
+scale=1.0
+sign_bit=0
+unit=null
diff --git a/devices/robot_z.properties b/devices/robot_z.properties
index eb8022e..ac371ea 100644
--- a/devices/robot_z.properties
+++ b/devices/robot_z.properties
@@ -1,10 +1,10 @@
-#Tue Jun 19 16:41:28 CEST 2018
-maxValue=1000.0
-minValue=-1000.0
-offset=0.0
-precision=2
-resolution=0.05
-rotation=false
-scale=1.0
-sign_bit=0
-unit=null
+#Tue Jun 19 16:41:28 CEST 2018
+maxValue=1000.0
+minValue=-1000.0
+offset=0.0
+precision=2
+resolution=0.05
+rotation=false
+scale=1.0
+sign_bit=0
+unit=null
diff --git a/devices/ry.properties b/devices/ry.properties
index f43c3d2..6a849f6 100644
--- a/devices/ry.properties
+++ b/devices/ry.properties
@@ -1,17 +1,17 @@
-#Fri Aug 10 15:47:14 CEST 2018
-defaultSpeed=50.0
-estbilizationDelay=0
-hasEnable=false
-homingType=None
-maxSpeed=NaN
-maxValue=0.0
-minSpeed=NaN
-minValue=0.0
-offset=0.0
-precision=3
-resolution=0.001
-rotation=false
-scale=1.0
-sign_bit=0
-startRetries=1
-unit=deg
+#Fri Aug 10 15:47:14 CEST 2018
+defaultSpeed=50.0
+estbilizationDelay=0
+hasEnable=false
+homingType=None
+maxSpeed=NaN
+maxValue=0.0
+minSpeed=NaN
+minValue=0.0
+offset=0.0
+precision=3
+resolution=0.001
+rotation=false
+scale=1.0
+sign_bit=0
+startRetries=1
+unit=deg
diff --git a/devices/smart_magnet.properties b/devices/smart_magnet.properties
index 18a705b..8f22f23 100644
--- a/devices/smart_magnet.properties
+++ b/devices/smart_magnet.properties
@@ -1,8 +1,8 @@
-#Mon Aug 31 09:09:24 CEST 2020
-reverseTime=0.2
-unmountCurrent=20.0
-holdingCurrent=50.0
-restingCurrent=30.0
-reverseCurrent=-10.0
-remanenceCurrent=-10.0
-mountCurrent=30.0
+#Mon Aug 31 09:09:24 CEST 2020
+reverseTime=0.2
+unmountCurrent=20.0
+holdingCurrent=50.0
+restingCurrent=30.0
+reverseCurrent=-10.0
+remanenceCurrent=-10.0
+mountCurrent=30.0
diff --git a/devices/smc_current.properties b/devices/smc_current.properties
index 9d9ba17..aaf6c33 100644
--- a/devices/smc_current.properties
+++ b/devices/smc_current.properties
@@ -1,9 +1,9 @@
-#Wed Jan 30 11:33:15 CET 2019
-maxValue=70.0
-minValue=-50.0
-offset=0.0
-precision=2
-resolution=NaN
-scale=0.003
-sign_bit=0
-unit=mA
+#Wed Jan 30 11:33:15 CET 2019
+maxValue=70.0
+minValue=-50.0
+offset=0.0
+precision=2
+resolution=NaN
+scale=0.003
+sign_bit=0
+unit=mA
diff --git a/devices/smc_current_rb.properties b/devices/smc_current_rb.properties
index 7709ada..994983b 100644
--- a/devices/smc_current_rb.properties
+++ b/devices/smc_current_rb.properties
@@ -1,6 +1,6 @@
-#Tue Jun 19 16:45:06 CEST 2018
-offset=0.0
-precision=2
-scale=0.003
-sign_bit=15
-unit=mA
+#Tue Jun 19 16:45:06 CEST 2018
+offset=0.0
+precision=2
+scale=0.003
+sign_bit=15
+unit=mA
diff --git a/devices/src1.properties b/devices/src1.properties
index a0b5d6d..9e4b7cf 100644
--- a/devices/src1.properties
+++ b/devices/src1.properties
@@ -1,24 +1,24 @@
-#Thu Sep 22 14:45:06 CEST 2016
-colormap=Temperature
-colormapAutomatic=true
-colormapMax=255.0
-colormapMin=0.0
-flipHorizontally=false
-flipVertically=false
-grayscale=false
-invert=false
-rescaleFactor=1.0
-rescaleOffset=0.0
-roiHeight=-1
-roiWidth=-1
-roiX=0
-roiY=0
-rotation=0.0
-rotationCrop=false
-scale=1.0
-spatialCalOffsetX=NaN
-spatialCalOffsetY=NaN
-spatialCalScaleX=NaN
-spatialCalScaleY=NaN
-spatialCalUnits=mm
-transpose=false
+#Thu Sep 22 14:45:06 CEST 2016
+colormap=Temperature
+colormapAutomatic=true
+colormapMax=255.0
+colormapMin=0.0
+flipHorizontally=false
+flipVertically=false
+grayscale=false
+invert=false
+rescaleFactor=1.0
+rescaleOffset=0.0
+roiHeight=-1
+roiWidth=-1
+roiX=0
+roiY=0
+rotation=0.0
+rotationCrop=false
+scale=1.0
+spatialCalOffsetX=NaN
+spatialCalOffsetY=NaN
+spatialCalScaleX=NaN
+spatialCalScaleY=NaN
+spatialCalUnits=mm
+transpose=false
diff --git a/devices/src2.properties b/devices/src2.properties
index 2bf8406..cca3c76 100644
--- a/devices/src2.properties
+++ b/devices/src2.properties
@@ -1,24 +1,24 @@
-#Thu Sep 22 14:45:06 CEST 2016
-colormap=Grayscale
-colormapAutomatic=true
-colormapMax=255.0
-colormapMin=0.0
-flipHorizontally=false
-flipVertically=false
-grayscale=false
-invert=false
-rescaleFactor=1.0
-rescaleOffset=0.0
-roiHeight=-1
-roiWidth=-1
-roiX=0
-roiY=0
-rotation=0.0
-rotationCrop=false
-scale=1.0
-spatialCalOffsetX=NaN
-spatialCalOffsetY=NaN
-spatialCalScaleX=NaN
-spatialCalScaleY=NaN
-spatialCalUnits=mm
-transpose=false
+#Thu Sep 22 14:45:06 CEST 2016
+colormap=Grayscale
+colormapAutomatic=true
+colormapMax=255.0
+colormapMin=0.0
+flipHorizontally=false
+flipVertically=false
+grayscale=false
+invert=false
+rescaleFactor=1.0
+rescaleOffset=0.0
+roiHeight=-1
+roiWidth=-1
+roiX=0
+roiY=0
+rotation=0.0
+rotationCrop=false
+scale=1.0
+spatialCalOffsetX=NaN
+spatialCalOffsetY=NaN
+spatialCalScaleX=NaN
+spatialCalScaleY=NaN
+spatialCalUnits=mm
+transpose=false
diff --git a/devices/temperature.properties b/devices/temperature.properties
index feb40c3..7528848 100644
--- a/devices/temperature.properties
+++ b/devices/temperature.properties
@@ -1,6 +1,6 @@
-#Tue Sep 08 12:55:58 CEST 2020
-unit=null
-offset=0.0
-precision=-1
-sign_bit=0
-scale=1.0
+#Tue Sep 08 12:55:58 CEST 2020
+unit=null
+offset=0.0
+precision=-1
+sign_bit=0
+scale=1.0
diff --git a/devices/th2e.properties b/devices/th2e.properties
index 8565b5e..772b674 100644
--- a/devices/th2e.properties
+++ b/devices/th2e.properties
@@ -1,8 +1,8 @@
-#Tue Sep 08 12:55:58 CEST 2020
-offsetWriteAnalogOutput=0
-offsetWriteDigitalOutput=0
-offsetReadAnalogOutput=0
-offsetReadDigitalInput=0
-offsetReadAnalogInput=0
-offsetReadDigitalOutput=0
-timeout=1000
+#Tue Sep 08 12:55:58 CEST 2020
+offsetWriteAnalogOutput=0
+offsetWriteDigitalOutput=0
+offsetReadAnalogOutput=0
+offsetReadDigitalInput=0
+offsetReadAnalogInput=0
+offsetReadDigitalOutput=0
+timeout=1000
diff --git a/devices/top_cam.properties b/devices/top_cam.properties
index 827552b..1f826cd 100644
--- a/devices/top_cam.properties
+++ b/devices/top_cam.properties
@@ -1,20 +1,20 @@
-#Thu Aug 09 11:46:12 CEST 2018
-flipHorizontally=false
-flipVertically=false
-grayscale=false
-invert=false
-rescaleFactor=1.0
-rescaleOffset=0.0
-roiHeight=-1
-roiWidth=-1
-roiX=0
-roiY=0
-rotation=0.0
-rotationCrop=false
-scale=1.0
-spatialCalOffsetX=NaN
-spatialCalOffsetY=NaN
-spatialCalScaleX=NaN
-spatialCalScaleY=NaN
-spatialCalUnits=mm
-transpose=false
+#Thu Aug 09 11:46:12 CEST 2018
+flipHorizontally=false
+flipVertically=false
+grayscale=false
+invert=false
+rescaleFactor=1.0
+rescaleOffset=0.0
+roiHeight=-1
+roiWidth=-1
+roiX=0
+roiY=0
+rotation=0.0
+rotationCrop=false
+scale=1.0
+spatialCalOffsetX=NaN
+spatialCalOffsetY=NaN
+spatialCalScaleX=NaN
+spatialCalScaleY=NaN
+spatialCalUnits=mm
+transpose=false
diff --git a/devices/ue.properties b/devices/ue.properties
index f241f62..ca0968a 100644
--- a/devices/ue.properties
+++ b/devices/ue.properties
@@ -1,6 +1,6 @@
-#Thu Aug 31 16:41:09 CEST 2017
-baudRate=9600
-dataBits=DB_8
-parity=None
-port=null
-stopBits=SB_1
+#Thu Aug 31 16:41:09 CEST 2017
+baudRate=9600
+dataBits=DB_8
+parity=None
+port=null
+stopBits=SB_1
diff --git a/devices/wago.properties b/devices/wago.properties
index f2650ea..170e99d 100644
--- a/devices/wago.properties
+++ b/devices/wago.properties
@@ -1,8 +1,8 @@
-#Wed Feb 28 16:27:51 CET 2018
-offsetReadAnalogInput=0
-offsetReadAnalogOutput=0x200
-offsetReadDigitalInput=0
-offsetReadDigitalOutput=0x200
-offsetWriteAnalogOutput=0
-offsetWriteDigitalOutput=0
-timeout=1000
+#Wed Feb 28 16:27:51 CET 2018
+offsetReadAnalogInput=0
+offsetReadAnalogOutput=0x200
+offsetReadDigitalInput=0
+offsetReadDigitalOutput=0x200
+offsetWriteAnalogOutput=0
+offsetWriteDigitalOutput=0
+timeout=1000
diff --git a/plugins/LaserUE.java b/plugins/LaserUE.java
index cb79550..579d317 100644
--- a/plugins/LaserUE.java
+++ b/plugins/LaserUE.java
@@ -1,90 +1,90 @@
-import ch.psi.pshell.device.Readable;
-import ch.psi.pshell.serial.SerialPortDevice;
-import ch.psi.pshell.serial.SerialPortDeviceConfig;
-import static ch.psi.utils.BitMask.*;
-import ch.psi.utils.Convert;
-import ch.psi.utils.State;
-import java.io.IOException;
-
-/*
- *
- */
-public class LaserUE extends SerialPortDevice {
-
- final Readable readable;
- final double range;
- final double offset;
-
- public LaserUE(String name, String port, double range, double offset) {
- super(name, port, 921600, SerialPortDeviceConfig.DataBits.DB_8, SerialPortDeviceConfig.StopBits.SB_1, SerialPortDeviceConfig.Parity.None);
- this.range = range;
- this.offset = offset;
- this.setMode(Mode.FullDuplex);
- readable = new Readable() {
- @Override
- public Object read() throws IOException, InterruptedException {
- return take();
- }
-
- @Override
- public String getName() {
- return LaserUE.this.getName() + "_readout";
- }
- };
- }
-
- @Override
- protected void doInitialize() throws IOException, InterruptedException {
- super.doInitialize();
- //TODO: Start DAQ in ILD1320: http://www.micro-epsilon.com/download/manuals/man--optoNCDT-1320--en.pdf
- setState(State.Ready);
- write("OUTPUT RS422\n\r");
- }
-
- public Readable getReadable() {
- return readable;
- }
-
- int value = 0;
- int count = 0;
-
- @Override
- protected void onByte(int rx) {
- int index = ((rx & BIT7) > 0) ? 2 : (((rx & BIT6) > 0) ? 1 : 0);
- if (count == index) {
- if (index == 0) {
- value = rx & 0x3F;
- count = 1;
- } else if (index == 1) {
- value = ((rx & 0x3F) << 6) + value;
- count = 2;
- } else if (index == 2) {
- value = ((rx & 0x0F) << 12) + value;
- //double val = ((double)value)/1000;
- double val = (0.01) * (102.0 * value / 65520.0 - 1) * range;
- if ((val <= 0.0) || (val > range)) {
- val = Double.NaN;
- } else {
- val+=offset;
- val = Convert.roundDouble(val, 3);
- }
- setCache(val);
- count = 0;
- } else {
- count = 0;
- }
- } else {
- count = 0;
- }
- }
-
- public static void main(String[] args) throws Exception {
- LaserUE l = new LaserUE("UE", "COM3", 50.0, 35.0);
- l.setMonitored(true);
- l.initialize();
-
- Thread.sleep(10000);
- l.close();
- }
-}
-
+import ch.psi.pshell.device.Readable;
+import ch.psi.pshell.serial.SerialPortDevice;
+import ch.psi.pshell.serial.SerialPortDeviceConfig;
+import static ch.psi.utils.BitMask.*;
+import ch.psi.utils.Convert;
+import ch.psi.utils.State;
+import java.io.IOException;
+
+/*
+ *
+ */
+public class LaserUE extends SerialPortDevice {
+
+ final Readable readable;
+ final double range;
+ final double offset;
+
+ public LaserUE(String name, String port, double range, double offset) {
+ super(name, port, 921600, SerialPortDeviceConfig.DataBits.DB_8, SerialPortDeviceConfig.StopBits.SB_1, SerialPortDeviceConfig.Parity.None);
+ this.range = range;
+ this.offset = offset;
+ this.setMode(Mode.FullDuplex);
+ readable = new Readable() {
+ @Override
+ public Object read() throws IOException, InterruptedException {
+ return take();
+ }
+
+ @Override
+ public String getName() {
+ return LaserUE.this.getName() + "_readout";
+ }
+ };
+ }
+
+ @Override
+ protected void doInitialize() throws IOException, InterruptedException {
+ super.doInitialize();
+ //TODO: Start DAQ in ILD1320: http://www.micro-epsilon.com/download/manuals/man--optoNCDT-1320--en.pdf
+ setState(State.Ready);
+ write("OUTPUT RS422\n\r");
+ }
+
+ public Readable getReadable() {
+ return readable;
+ }
+
+ int value = 0;
+ int count = 0;
+
+ @Override
+ protected void onByte(int rx) {
+ int index = ((rx & BIT7) > 0) ? 2 : (((rx & BIT6) > 0) ? 1 : 0);
+ if (count == index) {
+ if (index == 0) {
+ value = rx & 0x3F;
+ count = 1;
+ } else if (index == 1) {
+ value = ((rx & 0x3F) << 6) + value;
+ count = 2;
+ } else if (index == 2) {
+ value = ((rx & 0x0F) << 12) + value;
+ //double val = ((double)value)/1000;
+ double val = (0.01) * (102.0 * value / 65520.0 - 1) * range;
+ if ((val <= 0.0) || (val > range)) {
+ val = Double.NaN;
+ } else {
+ val+=offset;
+ val = Convert.roundDouble(val, 3);
+ }
+ setCache(val);
+ count = 0;
+ } else {
+ count = 0;
+ }
+ } else {
+ count = 0;
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ LaserUE l = new LaserUE("UE", "COM3", 50.0, 35.0);
+ l.setMonitored(true);
+ l.initialize();
+
+ Thread.sleep(10000);
+ l.close();
+ }
+}
+
diff --git a/plugins/MjpegSource2.java b/plugins/MjpegSource2.java
index 89ab9ef..a92ce88 100644
--- a/plugins/MjpegSource2.java
+++ b/plugins/MjpegSource2.java
@@ -1,149 +1,149 @@
-
-import ch.psi.pshell.imaging.SourceBase;
-import ch.psi.pshell.imaging.SourceConfig;
-import ch.psi.pshell.imaging.Utils;
-import java.awt.image.BufferedImage;
-import java.io.BufferedInputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.logging.Level;
-
-/**
- * Image source receive frames from a mjpeg server.
- */
-public class MjpegSource2 extends SourceBase {
-
- final String url;
- final boolean flushOnUpdate;
-
- public MjpegSource2(String name, String url) {
- this(name, url, false);
- }
-
- public MjpegSource2(String name, String url, boolean flushOnUpdate) {
- super(name, new SourceConfig());
- this.url = url;
- this.flushOnUpdate = flushOnUpdate;
- }
-
- InputStream stream;
-
- @Override
- protected void doInitialize() throws IOException, InterruptedException {
- super.doInitialize();
- URL aux = new URL(url);
- stream = aux.openStream();
- if (!stream.markSupported()) {
- stream = new BufferedInputStream(stream);
- }
- }
-
- Thread monitoredThread;
-
- @Override
- protected void doSetMonitored(boolean value) {
- if (value && (monitoredThread == null)) {
- monitoredThread = new Thread(() -> {
- try {
- while (true) {
- try {
- doUpdate();
- Thread.sleep(1);
- } catch (IOException ex) {
- getLogger().log(Level.FINE, null, ex);
- }
- }
- } catch (InterruptedException ex) {
- return;
- }
- });
- monitoredThread.setDaemon(true);
- monitoredThread.start();
- } else if (!value && (monitoredThread != null)) {
- monitoredThread.interrupt();
- monitoredThread = null;
- }
- }
-
- final byte[] START_OF_FRAME = {(byte) 0xFF, (byte) 0xD8};
- final byte[] END_OF_FRAME = {(byte) 0xFF, (byte) 0xD9};
- final int MAX_FRAME_SIZE = 512 * 1024;
-
- @Override
- protected void doUpdate() throws IOException, InterruptedException {
- byte[] data = null;
- if (stream != null) {
- if (flushOnUpdate) {
- flush();
- }
- try {
- data = readData();
- } catch (EOFException ex) {
- //Try to reopen stream
- doInitialize();
- data = readData();
- }
- }
- if (data == null) {
- pushImage(null);
- } else {
- BufferedImage img = Utils.newImage(data);
- pushImage(img);
- }
- }
- byte[] readData() throws IOException {
- if (stream != null) {
- stream.mark(MAX_FRAME_SIZE);
- int startOfFrame = waitBytes(START_OF_FRAME) - START_OF_FRAME.length;
- if (startOfFrame >= 0) {
- int endOfFrame = waitBytes(END_OF_FRAME);
- if (endOfFrame >= 0) {
- stream.reset();
- stream.skip(startOfFrame);
- int length = endOfFrame ;//- END_OF_FRAME.length ;
- byte[] data = new byte[length];
- stream.read(data, 0, length);
- return data;
- }
- }
- }
- return null;
- }
-
- int waitBytes(byte[] data) throws IOException {
- int index = 0;
- int dataPos = 0;
- while (true) {
- int ret = stream.read();
- if (ret < 0) {
- throw new EOFException();
- }
- byte value = (byte) ret;
- if (value == data[dataPos]) {
- dataPos++;
- if (dataPos == data.length) {
- return (index + 1);
- }
- } else {
- dataPos = 0;
- }
- index++;
- if (index >= MAX_FRAME_SIZE) {
- return -1;
- }
- }
- }
-
- public void flush() throws IOException {
- //stream.skip(stream.available());
- //TODO: Skipping won't make the current image to be displayed
- stream.close();
- stream = new URL(url).openStream();
- if (!stream.markSupported()) {
- stream = new BufferedInputStream(stream);
- }
- }
-
-}
+
+import ch.psi.pshell.imaging.SourceBase;
+import ch.psi.pshell.imaging.SourceConfig;
+import ch.psi.pshell.imaging.Utils;
+import java.awt.image.BufferedImage;
+import java.io.BufferedInputStream;
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.logging.Level;
+
+/**
+ * Image source receive frames from a mjpeg server.
+ */
+public class MjpegSource2 extends SourceBase {
+
+ final String url;
+ final boolean flushOnUpdate;
+
+ public MjpegSource2(String name, String url) {
+ this(name, url, false);
+ }
+
+ public MjpegSource2(String name, String url, boolean flushOnUpdate) {
+ super(name, new SourceConfig());
+ this.url = url;
+ this.flushOnUpdate = flushOnUpdate;
+ }
+
+ InputStream stream;
+
+ @Override
+ protected void doInitialize() throws IOException, InterruptedException {
+ super.doInitialize();
+ URL aux = new URL(url);
+ stream = aux.openStream();
+ if (!stream.markSupported()) {
+ stream = new BufferedInputStream(stream);
+ }
+ }
+
+ Thread monitoredThread;
+
+ @Override
+ protected void doSetMonitored(boolean value) {
+ if (value && (monitoredThread == null)) {
+ monitoredThread = new Thread(() -> {
+ try {
+ while (true) {
+ try {
+ doUpdate();
+ Thread.sleep(1);
+ } catch (IOException ex) {
+ getLogger().log(Level.FINE, null, ex);
+ }
+ }
+ } catch (InterruptedException ex) {
+ return;
+ }
+ });
+ monitoredThread.setDaemon(true);
+ monitoredThread.start();
+ } else if (!value && (monitoredThread != null)) {
+ monitoredThread.interrupt();
+ monitoredThread = null;
+ }
+ }
+
+ final byte[] START_OF_FRAME = {(byte) 0xFF, (byte) 0xD8};
+ final byte[] END_OF_FRAME = {(byte) 0xFF, (byte) 0xD9};
+ final int MAX_FRAME_SIZE = 512 * 1024;
+
+ @Override
+ protected void doUpdate() throws IOException, InterruptedException {
+ byte[] data = null;
+ if (stream != null) {
+ if (flushOnUpdate) {
+ flush();
+ }
+ try {
+ data = readData();
+ } catch (EOFException ex) {
+ //Try to reopen stream
+ doInitialize();
+ data = readData();
+ }
+ }
+ if (data == null) {
+ pushImage(null);
+ } else {
+ BufferedImage img = Utils.newImage(data);
+ pushImage(img);
+ }
+ }
+ byte[] readData() throws IOException {
+ if (stream != null) {
+ stream.mark(MAX_FRAME_SIZE);
+ int startOfFrame = waitBytes(START_OF_FRAME) - START_OF_FRAME.length;
+ if (startOfFrame >= 0) {
+ int endOfFrame = waitBytes(END_OF_FRAME);
+ if (endOfFrame >= 0) {
+ stream.reset();
+ stream.skip(startOfFrame);
+ int length = endOfFrame ;//- END_OF_FRAME.length ;
+ byte[] data = new byte[length];
+ stream.read(data, 0, length);
+ return data;
+ }
+ }
+ }
+ return null;
+ }
+
+ int waitBytes(byte[] data) throws IOException {
+ int index = 0;
+ int dataPos = 0;
+ while (true) {
+ int ret = stream.read();
+ if (ret < 0) {
+ throw new EOFException();
+ }
+ byte value = (byte) ret;
+ if (value == data[dataPos]) {
+ dataPos++;
+ if (dataPos == data.length) {
+ return (index + 1);
+ }
+ } else {
+ dataPos = 0;
+ }
+ index++;
+ if (index >= MAX_FRAME_SIZE) {
+ return -1;
+ }
+ }
+ }
+
+ public void flush() throws IOException {
+ //stream.skip(stream.available());
+ //TODO: Skipping won't make the current image to be displayed
+ stream.close();
+ stream = new URL(url).openStream();
+ if (!stream.markSupported()) {
+ stream = new BufferedInputStream(stream);
+ }
+ }
+
+}
diff --git a/plugins/SmartMagnetConfig.java b/plugins/SmartMagnetConfig.java
index 2c6213c..7351ab4 100644
--- a/plugins/SmartMagnetConfig.java
+++ b/plugins/SmartMagnetConfig.java
@@ -1,14 +1,14 @@
-
-import ch.psi.pshell.device.DeviceConfig;
-
-/**
- *
- */
-public class SmartMagnetConfig extends DeviceConfig{
- public double holdingCurrent;
- public double restingCurrent;
- public double mountCurrent;
- public double unmountCurrent;
- public double remanenceCurrent;
-
-}
+
+import ch.psi.pshell.device.DeviceConfig;
+
+/**
+ *
+ */
+public class SmartMagnetConfig extends DeviceConfig{
+ public double holdingCurrent;
+ public double restingCurrent;
+ public double mountCurrent;
+ public double unmountCurrent;
+ public double remanenceCurrent;
+
+}
diff --git a/plugins/TestZMQ.java b/plugins/TestZMQ.java
index cec2c40..ae4cbac 100644
--- a/plugins/TestZMQ.java
+++ b/plugins/TestZMQ.java
@@ -1,26 +1,26 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
-
-/**
- *
- * @author gac-S_Changer
- */
-public class TestZMQ {
- public static void main(String[] args) {
- String server = "raspberrypi:5556";
- org.zeromq.ZMQ.Context context = org.zeromq.ZMQ.context(1);
- org.zeromq.ZMQ.Socket subscriber = context.socket(org.zeromq.ZMQ.SUB);
- subscriber.connect("tcp://" + server);
- subscriber.subscribe("Status".getBytes());
- while (!Thread.currentThread().isInterrupted()) {
- String type = subscriber.recvStr();
- String contents = subscriber.recvStr();
- System.out.println(type + " : " + contents);
- }
- subscriber.close();
- context.term();
- }
-}
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ *
+ * @author gac-S_Changer
+ */
+public class TestZMQ {
+ public static void main(String[] args) {
+ String server = "raspberrypi:5556";
+ org.zeromq.ZMQ.Context context = org.zeromq.ZMQ.context(1);
+ org.zeromq.ZMQ.Socket subscriber = context.socket(org.zeromq.ZMQ.SUB);
+ subscriber.connect("tcp://" + server);
+ subscriber.subscribe("Status".getBytes());
+ while (!Thread.currentThread().isInterrupted()) {
+ String type = subscriber.recvStr();
+ String contents = subscriber.recvStr();
+ System.out.println(type + " : " + contents);
+ }
+ subscriber.close();
+ context.term();
+ }
+}
diff --git a/plugins/gui.java b/plugins/gui.java
index abeb59b..fe17ab2 100644
--- a/plugins/gui.java
+++ b/plugins/gui.java
@@ -1,96 +1,96 @@
-/*
- * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved.
- */
-
-import ch.psi.pshell.ui.Panel;
-import ch.psi.utils.State;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- *
- */
-public class gui extends Panel {
-
- public gui() {
- initComponents();
- }
-
- //Overridable callbacks
- @Override
- public void onInitialize(int runCount) {
-
- }
-
- @Override
- public void onStateChange(State state, State former) {
-
- }
-
- @Override
- public void onExecutedFile(String fileName, Object result) {
- }
-
-
- //Callback to perform update - in event thread
- @Override
- protected void doUpdate() {
- }
-
- @SuppressWarnings("unchecked")
- // //GEN-BEGIN:initComponents
- private void initComponents() {
-
- jButton1 = new javax.swing.JButton();
- renderer1 = new ch.psi.pshell.imaging.Renderer();
- linePlotJFree1 = new ch.psi.pshell.plot.LinePlotJFree();
-
- jButton1.setText("Abort");
- jButton1.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- jButton1ActionPerformed(evt);
- }
- });
-
- javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
- this.setLayout(layout);
- layout.setHorizontalGroup(
- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(renderer1, javax.swing.GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addGap(82, 82, 82))
- .addGroup(layout.createSequentialGroup()
- .addGap(51, 51, 51)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jButton1)
- .addComponent(linePlotJFree1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
- .addContainerGap(250, Short.MAX_VALUE))
- );
- layout.setVerticalGroup(
- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addGap(24, 24, 24)
- .addComponent(jButton1)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(renderer1, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 20, Short.MAX_VALUE)
- .addComponent(linePlotJFree1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addContainerGap())
- );
- }// //GEN-END:initComponents
-
- private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
- try {
- abort();
- } catch (InterruptedException ex) {
- Logger.getLogger(gui.class.getName()).log(Level.SEVERE, null, ex);
- }
- }//GEN-LAST:event_jButton1ActionPerformed
-
- // Variables declaration - do not modify//GEN-BEGIN:variables
- private javax.swing.JButton jButton1;
- private ch.psi.pshell.plot.LinePlotJFree linePlotJFree1;
- private ch.psi.pshell.imaging.Renderer renderer1;
- // End of variables declaration//GEN-END:variables
-}
+/*
+ * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved.
+ */
+
+import ch.psi.pshell.ui.Panel;
+import ch.psi.utils.State;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *
+ */
+public class gui extends Panel {
+
+ public gui() {
+ initComponents();
+ }
+
+ //Overridable callbacks
+ @Override
+ public void onInitialize(int runCount) {
+
+ }
+
+ @Override
+ public void onStateChange(State state, State former) {
+
+ }
+
+ @Override
+ public void onExecutedFile(String fileName, Object result) {
+ }
+
+
+ //Callback to perform update - in event thread
+ @Override
+ protected void doUpdate() {
+ }
+
+ @SuppressWarnings("unchecked")
+ // //GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ jButton1 = new javax.swing.JButton();
+ renderer1 = new ch.psi.pshell.imaging.Renderer();
+ linePlotJFree1 = new ch.psi.pshell.plot.LinePlotJFree();
+
+ jButton1.setText("Abort");
+ jButton1.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jButton1ActionPerformed(evt);
+ }
+ });
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
+ this.setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(renderer1, javax.swing.GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGap(82, 82, 82))
+ .addGroup(layout.createSequentialGroup()
+ .addGap(51, 51, 51)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jButton1)
+ .addComponent(linePlotJFree1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addContainerGap(250, Short.MAX_VALUE))
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addGap(24, 24, 24)
+ .addComponent(jButton1)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(renderer1, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 20, Short.MAX_VALUE)
+ .addComponent(linePlotJFree1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap())
+ );
+ }// //GEN-END:initComponents
+
+ private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
+ try {
+ abort();
+ } catch (InterruptedException ex) {
+ Logger.getLogger(gui.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }//GEN-LAST:event_jButton1ActionPerformed
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JButton jButton1;
+ private ch.psi.pshell.plot.LinePlotJFree linePlotJFree1;
+ private ch.psi.pshell.imaging.Renderer renderer1;
+ // End of variables declaration//GEN-END:variables
+}
diff --git a/script/local.groovy b/script/local.groovy
index 6cd1527..eef7106 100644
--- a/script/local.groovy
+++ b/script/local.groovy
@@ -1,3 +1,3 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Deployment specific global definitions - executed after startup.groovy
-///////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Deployment specific global definitions - executed after startup.groovy
+///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/script/local.js b/script/local.js
index 17db863..e2eeaad 100644
--- a/script/local.js
+++ b/script/local.js
@@ -1,4 +1,4 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Deployment specific global definitions - executed after startup.js
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Deployment specific global definitions - executed after startup.js
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
diff --git a/script/local.py b/script/local.py
index 488cc6a..e2cb1ea 100644
--- a/script/local.py
+++ b/script/local.py
@@ -1,442 +1,442 @@
-###################################################################################################
-# Deployment specific global definitions - executed after startup.py
-###################################################################################################
-import traceback
-from ch.psi.pshell.serial import TcpDevice
-from ch.psi.pshell.modbus import ModbusTCP
-import ch.psi.mxsc.Controller as Controller
-import ch.psi.pshell.core.Nameable as Nameable
-import ch.psi.utils.Chrono as Chrono
-import ch.psi.mxsc.Controller as Controller
-
-
-
-run("setup/Layout")
+###################################################################################################
+# Deployment specific global definitions - executed after startup.py
+###################################################################################################
+import traceback
+from ch.psi.pshell.serial import TcpDevice
+from ch.psi.pshell.modbus import ModbusTCP
+import ch.psi.mxsc.Controller as Controller
+import ch.psi.pshell.core.Nameable as Nameable
+import ch.psi.utils.Chrono as Chrono
+import ch.psi.mxsc.Controller as Controller
+
+
+
+run("setup/Layout")
run("data/reports")
-
-
-
-###################################################################################################
-# Configuration
-###################################################################################################
-
-IMAGING_ENABLED_PREFERENCE = "imaging_enabled"
-PUCK_TYPES_PREFERENCE = "puck_types"
-BARCODE_READER_SCAN_PUCKS = "barcode_reader_scan_pucks"
-ROOM_TEMPERATURE_ENABLED_PREFERENCE = "room_temperature_enabled"
-BEAMLINE_STATUS_ENABLED_PREFERENCE = "beamline_status_enabled"
-VALVE_CONTROL_ENABLED_PREFERENCE = "valve_control"
-
-def is_imaging_enabled():
- setting = get_setting(IMAGING_ENABLED_PREFERENCE)
- return not (str(setting).lower() == 'false')
-
-def set_imaging_enabled(value):
- set_setting(IMAGING_ENABLED_PREFERENCE, (True if value else False) )
-
-def assert_imaging_enabled():
- if is_imaging_enabled() == False:
- raise Exception ("Imaging is disabled")
-
-#"unipuck", "minispine" or "mixed"
-def set_puck_types(value):
- set_setting(PUCK_TYPES_PREFERENCE, True if value else False )
-
-def get_puck_types():
- setting = get_setting(PUCK_TYPES_PREFERENCE)
- if setting == "unipuck" or setting == "minispine":
- return setting
- return "mixed"
-
-
-def is_barcode_reader_scan_pucks():
- setting = get_setting(BARCODE_READER_SCAN_PUCKS)
- return False if setting is None else setting.lower() == "true"
-
-def set_barcode_reader_scan_pucks(value):
- set_setting(BARCODE_READER_SCAN_PUCKS, True if value else False )
-
-def is_valve_controlled():
- setting = get_setting(VALVE_CONTROL_ENABLED_PREFERENCE)
- return False if setting is None else setting.lower() == "true"
-
-def set_valve_controlled(value):
- set_setting(VALVE_CONTROL_ENABLED_PREFERENCE, True if value else False )
-
-def reset_mounted_sample_position():
- set_setting("mounted_sample_position", None)
-
-
-def get_puck_barcode_reader():
- if is_barcode_reader_scan_pucks():
- return barcode_reader
- else:
- return barcode_reader_puck
-
-#In order to apply current config
-set_imaging_enabled(is_imaging_enabled())
-set_puck_types(get_puck_types())
-set_barcode_reader_scan_pucks(is_barcode_reader_scan_pucks())
-set_valve_controlled(is_valve_controlled())
-
-
-force_dry_mount_count = get_setting("force_dry_mount_count")
-if force_dry_mount_count is None:
- set_setting("force_dry_mount_count", 0)
-
-force_dry_timeout = get_setting("force_dry_timeout")
-if force_dry_timeout is None:
- set_setting("force_dry_timeout", 0)
-
+
+
+
+###################################################################################################
+# Configuration
+###################################################################################################
+
+IMAGING_ENABLED_PREFERENCE = "imaging_enabled"
+PUCK_TYPES_PREFERENCE = "puck_types"
+BARCODE_READER_SCAN_PUCKS = "barcode_reader_scan_pucks"
+ROOM_TEMPERATURE_ENABLED_PREFERENCE = "room_temperature_enabled"
+BEAMLINE_STATUS_ENABLED_PREFERENCE = "beamline_status_enabled"
+VALVE_CONTROL_ENABLED_PREFERENCE = "valve_control"
+
+def is_imaging_enabled():
+ setting = get_setting(IMAGING_ENABLED_PREFERENCE)
+ return not (str(setting).lower() == 'false')
+
+def set_imaging_enabled(value):
+ set_setting(IMAGING_ENABLED_PREFERENCE, (True if value else False) )
+
+def assert_imaging_enabled():
+ if is_imaging_enabled() == False:
+ raise Exception ("Imaging is disabled")
+
+#"unipuck", "minispine" or "mixed"
+def set_puck_types(value):
+ set_setting(PUCK_TYPES_PREFERENCE, True if value else False )
+
+def get_puck_types():
+ setting = get_setting(PUCK_TYPES_PREFERENCE)
+ if setting == "unipuck" or setting == "minispine":
+ return setting
+ return "mixed"
+
+
+def is_barcode_reader_scan_pucks():
+ setting = get_setting(BARCODE_READER_SCAN_PUCKS)
+ return False if setting is None else setting.lower() == "true"
+
+def set_barcode_reader_scan_pucks(value):
+ set_setting(BARCODE_READER_SCAN_PUCKS, True if value else False )
+
+def is_valve_controlled():
+ setting = get_setting(VALVE_CONTROL_ENABLED_PREFERENCE)
+ return False if setting is None else setting.lower() == "true"
+
+def set_valve_controlled(value):
+ set_setting(VALVE_CONTROL_ENABLED_PREFERENCE, True if value else False )
+
+def reset_mounted_sample_position():
+ set_setting("mounted_sample_position", None)
+
+
+def get_puck_barcode_reader():
+ if is_barcode_reader_scan_pucks():
+ return barcode_reader
+ else:
+ return barcode_reader_puck
+
+#In order to apply current config
+set_imaging_enabled(is_imaging_enabled())
+set_puck_types(get_puck_types())
+set_barcode_reader_scan_pucks(is_barcode_reader_scan_pucks())
+set_valve_controlled(is_valve_controlled())
+
+
+force_dry_mount_count = get_setting("force_dry_mount_count")
+if force_dry_mount_count is None:
+ set_setting("force_dry_mount_count", 0)
+
+force_dry_timeout = get_setting("force_dry_timeout")
+if force_dry_timeout is None:
+ set_setting("force_dry_timeout", 0)
+
cold_position_timeout = get_setting("cold_position_timeout")
if cold_position_timeout is None:
set_setting("cold_position_timeout", 0)
-
-
-def is_room_temperature_enabled():
- setting = get_setting(ROOM_TEMPERATURE_ENABLED_PREFERENCE)
- return str(setting).lower() == 'true'
-
-set_setting(ROOM_TEMPERATURE_ENABLED_PREFERENCE, is_room_temperature_enabled())
-
-
-def is_beamline_status_enabled():
- setting = get_setting(BEAMLINE_STATUS_ENABLED_PREFERENCE)
- return str(setting).lower() == 'true'
-
-set_setting(BEAMLINE_STATUS_ENABLED_PREFERENCE, is_beamline_status_enabled())
-
-###################################################################################################
-# Scripted devices and pseudo-devices
-###################################################################################################
-
-for script in ["devices/RobotSC", "devices/Wago", "devices/BarcodeReader", "devices/LaserDistance", \
- "devices/LedCtrl", "devices/SmartMagnet", "devices/HexiPosi", "devices/Gonio"]:
- try:
+
+
+def is_room_temperature_enabled():
+ setting = get_setting(ROOM_TEMPERATURE_ENABLED_PREFERENCE)
+ return str(setting).lower() == 'true'
+
+set_setting(ROOM_TEMPERATURE_ENABLED_PREFERENCE, is_room_temperature_enabled())
+
+
+def is_beamline_status_enabled():
+ setting = get_setting(BEAMLINE_STATUS_ENABLED_PREFERENCE)
+ return str(setting).lower() == 'true'
+
+set_setting(BEAMLINE_STATUS_ENABLED_PREFERENCE, is_beamline_status_enabled())
+
+###################################################################################################
+# Scripted devices and pseudo-devices
+###################################################################################################
+
+for script in ["devices/RobotSC", "devices/Wago", "devices/BarcodeReader", "devices/LaserDistance", \
+ "devices/LedCtrl", "devices/SmartMagnet", "devices/HexiPosi", "devices/Gonio"]:
+ try:
print "Running: ", script
- run(script)
- except:
- print >> sys.stderr, traceback.format_exc()
-
-#if is_imaging_enabled():
-if get_device("img") is not None:
- add_device(img.getContrast(), force = True)
- add_device(img.getCamera(), force = True)
-
-
-###################################################################################################
-# Utility modules
-###################################################################################################
-
-run("data/samples")
-run("data/pucks")
-run("motion/tools")
-run("motion/mount")
-run("motion/unmount")
-run("motion/get_dewar")
-run("motion/put_dewar")
-run("motion/get_gonio")
-run("motion/put_gonio")
-run("motion/move_dewar")
-run("motion/move_gonio")
-run("motion/move_heater")
-run("motion/move_home")
-run("motion/move_park")
-run("motion/move_cold")
-run("motion/move_scanner")
-run("motion/move_aux")
-run("motion/get_aux")
-run("motion/put_aux")
-run("motion/dry")
-run("motion/trash")
-run("motion/homing_hexiposi")
-run("motion/calibrate_tool")
-run("motion/scan_pin")
-run("motion/robot_recover")
-run("motion/recover")
-run("tools/Math")
-if is_imaging_enabled():
- run("imgproc/Utils")
-
-def system_check(robot_move=True):
- if not air_pressure_ok.read():
- raise Exception("Air pressure is not ok")
- if not n2_pressure_ok.read():
- raise Exception("N2 pressure is not ok")
- hexiposi.assert_in_known_position()
-
- if robot_move:
- if not feedback_local_safety.read():
- raise Exception("Local safety not released")
- auto = not is_manual_mode()
- if auto:
- if not feedback_psys_safety.read():
- raise Exception("Psys safety not released")
- if not guiding_tool_park.read():
- raise Exception("Guiding tool 1 not parked")
+ run(script)
+ except:
+ print >> sys.stderr, traceback.format_exc()
+
+#if is_imaging_enabled():
+if get_device("img") is not None:
+ add_device(img.getContrast(), force = True)
+ add_device(img.getCamera(), force = True)
+
+
+###################################################################################################
+# Utility modules
+###################################################################################################
+
+run("data/samples")
+run("data/pucks")
+run("motion/tools")
+run("motion/mount")
+run("motion/unmount")
+run("motion/get_dewar")
+run("motion/put_dewar")
+run("motion/get_gonio")
+run("motion/put_gonio")
+run("motion/move_dewar")
+run("motion/move_gonio")
+run("motion/move_heater")
+run("motion/move_home")
+run("motion/move_park")
+run("motion/move_cold")
+run("motion/move_scanner")
+run("motion/move_aux")
+run("motion/get_aux")
+run("motion/put_aux")
+run("motion/dry")
+run("motion/trash")
+run("motion/homing_hexiposi")
+run("motion/calibrate_tool")
+run("motion/scan_pin")
+run("motion/robot_recover")
+run("motion/recover")
+run("tools/Math")
+if is_imaging_enabled():
+ run("imgproc/Utils")
+
+def system_check(robot_move=True):
+ if not air_pressure_ok.read():
+ raise Exception("Air pressure is not ok")
+ if not n2_pressure_ok.read():
+ raise Exception("N2 pressure is not ok")
+ hexiposi.assert_in_known_position()
+
+ if robot_move:
+ if not feedback_local_safety.read():
+ raise Exception("Local safety not released")
+ auto = not is_manual_mode()
+ if auto:
+ if not feedback_psys_safety.read():
+ raise Exception("Psys safety not released")
+ if not guiding_tool_park.read():
+ raise Exception("Guiding tool 1 not parked")
if not guiding_tool_park_2.read():
raise Exception("Guiding tool 2 not parked")
-
-def system_check_msg():
- try:
- system_check(True)
- return "Ok"
- except:
- return sys.exc_info()[1]
-
-def get_puck_dev(segment, puck):
- if type(segment) is int:
- segment = chr( ord('A') + (segment-1))
-
- return Controller.getInstance().getPuck(str(segment).upper() + str(puck))
-
-def get_puck_elect_detection(segment, puck):
- return str(get_puck_dev(segment, puck).detection)
-
-def get_puck_img_detection(segment, puck):
- return str(Controller.getInstance().getPuck(str(segment).upper() + str(puck)).imageDetection)
-
-def assert_puck_detected(segment, puck):
- if (segment == AUX_SEGMENT) and (puck == 1):
- return
- if get_puck_elect_detection(segment, puck) != "Present":
- raise Exception ("Puck " + str(segment).upper() + str(puck) + " not present")
-
-
-def start_puck_detection():
- run("tools/RestartPuckDetection")
-
-def check_puck_detection():
- return run("tools/CheckPuckDetection")
-
-def stop_puck_detection():
- run("tools/StopPuckDetection")
-
-
-
-def get_detected_pucks():
- ret = []
- for i in range(30):
- p = BasePlate.getPucks()[i]
- if (str(p.getDetection()) == "Present"):
- ret.append(str(p.getName()))
- return ret
-
-def get_pucks_info():
- ret = []
- for i in range(30):
- p = BasePlate.getPucks()[i]
- name = p.getName()
- det = str(p.getDetection())
- barcode = "" if p.getId() is None else p.getId()
-
- ret.append({"puckAddress": name, "puckState": det, "puckBarcode":barcode})
- return json.dumps(ret)
-
-
-###################################################################################################
-# Device initialization
-###################################################################################################
-
-try:
- set_heater(False)
- set_air_stream(False)
+
+def system_check_msg():
+ try:
+ system_check(True)
+ return "Ok"
+ except:
+ return sys.exc_info()[1]
+
+def get_puck_dev(segment, puck):
+ if type(segment) is int:
+ segment = chr( ord('A') + (segment-1))
+
+ return Controller.getInstance().getPuck(str(segment).upper() + str(puck))
+
+def get_puck_elect_detection(segment, puck):
+ return str(get_puck_dev(segment, puck).detection)
+
+def get_puck_img_detection(segment, puck):
+ return str(Controller.getInstance().getPuck(str(segment).upper() + str(puck)).imageDetection)
+
+def assert_puck_detected(segment, puck):
+ if (segment == AUX_SEGMENT) and (puck == 1):
+ return
+ if get_puck_elect_detection(segment, puck) != "Present":
+ raise Exception ("Puck " + str(segment).upper() + str(puck) + " not present")
+
+
+def start_puck_detection():
+ run("tools/RestartPuckDetection")
+
+def check_puck_detection():
+ return run("tools/CheckPuckDetection")
+
+def stop_puck_detection():
+ run("tools/StopPuckDetection")
+
+
+
+def get_detected_pucks():
+ ret = []
+ for i in range(30):
+ p = BasePlate.getPucks()[i]
+ if (str(p.getDetection()) == "Present"):
+ ret.append(str(p.getName()))
+ return ret
+
+def get_pucks_info():
+ ret = []
+ for i in range(30):
+ p = BasePlate.getPucks()[i]
+ name = p.getName()
+ det = str(p.getDetection())
+ barcode = "" if p.getId() is None else p.getId()
+
+ ret.append({"puckAddress": name, "puckState": det, "puckBarcode":barcode})
+ return json.dumps(ret)
+
+
+###################################################################################################
+# Device initialization
+###################################################################################################
+
+try:
+ set_heater(False)
+ set_air_stream(False)
set_pin_cleaner(False)
-except:
- print >> sys.stderr, traceback.format_exc()
-
-
-try:
- release_local_safety.write(False)
- release_psys_safety.write(False)
-except:
- print >> sys.stderr, traceback.format_exc()
-
-try:
+except:
+ print >> sys.stderr, traceback.format_exc()
+
+
+try:
+ release_local_safety.write(False)
+ release_psys_safety.write(False)
+except:
+ print >> sys.stderr, traceback.format_exc()
+
+try:
hexiposi.set_offset(16.4)
hexiposi.polling=500
-except:
- print >> sys.stderr, traceback.format_exc()
-
-try:
- robot.setPolling(DEFAULT_ROBOT_POLLING)
- robot.set_tool(TOOL_DEFAULT)
- robot.set_frame(FRAME_DEFAULT)
- robot.set_motors_enabled(True)
- robot.set_joint_motors_enabled(True)
-except:
- print >> sys.stderr, traceback.format_exc()
-
-if is_imaging_enabled():
- try:
- import ch.psi.pshell.device.Camera as Camera
- #img.camera.setColorMode(Camera.ColorMode.Mono)
- #img.camera.setDataType(Camera.DataType.UInt8)
- img.camera.setGrabMode(Camera.GrabMode.Continuous)
- img.camera.setTriggerMode(Camera.TriggerMode.Fixed_Rate)
- img.camera.setExposure(25.00)
- img.camera.setAcquirePeriod(200.00)
- img.camera.setGain(0.0)
- #img.camera.setROI(200, 0,1200,1200)
- """
- img.camera.setROI(300, 200,1000,1000)
- img.config.rotation=17
- img.config.rotationCrop=True
- img.config.roiX,img.config.roiY, img.config.roiWidth,img.config.roiHeight = 50,50,900,900
- """
- img.camera.setROI(int(get_setting("roi_x")), int(get_setting("roi_y")), int(get_setting("roi_w")), int(get_setting("roi_h")))
-
- img.camera.stop()
- img.camera.start()
- except:
- print >> sys.stderr, traceback.format_exc()
-
-#TODO: The Smart Magnet keeps moving sample if detecting is enabled
-# Detection keeps disabled unless during moount/unmount
-try:
- smart_magnet.set_supress(True)
-except:
- print >> sys.stderr, traceback.format_exc()
-
-#gripper_cam.paused = True
-###################################################################################################
-# Device monitoring
-###################################################################################################
-
-DEWAR_LEVEL_RT = 5.0
-is_room_temperature = False
-
-def is_room_temp():
- return is_room_temperature
-
-
-class DewarLevelListener (DeviceListener):
- def onValueChanged(self, device, value, former):
- global is_room_temperature
- if value is not None:
- is_room_temperature = value <= DEWAR_LEVEL_RT
-dewar_level_listener = DewarLevelListener()
-
-for l in dewar_level.listeners:
- #if isinstance(l, DewarLevelListener): #Class changes...
- if Nameable.getShortClassName(l.getClass()) == "DewarLevelListener":
- dewar_level.removeListener(l)
-
-dewar_level.addListener(dewar_level_listener)
-dewar_level_listener.onValueChanged(dewar_level, dewar_level.take(), None)
-
-
-
-
-class HexiposiListener (DeviceListener):
- def onValueChanging(self, device, value, former):
- robot.assert_cleared()
-
-hexiposi_listener = HexiposiListener()
-hexiposi.addListener(hexiposi_listener)
-
-###################################################################################################
-# Global variables & application state
-###################################################################################################
-
-
-context = get_context()
-
-cover_detection_debug = False
-
-in_mount_position = False
-
-
-def assert_mount_position():
- print "Source: ", get_exec_pars().source
- if not in_mount_position and get_exec_pars().source == CommandSource.server :
- raise Exception("Not in mount position")
-
+except:
+ print >> sys.stderr, traceback.format_exc()
-def is_puck_loading():
+try:
+ robot.setPolling(DEFAULT_ROBOT_POLLING)
+ robot.set_tool(TOOL_DEFAULT)
+ robot.set_frame(FRAME_DEFAULT)
+ robot.set_motors_enabled(True)
+ robot.set_joint_motors_enabled(True)
+except:
+ print >> sys.stderr, traceback.format_exc()
+
+if is_imaging_enabled():
+ try:
+ import ch.psi.pshell.device.Camera as Camera
+ #img.camera.setColorMode(Camera.ColorMode.Mono)
+ #img.camera.setDataType(Camera.DataType.UInt8)
+ img.camera.setGrabMode(Camera.GrabMode.Continuous)
+ img.camera.setTriggerMode(Camera.TriggerMode.Fixed_Rate)
+ img.camera.setExposure(25.00)
+ img.camera.setAcquirePeriod(200.00)
+ img.camera.setGain(0.0)
+ #img.camera.setROI(200, 0,1200,1200)
+ """
+ img.camera.setROI(300, 200,1000,1000)
+ img.config.rotation=17
+ img.config.rotationCrop=True
+ img.config.roiX,img.config.roiY, img.config.roiWidth,img.config.roiHeight = 50,50,900,900
+ """
+ img.camera.setROI(int(get_setting("roi_x")), int(get_setting("roi_y")), int(get_setting("roi_w")), int(get_setting("roi_h")))
+
+ img.camera.stop()
+ img.camera.start()
+ except:
+ print >> sys.stderr, traceback.format_exc()
+
+#TODO: The Smart Magnet keeps moving sample if detecting is enabled
+# Detection keeps disabled unless during moount/unmount
+try:
+ smart_magnet.set_supress(True)
+except:
+ print >> sys.stderr, traceback.format_exc()
+
+#gripper_cam.paused = True
+###################################################################################################
+# Device monitoring
+###################################################################################################
+
+DEWAR_LEVEL_RT = 5.0
+is_room_temperature = False
+
+def is_room_temp():
+ return is_room_temperature
+
+
+class DewarLevelListener (DeviceListener):
+ def onValueChanged(self, device, value, former):
+ global is_room_temperature
+ if value is not None:
+ is_room_temperature = value <= DEWAR_LEVEL_RT
+dewar_level_listener = DewarLevelListener()
+
+for l in dewar_level.listeners:
+ #if isinstance(l, DewarLevelListener): #Class changes...
+ if Nameable.getShortClassName(l.getClass()) == "DewarLevelListener":
+ dewar_level.removeListener(l)
+
+dewar_level.addListener(dewar_level_listener)
+dewar_level_listener.onValueChanged(dewar_level, dewar_level.take(), None)
+
+
+
+
+class HexiposiListener (DeviceListener):
+ def onValueChanging(self, device, value, former):
+ robot.assert_cleared()
+
+hexiposi_listener = HexiposiListener()
+hexiposi.addListener(hexiposi_listener)
+
+###################################################################################################
+# Global variables & application state
+###################################################################################################
+
+
+context = get_context()
+
+cover_detection_debug = False
+
+in_mount_position = False
+
+
+def assert_mount_position():
+ print "Source: ", get_exec_pars().source
+ if not in_mount_position and get_exec_pars().source == CommandSource.server :
+ raise Exception("Not in mount position")
+
+
+def is_puck_loading():
guiding_tools_parked = guiding_tool_park.read() and guiding_tool_park_2.read()
- return robot.state == State.Ready and robot.take()["pos"] == 'pPark' and \
- feedback_psys_safety.take() == False and \
+ return robot.state == State.Ready and robot.take()["pos"] == 'pPark' and \
+ feedback_psys_safety.take() == False and \
not guiding_tools_parked
-
-def set_pin_offset(val):
- if abs(val) >5:
- raise Exception("Invalid pin offset: " + str(val))
- try:
- set_setting("pin_offset",float(val))
- except:
- log("Error setting pin offset: " + str(sys.exc_info()[1]), False)
-
-def get_pin_offset():
- try:
- ret = float(get_setting("pin_offset"))
- if abs(ret) >5:
- raise Exception("Invalid configured pin offset: " + str(ret))
- return ret
- except:
- log("Error getting pin offset: " + str(sys.exc_info()[1]), False)
- return 0.0
-
-
-def set_pin_angle_offset(val):
- if (abs(val) > 180.0) or (abs(val) < -180.0):
- raise Exception("Invalid pin angle offset: " + str(val))
- try:
- set_setting("pin_angle_offset",float(val))
- except:
- log("Error setting pin angle offset: " + str(sys.exc_info()[1]), False)
-
-def get_pin_angle_offset():
- try:
- ret = float(get_setting("pin_angle_offset"))
- if (abs(ret) > 180.0) or (abs(ret) < -180.0):
- raise Exception("Invalid configured pin angle offset: " + str(ret))
- return ret
- except:
- log("Error getting pin angle offset: " + str(sys.exc_info()[1]), False)
- return 0.0
-
-def is_force_dry():
- try:
- dry_mount_counter = int(get_setting("dry_mount_counter"))
- except:
- dry_mount_counter = 0
-
- try:
- dry_timespan = time.time() - float( get_setting("dry_timestamp"))
- except:
- dry_timespan = 3600
-
- try:
- force_dry_mount_count = int(get_setting("force_dry_mount_count"))
- if force_dry_mount_count>0 and dry_mount_counter>=force_dry_mount_count:
- return True
- except:
- pass
-
- try:
- force_dry_timeout = float(get_setting("force_dry_timeout"))
- if force_dry_timeout>0 and dry_timespan>=force_dry_timeout:
- return True
- except:
- pass
+
+def set_pin_offset(val):
+ if abs(val) >5:
+ raise Exception("Invalid pin offset: " + str(val))
+ try:
+ set_setting("pin_offset",float(val))
+ except:
+ log("Error setting pin offset: " + str(sys.exc_info()[1]), False)
+
+def get_pin_offset():
+ try:
+ ret = float(get_setting("pin_offset"))
+ if abs(ret) >5:
+ raise Exception("Invalid configured pin offset: " + str(ret))
+ return ret
+ except:
+ log("Error getting pin offset: " + str(sys.exc_info()[1]), False)
+ return 0.0
+
+
+def set_pin_angle_offset(val):
+ if (abs(val) > 180.0) or (abs(val) < -180.0):
+ raise Exception("Invalid pin angle offset: " + str(val))
+ try:
+ set_setting("pin_angle_offset",float(val))
+ except:
+ log("Error setting pin angle offset: " + str(sys.exc_info()[1]), False)
+
+def get_pin_angle_offset():
+ try:
+ ret = float(get_setting("pin_angle_offset"))
+ if (abs(ret) > 180.0) or (abs(ret) < -180.0):
+ raise Exception("Invalid configured pin angle offset: " + str(ret))
+ return ret
+ except:
+ log("Error getting pin angle offset: " + str(sys.exc_info()[1]), False)
+ return 0.0
+
+def is_force_dry():
+ try:
+ dry_mount_counter = int(get_setting("dry_mount_counter"))
+ except:
+ dry_mount_counter = 0
+
+ try:
+ dry_timespan = time.time() - float( get_setting("dry_timestamp"))
+ except:
+ dry_timespan = 3600
+
+ try:
+ force_dry_mount_count = int(get_setting("force_dry_mount_count"))
+ if force_dry_mount_count>0 and dry_mount_counter>=force_dry_mount_count:
+ return True
+ except:
+ pass
+
+ try:
+ force_dry_timeout = float(get_setting("force_dry_timeout"))
+ if force_dry_timeout>0 and dry_timespan>=force_dry_timeout:
+ return True
+ except:
+ pass
return False
def assert_detector_safe():
if detector_cleared.read() == False:
raise Exception ("Detector not in safe position: move it back")
-
+
def onPuckLoadingChange(puck_loading):
set_led_state(puck_loading)
- #pass
-
-update()
-add_device(Controller.getInstance().basePlate, True)
-restore_samples_info()
-
-
-print "Initialization complete"
+ #pass
+
+update()
+add_device(Controller.getInstance().basePlate, True)
+restore_samples_info()
+
+
+print "Initialization complete"
\ No newline at end of file
diff --git a/script/motion/mount.py b/script/motion/mount.py
index eb4149e..6626cbf 100644
--- a/script/motion/mount.py
+++ b/script/motion/mount.py
@@ -168,12 +168,16 @@ def mount(segment, puck, sample, force=False, read_dm=False, auto_unmount=False)
if mount_sample_detected == False:
raise Exception("No pin detected on gonio")
+ keep_gripper_warm = was_cold and is_aux
- if is_force_dry():
+ if is_force_dry() or keep_gripper_warm:
print "Auto dry after setting magnet to default current"
smart_magnet.set_default_current()
log("Starting auto dry", False)
- set_exec_pars(then = "dry()")
+ if keep_gripper_warm:
+ set_exec_pars(then = "dry(wait_cold = -1)")
+ else:
+ set_exec_pars(then = "dry()")
print "setting mounted sample to %s%d-%d" % (segment, puck, sample)
set_setting("mounted_sample_position", get_sample_name(segment, puck, sample))