Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Needs["JLink`"]
- LoadJavaClass["java.util.Arrays"];
- ClearAll@ListenToISeismometer;
- InstallJava[]
- parser = StringCases[id__ ~~ ":" ~~ v__ ~~ "$" :>
- ToExpression /@ {id, v}][#] &;
- select[exp_, offset_, len_] := exp[[offset + 1 ;; offset + len]];
- dataset = <||>;
- plotAnalog = Range[14, 15];
- ListenToISeismometer[port_] :=
- JavaBlock@
- Module[{socket, packet, listen, record = Null, listening = True},
- packet =
- JavaNew["java.net.DatagramPacket", JavaNew["[B", 1024], 1024];
- listen[] :=
- If[$Failed =!= Quiet[socket@receive[packet], Java::excptn],
- str = JavaNew[
- "java.lang.String"
- , select @@ (packet /@ {getData[], getOffset[], getLength[]})
- ]@toString[];
- record = parser[str];
- record /. v_List :>
- Module[{ k = v[[1, 1]],
- l = v[[1, 2]]},
- If[KeyExistsQ[dataset, k],
- AppendTo[dataset[k], l],
- AppendTo[dataset, k -> {l}]];
- ]
- ];
- Row[{Button["Stop", listening = False],
- Dynamic[record]}, " "] // PrintTemporary;
- Dynamic[
- ListLinePlot[ #[[-100 ;; -1]] & /@
- Values[dataset[[Key /@ plotAnalog]]],
- PlotLegends -> plotAnalog, PlotRange -> {0, 1024},
- PlotLabel -> "引脚电压值", ImageSize -> Large]] // PrintTemporary;
- AbortProtect[socket = JavaNew["java.net.DatagramSocket", port];
- socket@setSoTimeout[1000];
- While[listening,
- listen[]
- ]; socket@close[]][[2, 1]]]
- If[Length[dataset[#]] > 1000, dataset[#] = dataset[#][[-1000 ;; -1]],
- 0] & /@ plotAnalog // Dynamic;
- ListenToISeismometer[5000];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement