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;
|
}
|
}
|