Browse Source

存储数据 && 实现部分巴迪泰 LIS协议

master
zhaohe 3 weeks ago
parent
commit
cbde31efb3
  1. BIN
      bak/device0/20250713/20250713-app.db
  2. 2
      bak/device0/20250713/zapp_sub_module_config_initial_value.csv
  3. 530
      bak/device0/20250713/zapp_sub_module_reg_initial_value.csv
  4. 9
      src/main/java/a8k/app/channel/net/BiLisDoubleTrackTcpClient.java
  5. 90
      src/main/java/a8k/app/service/lis/BiLisDoubleTrackChannel.java
  6. 14
      src/main/java/a8k/app/utils/ThreadUtils.java
  7. 74
      src/main/java/a8k/app/utils/ZByteRxBuffer.java
  8. 4
      src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java
  9. 50
      src/main/java/a8k/extui/page/codetest/BiLisDoubleTrackChannelTestPage.java

BIN
bak/device0/20250713/20250713-app.db

2
bak/device0/20250713/zapp_sub_module_config_initial_value.csv
File diff suppressed because it is too large
View File

530
bak/device0/20250713/zapp_sub_module_reg_initial_value.csv

@ -0,0 +1,530 @@
id,mid,regIndex,regInitVal
1,HbotM,kreg_xyrobot_robot_type,0
2,HbotM,kreg_xyrobot_one_circle_pulse,73000
3,HbotM,kreg_xyrobot_one_circle_pulse_denominator,10
4,HbotM,kreg_xyrobot_ihold,10
5,HbotM,kreg_xyrobot_irun,31
6,HbotM,kreg_xyrobot_iholddelay,100
7,HbotM,kreg_xyrobot_iglobalscaler,128
8,HbotM,kreg_xyrobot_vstart,1
9,HbotM,kreg_xyrobot_a1,5
10,HbotM,kreg_xyrobot_amax,10
11,HbotM,kreg_xyrobot_v1,100
12,HbotM,kreg_xyrobot_dmax,10
13,HbotM,kreg_xyrobot_d1,5
14,HbotM,kreg_xyrobot_vstop,1
15,HbotM,kreg_xyrobot_tzerowait,300
16,HbotM,kreg_xyrobot_enc_resolution,1000
17,HbotM,kreg_xyrobot_enable_enc,1
18,HbotM,kreg_xyrobot_x_shaft,0
19,HbotM,kreg_xyrobot_y_shaft,1
20,HbotM,kreg_xyrobot_min_x,-2000
21,HbotM,kreg_xyrobot_min_y,-2000
22,HbotM,kreg_xyrobot_max_x,58140
23,HbotM,kreg_xyrobot_max_y,42580
24,HbotM,kreg_xyrobot_run_to_zero_speed,60
25,HbotM,kreg_xyrobot_look_zero_edge_speed,10
26,HbotM,kreg_xyrobot_shift_x,-90
27,HbotM,kreg_xyrobot_shift_y,62
28,HbotM,kreg_xyrobot_pos_devi_tolerance,200
29,HbotM,kreg_xyrobot_io_trigger_append_distance,10
30,HbotM,kreg_xyrobot_default_velocity,800
31,PlatesBoxYM,kreg_step_motor_shaft,1
32,PlatesBoxYM,kreg_step_motor_one_circle_pulse,60
33,PlatesBoxYM,kreg_step_motor_one_circle_pulse_denominator,1
34,PlatesBoxYM,kreg_step_motor_default_velocity,800
35,PlatesBoxYM,kreg_step_motor_ihold,4
36,PlatesBoxYM,kreg_step_motor_irun,5
37,PlatesBoxYM,kreg_step_motor_iholddelay,100
38,PlatesBoxYM,kreg_step_motor_iglobalscaler,0
39,PlatesBoxYM,kreg_step_motor_mres,0
40,PlatesBoxYM,kreg_step_motor_run_to_zero_speed,300
41,PlatesBoxYM,kreg_step_motor_look_zero_edge_speed,100
42,PlatesBoxYM,kreg_step_motor_max_d,0
43,PlatesBoxYM,kreg_step_motor_min_d,0
44,PlatesBoxYM,kreg_step_motor_in_debug_mode,0
45,PlatesBoxYM,kreg_step_motor_vstart,100
46,PlatesBoxYM,kreg_step_motor_a1,15
47,PlatesBoxYM,kreg_step_motor_amax,30
48,PlatesBoxYM,kreg_step_motor_v1,300
49,PlatesBoxYM,kreg_step_motor_dmax,30
50,PlatesBoxYM,kreg_step_motor_d1,15
51,PlatesBoxYM,kreg_step_motor_vstop,100
52,PlatesBoxYM,kreg_step_motor_tzerowait,0
53,PlatesBoxYM,kreg_step_motor_enc_resolution,0
54,PlatesBoxYM,kreg_step_motor_enable_enc,0
55,PlatesBoxYM,kreg_step_motor_dzero_pos,0
56,PlatesBoxYM,kret_step_motor_pos_devi_tolerance,5
57,PlatesBoxYM,kret_step_motor_io_trigger_append_distance,10
58,PlatesBoxPusherM,kreg_step_motor_shaft,1
59,PlatesBoxPusherM,kreg_step_motor_one_circle_pulse,80
60,PlatesBoxPusherM,kreg_step_motor_one_circle_pulse_denominator,1
61,PlatesBoxPusherM,kreg_step_motor_default_velocity,1200
62,PlatesBoxPusherM,kreg_step_motor_ihold,4
63,PlatesBoxPusherM,kreg_step_motor_irun,9
64,PlatesBoxPusherM,kreg_step_motor_iholddelay,100
65,PlatesBoxPusherM,kreg_step_motor_iglobalscaler,0
66,PlatesBoxPusherM,kreg_step_motor_mres,0
67,PlatesBoxPusherM,kreg_step_motor_run_to_zero_speed,500
68,PlatesBoxPusherM,kreg_step_motor_look_zero_edge_speed,50
69,PlatesBoxPusherM,kreg_step_motor_max_d,0
70,PlatesBoxPusherM,kreg_step_motor_min_d,0
71,PlatesBoxPusherM,kreg_step_motor_in_debug_mode,0
72,PlatesBoxPusherM,kreg_step_motor_vstart,100
73,PlatesBoxPusherM,kreg_step_motor_a1,50
74,PlatesBoxPusherM,kreg_step_motor_amax,300
75,PlatesBoxPusherM,kreg_step_motor_v1,300
76,PlatesBoxPusherM,kreg_step_motor_dmax,300
77,PlatesBoxPusherM,kreg_step_motor_d1,50
78,PlatesBoxPusherM,kreg_step_motor_vstop,100
79,PlatesBoxPusherM,kreg_step_motor_tzerowait,0
80,PlatesBoxPusherM,kreg_step_motor_enc_resolution,0
81,PlatesBoxPusherM,kreg_step_motor_enable_enc,0
82,PlatesBoxPusherM,kreg_step_motor_dzero_pos,0
83,PlatesBoxPusherM,kret_step_motor_pos_devi_tolerance,5
84,PlatesBoxPusherM,kret_step_motor_io_trigger_append_distance,3
85,ShakeModClampingM,kreg_step_motor_shaft,0
86,ShakeModClampingM,kreg_step_motor_one_circle_pulse,15
87,ShakeModClampingM,kreg_step_motor_one_circle_pulse_denominator,1
88,ShakeModClampingM,kreg_step_motor_default_velocity,1200
89,ShakeModClampingM,kreg_step_motor_ihold,10
90,ShakeModClampingM,kreg_step_motor_irun,31
91,ShakeModClampingM,kreg_step_motor_iholddelay,10
92,ShakeModClampingM,kreg_step_motor_iglobalscaler,0
93,ShakeModClampingM,kreg_step_motor_mres,0
94,ShakeModClampingM,kreg_step_motor_run_to_zero_speed,300
95,ShakeModClampingM,kreg_step_motor_look_zero_edge_speed,100
96,ShakeModClampingM,kreg_step_motor_max_d,0
97,ShakeModClampingM,kreg_step_motor_min_d,0
98,ShakeModClampingM,kreg_step_motor_in_debug_mode,0
99,ShakeModClampingM,kreg_step_motor_vstart,100
100,ShakeModClampingM,kreg_step_motor_a1,50
101,ShakeModClampingM,kreg_step_motor_amax,300
102,ShakeModClampingM,kreg_step_motor_v1,300
103,ShakeModClampingM,kreg_step_motor_dmax,300
104,ShakeModClampingM,kreg_step_motor_d1,50
105,ShakeModClampingM,kreg_step_motor_vstop,100
106,ShakeModClampingM,kreg_step_motor_tzerowait,0
107,ShakeModClampingM,kreg_step_motor_enc_resolution,0
108,ShakeModClampingM,kreg_step_motor_enable_enc,0
109,ShakeModClampingM,kreg_step_motor_dzero_pos,0
110,ShakeModClampingM,kret_step_motor_pos_devi_tolerance,5
111,ShakeModClampingM,kret_step_motor_io_trigger_append_distance,4
112,ShakeModGripperZM,kreg_step_motor_shaft,0
113,ShakeModGripperZM,kreg_step_motor_one_circle_pulse,200
114,ShakeModGripperZM,kreg_step_motor_one_circle_pulse_denominator,1
115,ShakeModGripperZM,kreg_step_motor_default_velocity,500
116,ShakeModGripperZM,kreg_step_motor_ihold,7
117,ShakeModGripperZM,kreg_step_motor_irun,12
118,ShakeModGripperZM,kreg_step_motor_iholddelay,10
119,ShakeModGripperZM,kreg_step_motor_iglobalscaler,0
120,ShakeModGripperZM,kreg_step_motor_mres,0
121,ShakeModGripperZM,kreg_step_motor_run_to_zero_speed,70
122,ShakeModGripperZM,kreg_step_motor_look_zero_edge_speed,20
123,ShakeModGripperZM,kreg_step_motor_max_d,0
124,ShakeModGripperZM,kreg_step_motor_min_d,0
125,ShakeModGripperZM,kreg_step_motor_in_debug_mode,0
126,ShakeModGripperZM,kreg_step_motor_vstart,20
127,ShakeModGripperZM,kreg_step_motor_a1,20
128,ShakeModGripperZM,kreg_step_motor_amax,50
129,ShakeModGripperZM,kreg_step_motor_v1,50
130,ShakeModGripperZM,kreg_step_motor_dmax,50
131,ShakeModGripperZM,kreg_step_motor_d1,20
132,ShakeModGripperZM,kreg_step_motor_vstop,20
133,ShakeModGripperZM,kreg_step_motor_tzerowait,0
134,ShakeModGripperZM,kreg_step_motor_enc_resolution,0
135,ShakeModGripperZM,kreg_step_motor_enable_enc,0
136,ShakeModGripperZM,kreg_step_motor_dzero_pos,0
137,ShakeModGripperZM,kret_step_motor_pos_devi_tolerance,20
138,ShakeModGripperZM,kret_step_motor_io_trigger_append_distance,20
139,ShakeModShakeM,kreg_step_motor_shaft,1
140,ShakeModShakeM,kreg_step_motor_one_circle_pulse,120
141,ShakeModShakeM,kreg_step_motor_one_circle_pulse_denominator,1
142,ShakeModShakeM,kreg_step_motor_default_velocity,600
143,ShakeModShakeM,kreg_step_motor_ihold,10
144,ShakeModShakeM,kreg_step_motor_irun,31
145,ShakeModShakeM,kreg_step_motor_iholddelay,10
146,ShakeModShakeM,kreg_step_motor_iglobalscaler,0
147,ShakeModShakeM,kreg_step_motor_mres,2
148,ShakeModShakeM,kreg_step_motor_run_to_zero_speed,100
149,ShakeModShakeM,kreg_step_motor_look_zero_edge_speed,50
150,ShakeModShakeM,kreg_step_motor_max_d,0
151,ShakeModShakeM,kreg_step_motor_min_d,0
152,ShakeModShakeM,kreg_step_motor_in_debug_mode,0
153,ShakeModShakeM,kreg_step_motor_vstart,50
154,ShakeModShakeM,kreg_step_motor_a1,300
155,ShakeModShakeM,kreg_step_motor_amax,600
156,ShakeModShakeM,kreg_step_motor_v1,200
157,ShakeModShakeM,kreg_step_motor_dmax,600
158,ShakeModShakeM,kreg_step_motor_d1,300
159,ShakeModShakeM,kreg_step_motor_vstop,100
160,ShakeModShakeM,kreg_step_motor_tzerowait,100
161,ShakeModShakeM,kreg_step_motor_enc_resolution,0
162,ShakeModShakeM,kreg_step_motor_enable_enc,0
163,ShakeModShakeM,kreg_step_motor_dzero_pos,0
164,ShakeModShakeM,kret_step_motor_pos_devi_tolerance,5
165,ShakeModShakeM,kret_step_motor_io_trigger_append_distance,10
166,ShakeModGripperYSV,kreg_mini_servo_pos,115
167,ShakeModGripperYSV,kreg_mini_servo_limit_velocity,10000
168,ShakeModGripperYSV,kreg_mini_servo_limit_torque,450
169,ShakeModGripperYSV,kreg_mini_servo_protective_torque,900
170,ShakeModGripperYSV,kreg_mini_servo_target_pos_tolerance,15
171,ShakeModGripperSV,kreg_mini_servo_pos,1503
172,ShakeModGripperSV,kreg_mini_servo_limit_velocity,10000
173,ShakeModGripperSV,kreg_mini_servo_limit_torque,500
174,ShakeModGripperSV,kreg_mini_servo_protective_torque,800
175,ShakeModGripperSV,kreg_mini_servo_target_pos_tolerance,15
176,ShakeModTubeScanerClampingSV,kreg_mini_servo_pos,1800
177,ShakeModTubeScanerClampingSV,kreg_mini_servo_limit_velocity,10000
178,ShakeModTubeScanerClampingSV,kreg_mini_servo_limit_torque,300
179,ShakeModTubeScanerClampingSV,kreg_mini_servo_protective_torque,800
180,ShakeModTubeScanerClampingSV,kreg_mini_servo_target_pos_tolerance,15
181,ShakeModTubeScanerRotateSV,kreg_mini_servo_pos,2666
182,ShakeModTubeScanerRotateSV,kreg_mini_servo_limit_velocity,10000
183,ShakeModTubeScanerRotateSV,kreg_mini_servo_limit_torque,300
184,ShakeModTubeScanerRotateSV,kreg_mini_servo_protective_torque,800
185,ShakeModTubeScanerRotateSV,kreg_mini_servo_target_pos_tolerance,15
186,ShakeModLiftingSV,kreg_mini_servo_pos,642
187,ShakeModLiftingSV,kreg_mini_servo_limit_velocity,800
188,ShakeModLiftingSV,kreg_mini_servo_limit_torque,100
189,ShakeModLiftingSV,kreg_mini_servo_protective_torque,800
190,ShakeModLiftingSV,kreg_mini_servo_target_pos_tolerance,30
191,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_target,250
192,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_nowoutput,0
193,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_feedbackval,267
194,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_kp,6000
195,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_ki,100
196,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_kd,0
197,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_max_output,100
198,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_min_output,-100
199,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_max_integral,150
200,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_min_integral,-150
201,PlatesBoxTCM,kreg_water_cooling_tmp_controler_pid_compute_interval,9000
202,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_target,250
203,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_nowoutput,0
204,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_feedbackval,269
205,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_kp,6000
206,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_ki,100
207,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_kd,0
208,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_max_output,100
209,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_min_output,-100
210,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_max_integral,150
211,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_min_integral,-150
212,IncubatorTCM,kreg_water_cooling_tmp_controler_pid_compute_interval,9000
213,FeedingModInfeedM,kreg_step_motor_shaft,0
214,FeedingModInfeedM,kreg_step_motor_one_circle_pulse,15
215,FeedingModInfeedM,kreg_step_motor_one_circle_pulse_denominator,1
216,FeedingModInfeedM,kreg_step_motor_default_velocity,150
217,FeedingModInfeedM,kreg_step_motor_ihold,3
218,FeedingModInfeedM,kreg_step_motor_irun,31
219,FeedingModInfeedM,kreg_step_motor_iholddelay,10
220,FeedingModInfeedM,kreg_step_motor_iglobalscaler,0
221,FeedingModInfeedM,kreg_step_motor_mres,0
222,FeedingModInfeedM,kreg_step_motor_run_to_zero_speed,0
223,FeedingModInfeedM,kreg_step_motor_look_zero_edge_speed,0
224,FeedingModInfeedM,kreg_step_motor_max_d,0
225,FeedingModInfeedM,kreg_step_motor_min_d,0
226,FeedingModInfeedM,kreg_step_motor_in_debug_mode,0
227,FeedingModInfeedM,kreg_step_motor_vstart,100
228,FeedingModInfeedM,kreg_step_motor_a1,10
229,FeedingModInfeedM,kreg_step_motor_amax,10
230,FeedingModInfeedM,kreg_step_motor_v1,300
231,FeedingModInfeedM,kreg_step_motor_dmax,2
232,FeedingModInfeedM,kreg_step_motor_d1,2
233,FeedingModInfeedM,kreg_step_motor_vstop,100
234,FeedingModInfeedM,kreg_step_motor_tzerowait,0
235,FeedingModInfeedM,kreg_step_motor_enc_resolution,0
236,FeedingModInfeedM,kreg_step_motor_enable_enc,0
237,FeedingModInfeedM,kreg_step_motor_dzero_pos,0
238,FeedingModInfeedM,kret_step_motor_pos_devi_tolerance,0
239,FeedingModInfeedM,kret_step_motor_io_trigger_append_distance,0
240,FeedingModXM,kreg_step_motor_shaft,0
241,FeedingModXM,kreg_step_motor_one_circle_pulse,100
242,FeedingModXM,kreg_step_motor_one_circle_pulse_denominator,1
243,FeedingModXM,kreg_step_motor_default_velocity,1100
244,FeedingModXM,kreg_step_motor_ihold,3
245,FeedingModXM,kreg_step_motor_irun,8
246,FeedingModXM,kreg_step_motor_iholddelay,10
247,FeedingModXM,kreg_step_motor_iglobalscaler,0
248,FeedingModXM,kreg_step_motor_mres,0
249,FeedingModXM,kreg_step_motor_run_to_zero_speed,600
250,FeedingModXM,kreg_step_motor_look_zero_edge_speed,100
251,FeedingModXM,kreg_step_motor_max_d,0
252,FeedingModXM,kreg_step_motor_min_d,0
253,FeedingModXM,kreg_step_motor_in_debug_mode,0
254,FeedingModXM,kreg_step_motor_vstart,50
255,FeedingModXM,kreg_step_motor_a1,150
256,FeedingModXM,kreg_step_motor_amax,150
257,FeedingModXM,kreg_step_motor_v1,400
258,FeedingModXM,kreg_step_motor_dmax,150
259,FeedingModXM,kreg_step_motor_d1,150
260,FeedingModXM,kreg_step_motor_vstop,50
261,FeedingModXM,kreg_step_motor_tzerowait,0
262,FeedingModXM,kreg_step_motor_enc_resolution,0
263,FeedingModXM,kreg_step_motor_enable_enc,0
264,FeedingModXM,kreg_step_motor_dzero_pos,0
265,FeedingModXM,kret_step_motor_pos_devi_tolerance,5
266,FeedingModXM,kret_step_motor_io_trigger_append_distance,10
267,FeedingModOutfeedM,kreg_step_motor_shaft,1
268,FeedingModOutfeedM,kreg_step_motor_one_circle_pulse,15
269,FeedingModOutfeedM,kreg_step_motor_one_circle_pulse_denominator,1
270,FeedingModOutfeedM,kreg_step_motor_default_velocity,150
271,FeedingModOutfeedM,kreg_step_motor_ihold,3
272,FeedingModOutfeedM,kreg_step_motor_irun,31
273,FeedingModOutfeedM,kreg_step_motor_iholddelay,10
274,FeedingModOutfeedM,kreg_step_motor_iglobalscaler,0
275,FeedingModOutfeedM,kreg_step_motor_mres,0
276,FeedingModOutfeedM,kreg_step_motor_run_to_zero_speed,0
277,FeedingModOutfeedM,kreg_step_motor_look_zero_edge_speed,0
278,FeedingModOutfeedM,kreg_step_motor_max_d,0
279,FeedingModOutfeedM,kreg_step_motor_min_d,0
280,FeedingModOutfeedM,kreg_step_motor_in_debug_mode,0
281,FeedingModOutfeedM,kreg_step_motor_vstart,100
282,FeedingModOutfeedM,kreg_step_motor_a1,10
283,FeedingModOutfeedM,kreg_step_motor_amax,10
284,FeedingModOutfeedM,kreg_step_motor_v1,300
285,FeedingModOutfeedM,kreg_step_motor_dmax,2
286,FeedingModOutfeedM,kreg_step_motor_d1,2
287,FeedingModOutfeedM,kreg_step_motor_vstop,100
288,FeedingModOutfeedM,kreg_step_motor_tzerowait,0
289,FeedingModOutfeedM,kreg_step_motor_enc_resolution,0
290,FeedingModOutfeedM,kreg_step_motor_enable_enc,0
291,FeedingModOutfeedM,kreg_step_motor_dzero_pos,0
292,FeedingModOutfeedM,kret_step_motor_pos_devi_tolerance,0
293,FeedingModOutfeedM,kret_step_motor_io_trigger_append_distance,0
294,IncubatorRotateCtrlM,kreg_step_motor_shaft,1
295,IncubatorRotateCtrlM,kreg_step_motor_one_circle_pulse,400
296,IncubatorRotateCtrlM,kreg_step_motor_one_circle_pulse_denominator,1
297,IncubatorRotateCtrlM,kreg_step_motor_default_velocity,1200
298,IncubatorRotateCtrlM,kreg_step_motor_ihold,20
299,IncubatorRotateCtrlM,kreg_step_motor_irun,31
300,IncubatorRotateCtrlM,kreg_step_motor_iholddelay,100
301,IncubatorRotateCtrlM,kreg_step_motor_iglobalscaler,64
302,IncubatorRotateCtrlM,kreg_step_motor_mres,0
303,IncubatorRotateCtrlM,kreg_step_motor_run_to_zero_speed,300
304,IncubatorRotateCtrlM,kreg_step_motor_look_zero_edge_speed,300
305,IncubatorRotateCtrlM,kreg_step_motor_max_d,0
306,IncubatorRotateCtrlM,kreg_step_motor_min_d,0
307,IncubatorRotateCtrlM,kreg_step_motor_in_debug_mode,0
308,IncubatorRotateCtrlM,kreg_step_motor_vstart,100
309,IncubatorRotateCtrlM,kreg_step_motor_a1,30
310,IncubatorRotateCtrlM,kreg_step_motor_amax,30
311,IncubatorRotateCtrlM,kreg_step_motor_v1,300
312,IncubatorRotateCtrlM,kreg_step_motor_dmax,30
313,IncubatorRotateCtrlM,kreg_step_motor_d1,30
314,IncubatorRotateCtrlM,kreg_step_motor_vstop,100
315,IncubatorRotateCtrlM,kreg_step_motor_tzerowait,100
316,IncubatorRotateCtrlM,kreg_step_motor_enc_resolution,1000
317,IncubatorRotateCtrlM,kreg_step_motor_enable_enc,1
318,IncubatorRotateCtrlM,kreg_step_motor_dzero_pos,0
319,IncubatorRotateCtrlM,kret_step_motor_pos_devi_tolerance,30
320,IncubatorRotateCtrlM,kret_step_motor_io_trigger_append_distance,10
327,PipetteMod,kreg_pipette_zm_shaft,0
328,PipetteMod,kreg_pipette_zm_one_circle_pulse,80
329,PipetteMod,kreg_pipette_zm_one_circle_pulse_denominator,1
330,PipetteMod,kreg_pipette_zm_default_velocity,1200
331,PipetteMod,kreg_pipette_zm_ihold,7
332,PipetteMod,kreg_pipette_zm_irun,7
333,PipetteMod,kreg_pipette_zm_iholddelay,10
334,PipetteMod,kreg_pipette_zm_iglobalscaler,0
335,PipetteMod,kreg_pipette_zm_run_to_zero_speed,600
336,PipetteMod,kreg_pipette_zm_look_zero_edge_speed,100
337,PipetteMod,kreg_pipette_zm_max_d,0
338,PipetteMod,kreg_pipette_zm_min_d,0
339,PipetteMod,kreg_pipette_zm_vstart,30
340,PipetteMod,kreg_pipette_zm_a1,200
341,PipetteMod,kreg_pipette_zm_amax,600
342,PipetteMod,kreg_pipette_zm_v1,500
343,PipetteMod,kreg_pipette_zm_dmax,600
344,PipetteMod,kreg_pipette_zm_d1,200
345,PipetteMod,kreg_pipette_zm_vstop,30
346,PipetteMod,kreg_pipette_zm_tzerowait,0
347,PipetteMod,kreg_pipette_zm_enc_resolution,0
348,PipetteMod,kreg_pipette_zm_enable_enc,0
349,PipetteMod,kreg_pipette_zm_dzero,92
350,OptModScannerM,kreg_step_motor_shaft,1
351,OptModScannerM,kreg_step_motor_one_circle_pulse,1574803
352,OptModScannerM,kreg_step_motor_one_circle_pulse_denominator,10000
353,OptModScannerM,kreg_step_motor_default_velocity,1100
354,OptModScannerM,kreg_step_motor_ihold,3
355,OptModScannerM,kreg_step_motor_irun,14
356,OptModScannerM,kreg_step_motor_iholddelay,1000
357,OptModScannerM,kreg_step_motor_iglobalscaler,0
358,OptModScannerM,kreg_step_motor_mres,2
359,OptModScannerM,kreg_step_motor_run_to_zero_speed,600
360,OptModScannerM,kreg_step_motor_look_zero_edge_speed,100
361,OptModScannerM,kreg_step_motor_max_d,0
362,OptModScannerM,kreg_step_motor_min_d,0
363,OptModScannerM,kreg_step_motor_in_debug_mode,0
364,OptModScannerM,kreg_step_motor_vstart,300
365,OptModScannerM,kreg_step_motor_a1,200
366,OptModScannerM,kreg_step_motor_amax,500
367,OptModScannerM,kreg_step_motor_v1,800
368,OptModScannerM,kreg_step_motor_dmax,500
369,OptModScannerM,kreg_step_motor_d1,200
370,OptModScannerM,kreg_step_motor_vstop,300
371,OptModScannerM,kreg_step_motor_tzerowait,0
372,OptModScannerM,kreg_step_motor_enc_resolution,0
373,OptModScannerM,kreg_step_motor_enable_enc,0
374,OptModScannerM,kreg_step_motor_dzero_pos,0
375,OptModScannerM,kret_step_motor_pos_devi_tolerance,100
376,OptModScannerM,kret_step_motor_io_trigger_append_distance,10
377,OptModPullM,kreg_step_motor_shaft,0
378,OptModPullM,kreg_step_motor_one_circle_pulse,80
379,OptModPullM,kreg_step_motor_one_circle_pulse_denominator,1
380,OptModPullM,kreg_step_motor_default_velocity,1100
381,OptModPullM,kreg_step_motor_ihold,6
382,OptModPullM,kreg_step_motor_irun,8
383,OptModPullM,kreg_step_motor_iholddelay,1000
384,OptModPullM,kreg_step_motor_iglobalscaler,0
385,OptModPullM,kreg_step_motor_mres,1
386,OptModPullM,kreg_step_motor_run_to_zero_speed,500
387,OptModPullM,kreg_step_motor_look_zero_edge_speed,200
388,OptModPullM,kreg_step_motor_max_d,0
389,OptModPullM,kreg_step_motor_min_d,0
390,OptModPullM,kreg_step_motor_in_debug_mode,0
391,OptModPullM,kreg_step_motor_vstart,100
392,OptModPullM,kreg_step_motor_a1,100
393,OptModPullM,kreg_step_motor_amax,300
394,OptModPullM,kreg_step_motor_v1,800
395,OptModPullM,kreg_step_motor_dmax,300
396,OptModPullM,kreg_step_motor_d1,100
397,OptModPullM,kreg_step_motor_vstop,100
398,OptModPullM,kreg_step_motor_tzerowait,100
399,OptModPullM,kreg_step_motor_enc_resolution,0
400,OptModPullM,kreg_step_motor_enable_enc,0
401,OptModPullM,kreg_step_motor_dzero_pos,0
402,OptModPullM,kret_step_motor_pos_devi_tolerance,30
403,OptModPullM,kret_step_motor_io_trigger_append_distance,10
404,OptMod,kreg_a8k_opt_t_pos_offset,3508
405,OptMod,kreg_a8k_opt_f_pos_offset,2800
406,OptMod,kreg_a8k_opt_t_reverse_scan_pos_offset,2308
407,OptMod,kreg_a8k_opt_f_reverse_scan_pos_offset,1600
408,OptMod,kreg_a8k_opt_scan_step_interval,1
409,OptMod,kreg_a8k_opt_scan_pointnum,1200
419,PipetteMod,kreg_pipette_zm_pos_devi_tolerance,20
420,PipetteMod,kreg_pipette_zm_io_trigger_append_distance,20
421,PipetteMod,kreg_pipette_zm_mres,0
422,PlatesBoxYM,kreg_step_motor_low_velocity,0
423,PlatesBoxYM,kreg_step_motor_mid_velocity,0
424,PlatesBoxYM,kreg_step_motor_high_velocity,0
425,PlatesBoxPusherM,kreg_step_motor_low_velocity,0
426,PlatesBoxPusherM,kreg_step_motor_mid_velocity,0
427,PlatesBoxPusherM,kreg_step_motor_high_velocity,0
428,ShakeModClampingM,kreg_step_motor_low_velocity,0
429,ShakeModClampingM,kreg_step_motor_mid_velocity,0
430,ShakeModClampingM,kreg_step_motor_high_velocity,0
431,ShakeModGripperZM,kreg_step_motor_low_velocity,100
432,ShakeModGripperZM,kreg_step_motor_mid_velocity,500
433,ShakeModGripperZM,kreg_step_motor_high_velocity,500
434,ShakeModShakeM,kreg_step_motor_low_velocity,0
435,ShakeModShakeM,kreg_step_motor_mid_velocity,0
436,ShakeModShakeM,kreg_step_motor_high_velocity,0
437,FeedingModInfeedM,kreg_step_motor_low_velocity,0
438,FeedingModInfeedM,kreg_step_motor_mid_velocity,0
439,FeedingModInfeedM,kreg_step_motor_high_velocity,0
440,FeedingModXM,kreg_step_motor_low_velocity,0
441,FeedingModXM,kreg_step_motor_mid_velocity,0
442,FeedingModXM,kreg_step_motor_high_velocity,0
443,FeedingModOutfeedM,kreg_step_motor_low_velocity,0
444,FeedingModOutfeedM,kreg_step_motor_mid_velocity,0
445,FeedingModOutfeedM,kreg_step_motor_high_velocity,0
446,IncubatorRotateCtrlM,kreg_step_motor_low_velocity,0
447,IncubatorRotateCtrlM,kreg_step_motor_mid_velocity,0
448,IncubatorRotateCtrlM,kreg_step_motor_high_velocity,0
449,OptModScannerM,kreg_step_motor_low_velocity,0
450,OptModScannerM,kreg_step_motor_mid_velocity,0
451,OptModScannerM,kreg_step_motor_high_velocity,0
452,OptModPullM,kreg_step_motor_low_velocity,0
453,OptModPullM,kreg_step_motor_mid_velocity,0
454,OptModPullM,kreg_step_motor_high_velocity,0
455,ShakeModGripperYSV,kreg_mini_servo_servo_min_angle,0
456,ShakeModGripperYSV,kreg_mini_servo_servo_max_angle,4095
457,ShakeModGripperYSV,kreg_mini_servo_servo_max_temp,70
458,ShakeModGripperYSV,kreg_mini_servo_servo_max_voltage,90
459,ShakeModGripperYSV,kreg_mini_servo_servo_min_voltage,35
460,ShakeModGripperYSV,kreg_mini_servo_servo_max_torque,1000
461,ShakeModGripperYSV,kreg_mini_servo_servo_unload_condition,44
462,ShakeModGripperYSV,kreg_mini_servo_servo_protect_current,500
463,ShakeModGripperYSV,kreg_mini_servo_servo_protect_torque,20
464,ShakeModGripperYSV,kreg_mini_servo_servo_protect_time,200
465,ShakeModGripperYSV,kreg_mini_servo_servo_overload_torque,80
466,ShakeModGripperYSV,kreg_mini_servo_servo_acc,0
467,ShakeModGripperSV,kreg_mini_servo_servo_min_angle,0
468,ShakeModGripperSV,kreg_mini_servo_servo_max_angle,4095
469,ShakeModGripperSV,kreg_mini_servo_servo_max_temp,70
470,ShakeModGripperSV,kreg_mini_servo_servo_max_voltage,90
471,ShakeModGripperSV,kreg_mini_servo_servo_min_voltage,40
472,ShakeModGripperSV,kreg_mini_servo_servo_max_torque,1000
473,ShakeModGripperSV,kreg_mini_servo_servo_unload_condition,44
474,ShakeModGripperSV,kreg_mini_servo_servo_protect_current,500
475,ShakeModGripperSV,kreg_mini_servo_servo_protect_torque,20
476,ShakeModGripperSV,kreg_mini_servo_servo_protect_time,200
477,ShakeModGripperSV,kreg_mini_servo_servo_overload_torque,80
478,ShakeModGripperSV,kreg_mini_servo_servo_acc,0
479,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_min_angle,0
480,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_max_angle,4095
481,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_max_temp,70
482,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_max_voltage,90
483,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_min_voltage,40
484,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_max_torque,1000
485,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_unload_condition,44
486,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_protect_current,500
487,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_protect_torque,20
488,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_protect_time,200
489,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_overload_torque,80
490,ShakeModTubeScanerClampingSV,kreg_mini_servo_servo_acc,0
491,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_min_angle,0
492,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_max_angle,0
493,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_max_temp,70
494,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_max_voltage,90
495,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_min_voltage,45
496,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_max_torque,1000
497,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_unload_condition,32
498,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_protect_current,256
499,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_protect_torque,0
500,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_protect_time,0
501,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_overload_torque,0
502,ShakeModTubeScanerRotateSV,kreg_mini_servo_servo_acc,0
503,ShakeModLiftingSV,kreg_mini_servo_servo_min_angle,20
504,ShakeModLiftingSV,kreg_mini_servo_servo_max_angle,1003
505,ShakeModLiftingSV,kreg_mini_servo_servo_max_temp,70
506,ShakeModLiftingSV,kreg_mini_servo_servo_max_voltage,90
507,ShakeModLiftingSV,kreg_mini_servo_servo_min_voltage,45
508,ShakeModLiftingSV,kreg_mini_servo_servo_max_torque,1000
509,ShakeModLiftingSV,kreg_mini_servo_servo_unload_condition,32
510,ShakeModLiftingSV,kreg_mini_servo_servo_protect_current,256
511,ShakeModLiftingSV,kreg_mini_servo_servo_protect_torque,0
512,ShakeModLiftingSV,kreg_mini_servo_servo_protect_time,0
513,ShakeModLiftingSV,kreg_mini_servo_servo_overload_torque,0
514,ShakeModLiftingSV,kreg_mini_servo_servo_acc,0
515,OptMod,kreg_a8k_opt_f_scan_vdefault,280
516,OptMod,kreg_a8k_opt_f_scan_vstart,280
517,OptMod,kreg_a8k_opt_f_scan_a1,280
518,OptMod,kreg_a8k_opt_f_scan_amax,280
519,OptMod,kreg_a8k_opt_f_scan_v1,280
520,OptMod,kreg_a8k_opt_f_scan_dmax,280
521,OptMod,kreg_a8k_opt_f_scan_d1,280
522,OptMod,kreg_a8k_opt_f_scan_vstop,280
523,OptMod,kreg_a8k_opt_f_scan_tzerowait,0
524,OptMod,kreg_a8k_opt_f_scan_irun,4
525,OptMod,kreg_a8k_opt_t_scan_vdefault,200
526,OptMod,kreg_a8k_opt_t_scan_vstart,200
527,OptMod,kreg_a8k_opt_t_scan_a1,200
528,OptMod,kreg_a8k_opt_t_scan_amax,200
529,OptMod,kreg_a8k_opt_t_scan_v1,200
530,OptMod,kreg_a8k_opt_t_scan_dmax,200
531,OptMod,kreg_a8k_opt_t_scan_d1,200
532,OptMod,kreg_a8k_opt_t_scan_vstop,200
533,OptMod,kreg_a8k_opt_t_scan_tzerowait,0
534,OptMod,kreg_a8k_opt_t_scan_irun,4
535,OptMod,kreg_a8k_opt_barcode_scan_vdefault,300
536,OptMod,kreg_a8k_opt_barcode_scan_vstart,300
537,OptMod,kreg_a8k_opt_barcode_scan_a1,300
538,OptMod,kreg_a8k_opt_barcode_scan_amax,300
539,OptMod,kreg_a8k_opt_barcode_scan_v1,300
540,OptMod,kreg_a8k_opt_barcode_scan_dmax,300
541,OptMod,kreg_a8k_opt_barcode_scan_d1,300
542,OptMod,kreg_a8k_opt_barcode_scan_vstop,300
543,OptMod,kreg_a8k_opt_barcode_scan_tzerowait,0
544,OptMod,kreg_a8k_opt_barcode_scan_irun,12

