Browse Source

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

master
zhaohe 5 days 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;
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 = "获取设备信息")
@PostMapping("/getDeviceInfo")
public ApiRet<DeviceInfo> getDeviceInfo() {
a8kSubModuleRegInitService.updateSubBoardVersionInfo();
DeviceInfo info = new DeviceInfo();
info.appVersion = gstate.getAppVersion();
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) {
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);

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_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), //

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_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), //

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

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

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