zsh_root
2025-12-10 8d662de2fd262b3a485f16e197cb4d0ca2a61cdf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
package home;
 
import PublicPannel.BaseParameterPanel;
import PublicPannel.BaseStationPanel;
import PublicPannel.TagPanel;
import PublicPannel.AntiCollisionPanel;
import PublicPannel.UpgradePanel;
import jiexi.DellTag55AA03;
import java.util.Locale;
import java.util.ResourceBundle;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.PropertyResourceBundle;
 
/**
 * 面板字段更新工具类 - 统一管理各个面板的字段更新逻辑
 */
public class PanelFieldUpdater {
    
    /**
     * 获取资源包
     */
    private static ResourceBundle getResourceBundle() {
        try {
            // 尝试从MainFrame获取当前语言设置
            Locale locale = Locale.SIMPLIFIED_CHINESE; // 默认中文
            // 尝试检测当前语言
            String fileName = locale.equals(Locale.ENGLISH) ? 
                    "Messages_en.properties" : "Messages_zh.properties";
            File langFile = new File("systemfile/" + fileName);
            if (langFile.exists()) {
                try (InputStream inputStream = new FileInputStream(langFile)) {
                    return new PropertyResourceBundle(inputStream);
                }
            }
        } catch (Exception e) {
            // 如果加载失败,使用默认中文
        }
        // 返回空ResourceBundle,将使用默认中文字符串
        return null;
    }
    
    /**
     * 获取国际化字符串
     */
    private static String getString(String key) {
        ResourceBundle bundle = getResourceBundle();
        if (bundle != null) {
            try {
                return bundle.getString(key);
            } catch (Exception e) {
                // 如果找不到键,返回默认值
            }
        }
        // 默认中文值
        switch (key) {
            case "panel.not.initialized": return "面板未正确初始化";
            case "save.parameters.failed": return "保存参数失败";
            case "field.cannot.empty": return "{0}不能为空";
            case "parameter.error": return "参数错误";
            default: return key;
        }
    }
 
    /**
     * 更新所有面板的字段
     */
    public static void updateAllPanels(DellTag55AA03.ParseResult result, 
            BaseParameterPanel baseParamPanel,
            BaseStationPanel baseStationPanel,
            TagPanel tagPanel,
            AntiCollisionPanel antiCollisionPanel,
            UpgradePanel upgradePanel) {
        if (result == null) {
            return;
        }
        // 更新基础参数面板
        updateBaseParameterPanel(result, baseParamPanel);
 
        // 更新基站面板
        updateBaseStationPanel(result, baseStationPanel);
 
        // 更新标签面板
        updateTagPanel(result, tagPanel);
 
        // 更新防碰撞面板
        updateAntiCollisionPanel(result, antiCollisionPanel);
 
        // 更新升级面板
        updateUpgradePanel(result, upgradePanel);
    }
 
    public static void updateAllPanels2(DellTag55AA03.ParseResult result,
            AntiCollisionPanel antiCollisionPanel) {
        if (result == null) {
            return;
        }
        //更新防撞面板继电器
        updateAntiCollisionPanel2(result,antiCollisionPanel);
    }
 
