FestoXRServer.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package at.acdp.urweb.web;
  2. import at.acdp.urweb.Main;
  3. import at.acdp.urweb.fhpp.Status;
  4. import com.nmote.xr.XRMethod;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. import java.util.HashMap;
  8. import java.util.Map;
  9. import java.util.concurrent.ExecutionException;
  10. public class FestoXRServer {
  11. private final static Logger logger = LoggerFactory.getLogger(FestoXRServer.class);
  12. @XRMethod(value = "example.helloWorld", help = "Returns 'Helo ' + argument")
  13. public static String hello(Object s) {
  14. return "Hello '" + s + "'";
  15. }
  16. @XRMethod(value = "ref2", help = "ref")
  17. public static String ref(String a, String b) {
  18. return "ref";
  19. }
  20. @XRMethod(value = "rel", help = "rel")
  21. public static String rel(int relPos, int speed) {
  22. try {
  23. logger.info("rel {}", relPos);
  24. int curPos=Main.fhm.readStatus().get().istPosition;
  25. int targetPos=curPos+relPos;
  26. logger.info("Relative by {} from {} to {} speed {}", relPos, curPos, targetPos, speed);
  27. Main.fhm.bereitschaft();
  28. if(!Main.fhm.readStatus().get().enabled) {
  29. logger.info("Controller not enabled");
  30. return "Controller not enabled";
  31. }
  32. Main.fhm.direktAuftrag(relPos, speed,0, true);
  33. Thread.sleep(10);
  34. Main.fhm.direktAuftrag(relPos, speed, 1, true);
  35. Thread.sleep(10);
  36. while(true) {
  37. boolean reached=checkPos(targetPos);
  38. if(reached) {
  39. logger.info("Reached {}", targetPos);
  40. return "OK";
  41. }
  42. Thread.sleep(100);
  43. }
  44. } catch (ExecutionException|InterruptedException e) {
  45. logger.warn("abs failed", e);
  46. return "abs failed: "+e.toString() ;
  47. }
  48. }
  49. @XRMethod(value = "abs", help = "abs")
  50. public static String abs(int targetPos, int speed) {
  51. try {
  52. logger.info("Absolute to {} speed {}", targetPos, speed);
  53. Main.fhm.bereitschaft();
  54. Main.fhm.direktAuftrag(targetPos, speed, 0, false);
  55. Thread.sleep(100);
  56. Main.fhm.direktAuftrag(targetPos, speed, 1, false);
  57. while(true) {
  58. boolean reached=checkPos(targetPos);
  59. if(reached) {
  60. logger.info("Reached {}", targetPos);
  61. return "OK";
  62. }
  63. Thread.sleep(100);
  64. }
  65. } catch (InterruptedException e) {
  66. logger.warn("abs failed", e);
  67. return "abs failed: "+e.toString();
  68. }
  69. }
  70. @XRMethod(value = "getpos", help = "getpos")
  71. public static int getpos() {
  72. logger.info("GetPos");
  73. try {
  74. return Main.fhm.readStatus().get().istPosition;
  75. } catch (InterruptedException e) {
  76. e.printStackTrace();
  77. } catch (ExecutionException e) {
  78. e.printStackTrace();
  79. }
  80. return -1;
  81. }
  82. @XRMethod(value = "ready", help = "ready")
  83. public static String ready() {
  84. try {
  85. logger.info("Ready called");
  86. Main.fhm.bereitschaft();
  87. for(int i=0;i<5;i++) {
  88. Status s=Main.fhm.readStatus().get();
  89. if(s.enabled) {
  90. return "OK";
  91. }
  92. logger.info("Controller not enabled.." + i);
  93. Thread.sleep(100);
  94. }
  95. } catch (InterruptedException|ExecutionException e) {
  96. logger.warn("ready failed", e);
  97. }
  98. return "Controller not enabled";
  99. }
  100. private static boolean checkPos(int pos) {
  101. try {
  102. Status s= Main.fhm.readStatus().get();
  103. int curPos = s.istPosition;
  104. logger.info("curpos {} ({})", curPos, pos);
  105. if(curPos==pos) {
  106. logger.info("reached {}", pos);
  107. return true;
  108. }
  109. if(s.istMoment==0 && Math.abs(curPos-pos) <5) {
  110. logger.info("reached {} (moment=0)", pos);
  111. return true;
  112. }
  113. Thread.sleep(500);
  114. } catch (ExecutionException|InterruptedException e) {
  115. logger.warn("checkPos failed", e);
  116. }
  117. return false;
  118. }
  119. @XRMethod(value = "status", help = "Returns status")
  120. public static Map<String, Object> status() {
  121. var x=Main.fhm.readStatus();
  122. try {
  123. if(x==null)
  124. return null;
  125. var ret= x.get();
  126. Map<String, Object> m=new HashMap<>();
  127. m.put("opm1", ret.opm1);
  128. m.put("opm2", ret.opm2);
  129. m.put("fct", ret.fct);
  130. m.put("rdyen", ret.rdyen);
  131. m.put("fault", ret.fault);
  132. m.put("warn", ret.warn);
  133. m.put("open", ret.open);
  134. m.put("enabled", ret.enabled);
  135. m.put("ref", ret.ref);
  136. m.put("still", ret.still);
  137. m.put("dev", ret.dev);
  138. m.put("mov", ret.mov);
  139. m.put("teach", ret.teach);
  140. m.put("mc", ret.mc);
  141. m.put("ack", ret.ack);
  142. m.put("halt", ret.halt);
  143. m.put("func", ret.func);
  144. m.put("fgrp", ret.fgrp);
  145. m.put("fnum", ret.fnum);
  146. m.put("com", ret.com);
  147. m.put("abs", ret.abs);
  148. m.put("istMoment", ret.istMoment);
  149. m.put("istPosition", ret.istPosition);
  150. m.put("halt", ret.halt);
  151. return m;
  152. } catch (Exception e) {
  153. e.printStackTrace();
  154. return null;
  155. }
  156. }
  157. }