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 @Slf4j
@ChannelHandler.Sharable @ChannelHandler.Sharable
public class BiLisDoubleTrackTcpClient extends ChannelInboundHandlerAdapter { 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; // 接收数据缓冲区大小单位字节 private final static Integer rxBufferSize = 1024; // 接收数据缓冲区大小单位字节
@FunctionalInterface @FunctionalInterface
@ -58,7 +58,7 @@ public class BiLisDoubleTrackTcpClient extends ChannelInboundHandlerAdapter {
.handler(new ChannelInitializer<SocketChannel>() { .handler(new ChannelInitializer<SocketChannel>() {
@Override @Override
protected void initChannel(SocketChannel ch) { protected void initChannel(SocketChannel ch) {
// 添加空闲状态检测100ms没有读取就触发
// 添加空闲状态检测
ch.pipeline().addLast(new IdleStateHandler(readIDLETime, 0, 0, TimeUnit.MILLISECONDS)); ch.pipeline().addLast(new IdleStateHandler(readIDLETime, 0, 0, TimeUnit.MILLISECONDS));
ch.pipeline().addLast(BiLisDoubleTrackTcpClient.this); 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.error("Failed to send data tail,{}", future.cause().getMessage());
} }
}); });
log.debug("TX:{}", ByteArrayUtils.toByteString(data));
} else { } else {
log.warn("Channel is not active, cannot send data: {}", data); log.warn("Channel is not active, cannot send data: {}", data);
// 可以考虑在这里实现消息队列等连接恢复后重发 // 可以考虑在这里实现消息队列等连接恢复后重发
@ -122,7 +123,7 @@ public class BiLisDoubleTrackTcpClient extends ChannelInboundHandlerAdapter {
// PRIVATE // PRIVATE
// //
private void reportRxData(byte[] data) { 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) { if (onDataReceivedListener != null) {
onDataReceivedListener.onDataReceived(data); onDataReceivedListener.onDataReceived(data);
} else { } 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.iflytophald.channel.LisUartChannel;
import a8k.app.channel.net.BiLisDoubleTrackTcpClient; 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.type.lisprotocol.BiLisDoubleTrackFrame;
import a8k.app.utils.ByteArrayUtils;
import a8k.app.utils.ThreadUtils; import a8k.app.utils.ThreadUtils;
import a8k.app.utils.ZByteRxBuffer;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -29,8 +33,8 @@ public class BiLisDoubleTrackChannel {
ChannelType channelType; 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 connectedState = false;
boolean isShuttingDown = false; boolean isShuttingDown = false;
@ -48,6 +52,7 @@ public class BiLisDoubleTrackChannel {
public void start() { public void start() {
isShuttingDown = false; isShuttingDown = false;
switch (channelType) { switch (channelType) {
case TCP -> { case TCP -> {
biLisDoubleTrackTcpClient.regRxMessageListener(this::onRxFromTCP); biLisDoubleTrackTcpClient.regRxMessageListener(this::onRxFromTCP);
@ -88,39 +93,51 @@ public class BiLisDoubleTrackChannel {
* 1. 发送ENQ0x05到服务器 * 1. 发送ENQ0x05到服务器
* 2. 服务器2秒内回复ACK0x06或NAK0x15 * 2. 服务器2秒内回复ACK0x06或NAK0x15
* 3. 如果收到ACK发送ACK0x06作为确认 * 3. 如果收到ACK发送ACK0x06作为确认
* 示意:
* 244 TX->05
* 358 RX<-06 (回执大概100ms左右)
* 380 TX->04
*/ */
if (!isChannelReady()) if (!isChannelReady())
return false; return false;
synchronized (rxBuffer) {
rxBuffer.clear();
}
rxBuffer.clear();
txBytes(new byte[]{BiLisDoubleTrackFrame.ENQ}); 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; 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() { synchronized public boolean isChannelReady() {
@ -141,15 +158,11 @@ public class BiLisDoubleTrackChannel {
void onRxFromTCP(byte[] data) { void onRxFromTCP(byte[] data) {
synchronized (rxBuffer) {
rxBuffer.writeBytes(data);
}
rxBuffer.push(data, data.length);
} }
void onRxFromUART(byte[] data) { void onRxFromUART(byte[] data) {
synchronized (rxBuffer) {
rxBuffer.writeBytes(data);
}
rxBuffer.push(data, data.length);
} }
void txBytes(byte[] data) { void txBytes(byte[] data) {
@ -162,11 +175,18 @@ public class BiLisDoubleTrackChannel {
private void monitorThread() { private void monitorThread() {
while (!isShuttingDown) { while (!isShuttingDown) {
if (connectedState) { if (connectedState) {
ThreadUtils.trySleep(PING_PERIOD);
ThreadUtils.trySleep(1000);
} else { } else {
ThreadUtils.trySleep(1000); 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) { static public void forceSleep(long millis) {
boolean isInterrupted = false; boolean isInterrupted = false;
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
while (System.currentTimeMillis() - startTime < millis) {
while (true) {
int remainingTime = (int) (millis - (System.currentTimeMillis() - startTime));
if(remainingTime <= 0) {
break;
}
try { try {
Thread.sleep(100); // 每隔100毫秒检查一次
Thread.sleep(remainingTime+1); // 每隔100毫秒检查一次
} catch (InterruptedException e) { } catch (InterruptedException e) {
isInterrupted = true; isInterrupted = true;
} }
@ -57,9 +61,11 @@ public class ThreadUtils {
while (System.currentTimeMillis() - startTime < timeoutMillis) { while (System.currentTimeMillis() - startTime < timeoutMillis) {
if (condition.isConditionMet()) if (condition.isConditionMet())
return true; // 如果条件满足直接返回 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; 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.app.utils.ZList;
import a8k.extui.page.apptest.LisTestPage; import a8k.extui.page.apptest.LisTestPage;
import a8k.extui.page.apptest.PrinterDebugPage; import a8k.extui.page.apptest.PrinterDebugPage;
import a8k.extui.page.codetest.BiLisDoubleTrackChannelTestPage;
import a8k.extui.page.debug.*; import a8k.extui.page.debug.*;
import a8k.extui.page.driver.*; import a8k.extui.page.driver.*;
import a8k.extui.page.driver.pipette_module.*; import a8k.extui.page.driver.pipette_module.*;
@ -207,7 +208,8 @@ public class ExtApiPageGroupCfgMgr {
)), )),
new Menu("代码测试", ZList.of( new Menu("代码测试", ZList.of(
new Menu(OptFormulaTestPageV2.class, "光学公式测试1"), 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("前端测试助手", ZList.of(
new Menu(FakeReactionRecordGeneratorPage.class, "虚拟反应记录生成"), 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