瀏覽代碼

retry abs on fail

Martin Kunz 4 年之前
父節點
當前提交
026029f85b
共有 1 個文件被更改,包括 20 次插入13 次删除
  1. 20 13
      src/main/java/at/acdp/urweb/web/FestoXRServer.java

+ 20 - 13
src/main/java/at/acdp/urweb/web/FestoXRServer.java

@@ -62,22 +62,29 @@ public class FestoXRServer {
     @XRMethod(value = "abs", help = "abs")
     public static String abs(int targetPos, int speed) {
         try {
-            logger.info("Absolute to {} speed {}", targetPos, speed);
-            Main.fhm.bereitschaft();
-
-            Main.fhm.direktAuftrag(targetPos, speed, 0, false);
-            Thread.sleep(100);
-            Main.fhm.direktAuftrag(targetPos, speed, 1, false);
-
+            int round=1;
             while(true) {
-                boolean reached=checkPos(targetPos);
-                if(reached) {
-                    logger.info("Reached {}", targetPos);
-                    return "OK";
-                }
+                logger.info("Absolute to {} speed {} try {}", targetPos, speed, round++);
+                Main.fhm.bereitschaft();
+                Main.fhm.direktAuftrag(targetPos, speed, 0, false);
+                Thread.sleep(100);
+                Main.fhm.direktAuftrag(targetPos, speed, 1, false);
+
+                while (true) {
+                    boolean reached = checkPos(targetPos);
+                    Status s = Main.fhm.readStatus().get();
+                    if (s.fault) {
+                        logger.warn("fault, retry");
+                        break;
+                    }
+                    if (reached) {
+                        logger.info("Reached {}", targetPos);
+                        return "OK";
+                    }
                     Thread.sleep(100);
+                }
             }
-        } catch (InterruptedException e) {
+        } catch (ExecutionException|InterruptedException e) {
             logger.warn("abs failed", e);
             return "abs failed: "+e.toString();
         }