Browse Source

B80.CN.01.00.07 |修改单片机版本格式

master
zhaohe 1 week ago
parent
commit
9413a32464
  1. 2
      src/main/java/a8k/app/constant/AppVersion.java
  2. 1
      src/main/java/a8k/app/controler/api/v1/app/setting/DeviceInfoControler.java
  3. 14
      src/main/java/a8k/app/i18n/Internationalization.java
  4. 29
      src/main/java/a8k/app/iflytophald/type/protocol/McuModuleVersion.java
  5. 8
      src/main/java/a8k/app/iflytophald/type/protocol/OptModuleRegIndex.java
  6. 6
      src/main/java/a8k/app/iflytophald/type/protocol/RegIndex.java
  7. 59
      src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java
  8. 19
      src/main/java/a8k/app/type/BoardVersions.java
  9. 16
      src/test/java/a8k/app/iflytophald/type/protocol/McuModuleVersionTest.java

2
src/main/java/a8k/app/constant/AppVersion.java

@ -1,5 +1,5 @@
package a8k.app.constant; package a8k.app.constant;
public class AppVersion { 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";
} }

1
src/main/java/a8k/app/controler/api/v1/app/setting/DeviceInfoControler.java

@ -44,6 +44,7 @@ public class DeviceInfoControler {
@Operation(summary = "获取设备信息") @Operation(summary = "获取设备信息")
@PostMapping("/getDeviceInfo") @PostMapping("/getDeviceInfo")
public ApiRet<DeviceInfo> getDeviceInfo() { public ApiRet<DeviceInfo> getDeviceInfo() {
a8kSubModuleRegInitService.updateSubBoardVersionInfo();
DeviceInfo info = new DeviceInfo(); DeviceInfo info = new DeviceInfo();
info.appVersion = gstate.getAppVersion(); info.appVersion = gstate.getAppVersion();
info.mcuVersion = gstate.getMcuVersion(); info.mcuVersion = gstate.getMcuVersion();

14
src/main/java/a8k/app/i18n/Internationalization.java

@ -166,12 +166,12 @@ public class Internationalization {
public static String midToString(MId mid) { public static String midToString(MId mid) {
return switch (mid) { return switch (mid) {
case NotSet -> "无效值"; 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 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 PlatesBoxYM -> String.format("板夹仓移动电机(%d)", mid.index);
case PlatesBoxPusherM -> 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 ShakeModClampingM -> String.format("试管固定夹爪电机(%d)", mid.index);
case ShakeModGripperZM -> String.format("摇匀升降电机(%d)", mid.index); case ShakeModGripperZM -> String.format("摇匀升降电机(%d)", mid.index);
case ShakeModShakeM -> 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 ShakeModTubeScanerClampingSV -> String.format("试管架扫码夹紧舵机(%d)", mid.index);
case ShakeModTubeScanerRotateSV -> String.format("试管架旋转舵机(%d)", mid.index); case ShakeModTubeScanerRotateSV -> String.format("试管架旋转舵机(%d)", mid.index);
case ShakeModLiftingSV -> 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 PlatesBoxTCM -> String.format("反应板夹温度控制模块(%d)", mid.index);
case WbTubeFanMod -> 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 IncubatorTCM -> String.format("温度控制(%d)", mid.index);
case FeedingModBoard -> String.format("出入料控制板(%d)", mid.index); case FeedingModBoard -> String.format("出入料控制板(%d)", mid.index);
case FeedingModInfeedM -> String.format("入料电机(%d)", mid.index); case FeedingModInfeedM -> String.format("入料电机(%d)", mid.index);
case FeedingModXM -> String.format("试管架平移电机(%d)", mid.index); case FeedingModXM -> String.format("试管架平移电机(%d)", mid.index);
case FeedingModOutfeedM -> String.format("出料电机(%d)", mid.index); case FeedingModOutfeedM -> String.format("出料电机(%d)", mid.index);
case FeedingModScannerMod -> 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 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 PipetteMod -> String.format("移液枪(%d)", mid.index);
case PipetteModCodeScanner -> String.format("物料扫码器(%d)", mid.index); case PipetteModCodeScanner -> String.format("物料扫码器(%d)", mid.index);
case OptModBoard -> String.format("光学模组(%d)", mid.index); case OptModBoard -> String.format("光学模组(%d)", mid.index);

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

8
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_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_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_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_vstart(RegIndex.kreg_a8k_opt_barcode_scan_vstart), //
kreg_a8k_opt_barcode_scan_a1(RegIndex.kreg_a8k_opt_barcode_scan_a1), // kreg_a8k_opt_barcode_scan_a1(RegIndex.kreg_a8k_opt_barcode_scan_a1), //

6
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_tzerowait(4708), //
kreg_a8k_opt_t_scan_irun(4709), // 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_vdefault(4800), //
kreg_a8k_opt_barcode_scan_vstart(4801), // kreg_a8k_opt_barcode_scan_vstart(4801), //
kreg_a8k_opt_barcode_scan_a1(4802), // kreg_a8k_opt_barcode_scan_a1(4802), //

59
src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java

@ -1,6 +1,7 @@
package a8k.app.service.appsetup; package a8k.app.service.appsetup;
import a8k.app.i18n.Internationalization; import a8k.app.i18n.Internationalization;
import a8k.app.iflytophald.type.protocol.McuModuleVersion;
import a8k.app.service.background.TemperatureCtrlService; import a8k.app.service.background.TemperatureCtrlService;
import a8k.app.service.data.SubModuleConfigService; import a8k.app.service.data.SubModuleConfigService;
import a8k.app.type.BoardVersions; import a8k.app.type.BoardVersions;
@ -39,6 +40,8 @@ public class A8kSubModuleRegInitService {
private final SubModuleConfigService subModuleConfigService; private final SubModuleConfigService subModuleConfigService;
private final TemperatureCtrlService temperatureCtrlService; private final TemperatureCtrlService temperatureCtrlService;
Boolean hasReadBoardVersion = false;
@PostConstruct @PostConstruct
void init() { void init() {
@ -75,6 +78,7 @@ public class A8kSubModuleRegInitService {
updateSubBoardVersionInfo(false); updateSubBoardVersionInfo(false);
} }
synchronized public void updateSubBoardVersionInfo(Boolean dump) { synchronized public void updateSubBoardVersionInfo(Boolean dump) {
if (dump) { if (dump) {
log.info("======================================================="); log.info("=======================================================");
@ -96,67 +100,34 @@ public class A8kSubModuleRegInitService {
); );
BoardVersions boardVersions = new BoardVersions(); BoardVersions boardVersions = new BoardVersions();
if (gStateMgrService.isInMode(DeviceRunMode.RealMode)) { if (gStateMgrService.isInMode(DeviceRunMode.RealMode)) {
for (MId mid : boardMidList) { for (MId mid : boardMidList) {
try { 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) if (dump)
log.info(String.format("+ %-40s(%d): type:%-20s version:%s", mid, mid.index, canBus.moduleReadType(mid), ver)); log.info(String.format("+ %-40s(%d): type:%-20s version:%s", mid, mid.index, canBus.moduleReadType(mid), ver));
} catch (AppException e) { } catch (AppException e) {
if (dump) if (dump)
log.error(String.format("+ %20s(%d): offline", mid, mid.index)); 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); gStateMgrService.setMcuVersion(boardVersions.getVersionSummary(), boardVersions);
} else { } else {
for (MId mid : boardMidList) { 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); 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;
}
} }

19
src/main/java/a8k/app/type/BoardVersions.java

@ -1,6 +1,7 @@
package a8k.app.type; package a8k.app.type;
import a8k.app.iflytophald.type.protocol.MId; import a8k.app.iflytophald.type.protocol.MId;
import a8k.app.iflytophald.type.protocol.McuModuleVersion;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
@ -8,12 +9,12 @@ import java.util.List;
public class BoardVersions implements Serializable { public class BoardVersions implements Serializable {
static public class BoardVersion 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.boardName = boardName;
this.mid = mid; this.mid = mid;
this.versionCode = versionCode; this.versionCode = versionCode;
@ -42,8 +43,8 @@ public class BoardVersions implements Serializable {
} }
Integer maxVersion = 0; Integer maxVersion = 0;
for (BoardVersion boardVersion : boardVersions) { for (BoardVersion boardVersion : boardVersions) {
if (boardVersion.versionCode > maxVersion) {
maxVersion = boardVersion.versionCode;
if (boardVersion.versionCode.getVersionRaw() > maxVersion) {
maxVersion = boardVersion.versionCode.getVersionRaw();
} }
} }
return maxVersion; return maxVersion;
@ -57,9 +58,9 @@ public class BoardVersions implements Serializable {
Boolean allEqual = isAllEqual(); Boolean allEqual = isAllEqual();
Integer maxVersion = getMaxVersion(); Integer maxVersion = getMaxVersion();
if (allEqual) { if (allEqual) {
return String.format("V%04d", boardVersions.get(0).versionCode);
return String.format("%s", boardVersions.get(0).versionCode);
} else { } else {
return String.format("V%04d*", boardVersions.get(0).versionCode);
return String.format("%s*", boardVersions.get(0).versionCode);
} }
} }

16
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);
}
}
Loading…
Cancel
Save