From 91f6ffbb354f64b572a5d23f282127586290455f Mon Sep 17 00:00:00 2001 From: gac-S_Changer Date: Fri, 9 Nov 2018 11:58:05 +0100 Subject: [PATCH] --- devices/led_ctrl_1.properties | 4 +- devices/led_ctrl_2.properties | 4 +- devices/led_ctrl_3.properties | 4 +- plugins/MXSC-1.10.0.jar | Bin 262215 -> 263048 bytes plugins/SmartMagnetPanel.form | 42 +++++++-------- plugins/SmartMagnetPanel.java | 93 ++++++++++++---------------------- script/client/TellClient.py | 25 +++++++-- script/client/tell.py | 15 ++++-- script/motion/mount.py | 15 +++--- script/motion/unmount.py | 2 +- 10 files changed, 94 insertions(+), 110 deletions(-) diff --git a/devices/led_ctrl_1.properties b/devices/led_ctrl_1.properties index 9f3734a..0679e41 100644 --- a/devices/led_ctrl_1.properties +++ b/devices/led_ctrl_1.properties @@ -1,5 +1,5 @@ -#Thu Oct 25 15:44:44 CEST 2018 -maxValue=0.4 +#Thu Nov 08 11:41:48 CET 2018 +maxValue=1.0 minValue=0.0 offset=0.0 precision=2 diff --git a/devices/led_ctrl_2.properties b/devices/led_ctrl_2.properties index 9f3734a..0679e41 100644 --- a/devices/led_ctrl_2.properties +++ b/devices/led_ctrl_2.properties @@ -1,5 +1,5 @@ -#Thu Oct 25 15:44:44 CEST 2018 -maxValue=0.4 +#Thu Nov 08 11:41:48 CET 2018 +maxValue=1.0 minValue=0.0 offset=0.0 precision=2 diff --git a/devices/led_ctrl_3.properties b/devices/led_ctrl_3.properties index 9f3734a..0679e41 100644 --- a/devices/led_ctrl_3.properties +++ b/devices/led_ctrl_3.properties @@ -1,5 +1,5 @@ -#Thu Oct 25 15:44:44 CEST 2018 -maxValue=0.4 +#Thu Nov 08 11:41:48 CET 2018 +maxValue=1.0 minValue=0.0 offset=0.0 precision=2 diff --git a/plugins/MXSC-1.10.0.jar b/plugins/MXSC-1.10.0.jar index 28a93b89eba0fbafff8a104946a95ce3ee4fa8b7..f695a486a0d687a17e0210305601e7fd6a824a81 100644 GIT binary patch delta 8994 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 E2PeqSl>h($ delta 8221 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 diff --git a/plugins/SmartMagnetPanel.form b/plugins/SmartMagnetPanel.form index 7fc1d97..f9de056 100644 --- a/plugins/SmartMagnetPanel.form +++ b/plugins/SmartMagnetPanel.form @@ -18,12 +18,9 @@ - - - - - - + + + @@ -183,10 +180,10 @@ - - - - + + + + @@ -194,10 +191,10 @@ - - - - + + + + @@ -205,21 +202,18 @@ - + - + + - - - - + - + + + - - - diff --git a/plugins/SmartMagnetPanel.java b/plugins/SmartMagnetPanel.java index 41f1eb2..185028d 100644 --- a/plugins/SmartMagnetPanel.java +++ b/plugins/SmartMagnetPanel.java @@ -27,6 +27,19 @@ public class SmartMagnetPanel extends DevicePanel { } panelState.setDevice(device); + this.startTimer(1000, 100); + } + + @Override + protected void onTimer(){ + Color color = Color.RED; + try{ + if (Context.getInstance().evalLineBackground("in_mount_position").equals(Boolean.TRUE)){ + color = Color.GREEN; + } + } catch (Exception ex){ + } + ledMountPosition.setColor(color); } @Override @@ -75,8 +88,8 @@ public class SmartMagnetPanel extends DevicePanel { panelState = new ch.psi.pshell.swing.DeviceStatePanel(); panelCurrent = new ch.psi.pshell.swing.ProcessVariablePanel(); jPanel2 = new javax.swing.JPanel(); - buttonHoming = new javax.swing.JButton(); - buttonMount = new javax.swing.JButton(); + jLabel2 = new javax.swing.JLabel(); + ledMountPosition = new ch.psi.pshell.swing.Led(); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Status")); @@ -153,41 +166,29 @@ public class SmartMagnetPanel extends DevicePanel { jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Gonio")); - buttonHoming.setText("Home Fast Table"); - buttonHoming.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonHomingActionPerformed(evt); - } - }); + jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + jLabel2.setText("Mount Position:"); - buttonMount.setText("Set Mount Position"); - buttonMount.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - buttonMountActionPerformed(evt); - } - }); + ledMountPosition.setFont(new java.awt.Font("SansSerif", 0, 18)); // NOI18N javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(buttonHoming) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(buttonMount) + .addContainerGap() + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(ledMountPosition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); - - jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonHoming, buttonMount}); - jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(buttonHoming) - .addComponent(buttonMount)) + .addContainerGap() + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(jLabel2) + .addComponent(ledMountPosition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); @@ -197,11 +198,9 @@ public class SmartMagnetPanel extends DevicePanel { layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panelState, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(panelCurrent, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGap(0, 0, 0)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(panelCurrent, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -216,45 +215,15 @@ public class SmartMagnetPanel extends DevicePanel { ); }// //GEN-END:initComponents - private void buttonHomingActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonHomingActionPerformed - try{ - Context.getInstance().evalLineAsync("home_fast_table()").handle((ret, ex) -> { - if (SmartMagnetPanel.this.isShowing()){ - if (ex != null){ - showException((Exception)ex); - } - } - return ret; - }); - } catch (Exception ex){ - this.showException(ex); - } - }//GEN-LAST:event_buttonHomingActionPerformed - - private void buttonMountActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonMountActionPerformed - try{ - Context.getInstance().evalLineAsync("set_mount_position()").handle((ret, ex) -> { - if (SmartMagnetPanel.this.isShowing()){ - if (ex != null){ - showException((Exception)ex); - } - } - return ret; - }); - } catch (Exception ex){ - this.showException(ex); - } - }//GEN-LAST:event_buttonMountActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton buttonHoming; - private javax.swing.JButton buttonMount; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; + private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel5; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; + private ch.psi.pshell.swing.Led ledMountPosition; private ch.psi.pshell.swing.Led ledMounted; private ch.psi.pshell.swing.Led ledStatus; private ch.psi.pshell.swing.ProcessVariablePanel panelCurrent; diff --git a/script/client/TellClient.py b/script/client/TellClient.py index 761f40d..256dbdd 100644 --- a/script/client/TellClient.py +++ b/script/client/TellClient.py @@ -38,7 +38,12 @@ class TellClient(PShellClient): if self.state != "Ready": raise Exception("Invalid state: " + str(self.state)) - + def set_in_mount_position(self, value): + self.eval("in_mount_position = " + str(value) +"&") + + def is_in_mount_position(self): + return self.eval("in_mount_position&").lower()=="true" + def get_samples_info(self): return json.loads(self.eval("get_samples_info()&")) @@ -89,6 +94,11 @@ class TellClient(PShellClient): self.abort() self.eval("robot.stop_task()&") + def set_gonio_mount_position(homing = False): + if homing: + self.eval("home_fast_table()") + self.eval("set_mount_position()") + def get_mounted_sample(self): ret = self.eval("get_setting('mounted_sample_position')&").strip() return None if len(ret)==0 else ret @@ -111,14 +121,21 @@ class TellClient(PShellClient): def get_detected_pucks(self): return self.eval("get_detected_pucks()&") + def set_pin_offset(self, value): + self.eval("set_pin_offset(" + str(value)+ ")&") + + def get_pin_offset(self): + return self.eval("get_pin_offset()&") def print_info(self): print ("State: " + str(self.get_state())) - print ("Mounted Sample: " + str(self.get_mounted_sample())) - print ("System Check: " + str(self.get_system_check())) + print ("Mounted sample: " + str(self.get_mounted_sample())) + print ("System check: " + str(self.get_system_check())) print ("Robot state: " + str(self.get_robot_state())) print ("Robot status: " + str(self.get_robot_status())) - print ("Detected Pucks: " + str(self.get_detected_pucks())) + print ("Detected pucks: " + str(self.get_detected_pucks())) + print ("Pin offset: " + str(self.get_pin_offset())) + print ("Mount position: " + str(self.is_in_mount_position())) print ("") if __name__ == "__main__": diff --git a/script/client/tell.py b/script/client/tell.py index fed5315..56c70b4 100644 --- a/script/client/tell.py +++ b/script/client/tell.py @@ -14,18 +14,20 @@ def info(): def help(): print ("Commands: \n\thelp()\n\tinfo()\n\tmount(segment, puck, sample)\n\tunmount() \n\tdry() " \ - "\n\tscan(segment, puck, sample=None) \n\tmove_cold() \n\ttrash() \n\tabort()\n") + "\n\tscan(segment, puck, sample=None) \n\tmove_cold() \n\ttrash() \n\tabort() " \ + "\n\tset_pin_offset(value)") -def set_gonio(): - pass +def assert_transfer_allowed(): + if not tell.is_in_mount_position(): + raise Exception("Gonio is not in mount position") def mount(segment, puck, sample): - set_gonio() + assert_transfer_allowed() cmd = tell.mount(segment, puck, sample, True, True, True) print (tell.wait_cmd(cmd)) def unmount(): - set_gonio() + assert_transfer_allowed() cmd=tell.unmount(force=True) print (tell.wait_cmd(cmd)) @@ -51,6 +53,9 @@ def scan(segment, puck, sample=None): def abort(): tell.abort_cmd() +def set_pin_offset(value): + tell.set_pin_offset(value) + info() help() diff --git a/script/motion/mount.py b/script/motion/mount.py index 6e3fc1e..05c322d 100644 --- a/script/motion/mount.py +++ b/script/motion/mount.py @@ -23,10 +23,6 @@ def mount(segment, puck, sample, force=False, read_dm=False, auto_unmount=False) assert_valid_address(segment, puck, sample) assert_puck_detected(segment, puck) - if auto_unmount: - if get_setting("mounted_sample_position") is not None: - unmount() - if robot.simulated: time.sleep(3.0) mount_sample_detected = True @@ -41,14 +37,17 @@ def mount(segment, puck, sample, force=False, read_dm=False, auto_unmount=False) robot.assert_cleared() #robot.assert_in_known_point() hexiposi.assert_homed() - - set_status("Mounting: " + str(segment) + str(puck) + str(sample)) + try: smart_magnet.enforce_sample_detection() if smart_magnet.check_mounted(idle_time=0.25, timeout = 1.0) == True: - raise Exception("Pin detected on gonio") - + if auto_unmount and (get_setting("mounted_sample_position") is not None): + unmount(force = True) + else: + raise Exception("Pin detected on gonio") + + set_status("Mounting: " + str(segment) + str(puck) + str(sample)) #location = robot.get_current_point() #Enabling diff --git a/script/motion/unmount.py b/script/motion/unmount.py index 358a10b..41b0401 100644 --- a/script/motion/unmount.py +++ b/script/motion/unmount.py @@ -7,7 +7,7 @@ def unmount(segment = None, puck = None, sample = None, force=False): pos = get_setting("mounted_sample_position") if pos is None: raise Exception("Mounted sample position is not defined") - segment, puck , sample = pos[0:1], int(pos[1]), int(pos[2]) + segment, puck , sample = pos[0:1], int(pos[1]), int(pos[2:]) print "Mounted sample position: ", segment, puck , sample is_aux = (segment == AUX_SEGMENT)