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. try {
  43. Thread.sleep(100);
  44. } catch (InterruptedException e) {
  45. e.printStackTrace();
  46. }
  47. }
  48. } catch (ExecutionException|InterruptedException e) {
  49. logger.warn("abs failed", e);
  50. return "abs failed: "+e.toString() ;
  51. }
  52. }
  53. @XRMethod(value = "abs", help = "abs")
  54. public static String abs(int targetPos, int speed) {
  55. try {
  56. logger.info("Absolute to {} speed {}", targetPos, speed);
  57. Main.fhm.bereitschaft();
  58. if(!Main.fhm.readStatus().get().enabled) {
  59. logger.info("Controller not enabled");
  60. return "Controller not enabled";
  61. }
  62. Main.fhm.direktAuftrag(targetPos, speed, 0, false);
  63. Thread.sleep(100);
  64. Main.fhm.direktAuftrag(targetPos, speed, 1, false);
  65. while(true) {
  66. boolean reached=checkPos(targetPos);
  67. if(reached) {
  68. logger.info("Reached {}", targetPos);
  69. return "OK";
  70. }
  71. try {
  72. Thread.sleep(100);
  73. } catch (InterruptedException e) {
  74. e.printStackTrace();
  75. }
  76. }
  77. } catch (ExecutionException|InterruptedException e) {
  78. logger.warn("abs failed", e);
  79. return "abs failed: "+e.toString();
  80. }
  81. }
  82. @XRMethod(value = "getpos", help = "getpos")
  83. public static int getpos() {
  84. logger.info("GetPos");
  85. try {
  86. return Main.fhm.readStatus().get().istPosition;
  87. } catch (InterruptedException e) {
  88. e.printStackTrace();
  89. } catch (ExecutionException e) {
  90. e.printStackTrace();
  91. }
  92. return -1;
  93. }
  94. @XRMethod(value = "ready", help = "ready")
  95. public static void ready() {
  96. logger.info("Ready Begin");
  97. Main.fhm.bereitschaft();
  98. logger.info("Ready End");
  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 e) {
  115. e.printStackTrace();
  116. } catch (InterruptedException e) {
  117. e.printStackTrace();
  118. }
  119. return false;
  120. }
  121. @XRMethod(value = "status", help = "Returns status")
  122. public static Map<String, Object> status() {
  123. var x=Main.fhm.readStatus();
  124. try {
  125. if(x==null)
  126. return null;
  127. var ret= x.get();
  128. Map<String, Object> m=new HashMap<>();
  129. m.put("opm", ret.istMoment);
  130. m.put("fct", ret.abs);
  131. m.put("rdyen", true);
  132. m.put("fault", ret.com);
  133. m.put("warn", ret.dev);
  134. m.put("open", ret.fault);
  135. m.put("enabled", ret.fct);
  136. m.put("ref", ret.ref);
  137. m.put("still", ret.still);
  138. m.put("dev", ret.dev);
  139. m.put("mov", ret.mov);
  140. m.put("teach", ret.teach);
  141. m.put("mc", ret.mc);
  142. m.put("ack", ret.ack);
  143. m.put("halt", ret.halt);
  144. m.put("func", ret.func);
  145. m.put("fgrp", ret.fgrp);
  146. m.put("fnum", ret.fnum);
  147. m.put("com", ret.com);
  148. m.put("abs", ret.abs);
  149. m.put("istMoment", ret.istMoment);
  150. m.put("istPosition", ret.istPosition);
  151. m.put("halt", ret.halt);
  152. return m;
  153. } catch (Exception e) {
  154. e.printStackTrace();
  155. return null;
  156. }
  157. }
  158. }