9
src/main/java/a8k/app/channel/net/BiLisDoubleTrackTcpClient.java

@ -19,8 +19,8 @@ import java.util.concurrent.TimeUnit;
@Slf4j
@ChannelHandler.Sharable
public class BiLisDoubleTrackTcpClient extends ChannelInboundHandlerAdapter {
private final static Integer reconnectDelay = 5; // 重连延迟时间单位秒
private final static Integer readIDLETime = 30; // 重连延迟时间单位秒
private final static Integer reconnectDelay = 5; // 重连延迟时间
private final static Integer readIDLETime = 30; // 重连延迟时间
private final static Integer rxBufferSize = 1024; // 接收数据缓冲区大小单位字节
@FunctionalInterface
@ -58,7 +58,7 @@ public class BiLisDoubleTrackTcpClient extends ChannelInboundHandlerAdapter {
.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) {
// 添加空闲状态检测100ms没有读取就触发
// 添加空闲状态检测
ch.pipeline().addLast(new IdleStateHandler(readIDLETime, 0, 0, TimeUnit.MILLISECONDS));
ch.pipeline().addLast(BiLisDoubleTrackTcpClient.this);
}
@ -100,6 +100,7 @@ public class BiLisDoubleTrackTcpClient extends ChannelInboundHandlerAdapter {
log.error("Failed to send data tail,{}", future.cause().getMessage());
}
});
log.debug("TX:{}", ByteArrayUtils.toByteString(data));
} else {
log.warn("Channel is not active, cannot send data: {}", data);
// 可以考虑在这里实现消息队列等连接恢复后重发
@ -122,7 +123,7 @@ public class BiLisDoubleTrackTcpClient extends ChannelInboundHandlerAdapter {
// PRIVATE
//
private void reportRxData(byte[] data) {
log.debug("Received raw data ({} bytes): {}", data.length, ByteArrayUtils.toByteString(data));
log.debug("RX:({} bytes): {}", data.length, ByteArrayUtils.toByteString(data));
if (onDataReceivedListener != null) {
onDataReceivedListener.onDataReceived(data);
} else {

90
src/main/java/a8k/app/service/lis/BiLisDoubleTrackChannel.java

@ -2,8 +2,12 @@ package a8k.app.service.lis;
import a8k.app.channel.iflytophald.channel.LisUartChannel;
import a8k.app.channel.net.BiLisDoubleTrackTcpClient;
import a8k.app.constant.AppConstant;
import a8k.app.factory.BiLisDoubleTrackFrameFactory;
import a8k.app.type.lisprotocol.BiLisDoubleTrackFrame;
import a8k.app.utils.ByteArrayUtils;
import a8k.app.utils.ThreadUtils;
import a8k.app.utils.ZByteRxBuffer;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import lombok.extern.slf4j.Slf4j;
@ -29,8 +33,8 @@ public class BiLisDoubleTrackChannel {
ChannelType channelType;
//State
private final ByteBuf rxBuffer = Unpooled.buffer(BiLisDoubleTrackFrame.PACKET_MAX_LENGTH); // 接收数据缓冲区初始大小为1024字节
final ZByteRxBuffer rxBuffer = new ZByteRxBuffer(BiLisDoubleTrackFrame.PACKET_MAX_LENGTH); // 接收数据缓冲区初始大小为1024字节
boolean connectedState = false;
boolean isShuttingDown = false;
@ -48,6 +52,7 @@ public class BiLisDoubleTrackChannel {
public void start() {
isShuttingDown = false;
switch (channelType) {
case TCP -> {
biLisDoubleTrackTcpClient.regRxMessageListener(this::onRxFromTCP);
@ -88,39 +93,51 @@ public class BiLisDoubleTrackChannel {
* 1. 发送ENQ0x05到服务器
* 2. 服务器2秒内回复ACK0x06或NAK0x15
* 3. 如果收到ACK发送ACK0x06作为确认
* 示意:
* 244 TX->05
* 358 RX<-06 (回执大概100ms左右)
* 380 TX->04
*/
if (!isChannelReady())
return false;
synchronized (rxBuffer) {
rxBuffer.clear();
}
rxBuffer.clear();
txBytes(new byte[]{BiLisDoubleTrackFrame.ENQ});
boolean rxAckOrNak = ThreadUtils.waitingForSomeCondition("BiLisDoubleTrackChannel.rx", 100, 2000,
() -> {
synchronized (rxBuffer) {
return rxBuffer.readableBytes() == 1 &&
(rxBuffer.getByte(0) == BiLisDoubleTrackFrame.ACK || rxBuffer.getByte(0) == BiLisDoubleTrackFrame.NAK);
}
});
if (rxAckOrNak) {
txBytes(new byte[]{BiLisDoubleTrackFrame.ACK});
}
boolean rxAckOrNak = ThreadUtils.waitingForSomeCondition("BiLisDoubleTrackChannel.rx", 30, 2000,
() -> rxBuffer.readableBytes() == 1 &&
(rxBuffer.getByte(0) == BiLisDoubleTrackFrame.ACK || rxBuffer.getByte(0) == BiLisDoubleTrackFrame.NAK));
//无论收到ACK还是NAK都发送EOT结束
txBytes(new byte[]{BiLisDoubleTrackFrame.EOT});
return rxAckOrNak;
}
// synchronized BiLisDoubleTrackFrame requestSampleInfo(String barcode) {
// /*
// * 请求样本信息协议
// * TX: <STX> FN Q|A5000P|^1111<CR> <ETX> C1 C2 <CR><LF>
// * RX: <STX> FN O|A10|123456789||^COVID-19 Ab^^\^COVID-19 nAb^^|1||20211201125654<CR> <ETX> C1 C2 <CR><LF> (2s超时)
// * TX: <ACK>
// * RX: <EOT>
// */
//
// }
synchronized BiLisDoubleTrackFrame requestSampleInfo(String barcode) {
/*
* 请求样本信息协议
* TX: <STX> FN Q|A5000P|^1111<CR> <ETX> C1 C2 <CR><LF>
* RX: <STX> FN O|A10|123456789||^COVID-19 Ab^^\^COVID-19 nAb^^|1||20211201125654<CR> <ETX> C1 C2 <CR><LF> (2s超时)
* TX: <ACK>
* RX: <EOT>
*/
rxBuffer.clear();
var cxt = BiLisDoubleTrackFrameFactory.createQFrameBytes(AppConstant.deviceTypeName, barcode);
txBytes(cxt.frameBytes);
boolean rxAckOrNak = ThreadUtils.waitingForSomeCondition("BiLisDoubleTrackChannel", 30, 2000,
() -> rxBuffer.readableBytes() != 0);
byte[] rxData = rxBuffer.cpy();
log.info("RX: {}", ByteArrayUtils.toByteString(rxData));
txBytes(new byte[]{BiLisDoubleTrackFrame.ACK});
//waiting for EOT
ThreadUtils.waitingForSomeCondition("BiLisDoubleTrackChannel", 30, 2000,
() -> rxBuffer.readableBytes() != 0);
return null;
}
synchronized public boolean isChannelReady() {
@ -141,15 +158,11 @@ public class BiLisDoubleTrackChannel {
void onRxFromTCP(byte[] data) {
synchronized (rxBuffer) {
rxBuffer.writeBytes(data);
}
rxBuffer.push(data, data.length);
}
void onRxFromUART(byte[] data) {
synchronized (rxBuffer) {
rxBuffer.writeBytes(data);
}
rxBuffer.push(data, data.length);
}
void txBytes(byte[] data) {
@ -162,11 +175,18 @@ public class BiLisDoubleTrackChannel {
private void monitorThread() {
while (!isShuttingDown) {
if (connectedState) {
ThreadUtils.trySleep(PING_PERIOD);
ThreadUtils.trySleep(1000);
} else {
ThreadUtils.trySleep(1000);
}
connectedState = ping();
boolean state = ping();
if (state) {
connectedState = true;
} else {
connectedState = false;
log.warn("BiLisDoubleTrackChannel: Ping失败");
}
}
}

14
src/main/java/a8k/app/utils/ThreadUtils.java

@ -28,9 +28,13 @@ public class ThreadUtils {
static public void forceSleep(long millis) {
boolean isInterrupted = false;
long startTime = System.currentTimeMillis();
while (System.currentTimeMillis() - startTime < millis) {
while (true) {
int remainingTime = (int) (millis - (System.currentTimeMillis() - startTime));
if(remainingTime <= 0) {
break;
}
try {
Thread.sleep(100); // 每隔100毫秒检查一次
Thread.sleep(remainingTime+1); // 每隔100毫秒检查一次
} catch (InterruptedException e) {
isInterrupted = true;
}
@ -57,9 +61,11 @@ public class ThreadUtils {
while (System.currentTimeMillis() - startTime < timeoutMillis) {
if (condition.isConditionMet())
return true; // 如果条件满足直接返回
log.info("Waiting for condition: {}", conditionName);
forceSleep(100); // 每隔100毫秒重试一次
log.debug("Waiting for condition: {}", conditionName);
forceSleep(retryIntervalMillis); // 每隔100毫秒重试一次
}
log.debug("Condition '{}' not met within timeout of {} ms", conditionName, timeoutMillis);
return false;
}
}

74
src/main/java/a8k/app/utils/ZByteRxBuffer.java

@ -0,0 +1,74 @@
package a8k.app.utils;
import java.util.concurrent.Semaphore;
public class ZByteRxBuffer {
byte[] buff;
int off = 0;
boolean overflowFlag = false;
Semaphore sem = new Semaphore(0);
public ZByteRxBuffer(int size) {
buff = new byte[size];
}
synchronized public void push(byte[] data, int len) {
if (len + off > buff.length) {
overflowFlag = true;
return;
}
System.arraycopy(data, 0, buff, off, len);
off += len;
sem.release();
}
public void waitData() {
try {
sem.acquire();
} catch (InterruptedException ignored) {
}
}
public synchronized int readableBytes() {
return off;
}
public synchronized byte getByte(int index) {
if (index < 0 || index >= off) {
return 0;
}
return buff[index];
}
synchronized public void clear() {
off = 0;
overflowFlag = false;
}
synchronized public boolean isOverflow() {
return overflowFlag;
}
synchronized public byte[] cpy() {
byte[] ret = new byte[off];
System.arraycopy(buff, 0, ret, 0, off);
return ret;
}
synchronized public void pop(int rmlen) {
if (rmlen >= off) {
off = 0;
return;
}
byte[] tmp = new byte[buff.length];
System.arraycopy(buff, rmlen, tmp, 0, off - rmlen);
off -= rmlen;
System.arraycopy(tmp, 0, buff, 0, off);
}
}

4
src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java

@ -3,6 +3,7 @@ package a8k.extui.mgr;
import a8k.app.utils.ZList;
import a8k.extui.page.apptest.LisTestPage;
import a8k.extui.page.apptest.PrinterDebugPage;
import a8k.extui.page.codetest.BiLisDoubleTrackChannelTestPage;
import a8k.extui.page.debug.*;
import a8k.extui.page.driver.*;
import a8k.extui.page.driver.pipette_module.*;
@ -207,7 +208,8 @@ public class ExtApiPageGroupCfgMgr {
)),
new Menu("代码测试", ZList.of(
new Menu(OptFormulaTestPageV2.class, "光学公式测试1"),
new Menu(OptFormulaTestPage.class, "光学公式测试2")
new Menu(OptFormulaTestPage.class, "光学公式测试2"),
new Menu(BiLisDoubleTrackChannelTestPage.class, "BiLis双通道测试")
)),
new Menu("前端测试助手", ZList.of(
new Menu(FakeReactionRecordGeneratorPage.class, "虚拟反应记录生成"),

50
src/main/java/a8k/extui/page/codetest/BiLisDoubleTrackChannelTestPage.java

@ -0,0 +1,50 @@
package a8k.extui.page.codetest;
import a8k.app.service.lis.BiLisDoubleTrackChannel;
import a8k.extui.mgr.ExtApiPageMgr;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Component
@Slf4j
@RequiredArgsConstructor
public class BiLisDoubleTrackChannelTestPage {
private final ExtApiPageMgr extApiPageMgr;
private String serverip = "127.0.0.1";
private String serverPort = "9973";
BiLisDoubleTrackChannel biLisDoubleTrackChannel;
synchronized public void setServeripAndPort(String serverip, String serverPort) {
this.serverip = serverip;
this.serverPort = serverPort;
}
synchronized public void newConnect() {
biLisDoubleTrackChannel = new BiLisDoubleTrackChannel(serverip, Integer.parseInt(serverPort));
biLisDoubleTrackChannel.start();
log.info("新建连接: {}:{}", serverip, serverPort);
}
synchronized public void execPing() {
biLisDoubleTrackChannel.ping();
}
@PostConstruct
public void init() {
var page = extApiPageMgr.newPage(this);
page.addFunction("设置服务器IP和端口", this::setServeripAndPort)
.setParamVal("serverip", () -> serverip)
.setParamVal("serverPort", () -> serverPort);
page.addFunction("新建连接", this::newConnect);
page.addFunction("执行Ping", this::execPing);
extApiPageMgr.addPage(page);
}
}
Loading…
Cancel
Save