From 9413a32464a5b062bddc966ee462042a2968ad0c Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 29 Jul 2025 11:06:23 +0800 Subject: [PATCH] =?UTF-8?q?B80.CN.01.00.07=20|=E4=BF=AE=E6=94=B9=E5=8D=95?= =?UTF-8?q?=E7=89=87=E6=9C=BA=E7=89=88=E6=9C=AC=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/a8k/app/constant/AppVersion.java | 2 +- .../api/v1/app/setting/DeviceInfoControler.java | 1 + .../java/a8k/app/i18n/Internationalization.java | 14 ++--- .../type/protocol/McuModuleVersion.java | 29 +++++++++++ .../type/protocol/OptModuleRegIndex.java | 8 +++ .../app/iflytophald/type/protocol/RegIndex.java | 6 +++ .../appsetup/A8kSubModuleRegInitService.java | 59 ++++++---------------- src/main/java/a8k/app/type/BoardVersions.java | 19 +++---- .../type/protocol/McuModuleVersionTest.java | 16 ++++++ 9 files changed, 93 insertions(+), 61 deletions(-) create mode 100644 src/main/java/a8k/app/iflytophald/type/protocol/McuModuleVersion.java create mode 100644 src/test/java/a8k/app/iflytophald/type/protocol/McuModuleVersionTest.java diff --git a/src/main/java/a8k/app/constant/AppVersion.java b/src/main/java/a8k/app/constant/AppVersion.java index e03865f..86b450d 100644 --- a/src/main/java/a8k/app/constant/AppVersion.java +++ b/src/main/java/a8k/app/constant/AppVersion.java @@ -1,5 +1,5 @@ package a8k.app.constant; public class AppVersion { - public static final String APP_VERSION = "A80.CN.01.00.07"; + public static final String APP_VERSION = "B80.CN.01.00.07"; } diff --git a/src/main/java/a8k/app/controler/api/v1/app/setting/DeviceInfoControler.java b/src/main/java/a8k/app/controler/api/v1/app/setting/DeviceInfoControler.java index f661f5e..d4985ee 100644 --- a/src/main/java/a8k/app/controler/api/v1/app/setting/DeviceInfoControler.java +++ b/src/main/java/a8k/app/controler/api/v1/app/setting/DeviceInfoControler.java @@ -44,6 +44,7 @@ public class DeviceInfoControler { @Operation(summary = "获取设备信息") @PostMapping("/getDeviceInfo") public ApiRet getDeviceInfo() { + a8kSubModuleRegInitService.updateSubBoardVersionInfo(); DeviceInfo info = new DeviceInfo(); info.appVersion = gstate.getAppVersion(); info.mcuVersion = gstate.getMcuVersion(); diff --git a/src/main/java/a8k/app/i18n/Internationalization.java b/src/main/java/a8k/app/i18n/Internationalization.java index 48bc5be..989c1c4 100644 --- a/src/main/java/a8k/app/i18n/Internationalization.java +++ b/src/main/java/a8k/app/i18n/Internationalization.java @@ -166,12 +166,12 @@ public class Internationalization { public static String midToString(MId mid) { return switch (mid) { case NotSet -> "无效值"; - case HbotBoard -> String.format("机械臂控制板(%d)", mid.index); + case HbotBoard -> String.format("机械臂(%d)", mid.index); case HbotM -> String.format("机械臂XY(%d)", mid.index); - case PlatesBoxBoard -> String.format("板夹仓控制板(%d)", mid.index); + case PlatesBoxBoard -> String.format("板夹仓(%d)", mid.index); case PlatesBoxYM -> String.format("板夹仓移动电机(%d)", mid.index); case PlatesBoxPusherM -> String.format("板夹仓推杆电机(%d)", mid.index); - case ShakeModBoard -> String.format("摇匀模组控制板(%d)", mid.index); + case ShakeModBoard -> String.format("摇匀模组(%d)", mid.index); case ShakeModClampingM -> String.format("试管固定夹爪电机(%d)", mid.index); case ShakeModGripperZM -> String.format("摇匀升降电机(%d)", mid.index); case ShakeModShakeM -> String.format("试管摇匀电机(%d)", mid.index); @@ -180,19 +180,19 @@ public class Internationalization { case ShakeModTubeScanerClampingSV -> String.format("试管架扫码夹紧舵机(%d)", mid.index); case ShakeModTubeScanerRotateSV -> String.format("试管架旋转舵机(%d)", mid.index); case ShakeModLiftingSV -> String.format("试管顶升舵机(%d)", mid.index); - case PlatesBoxTCMBoard -> String.format("板夹仓温度控制板(%d)", mid.index); + case PlatesBoxTCMBoard -> String.format("板夹仓温控(%d)", mid.index); case PlatesBoxTCM -> String.format("反应板夹温度控制模块(%d)", mid.index); case WbTubeFanMod -> String.format("气溶胶风扇(%d)", mid.index); - case IncubatorTCMBoard -> String.format("孵育盘温度控制板(%d)", mid.index); + case IncubatorTCMBoard -> String.format("孵育盘温控(%d)", mid.index); case IncubatorTCM -> String.format("温度控制(%d)", mid.index); case FeedingModBoard -> String.format("出入料控制板(%d)", mid.index); case FeedingModInfeedM -> String.format("入料电机(%d)", mid.index); case FeedingModXM -> String.format("试管架平移电机(%d)", mid.index); case FeedingModOutfeedM -> String.format("出料电机(%d)", mid.index); case FeedingModScannerMod -> String.format("试管架扫码器(%d)", mid.index); - case IncubatorRotateBoard -> String.format("孵育转盘控制板(%d)", mid.index); + case IncubatorRotateBoard -> String.format("孵育转盘(%d)", mid.index); case IncubatorRotateCtrlM -> String.format("孵育盘旋转(%d)", mid.index); - case PipetteModBoard -> String.format("移液枪控制板(%d)", mid.index); + case PipetteModBoard -> String.format("移液枪(%d)", mid.index); case PipetteMod -> String.format("移液枪(%d)", mid.index); case PipetteModCodeScanner -> String.format("物料扫码器(%d)", mid.index); case OptModBoard -> String.format("光学模组(%d)", mid.index); diff --git a/src/main/java/a8k/app/iflytophald/type/protocol/McuModuleVersion.java b/src/main/java/a8k/app/iflytophald/type/protocol/McuModuleVersion.java new file mode 100644 index 0000000..1d86b21 --- /dev/null +++ b/src/main/java/a8k/app/iflytophald/type/protocol/McuModuleVersion.java @@ -0,0 +1,29 @@ +package a8k.app.iflytophald.type.protocol; + +public class McuModuleVersion { + public Integer main; + public Integer sub; + public Integer fix; + + public McuModuleVersion(int versionRaw) { + this.main = (versionRaw >> 16) & 0xFF; + this.sub = (versionRaw >> 8) & 0xFF; + this.fix = versionRaw & 0xFF; + } + + public McuModuleVersion(Integer main, Integer sub, Integer fix) { + this.main = main; + this.sub = sub; + this.fix = fix; + } + + public Integer getVersionRaw() { + return (main << 16) | (sub << 8) | fix; + } + + public String toString() { + // 软件种类 项目代码 国家代码 主要变更 部分变更 暂时性变更 + //F80.CN.01.00.02 + return String.format("M80.CN.%02d.%02d.%02d", main, sub, fix); + } +} diff --git a/src/main/java/a8k/app/iflytophald/type/protocol/OptModuleRegIndex.java b/src/main/java/a8k/app/iflytophald/type/protocol/OptModuleRegIndex.java index 3137c08..79ea99e 100644 --- a/src/main/java/a8k/app/iflytophald/type/protocol/OptModuleRegIndex.java +++ b/src/main/java/a8k/app/iflytophald/type/protocol/OptModuleRegIndex.java @@ -30,6 +30,14 @@ public enum OptModuleRegIndex { kreg_a8k_opt_t_scan_tzerowait(RegIndex.kreg_a8k_opt_t_scan_tzerowait), // kreg_a8k_opt_t_scan_irun(RegIndex.kreg_a8k_opt_t_scan_irun), // + + kreg_a8k_opt_t_uvled_on_duration_time(RegIndex.kreg_a8k_opt_t_uvled_on_duration_time), + kreg_a8k_opt_t_uvled_off_duration_time(RegIndex.kreg_a8k_opt_t_uvled_off_duration_time), + kreg_a8k_opt_t_scan_delay_time(RegIndex.kreg_a8k_opt_t_scan_delay_time), + kreg_a8k_opt_t_scan_duration_time(RegIndex.kreg_a8k_opt_t_scan_duration_time), + kreg_a8k_opt_t_time_resolving_density(RegIndex.kreg_a8k_opt_t_time_resolving_density), + + kreg_a8k_opt_barcode_scan_vdefault(RegIndex.kreg_a8k_opt_barcode_scan_vdefault), // kreg_a8k_opt_barcode_scan_vstart(RegIndex.kreg_a8k_opt_barcode_scan_vstart), // kreg_a8k_opt_barcode_scan_a1(RegIndex.kreg_a8k_opt_barcode_scan_a1), // diff --git a/src/main/java/a8k/app/iflytophald/type/protocol/RegIndex.java b/src/main/java/a8k/app/iflytophald/type/protocol/RegIndex.java index c235702..5ce484b 100644 --- a/src/main/java/a8k/app/iflytophald/type/protocol/RegIndex.java +++ b/src/main/java/a8k/app/iflytophald/type/protocol/RegIndex.java @@ -132,6 +132,12 @@ public enum RegIndex { kreg_a8k_opt_t_scan_tzerowait(4708), // kreg_a8k_opt_t_scan_irun(4709), // + kreg_a8k_opt_t_uvled_on_duration_time(4720), // + kreg_a8k_opt_t_uvled_off_duration_time(4721), // + kreg_a8k_opt_t_scan_delay_time(4722), // + kreg_a8k_opt_t_scan_duration_time(4723), // + kreg_a8k_opt_t_time_resolving_density(4724), // + kreg_a8k_opt_barcode_scan_vdefault(4800), // kreg_a8k_opt_barcode_scan_vstart(4801), // kreg_a8k_opt_barcode_scan_a1(4802), // diff --git a/src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java b/src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java index b970568..a4058c2 100644 --- a/src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java +++ b/src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java @@ -1,6 +1,7 @@ package a8k.app.service.appsetup; import a8k.app.i18n.Internationalization; +import a8k.app.iflytophald.type.protocol.McuModuleVersion; import a8k.app.service.background.TemperatureCtrlService; import a8k.app.service.data.SubModuleConfigService; import a8k.app.type.BoardVersions; @@ -39,6 +40,8 @@ public class A8kSubModuleRegInitService { private final SubModuleConfigService subModuleConfigService; private final TemperatureCtrlService temperatureCtrlService; + Boolean hasReadBoardVersion = false; + @PostConstruct void init() { @@ -75,6 +78,7 @@ public class A8kSubModuleRegInitService { updateSubBoardVersionInfo(false); } + synchronized public void updateSubBoardVersionInfo(Boolean dump) { if (dump) { log.info("======================================================="); @@ -96,67 +100,34 @@ public class A8kSubModuleRegInitService { ); BoardVersions boardVersions = new BoardVersions(); + if (gStateMgrService.isInMode(DeviceRunMode.RealMode)) { for (MId mid : boardMidList) { try { - Integer ver = canBus.moduleReadVersion(mid); - boardVersions.boardVersions.add(new BoardVersions.BoardVersion(mid, Internationalization.midToString(mid), ver, String.format("V%04d", ver))); + Integer ver = canBus.moduleReadVersion(mid); + McuModuleVersion versionCode = new McuModuleVersion(ver); + boardVersions.boardVersions.add(new BoardVersions.BoardVersion(mid, Internationalization.midToString(mid), versionCode, versionCode.toString())); if (dump) log.info(String.format("+ %-40s(%d): type:%-20s version:%s", mid, mid.index, canBus.moduleReadType(mid), ver)); } catch (AppException e) { if (dump) log.error(String.format("+ %20s(%d): offline", mid, mid.index)); - boardVersions.boardVersions.add(new BoardVersions.BoardVersion(mid, Internationalization.midToString(mid), 0, "---")); + boardVersions.boardVersions.add(new BoardVersions.BoardVersion(mid, Internationalization.midToString(mid), new McuModuleVersion(0), "---")); } } gStateMgrService.setMcuVersion(boardVersions.getVersionSummary(), boardVersions); } else { for (MId mid : boardMidList) { - Integer ver = 1; - boardVersions.boardVersions.add(new BoardVersions.BoardVersion(mid, Internationalization.midToString(mid), ver, String.format("V%04d", ver))); + McuModuleVersion versionCode = new McuModuleVersion(0x010203); + boardVersions.boardVersions.add(new BoardVersions.BoardVersion(mid, Internationalization.midToString(mid), versionCode, versionCode.toString())); } gStateMgrService.setMcuVersion(boardVersions.getVersionSummary(), boardVersions); } - - + hasReadBoardVersion = true; } - - // private void dumpAllSubBoardVersion() { - // log.info("======================================================="); - // log.info("= dump all sub board version...... ="); - // log.info("="); - // - // boolean hasDiffVersion = false; - // Integer maxVersion = null; - // for (MId mid : MId.values()) { - // if (mid == MId.NotSet) { - // continue; - // } - // try { - // Integer ver = canBus.moduleReadVersion(mid); - // String moduleType = canBus.moduleReadType(mid).toString(); - // if (maxVersion != null && !maxVersion.equals(ver)) { - // hasDiffVersion = true; - // } - // if (maxVersion == null || ver > maxVersion) { - // maxVersion = ver; - // } - // log.info(String.format("+ %-40s(%d): type:%-20s version:%s", mid, mid.index, moduleType, ver)); - // } catch (AppException e) { - // log.error(String.format("+ %20s(%d): offline", mid, mid.index)); - // - // } - // } - // - // updateSubBoardVersionInfo(); - // - // if (!hasDiffVersion) { - // gStateMgrService.setMcuVersion(String.format("V%04d", maxVersion)); - // } else { - // //版本不一致,标记为(*),表示需要升级 - // gStateMgrService.setMcuVersion(String.format("V%04d(*)", maxVersion)); - // } - // } + public Boolean isHasReadBoardVersion() { + return hasReadBoardVersion; + } } diff --git a/src/main/java/a8k/app/type/BoardVersions.java b/src/main/java/a8k/app/type/BoardVersions.java index e9a42ae..299c274 100644 --- a/src/main/java/a8k/app/type/BoardVersions.java +++ b/src/main/java/a8k/app/type/BoardVersions.java @@ -1,6 +1,7 @@ package a8k.app.type; import a8k.app.iflytophald.type.protocol.MId; +import a8k.app.iflytophald.type.protocol.McuModuleVersion; import java.io.Serializable; import java.util.ArrayList; @@ -8,12 +9,12 @@ import java.util.List; public class BoardVersions implements Serializable { static public class BoardVersion implements Serializable { - public MId mid; - public String boardName; - public String version; - public Integer versionCode; + public MId mid; + public String boardName; + public String version; + public McuModuleVersion versionCode; - public BoardVersion(MId mid, String boardName, Integer versionCode, String version) { + public BoardVersion(MId mid, String boardName, McuModuleVersion versionCode, String version) { this.boardName = boardName; this.mid = mid; this.versionCode = versionCode; @@ -42,8 +43,8 @@ public class BoardVersions implements Serializable { } Integer maxVersion = 0; for (BoardVersion boardVersion : boardVersions) { - if (boardVersion.versionCode > maxVersion) { - maxVersion = boardVersion.versionCode; + if (boardVersion.versionCode.getVersionRaw() > maxVersion) { + maxVersion = boardVersion.versionCode.getVersionRaw(); } } return maxVersion; @@ -57,9 +58,9 @@ public class BoardVersions implements Serializable { Boolean allEqual = isAllEqual(); Integer maxVersion = getMaxVersion(); if (allEqual) { - return String.format("V%04d", boardVersions.get(0).versionCode); + return String.format("%s", boardVersions.get(0).versionCode); } else { - return String.format("V%04d*", boardVersions.get(0).versionCode); + return String.format("%s*", boardVersions.get(0).versionCode); } } diff --git a/src/test/java/a8k/app/iflytophald/type/protocol/McuModuleVersionTest.java b/src/test/java/a8k/app/iflytophald/type/protocol/McuModuleVersionTest.java new file mode 100644 index 0000000..bc310fe --- /dev/null +++ b/src/test/java/a8k/app/iflytophald/type/protocol/McuModuleVersionTest.java @@ -0,0 +1,16 @@ +package a8k.app.iflytophald.type.protocol; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class McuModuleVersionTest { + + @Test + void testConstruct() { + McuModuleVersion version = new McuModuleVersion(0x010203); + assertEquals(1, version.main); + assertEquals(2, version.sub); + assertEquals(3, version.fix); + } +} \ No newline at end of file