    /**
     * 更新基础参数面板字段
     */
    private static void updateBaseParameterPanel(DellTag55AA03.ParseResult result, BaseParameterPanel panel) {
        if (panel == null) {
            
            return;
        }
 
        try {
            
            panel.updateFields(result);
        } catch (Exception e) {
            System.err.println("PanelFieldUpdater: 更新基础参数面板失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
    /**
     * 更新基站面板字段
     */
    private static void updateBaseStationPanel(DellTag55AA03.ParseResult result, BaseStationPanel panel) {
        if (panel == null) {            
            return;
        }
 
        try {
            
            panel.updateFields(result);
        } catch (Exception e) {
            System.err.println("PanelFieldUpdater: 更新基站面板失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
 
    /**
     * 更新标签面板字段
     */
    private static void updateTagPanel(DellTag55AA03.ParseResult result, TagPanel panel) {
        if (panel == null) {
            System.out.println("PanelFieldUpdater: TagPanel is null");
            return;
        }
 
        try {
            System.out.println("PanelFieldUpdater: Calling updateFields on TagPanel");
            panel.updateFields(result);
        } catch (Exception e) {
            System.err.println("PanelFieldUpdater: 更新标签面板失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
 
    /**
     * 更新防碰撞面板字段
     */
    private static void updateAntiCollisionPanel(DellTag55AA03.ParseResult result, AntiCollisionPanel panel) {
        if (panel == null) {
            
            return;
        }
 
        try {
            panel.updateFields(result);
        } catch (Exception e) {
            System.err.println("PanelFieldUpdater: 更新防碰撞面板失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
 
    /**
     * 更新防碰撞继电器控制面板字段
     */
    private static void updateAntiCollisionPanel2(DellTag55AA03.ParseResult result, AntiCollisionPanel panel) {
        if (panel == null) {
            return;
        }
        try {
            panel.updateFields2(result);
        } catch (Exception e) {
            System.err.println("PanelFieldUpdater: 更新防碰撞面板失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
    /**
     * 更新升级面板字段
     */
    private static void updateUpgradePanel(DellTag55AA03.ParseResult result, UpgradePanel panel) {
        if (panel == null) {            
            return;
        }
 
        try {
            // 更新升级相关参数
            if (result.dizhi0x2 != null) {
                // panel.setFirmwareVersion(result.dizhi0x2);
            }
            
        } catch (Exception e) {
            System.err.println("PanelFieldUpdater: 更新升级面板失败: " + e.getMessage());
        }
    }
 
    /**
     * 从所有面板收集参数并构建配置数据
     */
    public static byte[] collectParametersToConfig(BaseParameterPanel baseParamPanel,
            BaseStationPanel baseStationPanel,
            TagPanel tagPanel,
            AntiCollisionPanel antiCollisionPanel,
            UpgradePanel upgradePanel) {
        
        try {
            // 检查面板是否初始化
            if (baseParamPanel == null || baseStationPanel == null || 
                tagPanel == null || antiCollisionPanel == null) {
                showErrorDialog(getString("panel.not.initialized"));
                return null;
            }
 
            // BaseParameterPanel 参数
            String dizhi0x4 = safeCheckAndTrim(baseParamPanel.getdizhi0x4(), "模块编号", "0000");
            String dizhi0x6 = safeCheckAndTrim(baseParamPanel.getdizhi0x6(), "通信频率", "0000");
            String dizhi0x8 = safeCheckAndTrim(baseParamPanel.getdizhi0x8(), "最多通信基站", "0000");
            String dizhi0xA = safeCheckAndTrim(baseParamPanel.getdizhi0xA(), "最少通信基站、小组编号", "0000");
            String dizhi0xC = safeCheckAndTrim(baseParamPanel.getdizhi0xC(), "校准距离", "0000");
            String dizhi0xE = safeCheckAndTrim(baseParamPanel.getdizhi0xE(), "模块类型", "0000");
            String dizhi0x10 = safeCheckAndTrim(baseParamPanel.getdizhi0x10(), "基站主动测距", "0000");
            String dizhi0x12 = safeCheckAndTrim(baseParamPanel.getdizhi0x12(), "报警设备", "0000");
            String dizhi0x1A = safeCheckAndTrim(baseParamPanel.getdizhi0x1A(), "配对ID", "0000");
            String dizhi0x1C = safeCheckAndTrim(baseParamPanel.getdizhi0x1C(), "心跳包、UWB开关状态", "0000");
            String dizhi0x1E = safeCheckAndTrim(baseParamPanel.getdizhi0x1E(), "MODBUS模式", "0000");
            String dizhi0x36 = safeCheckAndTrim(baseParamPanel.getdizhi0x36(), "功率", "0000");
 
            // BaseStationPanel 参数 - 新增部分
            String dizhi0x18 = safeCheckAndTrim(baseStationPanel.getdizhi0x18(), "外设控制", "0000");
            String dizhi0x20 = safeCheckAndTrim(baseStationPanel.getdizhi0x20(), "临近基站数量", "0000");
            String dizhi0x22 = safeCheckAndTrim(baseStationPanel.getdizhi0x22(), "临近基站1", "0000");
            String dizhi0x24 = safeCheckAndTrim(baseStationPanel.getdizhi0x24(), "临近基站2", "0000");
            String dizhi0x26 = safeCheckAndTrim(baseStationPanel.getdizhi0x26(), "临近基站3", "0000");
            String dizhi0x28 = safeCheckAndTrim(baseStationPanel.getdizhi0x28(), "临近基站4", "0000");
            String dizhi0x2A = safeCheckAndTrim(baseStationPanel.getdizhi0x2A(), "临近基站5", "0000");
            String dizhi0x2C = safeCheckAndTrim(baseStationPanel.getdizhi0x2C(), "临近基站6", "0000");
            String dizhi0x2E = safeCheckAndTrim(baseStationPanel.getdizhi0x2E(), "临近基站7", "0000");
            String dizhi0x30 = safeCheckAndTrim(baseStationPanel.getdizhi0x30(), "临近基站8", "0000");
            String dizhi0x32 = safeCheckAndTrim(baseStationPanel.getdizhi0x32(), "临近基站9", "0000");
            String dizhi0x34 = safeCheckAndTrim(baseStationPanel.getdizhi0x34(), "临近基站10", "0000");
            String dizhi0x44 = safeCheckAndTrim(baseStationPanel.getdizhi0x44(), "同步基站ID", "0000");
            String dizhi0x46 = safeCheckAndTrim(baseStationPanel.getdizhi0x46(), "同步基站类型", "0000");
 
            // TagPanel 参数 - 新增部分
            String dizhi0x14 = safeCheckAndTrim(tagPanel.getdizhi0x14(), "IMU静止时间", "0000");
            String dizhi0x1C_tag = safeCheckAndTrim(tagPanel.getdizhi0x1C(), "UWB开关状态", "0000");
            String dizhi0x20_tag = safeCheckAndTrim(tagPanel.getdizhi0x20(), "振动时长", "0000");
            String dizhi0x38 = safeCheckAndTrim(tagPanel.getdizhi0x38(), "加速度计阈值", "0000");
            String dizhi0x3A = safeCheckAndTrim(tagPanel.getdizhi0x3A(), "空闲休眠时间", "0000");
            String dizhi0x3C = safeCheckAndTrim(tagPanel.getdizhi0x3C(), "振动使能", "0000");
            String dizhi0x3E = safeCheckAndTrim(tagPanel.getdizhi0x3E(), "加速度计使能", "0000");
            String dizhi0x40 = safeCheckAndTrim(tagPanel.getdizhi0x40(), "标签配置状态", "0000");
            String dizhi0x42 = safeCheckAndTrim(tagPanel.getdizhi0x42(), "加速度计时长", "0000");
            String dizhi0x44_tag = safeCheckAndTrim(tagPanel.getdizhi0x44(), "设备激活状态", "0000");
            String dizhi0x48 = safeCheckAndTrim(tagPanel.getdizhi0x48(), "速度滤波限值", "0000");
            String dizhi0x50 = safeCheckAndTrim(tagPanel.getdizhi0x50(), "压力校准", "0000");
 
            // AntiCollisionPanel 参数 - 新增部分
            String dizhi0x14_anti = safeCheckAndTrim(antiCollisionPanel.getdizhi0x14(), "继电器1报警距离1", "0000");
            String dizhi0x16 = safeCheckAndTrim(antiCollisionPanel.getdizhi0x16(), "继电器1报警距离2", "0000");
            String dizhi0x18_anti = safeCheckAndTrim(antiCollisionPanel.getdizhi0x18(), "继电器1报警距离3", "0000");
            String dizhi0x20_anti = safeCheckAndTrim(antiCollisionPanel.getdizhi0x20(), "Modbus地址", "0000");
            String dizhi0x4A = safeCheckAndTrim(antiCollisionPanel.getdizhi0x4A(), "白名单起始", "0000");
            String dizhi0x4C = safeCheckAndTrim(antiCollisionPanel.getdizhi0x4C(), "白名单结束", "0000");
            String dizhi0x4E = antiCollisionPanel.getdizhi0x4E();
 
 
            String dizhi0x50_anti = safeCheckAndTrim(antiCollisionPanel.getdizhi0x50(), "继电器持续时间", "0000");
            String dizhi0x52 = safeCheckAndTrim(antiCollisionPanel.getdizhi0x52(), "测距输出格式", "0000");
            String dizhi0x54 = safeCheckAndTrim(antiCollisionPanel.getdizhi0x54(), "天线电缆长度", "0000");
            String dizhi0x56 = "0000";
 
            String dizhi0x58 = safeCheckAndTrim(antiCollisionPanel.getdizhi0x58(), "馈线长度", "0000");
            String dizhi0x5A = "0000";
            String dizhi0x5C = "0000";
            String dizhi0x5E = "0000";
            String dizhi0xF0 = safeCheckAndTrim(antiCollisionPanel.getdizhi0xF0(), "继电器1控制", "0000");
            String dizhi0xF2 = safeCheckAndTrim(antiCollisionPanel.getdizhi0xF2(), "继电器2控制", "0000");
            String dizhi0xF4 = safeCheckAndTrim(antiCollisionPanel.getdizhi0xF4(), "继电器2报警距离1", "0000");
            String dizhi0xF6 = safeCheckAndTrim(antiCollisionPanel.getdizhi0xF6(), "继电器2报警距离2", "0000");
            String dizhi0xF8 = safeCheckAndTrim(antiCollisionPanel.getdizhi0xF8(), "继电器2报警距离3", "0000");
            
            // ========== 新增:根据选项卡确定使用哪个字段值 ==========
            
            // 获取当前选中的选项卡类型当前选中的面板索引 (0-基站, 1-标签, 2-防撞, 3-升级)
            int selectedTab = 0;
            try {
                selectedTab = SerialCommunicationPanel.getCurrentSelectedPanelIndex();
                // 确保索引在有效范围内
                if (selectedTab < 0 || selectedTab > 3) {
                    selectedTab = 0;
                    System.err.println("选项卡索引超出范围,使用默认值: 0");
                }
            } catch (Exception e) {
                selectedTab = 0; // 默认使用基站选项卡
                System.err.println("获取选项卡索引失败,使用默认值: " + e.getMessage());
            }
           
            System.out.println("当前选中的选项卡索引: " + selectedTab);
            
            // 根据选项卡确定使用哪个字段值
            String finalDizhi0x1C;
            String finalDizhi0x20;
            String finalDizhi0x44;
            String finalDizhi0x14;
            String finalDizhi0x18;
            String finalDizhi0x50;
            
            if (selectedTab == 1) {
                // 标签选项卡选中时,使用标签面板的值
                finalDizhi0x1C = dizhi0x1C_tag;
                finalDizhi0x20 = dizhi0x20_tag;
                finalDizhi0x44 = dizhi0x44_tag;
                finalDizhi0x14 = dizhi0x14; // 使用标签面板的0x14
                finalDizhi0x18 = dizhi0x18; // 使用基站面板的0x18
                finalDizhi0x50 = dizhi0x50; // 使用标签面板的0x50
                System.out.println("使用标签面板的字段值");
            } else if (selectedTab == 2) {
                // 防撞选项卡选中时,使用防撞面板的值
                finalDizhi0x1C = dizhi0x1C; // 使用基础参数面板的0x1C
                finalDizhi0x20 = dizhi0x20_anti;
                finalDizhi0x44 = dizhi0x44; // 使用基站面板的0x44
                finalDizhi0x14 = dizhi0x14_anti;
                finalDizhi0x18 = dizhi0x18_anti;
                finalDizhi0x50 = dizhi0x50_anti;
                System.out.println("使用防撞面板的字段值");
            } else {
                // 默认情况(基础参数、基站等选项卡)
                finalDizhi0x1C = dizhi0x1C; // 使用基础参数面板的0x1C
                finalDizhi0x20 = dizhi0x20; // 使用基站面板的0x20
                finalDizhi0x44 = dizhi0x44; // 使用基站面板的0x44
                finalDizhi0x14 = dizhi0x14; // 使用标签面板的0x14
                finalDizhi0x18 = dizhi0x18; // 使用基站面板的0x18
                finalDizhi0x50 = dizhi0x50; // 使用标签面板的0x50
                System.out.println("使用默认面板的字段值");
            }
            
            // 安全转换整数,添加异常处理
            int intdizhi0x6 = safeParseInt(dizhi0x6, 0);
            int intdizhi0x8 = safeParseInt(dizhi0x8, 0);
            int intdizhi0xA = safeParseInt(dizhi0xA, 0);
            int intdizhi0xC = safeParseInt(dizhi0xC, 0);
            int intdizhi0xE = safeParseInt(dizhi0xE, 0);
            int intdizhi0x10 = safeParseInt(dizhi0x10, 0);
            int intdizhi0x12 = safeParseInt(dizhi0x12, 0);
            int intdizhi0x14 = safeParseInt(finalDizhi0x14, 0);
            int intdizhi0x16 = safeParseInt(dizhi0x16, 0);
            int intdizhi0x18 = safeParseInt(finalDizhi0x18, 0);
            int intdizhi0x20 = safeParseInt(finalDizhi0x20, 0);
            int intdizhi0x36 = safeParseInt(dizhi0x36, 0);         
            int intdizhi0x38 = safeParseInt(dizhi0x38, 0);
            int intdizhi0x3A = safeParseInt(dizhi0x3A, 0);
            int intdizhi0x42 = safeParseInt(dizhi0x42, 0);
            int intdizhi0x48 = safeParseInt(dizhi0x48, 0);
            int intdizhi0x50 = safeParseInt(finalDizhi0x50, 0);
            int intdizhi0x54 = safeParseInt(dizhi0x54, 0);
            int intdizhi0x58 = safeParseInt(dizhi0x58, 0);
            
            System.out.println("参数转换完成,开始设置配置数据...");
            
            // 设置配置数据
            DellTag55AA03.hexAA03.setDizhi0x4(getStringToHex(dizhi0x4)); // 设置设备ID
            DellTag55AA03.hexAA03.setDizhi0x6(getIntToHex(intdizhi0x6)); // 设置通信频率
            DellTag55AA03.hexAA03.setDizhi0x8(getIntToHex(intdizhi0x8)); // 设置最大基站数
            DellTag55AA03.hexAA03.setDizhi0xA(getIntToHex(intdizhi0xA)); // 设置最小基站数
            DellTag55AA03.hexAA03.setDizhi0xC(getIntToHex(intdizhi0xC)); // 设置距离校准值
            DellTag55AA03.hexAA03.setDizhi0xE(getIntToHex(intdizhi0xE)); // 设置设备类型
            DellTag55AA03.hexAA03.setDizhi0x10(getIntToHex(intdizhi0x10)); // 设置基站主动测距
            DellTag55AA03.hexAA03.setDizhi0x12(getIntToHex(intdizhi0x12)); // 设置报警设备            
            DellTag55AA03.hexAA03.setDizhi0x14(getIntToHex(intdizhi0x14)); // 设置IMU空闲时间或继电器1报警距离1
            DellTag55AA03.hexAA03.setDizhi0x16(getStringToHex(dizhi0x16)); // 设置压力基站ID
            DellTag55AA03.hexAA03.setDizhi0x18(getIntToHex(intdizhi0x18)); // 设置外设控制或继电器1报警距离3
            DellTag55AA03.hexAA03.setDizhi0x1A(getStringToHex(dizhi0x1A)); // 设置配对ID
            DellTag55AA03.hexAA03.setDizhi0x1C(getStringToHex(finalDizhi0x1C)); // 设置UWB开关状态
            DellTag55AA03.hexAA03.setDizhi0x1E(getStringToHex(dizhi0x1E)); // 设置Modbus模式
            DellTag55AA03.hexAA03.setDizhi0x20(getIntToHex(intdizhi0x20)); // 设置振动时长或Modbus地址
            DellTag55AA03.hexAA03.setDizhi0x22(getStringToHex(dizhi0x22)); // 设置附近基站1ID
            DellTag55AA03.hexAA03.setDizhi0x24(getStringToHex(dizhi0x24)); // 设置附近基站2ID
            DellTag55AA03.hexAA03.setDizhi0x26(getStringToHex(dizhi0x26)); // 设置附近基站3ID
            DellTag55AA03.hexAA03.setDizhi0x28(getStringToHex(dizhi0x28)); // 设置附近基站4ID
            DellTag55AA03.hexAA03.setDizhi0x2A(getStringToHex(dizhi0x2A)); // 设置附近基站5ID
            DellTag55AA03.hexAA03.setDizhi0x2C(getStringToHex(dizhi0x2C)); // 设置附近基站6ID
            DellTag55AA03.hexAA03.setDizhi0x2E(getStringToHex(dizhi0x2E)); // 设置附近基站7ID
            DellTag55AA03.hexAA03.setDizhi0x30(getStringToHex(dizhi0x30)); // 设置附近基站8ID
            DellTag55AA03.hexAA03.setDizhi0x32(getStringToHex(dizhi0x32)); // 设置附近基站9ID
            DellTag55AA03.hexAA03.setDizhi0x34(getStringToHex(dizhi0x34)); // 设置附近基站10ID
            DellTag55AA03.hexAA03.setDizhi0x36(getIntToHex(intdizhi0x36)); // 设置功率
            DellTag55AA03.hexAA03.setDizhi0x38(getIntToHex(intdizhi0x38)); // 设置加速度计阈值
            DellTag55AA03.hexAA03.setDizhi0x3A(getIntToHex(intdizhi0x3A)); // 设置空闲休眠时间
            DellTag55AA03.hexAA03.setDizhi0x3C(getStringToHex(dizhi0x3C)); // 设置振动使能
            DellTag55AA03.hexAA03.setDizhi0x3E(getStringToHex(dizhi0x3E)); // 设置加速度计使能
            DellTag55AA03.hexAA03.setDizhi0x40(getStringToHex(dizhi0x40)); // 设置标签配置状态
            DellTag55AA03.hexAA03.setDizhi0x42(getIntToHex(intdizhi0x42)); // 设置加速度计时长
            DellTag55AA03.hexAA03.setDizhi0x44(getStringToHex(finalDizhi0x44)); // 设置设备激活状态或同步基站ID
            DellTag55AA03.hexAA03.setDizhi0x46(getStringToHex(dizhi0x46)); // 设置同步基站类型
            DellTag55AA03.hexAA03.setDizhi0x48(getIntToHex(intdizhi0x48)); // 设置速度滤波限制
            DellTag55AA03.hexAA03.setDizhi0x4A(getStringToHex(dizhi0x4A));//白名单起始ID
            DellTag55AA03.hexAA03.setDizhi0x4C(getStringToHex(dizhi0x4C));//白名单终止ID
            DellTag55AA03.hexAA03.setDizhi0x4E(getStringToHex(dizhi0x4E));//白名单终止ID
            DellTag55AA03.hexAA03.setDizhi0x50(getIntToHex(intdizhi0x50)); // 设置压力高度校准或继电器持续时间
            DellTag55AA03.hexAA03.setDizhi0x52(getStringToHex(dizhi0x52)); // 
            DellTag55AA03.hexAA03.setDizhi0x54(getIntToHex(intdizhi0x54)); // 
            DellTag55AA03.hexAA03.setDizhi0x56(getStringToHex(dizhi0x56)); // 
            DellTag55AA03.hexAA03.setDizhi0x58(getIntToHex(intdizhi0x58)); // 
            DellTag55AA03.hexAA03.setDizhi0x5A(getStringToHex(dizhi0x5A)); // 
            DellTag55AA03.hexAA03.setDizhi0x5C(getStringToHex(dizhi0x5C)); // 
            DellTag55AA03.hexAA03.setDizhi0x5E(getStringToHex(dizhi0x5E)); //        
            byte[] peizhiinfo = DellTag55AA03.getpeizhihex(DellTag55AA03.hexAA03);
            
            System.out.println("配置数据生成完成,长度: " + (peizhiinfo != null ? peizhiinfo.length : 0));
            
            // 临时使用示例配置数据
            return peizhiinfo;
            
        } catch (Exception e) {
            System.err.println("收集参数配置时发生错误: " + e.getMessage());
            e.printStackTrace();
            showErrorDialog(getString("save.parameters.failed") + ": " + e.getMessage());
            return null;
        }
    }
 
 
 
    /**
     * 收集继电器面板的参数构建配置数据
     */
    public static byte[] collectParametersToConfig2(AntiCollisionPanel antiCollisionPanel) {
        try {
            // 检查面板是否初始化
            if (antiCollisionPanel == null ) {
                showErrorDialog("面板未正确初始化");
                return null;
            }
 
 
            String dizhi0xF0="0000";
            String dizhi0xF2="0000";
            String dizhi0xF4="0000";
            String dizhi0xF6="0000";
            String dizhi0xF8="0000";
 
            // ========== 新增:根据选项卡确定使用哪个字段值 ==========
 
            // 获取当前选中的选项卡类型当前选中的面板索引 (0-基站, 1-标签, 2-防撞, 3-升级)
            int selectedTab = 0;
            try {
                selectedTab = SerialCommunicationPanel.getCurrentSelectedPanelIndex();
                // 确保索引在有效范围内
                if (selectedTab < 0 || selectedTab > 3) {
                    selectedTab = 0;
                    System.err.println("选项卡索引超出范围,使用默认值: 0");
                }
            } catch (Exception e) {
                selectedTab = 0; // 默认使用基站选项卡
                System.err.println("获取选项卡索引失败,使用默认值: " + e.getMessage());
            }
 
            System.out.println("当前选中的选项卡索引: " + selectedTab);
 
 
            if (selectedTab == 2) {
                 dizhi0xF0= safeCheckAndTrim(antiCollisionPanel.getdizhi0xF0(), "继电器1控制", "0000");
                 dizhi0xF2= safeCheckAndTrim(antiCollisionPanel.getdizhi0xF2(), "继电器2控制", "0000");
                 dizhi0xF4= safeCheckAndTrim(antiCollisionPanel.getdizhi0xF4(), "继电器2报警距离1", "0000");
                 dizhi0xF6= safeCheckAndTrim(antiCollisionPanel.getdizhi0xF6(), "继电器2报警距离2", "0000");
                 dizhi0xF8= safeCheckAndTrim(antiCollisionPanel.getdizhi0xF8(), "继电器2报警距离3", "0000");
                System.out.println("使用防撞面板的字段值");
            } else {
                return null;
            }
 
            // 安全转换整数,添加异常处理
            int intdizhi0xF0= safeParseInt(dizhi0xF0, 0);
            int intdizhi0xF2= safeParseInt(dizhi0xF2, 0);
            int intdizhi0xF4= safeParseInt(dizhi0xF4, 0);
            int intdizhi0xF6= safeParseInt(dizhi0xF6, 0);
            int intdizhi0xF8= safeParseInt(dizhi0xF8, 0);
 
 
            System.out.println("参数转换完成,开始设置配置数据...");
 
            // 设置配置数据
 
            DellTag55AA03.hexAA03.setDizhi0xF0(getIntToHex(intdizhi0xF0)); //
            DellTag55AA03.hexAA03.setDizhi0xF2(getIntToHex(intdizhi0xF2)); //
            DellTag55AA03.hexAA03.setDizhi0xF4(getIntToHex(intdizhi0xF4)); //
            DellTag55AA03.hexAA03.setDizhi0xF6(getIntToHex(intdizhi0xF6)); //
            DellTag55AA03.hexAA03.setDizhi0xF8(getIntToHex(intdizhi0xF8)); //
            byte[] peizhiinfo = DellTag55AA03.getpeizhihex2(DellTag55AA03.hexAA03);
 
            System.out.println("配置数据生成完成,长度: " + (peizhiinfo != null ? peizhiinfo.length : 0));
 
            // 临时使用示例配置数据
            return peizhiinfo;
 
        } catch (Exception e) {
            System.err.println("收集参数配置时发生错误: " + e.getMessage());
            e.printStackTrace();
            showErrorDialog("保存参数失败: " + e.getMessage());
            return null;
        }
    }
 
    /**
     * 安全的空值检查和trim处理,提供默认值
     */
    private static String safeCheckAndTrim(String value, String fieldName, String defaultValue) {
        if (value == null) {
            System.err.println(fieldName + " 为null,使用默认值: " + defaultValue);
            return defaultValue;
        }
        
        String trimmed = value.trim();
        if (trimmed.isEmpty()) {
            System.err.println(fieldName + " 为空,使用默认值: " + defaultValue);
            return defaultValue;
        }
        
        return trimmed;
    }
 
    /**
     * 安全转换字符串为整数
     */
    private static int safeParseInt(String value, int defaultValue) {
        if (value == null || value.trim().isEmpty()) {
            return defaultValue;
        }
        
        try {
            return Integer.parseInt(value.trim());
        } catch (NumberFormatException e) {
            try {
                return Integer.parseInt(value.trim(),16);
            } catch (NumberFormatException ex) {
                System.err.println("数字格式错误: " + value + ",使用默认值: " + defaultValue);
                return defaultValue;
            }
        }
    }
 
    public static String getIntToHex(int value) {       
        byte[] buf =new byte[2];
        buf[0] = intToRegisters(value)[3];
        buf[1] = intToRegisters(value)[2];
        String va=bytesToHex(buf);             
        return va;
    }
    /**10进制转字节数组*/
    public static byte[] intToRegisters(int v) {
        byte[] registers = new byte[4];
        registers[0] = (byte) (0xff & (v >> 24));
        registers[1] = (byte) (0xff & (v >> 16));
        registers[2] = (byte) (0xff & (v >> 8));
        registers[3] = (byte) (0xff & v);        
        return registers;
    }
    public static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02X", b)); // 去掉格式字符串中的空格
        }
        return sb.toString(); // 此时已无需trim()
    }
    
    /**
     * 检查字符串是否为null或空,并去除空格
     * @param value 要检查的字符串
     * @param fieldName 字段名称(用于错误提示)
     * @return 处理后的字符串
     */
    private static String checkAndTrim(String value, String fieldName) {
        if (value == null) {
            showErrorDialog(getString("field.cannot.empty").replace("{0}", fieldName));
            throw new IllegalArgumentException(fieldName + "不能为空");
        }
        
        String trimmed = value.trim();
        if (trimmed.isEmpty()) {
            showErrorDialog(getString("field.cannot.empty").replace("{0}", fieldName));
            throw new IllegalArgumentException(fieldName + "不能为空");
        }
        
        return trimmed;
    }
 
    /**
     * 显示错误弹窗
     * @param message 错误信息
     */
    private static void showErrorDialog(String message) {
        // 使用Swing显示错误对话框
        javax.swing.JOptionPane.showMessageDialog(null, 
            message, 
            getString("parameter.error"), 
            javax.swing.JOptionPane.ERROR_MESSAGE);
    }
    /**获取设备编号*/
    public static String getStringToHex(String tagid) {
        // 添加空值和长度检查
        if (tagid == null || tagid.trim().isEmpty()) {
            System.err.println("警告: 参数 为空,使用默认值 0000");
            return "0000";
        }
 
        byte[] byteArray = toByteArray(tagid);
 
        // 检查转换后的字节数组长度
        if (byteArray == null || byteArray.length == 0) {
            System.err.println("警告: 参数 '" + tagid + "' 转换后的字节数组为空,使用默认值 0000");
            return "0000";
        }
 
        // 处理长度不足的情况
        byte[] buf = new byte[2];
        if (byteArray.length >= 2) {
            // 正常情况:交换字节顺序
            buf[0] = byteArray[1];
            buf[1] = byteArray[0];
        } else if (byteArray.length == 1) {
 
            // 只有一个字节的情况:高位补0
            buf[0] = byteArray[0];
            buf[1] = 0;
 
        } else {
            // 其他情况:全部补0
            buf[0] = 0;
            buf[1] = 0;
        }
 
        String va = bytesToHex(buf);
        System.out.println("getStringToHex: 输入='" + tagid + "', 输出='" + va + "'");
        return va;
    }
    /**
     * 16进制的字符串表示转成字节数组
     *
     * @param hexString 16进制格式的字符串
     * @return 转换后的字节数组
     **/
    public static byte[] toByteArray(String hexString) {
        // 添加更严格的输入验证
        if (hexString == null || hexString.trim().isEmpty()) {
            System.err.println("警告: toByteArray 输入为空");
            return new byte[0];
        }
 
        String cleanedHex = hexString.replaceAll(" ", "").toUpperCase();
 
        // 检查是否为有效的16进制字符串
        if (!cleanedHex.matches("[0-9A-F]+")) {
            System.err.println("警告: '" + hexString + "' 不是有效的16进制字符串");
            return new byte[0];
        }
 
        // 确保长度为偶数(补齐前导0)
        if (cleanedHex.length() % 2 != 0) {
            cleanedHex = "0" + cleanedHex;
            System.out.println("警告: 补齐16进制字符串为偶数长度: " + cleanedHex);
        }
 
        int length = cleanedHex.length();
        byte[] byteArray = new byte[length / 2];
 
        try {
            for (int i = 0; i < length; i += 2) {
                String byteStr = cleanedHex.substring(i, i + 2);
                byteArray[i / 2] = (byte) Integer.parseInt(byteStr, 16);
            }
        } catch (Exception e) {
            System.err.println("toByteArray 转换错误: " + e.getMessage());
            return new byte[0];
        }
 
        return byteArray;
    }
}