From 9c75de0b135c911f1fe2b95bc35fe2e69ab3ac0e Mon Sep 17 00:00:00 2001 From: gac-S_Changer Date: Mon, 18 Mar 2019 14:27:56 +0100 Subject: [PATCH] --- config/config.properties | 5 +-- config/settings.properties | 11 +++--- config/setup-modbus.properties | 3 +- devices/A3.properties | 4 +-- devices/A4.properties | 4 +-- devices/A5.properties | 4 +-- devices/B1.properties | 4 +-- devices/B2.properties | 4 +-- devices/B3.properties | 4 +-- devices/B4.properties | 4 +-- devices/B5.properties | 4 +-- devices/C1.properties | 4 +-- devices/C2.properties | 4 +-- devices/C4.properties | 4 +-- devices/C5.properties | 4 +-- devices/D1.properties | 4 +-- devices/D2.properties | 4 +-- devices/D3.properties | 4 +-- devices/D4.properties | 4 +-- devices/D5.properties | 4 +-- devices/E1.properties | 4 +-- devices/E2.properties | 4 +-- devices/E3.properties | 4 +-- devices/E4.properties | 4 +-- devices/E5.properties | 4 +-- devices/F1.properties | 4 +-- devices/F2.properties | 4 +-- devices/F3.properties | 4 +-- devices/F4.properties | 4 +-- devices/F5.properties | 4 +-- devices/led_ctrl_1.properties | 4 +-- devices/led_ctrl_2.properties | 4 +-- devices/led_ctrl_3.properties | 4 +-- devices/smart_magnet.properties | 4 +-- plugins/Commands.java | 4 +-- plugins/MXSC-1.10.0.jar | Bin 272395 -> 272466 bytes plugins/SmartMagnetPanel.form | 60 ++++++++++++++------------------ plugins/SmartMagnetPanel.java | 52 +++++++++++++-------------- script/devices/RobotSC.py | 24 ++++++------- script/motion/mount.py | 1 + script/motion/tools.py | 17 ++++----- script/motion/unmount.py | 3 +- 42 files changed, 148 insertions(+), 156 deletions(-) diff --git a/config/config.properties b/config/config.properties index 93defb5..074f303 100644 --- a/config/config.properties +++ b/config/config.properties @@ -1,4 +1,4 @@ -#Thu Feb 21 14:00:54 CET 2019 +#Mon Mar 18 11:39:59 CET 2019 autoSaveScanData=true commandExecutionEvents=false createSessionFiles=true @@ -10,6 +10,7 @@ dataScanPreserveTypes=false dataScanReleaseRecords=false dataServerPort=-1 depthDimension=0 +hideServerMessages=true hostName=null instanceName=TellSwissMX logDaysToLive=30 @@ -17,7 +18,7 @@ logLevel=Fine logLevelConsole=Off logPath={logs}/{date}_{time} notificationLevel=null -saveCommandStatistics=false +saveCommandStatistics=true scanStreamerPort=-1 serverEnabled=true serverPort=8080 diff --git a/config/settings.properties b/config/settings.properties index 7ed1d82..baaf92e 100644 --- a/config/settings.properties +++ b/config/settings.properties @@ -1,13 +1,12 @@ -#Thu Feb 28 15:18:27 CET 2019 +#Mon Mar 18 11:42:13 CET 2019 barcode_reader_scan_pucks=true beamline_status_enabled=false -dry_mount_counter=60 -dry_timestamp=1.543854393748E9 -force_dry_mount_count=0 +dry_mount_counter=2 +dry_timestamp=1.552645972582E9 +force_dry_mount_count=10 force_dry_timeout=0 imaging_enabled=false led_level=0.0 -mounted_sample_position=R46 pin_angle_offset=0.0 pin_offset=0.0 puck_types=true @@ -16,4 +15,4 @@ roi_w=1000 roi_x=337 roi_y=139 room_temperature_enabled=true -valve_control=true +valve_control=false diff --git a/config/setup-modbus.properties b/config/setup-modbus.properties index eb292c1..5fb7551 100644 --- a/config/setup-modbus.properties +++ b/config/setup-modbus.properties @@ -1,7 +1,8 @@ -#Wed Sep 14 15:16:45 CEST 2016 +#Wed Mar 06 11:11:04 CET 2019 configFile={config}/config.properties configFileDevices={config}/devices-modbus.properties configFilePlugins={config}/plugins.properties +configFileSettings={config}/settings.properties configFileTasks={config}/tasks.properties configPath={home}/config contextPath={outp}/context diff --git a/devices/A3.properties b/devices/A3.properties index 7bb91cd..8658d9e 100644 --- a/devices/A3.properties +++ b/devices/A3.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 -detection=Both +#Mon Mar 11 11:08:35 CET 2019 +detection=Mechanical disabled=false diff --git a/devices/A4.properties b/devices/A4.properties index 7bb91cd..b0fd9b5 100644 --- a/devices/A4.properties +++ b/devices/A4.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 -detection=Both +#Mon Mar 11 11:08:20 CET 2019 +detection=Mechanical disabled=false diff --git a/devices/A5.properties b/devices/A5.properties index 7bb91cd..e2fa568 100644 --- a/devices/A5.properties +++ b/devices/A5.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 -detection=Both +#Mon Mar 11 11:08:54 CET 2019 +detection=Mechanical disabled=false diff --git a/devices/B1.properties b/devices/B1.properties index 7bb91cd..01ef5b8 100644 --- a/devices/B1.properties +++ b/devices/B1.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 -detection=Both +#Mon Mar 11 11:09:03 CET 2019 +detection=Mechanical disabled=false diff --git a/devices/B2.properties b/devices/B2.properties index 7bb91cd..81de457 100644 --- a/devices/B2.properties +++ b/devices/B2.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 -detection=Both +#Mon Mar 11 11:09:06 CET 2019 +detection=Mechanical disabled=false diff --git a/devices/B3.properties b/devices/B3.properties index 7bb91cd..b340dec 100644 --- a/devices/B3.properties +++ b/devices/B3.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 -detection=Both +#Mon Mar 11 09:22:21 CET 2019 +detection=Inductive disabled=false diff --git a/devices/B4.properties b/devices/B4.properties index 7bb91cd..13413a6 100644 --- a/devices/B4.properties +++ b/devices/B4.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 -detection=Both +#Mon Mar 11 09:22:14 CET 2019 +detection=Mechanical disabled=false diff --git a/devices/B5.properties b/devices/B5.properties index 7bb91cd..ef6beab 100644 --- a/devices/B5.properties +++ b/devices/B5.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 -detection=Both +#Mon Mar 11 11:09:21 CET 2019 +detection=Mechanical disabled=false diff --git a/devices/C1.properties b/devices/C1.properties index 7bb91cd..fb0a3e2 100644 --- a/devices/C1.properties +++ b/devices/C1.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 -detection=Both +#Mon Mar 11 11:09:24 CET 2019 +detection=Mechanical disabled=false diff --git a/devices/C2.properties b/devices/C2.properties index 7bb91cd..8eb8284 100644 --- a/devices/C2.properties +++ b/devices/C2.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 -detection=Both +#Mon Mar 11 11:09:27 CET 2019 +detection=Mechanical disabled=false diff --git a/devices/C4.properties b/devices/C4.properties index 7bb91cd..67b9ce3 100644 --- a/devices/C4.properties +++ b/devices/C4.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 -detection=Both +#Mon Mar 11 11:09:35 CET 2019 +detection=Mechanical disabled=false diff --git a/devices/C5.properties b/devices/C5.properties index 7bb91cd..667bd2b 100644 --- a/devices/C5.properties +++ b/devices/C5.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 -detection=Both +#Mon Mar 11 11:09:40 CET 2019 +detection=Mechanical disabled=false diff --git a/devices/D1.properties b/devices/D1.properties index 7bb91cd..186ba3f 100644 --- a/devices/D1.properties +++ b/devices/D1.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:06:32 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/D2.properties b/devices/D2.properties index 7bb91cd..f61b0b9 100644 --- a/devices/D2.properties +++ b/devices/D2.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:06:39 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/D3.properties b/devices/D3.properties index 7bb91cd..7d6323d 100644 --- a/devices/D3.properties +++ b/devices/D3.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:06:42 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/D4.properties b/devices/D4.properties index 7bb91cd..41d961c 100644 --- a/devices/D4.properties +++ b/devices/D4.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:06:44 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/D5.properties b/devices/D5.properties index 7bb91cd..1eda1ac 100644 --- a/devices/D5.properties +++ b/devices/D5.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:06:47 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/E1.properties b/devices/E1.properties index 7bb91cd..3357d4c 100644 --- a/devices/E1.properties +++ b/devices/E1.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:06:49 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/E2.properties b/devices/E2.properties index 7bb91cd..9f9c780 100644 --- a/devices/E2.properties +++ b/devices/E2.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:06:51 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/E3.properties b/devices/E3.properties index 7bb91cd..53c91c6 100644 --- a/devices/E3.properties +++ b/devices/E3.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:06:54 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/E4.properties b/devices/E4.properties index 7bb91cd..08a5e90 100644 --- a/devices/E4.properties +++ b/devices/E4.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:06:57 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/E5.properties b/devices/E5.properties index 7bb91cd..7f481b5 100644 --- a/devices/E5.properties +++ b/devices/E5.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:07:02 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/F1.properties b/devices/F1.properties index 7bb91cd..59bf93e 100644 --- a/devices/F1.properties +++ b/devices/F1.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:07:04 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/F2.properties b/devices/F2.properties index 7bb91cd..0b4fc91 100644 --- a/devices/F2.properties +++ b/devices/F2.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:07:06 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/F3.properties b/devices/F3.properties index 7bb91cd..da79fa6 100644 --- a/devices/F3.properties +++ b/devices/F3.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:07:08 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/F4.properties b/devices/F4.properties index 7bb91cd..0bc16c9 100644 --- a/devices/F4.properties +++ b/devices/F4.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:07:10 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/F5.properties b/devices/F5.properties index 7bb91cd..b767b60 100644 --- a/devices/F5.properties +++ b/devices/F5.properties @@ -1,3 +1,3 @@ -#Thu Feb 14 10:34:24 CET 2019 +#Mon Mar 11 11:07:12 CET 2019 detection=Both -disabled=false +disabled=true diff --git a/devices/led_ctrl_1.properties b/devices/led_ctrl_1.properties index 8360687..4afcc83 100644 --- a/devices/led_ctrl_1.properties +++ b/devices/led_ctrl_1.properties @@ -1,5 +1,5 @@ -#Mon Dec 03 22:45:14 CET 2018 -maxValue=0.4 +#Mon Mar 18 11:42:13 CET 2019 +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 8360687..4afcc83 100644 --- a/devices/led_ctrl_2.properties +++ b/devices/led_ctrl_2.properties @@ -1,5 +1,5 @@ -#Mon Dec 03 22:45:14 CET 2018 -maxValue=0.4 +#Mon Mar 18 11:42:13 CET 2019 +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 8360687..4afcc83 100644 --- a/devices/led_ctrl_3.properties +++ b/devices/led_ctrl_3.properties @@ -1,5 +1,5 @@ -#Mon Dec 03 22:45:14 CET 2018 -maxValue=0.4 +#Mon Mar 18 11:42:13 CET 2019 +maxValue=1.0 minValue=0.0 offset=0.0 precision=2 diff --git a/devices/smart_magnet.properties b/devices/smart_magnet.properties index 0111e5f..bd3b5a1 100644 --- a/devices/smart_magnet.properties +++ b/devices/smart_magnet.properties @@ -1,6 +1,6 @@ -#Fri Feb 15 12:53:07 CET 2019 +#Thu Mar 14 16:45:07 CET 2019 holdingCurrent=40.0 -mountCurrent=20.0 +mountCurrent=40.0 remanenceCurrent=-10.0 restingCurrent=20.0 reverseCurrent=-10.0 diff --git a/plugins/Commands.java b/plugins/Commands.java index d08bca6..ff54e04 100644 --- a/plugins/Commands.java +++ b/plugins/Commands.java @@ -932,12 +932,12 @@ public class Commands extends Panel { private void buttonGetAuxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonGetAuxActionPerformed int sample = (Integer) spinnerSample.getValue(); - execute("get_aux('" + sample + ")"); + execute("get_aux('" + sample + "')"); }//GEN-LAST:event_buttonGetAuxActionPerformed private void buttonPutAuxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonPutAuxActionPerformed int sample = (Integer) spinnerSample.getValue(); - execute("put_aux('" + sample + ")"); + execute("put_aux('" + sample + "')"); }//GEN-LAST:event_buttonPutAuxActionPerformed private void checkAuxiliaryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkAuxiliaryActionPerformed diff --git a/plugins/MXSC-1.10.0.jar b/plugins/MXSC-1.10.0.jar index d2d27c694521cf816764219e735a86128640c1af..50972242e32d2ba2c2bcd4f3abd38b4d13926346 100644 GIT binary patch delta 19468 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 diff --git a/plugins/SmartMagnetPanel.form b/plugins/SmartMagnetPanel.form index 432e7bd..6433fba 100644 --- a/plugins/SmartMagnetPanel.form +++ b/plugins/SmartMagnetPanel.form @@ -55,22 +55,20 @@ + + + + + + + - - - - - - - - - - - - - - + + + + + @@ -82,9 +80,9 @@ - - + + @@ -92,9 +90,9 @@ - - - + + + @@ -115,21 +113,6 @@ - - - - - - - - - - - - - - - @@ -154,6 +137,15 @@ + + + + + + + + + diff --git a/plugins/SmartMagnetPanel.java b/plugins/SmartMagnetPanel.java index 589fb82..74647ff 100644 --- a/plugins/SmartMagnetPanel.java +++ b/plugins/SmartMagnetPanel.java @@ -41,26 +41,31 @@ public class SmartMagnetPanel extends DevicePanel { ledSupressed.setColor(Color.ORANGE); ledStatus.setColor(Color.GREEN); ledMounted.setColor(Color.RED); + textStatus.setText("Supressed"); break; case Ready: ledSupressed.setColor(Color.BLACK); ledStatus.setColor(Color.GREEN); ledMounted.setColor(Color.GREEN); + textStatus.setText("Not Mounted"); break; case Busy: ledSupressed.setColor(Color.BLACK); ledStatus.setColor(Color.GREEN); ledMounted.setColor(Color.ORANGE); + textStatus.setText("Mounted"); break; case Fault: ledSupressed.setColor(Color.RED); ledStatus.setColor(Color.RED); ledMounted.setColor(Color.RED); + textStatus.setText("Error"); break; default: ledSupressed.setColor(Color.BLACK); ledStatus.setColor(Color.BLACK); ledMounted.setColor(Color.BLACK); + textStatus.setText("Invalid"); break; } buttonSupressOn.setEnabled((state==State.Ready) || (state == State.Busy)); @@ -83,11 +88,11 @@ public class SmartMagnetPanel extends DevicePanel { jPanel1 = new javax.swing.JPanel(); ledStatus = new ch.psi.pshell.swing.Led(); jLabel1 = new javax.swing.JLabel(); - panelPowerCtr = new javax.swing.JPanel(); jLabel5 = new javax.swing.JLabel(); ledMounted = new ch.psi.pshell.swing.Led(); jLabel10 = new javax.swing.JLabel(); panelCurrentRb = new ch.psi.pshell.swing.DeviceValuePanel(); + textStatus = new javax.swing.JTextField(); panelState = new ch.psi.pshell.swing.DeviceStatePanel(); panelCurrent = new ch.psi.pshell.swing.ProcessVariablePanel(); jPanel2 = new javax.swing.JPanel(); @@ -105,17 +110,6 @@ public class SmartMagnetPanel extends DevicePanel { jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel1.setText("Status:"); - javax.swing.GroupLayout panelPowerCtrLayout = new javax.swing.GroupLayout(panelPowerCtr); - panelPowerCtr.setLayout(panelPowerCtrLayout); - panelPowerCtrLayout.setHorizontalGroup( - panelPowerCtrLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 150, Short.MAX_VALUE) - ); - panelPowerCtrLayout.setVerticalGroup( - panelPowerCtrLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 23, Short.MAX_VALUE) - ); - jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel5.setText("Mounted:"); @@ -126,6 +120,10 @@ public class SmartMagnetPanel extends DevicePanel { panelCurrentRb.setDeviceName("smc_current_rb"); + textStatus.setHorizontalAlignment(javax.swing.JTextField.CENTER); + textStatus.setDisabledTextColor(new java.awt.Color(0, 0, 0)); + textStatus.setEnabled(false); + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( @@ -133,20 +131,18 @@ public class SmartMagnetPanel extends DevicePanel { .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel10, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel5, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(ledMounted, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(jPanel1Layout.createSequentialGroup() - .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(ledStatus, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(panelPowerCtr, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(jPanel1Layout.createSequentialGroup() - .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(ledMounted, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(jPanel1Layout.createSequentialGroup() - .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(panelCurrentRb, javax.swing.GroupLayout.PREFERRED_SIZE, 173, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(18, 18, 18) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(panelCurrentRb, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(textStatus, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( @@ -154,15 +150,15 @@ public class SmartMagnetPanel extends DevicePanel { .addGroup(jPanel1Layout.createSequentialGroup() .addGap(4, 4, 4) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) - .addComponent(jLabel1) .addComponent(ledStatus, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(panelPowerCtr, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(jLabel1) + .addComponent(textStatus, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(jLabel5) .addComponent(ledMounted, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(jLabel10) .addComponent(panelCurrentRb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) @@ -314,7 +310,7 @@ public class SmartMagnetPanel extends DevicePanel { private ch.psi.pshell.swing.Led ledSupressed; private ch.psi.pshell.swing.ProcessVariablePanel panelCurrent; private ch.psi.pshell.swing.DeviceValuePanel panelCurrentRb; - private javax.swing.JPanel panelPowerCtr; private ch.psi.pshell.swing.DeviceStatePanel panelState; + private javax.swing.JTextField textStatus; // End of variables declaration//GEN-END:variables } diff --git a/script/devices/RobotSC.py b/script/devices/RobotSC.py index 404b582..a47d4b2 100644 --- a/script/devices/RobotSC.py +++ b/script/devices/RobotSC.py @@ -27,23 +27,23 @@ 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", "moveDewar", "moveCold", "movePark", "moveGonio","moveHeater", "moveScanner","moveHome", "moveAux","moveRT"]) + 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"]) self.setPolling(DEFAULT_ROBOT_POLLING) #self.setSimulated() def move_dewar(self): - self.start_task('moveDewar') + self.start_task('mvDewar') self.wait_task_finished(TASK_WAIT_ROBOT_POLLING) self.assert_dewar() def move_cold(self): - self.start_task('moveCold') + self.start_task('mvCold') self.wait_task_finished(TASK_WAIT_ROBOT_POLLING) self.assert_cold() def move_home(self): - self.start_task('moveHome') + self.start_task('mvHome') self.wait_task_finished(TASK_WAIT_ROBOT_POLLING) self.assert_home() @@ -88,13 +88,13 @@ class RobotSC(RobotTCP): def get_aux(self, sample): self.assert_aux() - self.start_task('getAuxiliary', sample) + self.start_task('getAux', sample) self.wait_task_finished(TASK_WAIT_ROBOT_POLLING) self.assert_aux() def put_aux(self, sample): self.assert_aux() - self.start_task('putAuxiliary', sample) + self.start_task('putAux', sample) self.wait_task_finished(TASK_WAIT_ROBOT_POLLING) self.assert_aux() @@ -111,7 +111,7 @@ class RobotSC(RobotTCP): self.assert_rt() def move_scanner(self): - self.start_task('moveScanner') + self.start_task('mvScanner') self.wait_task_finished(TASK_WAIT_ROBOT_POLLING) self.assert_scanner() @@ -121,18 +121,18 @@ class RobotSC(RobotTCP): # self.assert_scan_stop() def move_gonio(self): - self.start_task('moveGonio') + self.start_task('mvGonio') self.wait_task_finished(TASK_WAIT_ROBOT_POLLING) self.assert_gonio() def move_park(self): - self.start_task('movePark') + self.start_task('mvPark') self.wait_task_finished(TASK_WAIT_ROBOT_POLLING) self.assert_park() def move_heater(self, speed=-1, to_bottom=True): - self.start_task('moveHeater', speed, to_bottom) + self.start_task('mvHeater', speed, to_bottom) self.wait_task_finished(TASK_WAIT_ROBOT_POLLING) if to_bottom: self.assert_heater_bottom() @@ -146,12 +146,12 @@ class RobotSC(RobotTCP): self.assert_home() def move_aux(self): - self.start_task('moveAux') + self.start_task('mvAux') self.wait_task_finished(TASK_WAIT_ROBOT_POLLING) self.assert_aux() def move_rt(self): - self.start_task('moveRT') + self.start_task('mvRT') self.wait_task_finished(TASK_WAIT_ROBOT_POLLING) self.assert_rt() diff --git a/script/motion/mount.py b/script/motion/mount.py index 0efad3e..d99cd3d 100644 --- a/script/motion/mount.py +++ b/script/motion/mount.py @@ -54,6 +54,7 @@ def mount(segment, puck, sample, force=False, read_dm=False, auto_unmount=False) smart_magnet.set_supress(False) time.sleep(0.2) #To better dectect sample + smart_magnet.apply_reverse() smart_magnet.apply_resting() time.sleep(0.5) if smart_magnet.check_mounted(idle_time=0.25, timeout = 1.0) == True: diff --git a/script/motion/tools.py b/script/motion/tools.py index bbc3d6b..f545c27 100644 --- a/script/motion/tools.py +++ b/script/motion/tools.py @@ -149,18 +149,19 @@ def assert_valid_address(segment, puck, sample): raise Exception ("Invalid address for RT gripper") if is_string(segment): segment = ord(segment.upper()) - ord('A') +1 - if segment<=0 or segment >6: - raise Exception ("Invalid segment") - if puck<=0 or puck >5: - raise Exception ("Invalid puck") - if sample<=0 or sample >16: - raise Exception ("Invalid sample") + if (segment<=0) or (segment >6): + raise Exception ("Invalid segment: " + str(segment)) + if (puck<=0) or (puck >5): + raise Exception ("Invalid puck: " +str( puck)) + if (sample<=0) or (sample >16): + raise Exception ("Invalid sample: " + str(sample)) if get_puck_dev(segment, puck).isDisabled(): raise Exception ("Puck is disabled") def assert_valid_sample(sample): - if sample<=0 or sample >16: - raise Exception ("Invalid sample") + sample = int(sample) + if (sample<=0) or (sample >16): + raise Exception ("Invalid sample: " + str(sample)) def get_puck_name(segment, puck): try: diff --git a/script/motion/unmount.py b/script/motion/unmount.py index 76eb2a7..a08fa6b 100644 --- a/script/motion/unmount.py +++ b/script/motion/unmount.py @@ -41,7 +41,8 @@ def unmount(segment = None, puck = None, sample = None, force=False, auto_unmoun if smart_magnet.get_supress() == True: smart_magnet.set_supress(False) time.sleep(0.2) - + + smart_magnet.apply_reverse() smart_magnet.apply_resting() if not force: