Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. Needs["JLink`"]
  2. LoadJavaClass["java.util.Arrays"];
  3.  
  4. ClearAll@ListenToISeismometer;
  5. InstallJava[]
  6. parser = StringCases[id__ ~~ ":" ~~ v__ ~~ "$" :>
  7. ToExpression /@ {id, v}][#] &;
  8. select[exp_, offset_, len_] := exp[[offset + 1 ;; offset + len]];
  9. dataset = <||>;
  10. plotAnalog = Range[14, 15];
  11. ListenToISeismometer[port_] :=
  12. JavaBlock@
  13. Module[{socket, packet, listen, record = Null, listening = True},
  14. packet =
  15. JavaNew["java.net.DatagramPacket", JavaNew["[B", 1024], 1024];
  16. listen[] :=
  17. If[$Failed =!= Quiet[socket@receive[packet], Java::excptn],
  18. str = JavaNew[
  19. "java.lang.String"
  20. , select @@ (packet /@ {getData[], getOffset[], getLength[]})
  21. ]@toString[];
  22. record = parser[str];
  23. record /. v_List :>
  24. Module[{ k = v[[1, 1]],
  25. l = v[[1, 2]]},
  26. If[KeyExistsQ[dataset, k],
  27. AppendTo[dataset[k], l],
  28. AppendTo[dataset, k -> {l}]];
  29. ]
  30. ];
  31. Row[{Button["Stop", listening = False],
  32. Dynamic[record]}, " "] // PrintTemporary;
  33. Dynamic[
  34. ListLinePlot[ #[[-100 ;; -1]] & /@
  35. Values[dataset[[Key /@ plotAnalog]]],
  36. PlotLegends -> plotAnalog, PlotRange -> {0, 1024},
  37. PlotLabel -> "引脚电压值", ImageSize -> Large]] // PrintTemporary;
  38. AbortProtect[socket = JavaNew["java.net.DatagramSocket", port];
  39. socket@setSoTimeout[1000];
  40. While[listening,
  41. listen[]
  42. ]; socket@close[]][[2, 1]]]
  43. If[Length[dataset[#]] > 1000, dataset[#] = dataset[#][[-1000 ;; -1]],
  44. 0] & /@ plotAnalog // Dynamic;
  45. ListenToISeismometer[5000];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement