This commit is contained in:
gac-s_changer
2023-04-28 11:29:07 +02:00
parent da12278cc3
commit 509cfd333d
19 changed files with 388 additions and 350 deletions
+1 -1
View File
@@ -38,7 +38,7 @@ gripperID_LSB=ch.psi.pshell.modbus.DigitalInput|wago 11||1000|
gripperID_=ch.psi.pshell.modbus.DigitalInput|wago 12||1000|
gripperID_MSB=ch.psi.pshell.modbus.DigitalInput|wago 13||1000|
RT_gripper_open=ch.psi.pshell.modbus.DigitalInput|wago 14||1000|
RT_gripper_close\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020RT_gripper_close=ch.psi.pshell.modbus.DigitalInput|wago 15||1000|
RT_gripper_close=ch.psi.pshell.modbus.DigitalInput|wago 15||1000|
RT_sample_detection=ch.psi.pshell.modbus.DigitalInput|wago 16||1000|
smc_magnet_status=ch.psi.pshell.modbus.DigitalInput|wago 17||1000|
smc_mounted_1=ch.psi.pshell.modbus.DigitalInput|wago 18||1000|
+1 -1
View File
@@ -1,4 +1,4 @@
#Wed Apr 26 11:00:26 CEST 2023
#Fri Apr 28 11:26:20 CEST 2023
dry_mount_counter=0
room_temperature_enabled=true
pin_offset=0.0
+58 -21
View File
@@ -565,27 +565,32 @@
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="buttonMovePark" linkSize="10" alignment="0" min="-2" pref="114" max="-2" attributes="0"/>
<Component id="buttonMoveAux" linkSize="10" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="buttonMoveCold" linkSize="10" alignment="0" min="-2" pref="114" max="-2" attributes="0"/>
<Component id="buttonMoveHeater" linkSize="10" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="buttonGetGonio" linkSize="10" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="buttonGetDewar" linkSize="10" alignment="0" min="-2" pref="114" max="-2" attributes="0"/>
<Component id="buttonGetAux" linkSize="10" alignment="0" min="-2" pref="114" max="-2" attributes="0"/>
<Component id="buttonGetRT" linkSize="10" alignment="0" min="-2" pref="114" max="-2" attributes="0"/>
<Component id="buttonMoveRT" linkSize="10" alignment="0" min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" max="-2" attributes="0">
<Component id="buttonMovePark" linkSize="10" alignment="0" pref="114" max="32767" attributes="0"/>
<Component id="buttonMoveAux" linkSize="10" alignment="0" max="32767" attributes="0"/>
<Component id="buttonMoveCold" linkSize="10" alignment="0" pref="114" max="32767" attributes="0"/>
<Component id="buttonMoveHeater" linkSize="10" alignment="0" max="32767" attributes="0"/>
<Component id="buttonGetGonio" linkSize="10" alignment="0" max="32767" attributes="0"/>
<Component id="buttonGetDewar" linkSize="10" alignment="0" pref="114" max="32767" attributes="0"/>
<Component id="buttonGetAux" linkSize="10" alignment="0" pref="114" max="32767" attributes="0"/>
<Component id="buttonGetRT" linkSize="10" alignment="0" pref="114" max="32767" attributes="0"/>
<Component id="buttonMoveRT" linkSize="10" alignment="0" max="32767" attributes="0"/>
<Component id="buttonOpenLid" alignment="0" max="32767" attributes="0"/>
</Group>
<EmptySpace pref="64" max="32767" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="buttonPutDewar" linkSize="10" alignment="0" min="-2" pref="101" max="-2" attributes="0"/>
<Component id="buttonPutGonio" linkSize="10" alignment="0" min="-2" pref="101" max="-2" attributes="0"/>
<Component id="buttonMoveGonio" linkSize="10" alignment="0" min="-2" pref="101" max="-2" attributes="0"/>
<Component id="buttonMoveHome" linkSize="10" alignment="0" min="-2" pref="101" max="-2" attributes="0"/>
<Component id="buttonMoveDewar" linkSize="10" alignment="0" min="-2" pref="101" max="-2" attributes="0"/>
<Component id="buttonMoveScanner" linkSize="10" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="buttonPutAux" linkSize="10" min="-2" pref="101" max="-2" attributes="0"/>
<Component id="buttonPutRT" linkSize="10" min="-2" pref="101" max="-2" attributes="0"/>
<Group type="103" alignment="1" groupAlignment="0" attributes="0">
<Component id="buttonPutDewar" linkSize="10" alignment="0" min="-2" pref="101" max="-2" attributes="0"/>
<Component id="buttonPutGonio" linkSize="10" alignment="0" min="-2" pref="101" max="-2" attributes="0"/>
<Component id="buttonMoveHome" linkSize="10" alignment="0" min="-2" pref="101" max="-2" attributes="0"/>
<Component id="buttonMoveDewar" linkSize="10" alignment="0" min="-2" pref="101" max="-2" attributes="0"/>
<Component id="buttonMoveScanner" linkSize="10" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="buttonPutAux" linkSize="10" min="-2" pref="101" max="-2" attributes="0"/>
<Component id="buttonPutRT" linkSize="10" min="-2" pref="101" max="-2" attributes="0"/>
</Group>
<Component id="buttonMoveGonio" linkSize="10" alignment="1" min="-2" pref="101" max="-2" attributes="0"/>
<Component id="buttonMoveGonioWait" alignment="1" min="-2" pref="114" max="-2" attributes="0"/>
<Component id="buttonCloseLid" alignment="1" min="-2" pref="114" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
@@ -635,7 +640,15 @@
<Component id="buttonMoveScanner" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
<Component id="buttonMoveRT" min="-2" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="buttonMoveRT" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="buttonMoveGonioWait" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="buttonOpenLid" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="buttonCloseLid" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
@@ -778,6 +791,30 @@
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="buttonMoveRTActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JButton" name="buttonMoveGonioWait">
<Properties>
<Property name="text" type="java.lang.String" value="Move G Wait"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="buttonMoveGonioWaitActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JButton" name="buttonOpenLid">
<Properties>
<Property name="text" type="java.lang.String" value="Open Lid"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="buttonOpenLidActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JButton" name="buttonCloseLid">
<Properties>
<Property name="text" type="java.lang.String" value="Close Lid"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="buttonCloseLidActionPerformed"/>
</Events>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="pnDatabase">
@@ -795,7 +832,7 @@
<Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="buttonClearSampleDb" linkSize="12" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="32767" attributes="0"/>
<EmptySpace type="separate" pref="68" max="32767" attributes="0"/>
<Component id="buttonResetPuckIds" linkSize="12" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
+70 -21
View File
@@ -185,6 +185,9 @@ public class Commands extends Panel {
buttonGetRT = new javax.swing.JButton();
buttonPutRT = new javax.swing.JButton();
buttonMoveRT = new javax.swing.JButton();
buttonMoveGonioWait = new javax.swing.JButton();
buttonOpenLid = new javax.swing.JButton();
buttonCloseLid = new javax.swing.JButton();
pnDatabase = new javax.swing.JPanel();
buttonClearSampleDb = new javax.swing.JButton();
buttonResetPuckIds = new javax.swing.JButton();
@@ -626,32 +629,57 @@ public class Commands extends Panel {
}
});
buttonMoveGonioWait.setText("Move G Wait");
buttonMoveGonioWait.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonMoveGonioWaitActionPerformed(evt);
}
});
buttonOpenLid.setText("Open Lid");
buttonOpenLid.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonOpenLidActionPerformed(evt);
}
});
buttonCloseLid.setText("Close Lid");
buttonCloseLid.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonCloseLidActionPerformed(evt);
}
});
javax.swing.GroupLayout pnLowLevelLayout = new javax.swing.GroupLayout(pnLowLevel);
pnLowLevel.setLayout(pnLowLevelLayout);
pnLowLevelLayout.setHorizontalGroup(
pnLowLevelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnLowLevelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(pnLowLevelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(buttonMovePark, javax.swing.GroupLayout.DEFAULT_SIZE, 114, Short.MAX_VALUE)
.addComponent(buttonMoveAux, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(buttonMoveCold, javax.swing.GroupLayout.DEFAULT_SIZE, 114, Short.MAX_VALUE)
.addComponent(buttonMoveHeater, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(buttonGetGonio, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(buttonGetDewar, javax.swing.GroupLayout.DEFAULT_SIZE, 114, Short.MAX_VALUE)
.addComponent(buttonGetAux, javax.swing.GroupLayout.DEFAULT_SIZE, 114, Short.MAX_VALUE)
.addComponent(buttonGetRT, javax.swing.GroupLayout.DEFAULT_SIZE, 114, Short.MAX_VALUE)
.addComponent(buttonMoveRT, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(buttonOpenLid, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(pnLowLevelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(buttonMovePark, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonMoveAux)
.addComponent(buttonMoveCold, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonMoveHeater)
.addComponent(buttonGetGonio)
.addComponent(buttonGetDewar, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonGetAux, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonGetRT, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonMoveRT))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 64, Short.MAX_VALUE)
.addGroup(pnLowLevelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(buttonPutDewar, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonPutGonio, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonMoveGonio, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonMoveHome, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonMoveDewar, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonMoveScanner)
.addComponent(buttonPutAux, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonPutRT, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnLowLevelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(buttonPutDewar, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonPutGonio, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonMoveHome, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonMoveDewar, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonMoveScanner)
.addComponent(buttonPutAux, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonPutRT, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(buttonMoveGonio, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonMoveGonioWait, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonCloseLid, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
@@ -693,7 +721,13 @@ public class Commands extends Panel {
.addComponent(buttonMoveHeater)
.addComponent(buttonMoveScanner))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(buttonMoveRT)
.addGroup(pnLowLevelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(buttonMoveRT)
.addComponent(buttonMoveGonioWait))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(pnLowLevelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(buttonOpenLid)
.addComponent(buttonCloseLid))
.addContainerGap())
);
@@ -720,7 +754,7 @@ public class Commands extends Panel {
.addGroup(pnDatabaseLayout.createSequentialGroup()
.addContainerGap()
.addComponent(buttonClearSampleDb)
.addGap(18, 18, Short.MAX_VALUE)
.addGap(18, 68, Short.MAX_VALUE)
.addComponent(buttonResetPuckIds)
.addContainerGap())
);
@@ -979,8 +1013,21 @@ public class Commands extends Panel {
onTimer();
}//GEN-LAST:event_buttonGripperDetectActionPerformed
private void buttonMoveGonioWaitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonMoveGonioWaitActionPerformed
execute("move_gonio_wait()");
}//GEN-LAST:event_buttonMoveGonioWaitActionPerformed
private void buttonOpenLidActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonOpenLidActionPerformed
execute("open_lid()");
}//GEN-LAST:event_buttonOpenLidActionPerformed
private void buttonCloseLidActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonCloseLidActionPerformed
execute("close_lid()");
}//GEN-LAST:event_buttonCloseLidActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton buttonClearSampleDb;
private javax.swing.JButton buttonCloseLid;
private javax.swing.JButton buttonDry;
private javax.swing.JButton buttonEnableAll;
private javax.swing.JButton buttonGetAux;
@@ -994,11 +1041,13 @@ public class Commands extends Panel {
private javax.swing.JButton buttonMoveCold;
private javax.swing.JButton buttonMoveDewar;
private javax.swing.JButton buttonMoveGonio;
private javax.swing.JButton buttonMoveGonioWait;
private javax.swing.JButton buttonMoveHeater;
private javax.swing.JButton buttonMoveHome;
private javax.swing.JButton buttonMovePark;
private javax.swing.JButton buttonMoveRT;
private javax.swing.JButton buttonMoveScanner;
private javax.swing.JButton buttonOpenLid;
private javax.swing.JButton buttonPutAux;
private javax.swing.JButton buttonPutDewar;
private javax.swing.JButton buttonPutGonio;
Binary file not shown.
+60 -180
View File
@@ -1,7 +1,3 @@
TOOL_CALIBRATION = "tCalib"
TOOL_SUNA= "tSuna"
TOOL_DEFAULT= TOOL_SUNA
FRAME_TABLE = "fTable"
DESC_FAST = "mFast"
@@ -11,7 +7,6 @@ DESC_DEFAULT = DESC_FAST
AUX_SEGMENT = "X"
RT_SEGMENT = "R"
COLD_SEGMENTS = "ABCDEF"
DEFAULT_ROBOT_POLLING = 500
TASK_WAIT_ROBOT_POLLING = 50
@@ -22,17 +17,17 @@ run("devices/RobotTCP")
simulation = False
joint_forces = False
class RobotSC(RobotTCP):
def __init__(self, name, server, timeout = 1000, retries = 1):
RobotTCP.__init__(self, name, server, timeout, retries)
self.set_tasks(["getDewar", "putDewar", "putGonio", "getGonio", "recover", "mvDewar", "mvCold", "mvPark", "mvGonio","mvHeater", "mvScanner","mvHome", "mvAux","mvRT","getAux","putAux"])
self.set_known_points(["pPark", "pGonio", "pDewar", "pGonioG", "pScan", "pHeater", "pHeat", "pHeatB","pHe", "pHome", "pCold", "pAux", "pRT"])
RobotTCP.__init__(self, name, server, timeout, retries)
self.set_tasks([ "mvGonio","putGonio", "getGonio", "recover", "mvPark", "mvGonioW","mvHome", "mvRT", "mvAux" "getRT", "putRT","getAux","putAux", "mvScanner", "openLid", "closeLid"])
self.set_known_points(["pPark", "pGonio", "pGonioG","pHome", "pRTHome","pGonio", "pAux", "pScan"])
self.setPolling(DEFAULT_ROBOT_POLLING)
self.last_command_timestamp = None
self.last_command_position = None
self.ongoing_task = None
#self.gripper_open_value = False
#self.setSimulated()
def wait_async_motion(self):
@@ -44,29 +39,20 @@ class RobotSC(RobotTCP):
self.last_command_timestamp = time.time()
self.ongoing_task = None
def move_dewar_async(self):
self.start_task('mvDewar')
self.ongoing_task = ("dewar", self.assert_dewar)
def move_rt_async(self):
self.start_task('mvRT')
self.ongoing_task = ("rt", self.assert_rt)
def move_dewar(self):
#self.start_task('mvDewar')
def move_rt(self):
#self.start_task('mvRT')
#self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
#self.assert_dewar()
self.move_dewar_async()
self.wait_async_motion()
self.move_rt_async()
self.wait_async_motion()
def move_cold_async(self):
self.start_task('mvCold')
self.ongoing_task = ("cold", self.assert_cold)
def move_cold(self):
#self.start_task('mvCold')
#self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
#self.assert_cold()
self.move_cold_async()
self.wait_async_motion()
def move_home_async(self):
self.start_task('moveHome')
self.start_task('mvHome')
self.ongoing_task = ("home", self.assert_home)
def move_home(self):
@@ -76,33 +62,28 @@ class RobotSC(RobotTCP):
#self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
#self.assert_home()
def get_dewar(self, segment, puck, sample, mounting_in_same_segment=False):
def get_rt(self, segment, puck, sample, mounting_in_same_segment=False):
segment = self.toSegmentNumber(segment)
self.start_task('getDewar',segment, puck, sample, is_room_temp(), mounting_in_same_segment)
self.start_task('getRT',segment, sample)
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
if not mounting_in_same_segment:
self.assert_dewar()
self.last_command_position = "dewar"
self.assert_rt()
self.last_command_position = "rt"
self.last_command_timestamp = time.time()
def put_dewar(self, segment, puck, sample, mounting_in_same_segment=False):
def put_rt(self, segment, puck, sample, mounting_in_same_segment=False):
segment = self.toSegmentNumber(segment)
self.assert_dewar()
self.start_task('putDewar',segment, puck, sample, is_room_temp(), mounting_in_same_segment)
self.assert_rt()
self.start_task('putRT',segment, sample)
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
#self.assert_dewar()
if not mounting_in_same_segment:
self.assert_cold()
self.last_command_position = "dewar"
#self.assert_rt()
self.last_command_position = "rt"
self.last_command_timestamp = time.time()
def put_gonio(self):
pin_offset = get_pin_offset()
pin_angle_offset = get_pin_angle_offset()
print "Pin offset = " + str(pin_offset)
if is_valve_controlled():
self.assert_gonio()
open_valve(10.0)
self.start_task('putGonio', pin_offset)
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
self.assert_gonio()
@@ -112,15 +93,10 @@ class RobotSC(RobotTCP):
self.last_command_timestamp = time.time()
def get_gonio(self):
pin_offset = get_pin_offset()
if is_valve_controlled():
self.assert_gonio()
open_valve(10.0)
pin_offset = get_pin_offset()
self.start_task('getGonio', pin_offset)
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
self.assert_gonio()
if is_valve_controlled():
close_valve()
self.last_command_position = "gonio"
self.last_command_timestamp = time.time()
@@ -139,22 +115,7 @@ class RobotSC(RobotTCP):
self.assert_aux()
self.last_command_position = "aux"
self.last_command_timestamp = time.time()
def get_rt(self, puck, sample):
self.assert_rt()
self.start_task('getRT', puck, sample)
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
self.assert_rt()
self.last_command_position = "rt"
self.last_command_timestamp = time.time()
def put_rt(self, puck, sample):
self.assert_rt()
self.start_task('putRT',puck, sample)
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
self.assert_rt()
self.last_command_position = "rt"
self.last_command_timestamp = time.time()
def move_scanner(self):
self.start_task('mvScanner')
@@ -164,7 +125,7 @@ class RobotSC(RobotTCP):
self.last_command_timestamp = time.time()
def move_laser(self):
self.start_task('moveScanner')
self.start_task('mvScanner')
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
self.assert_laser()
self.last_command_position = "scanner"
@@ -187,6 +148,13 @@ class RobotSC(RobotTCP):
#self.assert_gonio()
def move_gonio_wait(self):
self.start_task('mvGonioW')
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
self.assert_gonio_wait()
self.last_command_position = "gonio_wait"
self.last_command_timestamp = time.time()
def move_park_async(self):
self.start_task('mvPark')
self.ongoing_task = ("park", self.assert_park)
@@ -198,17 +166,6 @@ class RobotSC(RobotTCP):
#self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
#self.assert_park()
def move_heater(self, speed=-1, to_bottom=True):
self.start_task('mvHeater', speed, to_bottom)
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
if to_bottom:
self.assert_heater_bottom()
else:
self.assert_heater()
self.last_command_position = "heater"
self.last_command_timestamp = time.time()
def robot_recover(self):
self.start_task('recover')
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
@@ -227,19 +184,22 @@ class RobotSC(RobotTCP):
#self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
#self.assert_rt()
def get_calibration_tool(self):
self.start_task('getCalTool')
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
self.assert_scanner()
self.last_command_position = "scanner"
self.last_command_timestamp = time.time()
def put_calibration_tool(self):
self.start_task('putCalTool')
def open_lid(self, segment):
segment = self.toSegmentNumber(segment)
self.start_task('openLid', segment)
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
self.assert_scanner()
self.assert_rt()
self.last_command_position = "open_lid"
self.last_command_timestamp = time.time()
def close_lid(self, segment):
segment = self.toSegmentNumber(segment)
self.start_task('closeLid', segment)
self.wait_task_finished(TASK_WAIT_ROBOT_POLLING)
self.assert_rt()
self.last_command_position = "close_lid"
self.last_command_timestamp = time.time()
def toSegmentNumber(self, segment):
if is_string(segment):
@@ -250,21 +210,11 @@ class RobotSC(RobotTCP):
def on_event(self,ev):
#print "EVT: " + ev
pass
def on_change_working_mode(self, working_mode):
if get_device("hexiposi") is not None:
hexiposi.moved = True #Force image processing on first sample
def doUpdate(self):
#start = time.time()
RobotTCP.doUpdate(self)
global simulation
if not simulation:
if joint_forces:
if self.state != State.Offline:
self.get_joint_forces()
for dev in [jf1, jf2, jf3, jf4,jf5, jf6, jfc]:
dev.update()
#print time.time() -start
def start_task(self, program, *args, **kwargs):
#TODO: Check safe position
@@ -276,8 +226,9 @@ class RobotSC(RobotTCP):
def gripper_has_sample(self):
"""checks gripper switches for presence of sample"""
hasSample, toolOpen = self.eval_bool("diToolHasSample"), self.eval_bool("diToolOpen")
return (not toolOpen) and hasSample
return RT_sample_detection.read()
#hasSample, toolOpen = self.eval_bool("diToolHasSample"), self.eval_bool("diToolOpen")
#return (not toolOpen) and hasSample
def set_remote_mode(self):
@@ -287,31 +238,17 @@ class RobotSC(RobotTCP):
robot.set_profile("default")
def is_park(self):
return self.is_in_point("pPark")
return self.is_in_point("pPark")
def is_cold(self):
return self.is_in_point("pCold")
def is_gonio_wait(self):
return self.is_in_point("pGonioW")
def is_home(self):
return self.is_in_point("pHome")
def is_dewar(self):
return self.is_in_point("pDewar")
def is_heater(self):
return self.is_in_point("pHeat")
def is_heater_home(self):
return self.is_in_point("pHeater")
def is_heater_bottom(self):
return self.is_in_point("pHeatB")
def is_gonio(self):
return self.is_in_point("pGonio")
def is_helium(self):
return self.is_in_point("pHe")
def is_scanner(self):
return self.is_in_point("pScan")
@@ -320,7 +257,7 @@ class RobotSC(RobotTCP):
return self.is_in_point("pAux")
def is_rt(self):
return self.is_in_point("pRT")
return self.is_in_point("pRTHome")
#def is_scan_stop(self):
# return self.is_in_point("pScanStop")
@@ -329,33 +266,18 @@ class RobotSC(RobotTCP):
#return self.is_home() or self.is_park() or self.is_dewar() or self.is_dewar_home()
return self.get_current_point() is not None
def assert_heater_home(self):
self.assert_in_point("pHeater")
def assert_cold(self):
self.assert_in_point("pCold")
def assert_heater(self):
self.assert_in_point("pHeat")
def assert_heater_bottom(self):
self.assert_in_point("pHeatB")
def assert_park(self):
self.assert_in_point("pPark")
def assert_gonio_wait(self):
self.assert_in_point("pGonio")
def assert_home(self):
self.assert_in_point("pHome")
def assert_dewar(self):
self.assert_in_point("pDewar")
def assert_gonio(self):
self.assert_in_point("pGonio")
def assert_helium(self):
self.assert_in_point("pHe")
def assert_scanner(self):
self.assert_in_point("pScan")
@@ -363,11 +285,7 @@ class RobotSC(RobotTCP):
self.assert_in_point("pAux")
def assert_rt(self):
self.assert_in_point("pRT")
def assert_p1(self):
self.assert_in_point("p1")
self.assert_in_point("pRTHome")
def assert_cleared(self):
if not self.is_cleared():
@@ -379,10 +297,6 @@ class RobotSC(RobotTCP):
if simulation:
add_device(RobotSC("robot","localhost:1000"),force = True)
else:
#add_device(RobotSC("robot", "129.129.243.120:1000"), force = True)
#add_device(RobotSC("robot", "pcp068129.psi.ch:1000"), force = True)
#add_device(RobotSC("robot", "saresb-cons-06.psi.ch:1000"), force = True)
#Old IP from Bernina# add_device(RobotSC("robot", "129.129.243.90:1000"), force = True)
add_device(RobotSC("robot", "129.129.244.40:1000"), force = True)
@@ -394,37 +308,3 @@ update_robot_tool()
robot.get_current_point() #TODO: REMOVE WHEN CURRENT POINT REPORTED BY POLLING MESSAGE
class jf1(ReadonlyRegisterBase):
def doRead(self):
return None if robot.joint_forces == None else robot.joint_forces[0]
class jf2(ReadonlyRegisterBase):
def doRead(self):
return None if robot.joint_forces == None else robot.joint_forces[1]
class jf3(ReadonlyRegisterBase):
def doRead(self):
return None if robot.joint_forces == None else robot.joint_forces[2]
class jf4(ReadonlyRegisterBase):
def doRead(self):
return None if robot.joint_forces == None else robot.joint_forces[3]
class jf5(ReadonlyRegisterBase):
def doRead(self):
return None if robot.joint_forces == None else robot.joint_forces[4]
class jf6(ReadonlyRegisterBase):
def doRead(self):
return None if robot.joint_forces == None else robot.joint_forces[5]
class jfc(ReadonlyRegisterBase):
def doRead(self):
if robot.joint_forces == None:
return float('NaN')
if robot.powered == False:
return float('NaN')
return (robot.joint_forces[1]+74)/4 + (robot.joint_forces[2]+30)/4 + (robot.joint_forces[4]-0.8)/0.2
if joint_forces:
add_device(jf1(), force = True)
add_device(jf2(), force = True)
add_device(jf3(), force = True)
add_device(jf4(), force = True)
add_device(jf5(), force = True)
add_device(jf6(), force = True)
add_device(jfc(), force = True)
+27 -21
View File
@@ -50,6 +50,7 @@ class RobotTCP(TcpDevice, Stoppable):
self.default_speed = 100
self.latency = 0
self.last_msg_timestamp = 0
self.gripper_open_value = True
self.task_start_retries = 3
self.exception_on_task_start_failure = True #Tasks may start and be finished when checked
@@ -391,11 +392,11 @@ class RobotTCP(TcpDevice, Stoppable):
def reset_motion(self, joint=None, timeout=None):
#TODO: in new robot robot.resetMotion() is freezing controller
#self.evaluate("resetMotion()" if (joint is None) else ("resetMotion(" + joint + ")"))
if joint is None:
self.execute('reset', timeout=timeout)
else:
self.execute('reset', str(joint), timeout=timeout)
self.evaluate("resetMotion()" if (joint is None) else ("resetMotion(" + joint + ")"))
#if joint is None:
# self.execute('reset', timeout=timeout)
#else:
# self.execute('reset', str(joint), timeout=timeout)
def is_empty(self):
self.empty = self.eval_bool("isEmpty()")
@@ -431,8 +432,8 @@ class RobotTCP(TcpDevice, Stoppable):
joint_or_point = "tcp_p"
#TODO: in new robot movel and movej is freezing controller
#ret = self.eval_int("movej(" + joint_or_point + ", " + tool + ", " + desc +")")
ret = int(self.execute('movej',joint_or_point, tool, desc))
ret = self.eval_int("movej(" + joint_or_point + ", " + tool + ", " + desc +")")
#ret = int(self.execute('movej',joint_or_point, tool, desc))
if sync:
self.wait_end_of_move()
@@ -445,8 +446,8 @@ class RobotTCP(TcpDevice, Stoppable):
robot.set_pnt(point , "tcp_p")
point = "tcp_p"
#TODO: in new robot movel and movej is freezing controller
#ret = self.eval_int("movel(" + point + ", " + tool + ", " + desc +")")
ret = int(self.execute('movel',point, tool, desc))
ret = self.eval_int("movel(" + point + ", " + tool + ", " + desc +")")
#ret = int(self.execute('movel',point, tool, desc))
if sync:
self.wait_end_of_move()
@@ -457,8 +458,8 @@ class RobotTCP(TcpDevice, Stoppable):
if tool is None: tool = self.tool
#TODO: in new robot movel and movej is freezing controller
#ret = self.eval_int("movec(" + point_interm + ", " + point_target + ", " + tool + ", " + desc +")")
ret = int(self.execute('movec', point_interm, point_target, tool, desc))
ret = self.eval_int("movec(" + point_interm + ", " + point_target + ", " + tool + ", " + desc +")")
#ret = int(self.execute('movec', point_interm, point_target, tool, desc))
if sync:
self.wait_end_of_move()
@@ -490,17 +491,21 @@ class RobotTCP(TcpDevice, Stoppable):
#Tool - Not synchronized calls: atention to open/close only when state is Ready
def open_tool(self, tool=None):
if tool is None: tool = self.tool
self.evaluate(tool + ".gripper=true")
level = (str(self.gripper_open_value)).lower()
self.evaluate(tool + ".gripper=" + level)
self.tool_open = True
def close_tool(self, tool=None):
if tool is None: tool = self.tool
self.evaluate(tool + ".gripper=false")
level = (str(not self.gripper_open_value)).lower()
self.evaluate(tool + ".gripper=" + level)
self.tool_open = False
def is_tool_open(self, tool=None):
if tool is None: tool = self.tool
self.tool_open = robot.eval_bool(tool + ".gripper")
if not self.gripper_open_value:
self.tool_open = not self.tool_open
return self.tool_open
@@ -568,8 +573,8 @@ class RobotTCP(TcpDevice, Stoppable):
#TODO: in new robot exec taskCreate is freezing controller
#REMOVE if bug is fixed
self.execute('task_create',name, str(priority), program, *args)
#self.evaluate('taskCreate "' + name + '", ' + str(priority) + ', ' + cmd)
#self.execute('task_create',name, str(priority), program, *args)
self.evaluate('taskCreate "' + name + '", ' + str(priority) + ', ' + cmd)
@@ -701,12 +706,13 @@ class RobotTCP(TcpDevice, Stoppable):
if frame is None:
frame = self.frame
#Do not work
#self.evaluate("tcp_j=herej(); tcp_p=jointToPoint(" + tool + ", " + frame + ", tcp_j)")
#return self.get_pnt()
a = self.execute('get_pos', tool, frame)
ret = []
for i in range(6): ret.append(float(a[i]))
return ret
self.evaluate("tcp_j=herej(); tcp_p=jointToPoint(" + tool + ", " + frame + ", tcp_j)")
return self.get_pnt()
#a = self.execute('get_pos', tool, frame)
#ret = []
#for i in range(6): ret.append(float(a[i]))
#return ret
def get_flange_pos(self, frame=None):
+7 -1
View File
@@ -166,6 +166,12 @@ if is_rt():
run("motion_rt/homing_hexiposi")
run("motion_rt/robot_recover")
run("motion_rt/recover")
run("motion_rt/move_aux")
run("motion_rt/get_aux")
run("motion_rt/put_aux")
run("motion_rt/move_gonio_wait")
run("motion_rt/open_lid")
run("motion_rt/close_lid")
else:
run("motion/tools")
run("motion/mount")
@@ -213,7 +219,7 @@ def system_check(robot_move=True):
if auto:
if not feedback_psys_safety.read():
raise Exception("Psys safety not released")
if not guiding_tool_park.read():
if not is_rt() and not guiding_tool_park.read():
raise Exception("Guiding tool not parked")
def system_check_msg():
+19
View File
@@ -0,0 +1,19 @@
def close_lid():
"""
"""
print "close_lid"
#Initial checks
robot.assert_no_task()
robot.reset_motion()
robot.wait_ready()
robot.assert_cleared()
#robot.assert_in_known_point()
hexiposi.assert_homed()
pos = hexiposi.position
if pos == hexiposi.UNKNOWN_POSITION:
raise Exception("Undefined hexiposi position")
#Enabling
enable_motion()
robot.close_lid(pos)
+22
View File
@@ -0,0 +1,22 @@
def get_aux(sample):
"""
"""
print "get_aux: ",sample
sample = int(sample) #assert_valid_sample only acceps int as parameters
#Initial checks
assert_valid_sample(sample)
robot.assert_no_task()
robot.reset_motion()
robot.wait_ready()
robot.assert_cleared()
hexiposi.assert_homed()
#Enabling
enable_motion()
if not robot.is_aux():
robot.move_aux()
robot.get_aux(sample)
+13 -4
View File
@@ -1,20 +1,29 @@
def get_rt(puck, sample):
def get_rt(segment, puck, sample):
"""
"""
print "get_rt: ",puck, sample
print "get_rt: ", segment, puck, sample
#Initial checks
assert_valid_address('R', puck, sample)
assert_valid_address(segment, puck, sample)
assert_puck_detected(segment, puck)
robot.assert_no_task()
robot.reset_motion()
robot.wait_ready()
robot.assert_cleared()
#robot.assert_in_known_point()
hexiposi.assert_homed()
#location = robot.get_current_point()
#Enabling
enable_motion()
set_hexiposi(segment)
if not robot.is_rt():
robot.move_rt()
robot.get_rt(puck, sample)
robot.get_rt(segment, puck, sample)
+12 -56
View File
@@ -5,17 +5,9 @@ def mount(segment, puck, sample, force=False, read_dm=False, auto_unmount=False)
"""
"""
global mount_sample_id, mount_sample_detected
print "mount: ", segment, puck, sample, force
print "mount: ", segment, puck, sample
start = time.time()
is_aux = (segment == AUX_SEGMENT)
is_rt = (segment == RT_SEGMENT)
is_room_temp_sample = is_aux or is_rt
needs_chilling = not is_aux and (not is_rt) and (not robot.is_cold())
needs_drying = (is_aux or is_rt) and robot.is_cold()
puck_address = get_puck_address(puck)
if puck_address is None:
@@ -48,9 +40,6 @@ def mount(segment, puck, sample, force=False, read_dm=False, auto_unmount=False)
try:
if needs_chilling:
robot.move_cold()
time.sleep(30.0)
if smart_magnet.get_supress() == True:
smart_magnet.set_supress(False)
@@ -71,35 +60,18 @@ def mount(segment, puck, sample, force=False, read_dm=False, auto_unmount=False)
#Enabling
enable_motion()
if needs_drying:
dry(wait_cold=-1)
if is_aux:
if not robot.is_aux():
robot.move_aux()
robot.get_aux(sample)
elif is_rt:
if not robot.is_rt():
robot.move_rt()
robot.get_rt(puck, sample)
else:
set_hexiposi(segment)
if not force:
visual_check_hexiposi(segment)
if not robot.is_dewar():
robot.move_dewar()
robot.get_dewar(segment, puck, sample)
set_hexiposi(segment)
if not force:
visual_check_hexiposi(segment)
if read_dm:
barcode_reader.start_read(10.0)
robot.move_scanner()
#time.sleep(1.0)
if not robot.is_rt():
robot.move_rt()
robot.get_rt(segment, puck, sample)
robot.move_gonio()
if read_dm:
@@ -110,31 +82,15 @@ def mount(segment, puck, sample, force=False, read_dm=False, auto_unmount=False)
robot.put_gonio()
robot.move_home()
try:
dry_mount_count = int(get_setting("dry_mount_counter"))
except:
dry_mount_count = 0
if not is_room_temp_sample:
set_setting("dry_mount_counter", dry_mount_count+1)
if is_aux or is_rt:
robot.move_home()
else:
robot.move_cold()
mount_sample_detected = smart_magnet.check_mounted(idle_time=0.25, timeout = 1.0)
update_samples_info_sample_mount(get_puck_name(segment, puck), sample, mount_sample_detected, mount_sample_id)
if mount_sample_detected == False:
raise Exception("No pin detected on gonio")
if not is_room_temp_sample and is_force_dry():
print "Auto dry"
log("Starting auto dry", False)
set_exec_pars(then = "dry()")
set_setting("mounted_sample_position", get_sample_name(segment, puck, sample))
return [mount_sample_detected, mount_sample_id]
finally:
+18
View File
@@ -0,0 +1,18 @@
def move_aux():
"""
"""
print "move_aux"
#Initial checks
robot.assert_no_task()
robot.reset_motion()
robot.wait_ready()
robot.assert_cleared()
#robot.assert_in_known_point()
#Enabling
enable_motion()
if not robot.is_aux():
robot.move_aux()
+18
View File
@@ -0,0 +1,18 @@
def move_gonio_wait():
"""
"""
print "move_gonio_wait"
#Initial checks
robot.assert_no_task()
robot.reset_motion()
robot.wait_ready()
robot.assert_cleared()
#robot.assert_in_known_point()
#Enabling
enable_motion()
if not robot.is_gonio_wait():
robot.move_gonio_wait()
+19
View File
@@ -0,0 +1,19 @@
def open_lid():
"""
"""
print "open_lid"
#Initial checks
robot.assert_no_task()
robot.reset_motion()
robot.wait_ready()
robot.assert_cleared()
#robot.assert_in_known_point()
hexiposi.assert_homed()
pos = hexiposi.position
if pos == hexiposi.UNKNOWN_POSITION:
raise Exception("Undefined hexiposi position")
#Enabling
enable_motion()
robot.open_lid(pos)
+22
View File
@@ -0,0 +1,22 @@
def put_aux(sample):
"""
"""
print "put_aux: ",sample
sample = int(sample) #assert_valid_sample only acceps int as parameters
#Initial checks
assert_valid_sample(sample)
robot.assert_no_task()
robot.reset_motion()
robot.wait_ready()
robot.assert_cleared()
hexiposi.assert_homed()
#Enabling
enable_motion()
if not robot.is_aux():
robot.move_aux()
robot.put_aux(sample)
+9 -4
View File
@@ -1,20 +1,25 @@
def put_rt(puck, sample):
def put_rt(segment, puck, sample):
"""
"""
print "put_rt: ",puck, sample
print "put_rt: ", segment, puck, sample
#Initial checks
assert_valid_address('R', puck, sample)
assert_valid_address(segment, puck, sample)
assert_puck_detected(segment, puck)
robot.assert_no_task()
robot.reset_motion()
robot.wait_ready()
robot.assert_cleared()
#robot.assert_in_known_point()
hexiposi.assert_homed()
#Enabling
enable_motion()
set_hexiposi(segment)
if not robot.is_rt():
robot.move_rt()
robot.put_rt(puck, sample)
robot.put_rt(segment, puck, sample)
+2 -6
View File
@@ -7,15 +7,11 @@ RECOVER_DESC = "mRecovery"
known_segments = [ ("pPark", "pHome", 50), \
("pGonio", "pGonioG", 10), \
("pHome", "pHe", 230), \
("pHome", "pGonioWait", 230), \
("pHome", "pGonio", 30), \
("pHome", "pScan", 25), \
("pHome", "pHeater", 75), \
("pHome", "pDewar", 10), \
("pPark", "pHeat", 40), \
("pHeater", "pHeatB", 10), \
("pHome", "pRTHome", 10), \
("pPark", "pAux", 50), \
("pPark", "pRT", 100), \
]
+10 -34
View File
@@ -10,12 +10,7 @@ def unmount(segment = None, puck = None, sample = None, force=False, auto_unmoun
raise Exception("Mounted sample position is not defined")
segment, puck , sample = pos[0:1], int(pos[1]), int(pos[2:])
print "Mounted sample position: ", segment, puck , sample
is_aux = (segment == AUX_SEGMENT)
is_rt = (segment ==RT_SEGMENT)
needs_chilling = not is_aux and (not is_rt) and (not robot.is_cold())
needs_drying = (is_aux or is_rt) and robot.is_cold()
#Initial checks
assert_valid_address(segment, puck, sample)
@@ -52,41 +47,22 @@ def unmount(segment = None, puck = None, sample = None, force=False, auto_unmoun
#Enabling
enable_motion()
if is_aux or is_rt:
if needs_drying:
dry(wait_cold=-1)
else:
set_hexiposi(segment)
if not force:
visual_check_hexiposi(segment)
if needs_chilling:
robot.move_cold()
time.sleep(30.)
set_hexiposi(segment)
#location = robot.get_current_point()
if not force:
visual_check_hexiposi(segment)
if not robot.is_gonio():
robot.move_gonio()
#smart_magnet.set_unmount_current()
robot.get_gonio()
#smart_magnet.apply_reverse()
#smart_magnet.apply_resting()
if is_aux:
robot.move_aux()
robot.put_aux( sample)
elif is_rt:
robot.move_rt()
robot.put_rt( puck, sample)
else:
#TODO: Shuld check if smart magnet detection is off?
update_samples_info_sample_unmount(get_puck_name(segment, puck), sample)
robot.move_dewar()
robot.put_dewar(segment, puck, sample)
#TODO: Shuld check if smart magnet detection is off?
update_samples_info_sample_unmount(get_puck_name(segment, puck), sample)
robot.move_rt()
robot.put_rt(segment, puck, sample)
set_setting("mounted_sample_position", None)
finally:
if not auto_unmount: