FestoXRServer.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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.concurrent.ExecutionException;
  8. public class FestoXRServer {
  9. private final static Logger logger = LoggerFactory.getLogger(FestoXRServer.class);
  10. @XRMethod(value = "example.helloWorld", help = "Returns 'Helo ' + argument")
  11. public static String hello(Object s) {
  12. return "Hello '" + s + "'";
  13. }
  14. @XRMethod(value = "ref2", help = "ref")
  15. public static String ref(String a, String b) {
  16. return "ref";
  17. }
  18. @XRMethod(value = "rel", help = "rel")
  19. public static String rel(int relPos, int speed) {
  20. try {
  21. logger.info("rel {}", relPos);
  22. int curPos=Main.fhm.readStatus().get().istPosition;
  23. int targetPos=curPos+relPos;
  24. logger.info("Relative by {} from {} to {} speed {}", relPos, curPos, targetPos, speed);
  25. Main.fhm.bereitschaft();
  26. if(!Main.fhm.readStatus().get().enabled) {
  27. logger.info("Controller not enabled");
  28. return "Controller not enabled";
  29. }
  30. Main.fhm.direktAuftrag(relPos, speed,0, true);
  31. Thread.sleep(10);
  32. Main.fhm.direktAuftrag(relPos, speed, 1, true);
  33. Thread.sleep(10);
  34. while(true) {
  35. boolean reached=checkPos(targetPos);
  36. if(reached) {
  37. logger.info("Reached {}", targetPos);
  38. return "OK";
  39. }
  40. try {
  41. Thread.sleep(100);
  42. } catch (InterruptedException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. } catch (ExecutionException|InterruptedException e) {
  47. logger.warn("abs failed", e);
  48. return "abs failed: "+e.toString() ;
  49. }
  50. }
  51. @XRMethod(value = "abs", help = "abs")
  52. public static String abs(int targetPos, int speed) {
  53. try {
  54. logger.info("Absolute to {} speed {}", targetPos, speed);
  55. Main.fhm.bereitschaft();
  56. if(!Main.fhm.readStatus().get().enabled) {
  57. logger.info("Controller not enabled");
  58. return "Controller not enabled";
  59. }
  60. Main.fhm.direktAuftrag(targetPos, speed, 0, false);
  61. Thread.sleep(100);
  62. Main.fhm.direktAuftrag(targetPos, speed, 1, false);
  63. while(true) {
  64. boolean reached=checkPos(targetPos);
  65. if(reached) {
  66. logger.info("Reached {}", targetPos);
  67. return "OK";
  68. }
  69. try {
  70. Thread.sleep(100);
  71. } catch (InterruptedException e) {
  72. e.printStackTrace();
  73. }
  74. }
  75. } catch (ExecutionException|InterruptedException e) {
  76. logger.warn("abs failed", e);
  77. return "abs failed: "+e.toString();
  78. }
  79. }
  80. @XRMethod(value = "getpos", help = "getpos")
  81. public static int getpos() {
  82. logger.info("GetPos");
  83. try {
  84. return Main.fhm.readStatus().get().istPosition;
  85. } catch (InterruptedException e) {
  86. e.printStackTrace();
  87. } catch (ExecutionException e) {
  88. e.printStackTrace();
  89. }
  90. return -1;
  91. }
  92. @XRMethod(value = "ready", help = "ready")
  93. public static void ready() {
  94. logger.info("Ready Begin");
  95. Main.fhm.bereitschaft();
  96. logger.info("Ready End");
  97. }
  98. private static boolean checkPos(int pos) {
  99. try {
  100. Status s= Main.fhm.readStatus().get();
  101. int curPos = s.istPosition;
  102. logger.info("curpos {} ({})", curPos, pos);
  103. if(curPos==pos) {
  104. logger.info("reached {}", pos);
  105. return true;
  106. }
  107. if(s.istMoment==0 && Math.abs(curPos-pos) <5) {
  108. logger.info("reached {} (moment=0)", pos);
  109. return true;
  110. }
  111. Thread.sleep(500);
  112. } catch (ExecutionException e) {
  113. e.printStackTrace();
  114. } catch (InterruptedException e) {
  115. e.printStackTrace();
  116. }
  117. return false;
  118. }
  119. @XRMethod(value = "status", help = "Returns status")
  120. public static String status() {
  121. var x=Main.fhm.readStatus();
  122. try {
  123. return x==null?"<null>":x.get().toString();
  124. } catch (Exception e) {
  125. e.printStackTrace();
  126. return e.toString();
  127. }
  128. }
  129. }