Browse Source

update

tags/v0
zhaohe 4 months ago
parent
commit
d395f5ee72
  1. 2
      appresource/static/exui/css/app.c7d7479a.css
  2. 5
      appresource/static/exui/css/app.d22b2bc5.css
  3. 2
      appresource/static/exui/index.html
  4. 2
      appresource/static/exui/js/app.26c08c6a.js
  5. 1
      appresource/static/exui/js/app.26c08c6a.js.map
  6. 2
      appresource/static/exui/js/app.b64f14b2.js
  7. 1
      appresource/static/exui/js/app.b64f14b2.js.map
  8. 2
      appresource/static/exui/js/app.d39856d3.js
  9. 1
      appresource/static/exui/js/app.d39856d3.js.map
  10. 33
      appresource/static/exui/js/chunk-vendors.5158647c.js
  11. 1
      appresource/static/exui/js/chunk-vendors.5158647c.js.map
  12. 5
      src/main/java/a8k/app/dao/db/DeviceStatisticDao.java
  13. 2
      src/main/java/a8k/app/dao/db/LISSettingDao.java
  14. 26
      src/main/java/a8k/app/dao/db/SubModuleRegInitialValueDao.java
  15. 1
      src/main/java/a8k/app/dao/db/type/DeviceAdvancedSetting.java
  16. 2
      src/main/java/a8k/app/dao/db/type/OptCfg.java
  17. 13
      src/main/java/a8k/app/dao/db/type/SubModuleRegInitialValue.java
  18. 17
      src/main/java/a8k/app/hardware/basedriver/A8kCanBusService.java
  19. 6
      src/main/java/a8k/app/hardware/driver/InputDetectDriver.java
  20. 17
      src/main/java/a8k/app/hardware/driver/OptModuleDriver.java
  21. 2
      src/main/java/a8k/app/hardware/driver/OutputIOCtrlDriver.java
  22. 12
      src/main/java/a8k/app/hardware/driver/type/OptModuleRegIndex.java
  23. 4
      src/main/java/a8k/app/hardware/initializer/A8kModParamInitializer.java
  24. 26
      src/main/java/a8k/app/hardware/type/a8kcanprotocol/InputIOId.java
  25. 52
      src/main/java/a8k/app/hardware/type/a8kcanprotocol/ModuleType.java
  26. 2
      src/main/java/a8k/app/hardware/type/a8kcanprotocol/OutputIOId.java
  27. 32
      src/main/java/a8k/app/hardware/type/regindex/RegIndex.java
  28. 2
      src/main/java/a8k/app/service/data/ProjInfoMgrService.java
  29. 35
      src/main/java/a8k/app/service/data/SubModuleRegInitialValueMgrService.java
  30. 9
      src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java
  31. 2
      src/main/java/a8k/extui/page/test/driver/LowLevelBoardVersionPreviewPage.java
  32. 4
      src/main/java/a8k/extui/page/test/driver/MotorCtrlPage.java

2
appresource/static/exui/css/app.4cd67ac3.css → appresource/static/exui/css/app.c7d7479a.css

@ -1,4 +1,4 @@
.vjs-tree-brackets{cursor:pointer}.vjs-tree-brackets:hover{color:#1890ff}.vjs-check-controller{position:absolute;left:0}.vjs-check-controller.is-checked .vjs-check-controller-inner{background-color:#1890ff;border-color:#0076e4}.vjs-check-controller.is-checked .vjs-check-controller-inner.is-checkbox:after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.vjs-check-controller.is-checked .vjs-check-controller-inner.is-radio:after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.vjs-check-controller .vjs-check-controller-inner{display:inline-block;position:relative;border:1px solid #bfcbd9;border-radius:2px;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box;width:16px;height:16px;background-color:#fff;z-index:1;cursor:pointer;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.vjs-check-controller .vjs-check-controller-inner:after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:4px;-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;-webkit-transform-origin:center;transform-origin:center}.vjs-check-controller .vjs-check-controller-inner.is-radio{border-radius:100%}.vjs-check-controller .vjs-check-controller-inner.is-radio:after{border-radius:100%;height:4px;background-color:#fff;left:50%;top:50%}.vjs-check-controller .vjs-check-controller-original{opacity:0;outline:none;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.vjs-carets{position:absolute;right:0;cursor:pointer}.vjs-carets svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.vjs-carets:hover{color:#1890ff}.vjs-carets-close{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.vjs-tree-node{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;line-height:20px}.vjs-tree-node.has-carets{padding-left:15px}.vjs-tree-node.has-carets.has-selector,.vjs-tree-node.has-selector{padding-left:30px}.vjs-tree-node.is-highlight,.vjs-tree-node:hover{background-color:#e6f7ff}.vjs-tree-node .vjs-indent{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative}.vjs-tree-node .vjs-indent-unit{width:1em}.vjs-tree-node .vjs-indent-unit.has-line{border-left:1px dashed #bfcbd9}.vjs-tree-node.dark.is-highlight,.vjs-tree-node.dark:hover{background-color:#2e4558}.vjs-node-index{position:absolute;right:100%;margin-right:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vjs-colon{white-space:pre}.vjs-comment{color:#bfcbd9}.vjs-value{word-break:break-word}.vjs-value-null,.vjs-value-undefined{color:#d55fde}.vjs-value-boolean,.vjs-value-number{color:#1d8ce0}.vjs-value-string{color:#13ce66}.vjs-tree{font-family:Monaco,Menlo,Consolas,Bitstream Vera Sans Mono,monospace;font-size:14px;text-align:left}.vjs-tree.is-virtual{overflow:auto}.vjs-tree.is-virtual .vjs-tree-node{white-space:nowrap}.p-style[data-v-3f841166]{white-space:pre;word-break:keep-all;max-height:20vh;overflow-y:auto}.group-container[data-v-3f841166]{height:100%;display:flex;flex-direction:column}.action-param-label[data-v-69612837]{font-size:.6rem;top:-8px;position:absolute;z-index:9;left:5px;padding:0 5px;color:#7b7b7b}.action-button[data-v-69612837],.fixed-length-button[data-v-69612837]{white-space:normal;word-break:break-word}.fixed-length-button[data-v-69612837]{min-width:230px}[data-v-73d38e6c]::-webkit-scrollbar{display:none}
.vjs-tree-brackets{cursor:pointer}.vjs-tree-brackets:hover{color:#1890ff}.vjs-check-controller{position:absolute;left:0}.vjs-check-controller.is-checked .vjs-check-controller-inner{background-color:#1890ff;border-color:#0076e4}.vjs-check-controller.is-checked .vjs-check-controller-inner.is-checkbox:after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.vjs-check-controller.is-checked .vjs-check-controller-inner.is-radio:after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.vjs-check-controller .vjs-check-controller-inner{display:inline-block;position:relative;border:1px solid #bfcbd9;border-radius:2px;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box;width:16px;height:16px;background-color:#fff;z-index:1;cursor:pointer;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.vjs-check-controller .vjs-check-controller-inner:after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:4px;-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s,-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;-webkit-transform-origin:center;transform-origin:center}.vjs-check-controller .vjs-check-controller-inner.is-radio{border-radius:100%}.vjs-check-controller .vjs-check-controller-inner.is-radio:after{border-radius:100%;height:4px;background-color:#fff;left:50%;top:50%}.vjs-check-controller .vjs-check-controller-original{opacity:0;outline:none;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.vjs-carets{position:absolute;right:0;cursor:pointer}.vjs-carets svg{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.vjs-carets:hover{color:#1890ff}.vjs-carets-close{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.vjs-tree-node{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;line-height:20px}.vjs-tree-node.has-carets{padding-left:15px}.vjs-tree-node.has-carets.has-selector,.vjs-tree-node.has-selector{padding-left:30px}.vjs-tree-node.is-highlight,.vjs-tree-node:hover{background-color:#e6f7ff}.vjs-tree-node .vjs-indent{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative}.vjs-tree-node .vjs-indent-unit{width:1em}.vjs-tree-node .vjs-indent-unit.has-line{border-left:1px dashed #bfcbd9}.vjs-tree-node.dark.is-highlight,.vjs-tree-node.dark:hover{background-color:#2e4558}.vjs-node-index{position:absolute;right:100%;margin-right:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vjs-colon{white-space:pre}.vjs-comment{color:#bfcbd9}.vjs-value{word-break:break-word}.vjs-value-null,.vjs-value-undefined{color:#d55fde}.vjs-value-boolean,.vjs-value-number{color:#1d8ce0}.vjs-value-string{color:#13ce66}.vjs-tree{font-family:Monaco,Menlo,Consolas,Bitstream Vera Sans Mono,monospace;font-size:14px;text-align:left}.vjs-tree.is-virtual{overflow:auto}.vjs-tree.is-virtual .vjs-tree-node{white-space:nowrap}.p-style[data-v-3f841166]{white-space:pre;word-break:keep-all;max-height:20vh;overflow-y:auto}.group-container[data-v-3f841166]{height:100%;display:flex;flex-direction:column}.action-param-label[data-v-901522d6]{font-size:.6rem;top:-8px;position:absolute;z-index:9;left:5px;padding:0 5px;color:#7b7b7b}.action-button[data-v-901522d6],.fixed-length-button[data-v-901522d6]{white-space:normal;word-break:break-word}.fixed-length-button[data-v-901522d6]{min-width:230px}[data-v-51997c76]::-webkit-scrollbar{display:none}
/* /*
! tailwindcss v3.4.4 | MIT License | https://tailwindcss.com ! tailwindcss v3.4.4 | MIT License | https://tailwindcss.com

5
appresource/static/exui/css/app.d22b2bc5.css
File diff suppressed because it is too large
View File

2
appresource/static/exui/index.html

@ -1 +1 @@
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>a8k_webui</title><script defer="defer" src="js/chunk-vendors.54b2b77b.js"></script><script defer="defer" src="js/app.26c08c6a.js"></script><link href="css/app.4cd67ac3.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but a8k_webui doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>a8k_webui</title><script defer="defer" src="js/chunk-vendors.54b2b77b.js"></script><script defer="defer" src="js/app.b64f14b2.js"></script><link href="css/app.c7d7479a.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but a8k_webui doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

2
appresource/static/exui/js/app.26c08c6a.js
File diff suppressed because it is too large
View File

1
appresource/static/exui/js/app.26c08c6a.js.map
File diff suppressed because it is too large
View File

2
appresource/static/exui/js/app.b64f14b2.js
File diff suppressed because it is too large
View File

1
appresource/static/exui/js/app.b64f14b2.js.map
File diff suppressed because it is too large
View File

2
appresource/static/exui/js/app.d39856d3.js
File diff suppressed because it is too large
View File

1
appresource/static/exui/js/app.d39856d3.js.map
File diff suppressed because it is too large
View File

33
appresource/static/exui/js/chunk-vendors.5158647c.js
File diff suppressed because it is too large
View File

1
appresource/static/exui/js/chunk-vendors.5158647c.js.map
File diff suppressed because it is too large
View File

5
src/main/java/a8k/app/dao/db/DeviceStatisticDao.java

@ -8,6 +8,7 @@ import jakarta.annotation.Nullable;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
@ -20,8 +21,8 @@ import java.util.Date;
import java.util.List; import java.util.List;
@Component @Component
@Slf4j
public class DeviceStatisticDao { public class DeviceStatisticDao {
private static final Logger logger = LoggerFactory.getLogger(DeviceStatisticDao.class);
private static final String tableName = "zapp_a8k_statistic"; private static final String tableName = "zapp_a8k_statistic";
private static Class<?> tClass = DeviceStatistic.class; private static Class<?> tClass = DeviceStatistic.class;
@ -44,7 +45,7 @@ public class DeviceStatisticDao {
try { try {
return jdbcTemplate.queryForObject(sql, rowMapper, args); return jdbcTemplate.queryForObject(sql, rowMapper, args);
} catch (Exception e) { } catch (Exception e) {
logger.error("queryForObject error: {}", e.getMessage());
log.error("queryForObject error: {}", e.getMessage());
return null; return null;
} }
} }

2
src/main/java/a8k/app/dao/db/LISSettingDao.java

@ -28,6 +28,4 @@ public class LISSettingDao extends ZSqlite<LISSetting> {
public LISSetting get() { public LISSetting get() {
return getAll().get(0); return getAll().get(0);
} }
} }

26
src/main/java/a8k/app/dao/db/SubModuleRegInitialValueDao.java

@ -0,0 +1,26 @@
package a8k.app.dao.db;
import a8k.app.dao.db.type.SubModuleRegInitialValue;
import a8k.app.utils.ZSqlite;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
@Slf4j
@RequiredArgsConstructor
public class SubModuleRegInitialValueDao extends ZSqlite<SubModuleRegInitialValue> {
private final JdbcTemplate _jdbcTemplate;
@PostConstruct
void init() {
init(_jdbcTemplate, "zapp_sub_module_reg_initial_value", SubModuleRegInitialValue.class, false);
}
}

1
src/main/java/a8k/app/dao/db/type/DeviceAdvancedSetting.java

@ -1 +0,0 @@
package a8k.app.dao.db.type;

2
src/main/java/a8k/app/dao/db/type/OptCfg.java

@ -19,6 +19,4 @@ public class OptCfg implements Serializable {
public Integer optScanPeakNum; //子项目 实际扫描到的峰的数量 public Integer optScanPeakNum; //子项目 实际扫描到的峰的数量
public Integer peakNameRefNum; //子项目 峰的数量 public Integer peakNameRefNum; //子项目 峰的数量
} }

13
src/main/java/a8k/app/dao/db/type/SubModuleRegInitialValue.java

@ -0,0 +1,13 @@
package a8k.app.dao.db.type;
import a8k.app.hardware.type.a8kcanprotocol.MId;
import a8k.app.hardware.type.regindex.RegIndex;
import java.io.Serializable;
public class SubModuleRegInitialValue implements Serializable {
public int id = 0;
public MId mid;
public RegIndex regIndex;
public Integer regInitVal;
}

17
src/main/java/a8k/app/hardware/basedriver/A8kCanBusService.java

@ -95,22 +95,9 @@ public class A8kCanBusService {
return moduleGetReg(id, RegIndex.kreg_module_version); return moduleGetReg(id, RegIndex.kreg_module_version);
} }
public String moduleReadType(MId id) throws AppException {
public ModuleType moduleReadType(MId id) throws AppException {
var type = moduleGetReg(id, RegIndex.kreg_module_type); var type = moduleGetReg(id, RegIndex.kreg_module_type);
return switch (type) {
case 1 -> "HBOT";
case 3 -> "TCM";
case 5 -> "FanCTL";
case 6 -> "CodeScaner";
case 7 -> "PipetteGunCTL";
case 8 -> "A8kOptical";
case 10 -> "StepMotor";
case 11 -> "MiniServo";
case 12 -> "Board";
case 13 -> "IDReader";
case 14 -> "PlateCodeReader";
default -> "Unknown";
};
return ModuleType.of(type);
} }
public byte[] a8kIdcardReaderReadRaw() throws AppException { public byte[] a8kIdcardReaderReadRaw() throws AppException {

6
src/main/java/a8k/app/hardware/driver/InputDetectDriver.java

@ -33,11 +33,11 @@ public class InputDetectDriver {
} }
private Boolean priGetIOState(InputIOId ioid) throws AppException { private Boolean priGetIOState(InputIOId ioid) throws AppException {
if (ioid.mtype == ModuleType.kboard) {
if (ioid.mtype == ModuleType.Board) {
return a8kCanBusService.callcmd(ioid.mid, CmdId.extboard_read_inio, ioid.ioIndex).getContentI32(0) != 0; return a8kCanBusService.callcmd(ioid.mid, CmdId.extboard_read_inio, ioid.ioIndex).getContentI32(0) != 0;
} else if (ioid.mtype == ModuleType.ktmc_step_motor) {
} else if (ioid.mtype == ModuleType.TMCStepMotor) {
return a8kCanBusService.callcmd(ioid.mid, CmdId.step_motor_read_io_state, ioid.ioIndex).getContentI32(0) != 0; return a8kCanBusService.callcmd(ioid.mid, CmdId.step_motor_read_io_state, ioid.ioIndex).getContentI32(0) != 0;
} else if (ioid.mtype == ModuleType.kmini_servo_motor_module) {
} else if (ioid.mtype == ModuleType.MiniServo) {
return a8kCanBusService.callcmd(ioid.mid, CmdId.mini_servo_read_io_state, ioid.ioIndex).getContentI32(0) != 0; return a8kCanBusService.callcmd(ioid.mid, CmdId.mini_servo_read_io_state, ioid.ioIndex).getContentI32(0) != 0;
} else { } else {
throw new AppException(new AECodeError(String.format("IOID MODULE TYPE %s NOT SUPPORT", ioid.mtype))); throw new AppException(new AECodeError(String.format("IOID MODULE TYPE %s NOT SUPPORT", ioid.mtype)));

17
src/main/java/a8k/app/hardware/driver/OptModuleDriver.java

@ -12,7 +12,9 @@ import a8k.app.a8ktype.opttype.OptScanDirection;
import a8k.app.a8ktype.error.AEHardwareError; import a8k.app.a8ktype.error.AEHardwareError;
import a8k.app.a8ktype.exception.AppException; import a8k.app.a8ktype.exception.AppException;
import a8k.app.utils.ByteArray; import a8k.app.utils.ByteArray;
import a8k.app.utils.ZJsonNode;
import a8k.app.utils.ZList; import a8k.app.utils.ZList;
import com.fasterxml.jackson.databind.JsonNode;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -91,7 +93,7 @@ public class OptModuleDriver {
return result.toArray(new Integer[0]); return result.toArray(new Integer[0]);
} }
public Integer readReg(OptModuleRegIndex regIndex) throws AppException {
public Integer getReg(OptModuleRegIndex regIndex) throws AppException {
return canBus.moduleGetReg(MId.OptMod, regIndex.regIndex); return canBus.moduleGetReg(MId.OptMod, regIndex.regIndex);
} }
@ -99,4 +101,17 @@ public class OptModuleDriver {
canBus.moduleSetReg(MId.OptMod, regIndex.regIndex, value); canBus.moduleSetReg(MId.OptMod, regIndex.regIndex, value);
} }
public JsonNode readAllRegJson() throws AppException {
ZJsonNode node = new ZJsonNode();
for (OptModuleRegIndex reg : OptModuleRegIndex.values()) {
try {
Integer val = getReg(reg);
node.get(reg.name()).set(val);
} catch (AppException e) {
node.get(reg.name()).set(e.getError().code);
}
}
return node.get();
}
} }

2
src/main/java/a8k/app/hardware/driver/OutputIOCtrlDriver.java

@ -16,7 +16,7 @@ public class OutputIOCtrlDriver {
private final A8kCanBusService canBus; private final A8kCanBusService canBus;
public void setIOState(OutputIOId outputIOId, Boolean state) throws AppException { public void setIOState(OutputIOId outputIOId, Boolean state) throws AppException {
if (outputIOId.mtype == ModuleType.kboard) {
if (outputIOId.mtype == ModuleType.Board) {
canBus.callcmd(outputIOId.mid, CmdId.extboard_write_outio, outputIOId.ioIndex, state ? 1 : 0); canBus.callcmd(outputIOId.mid, CmdId.extboard_write_outio, outputIOId.ioIndex, state ? 1 : 0);
} else { } else {
throw new AppException(new AECodeError("IOID MODULE TYPE %s NOT SUPPORT", outputIOId.mtype)); throw new AppException(new AECodeError("IOID MODULE TYPE %s NOT SUPPORT", outputIOId.mtype));

12
src/main/java/a8k/app/hardware/driver/type/OptModuleRegIndex.java

@ -9,9 +9,19 @@ public enum OptModuleRegIndex {
kreg_a8k_opt_f_reverse_scan_pos_offset(RegIndex.kreg_a8k_opt_f_reverse_scan_pos_offset), kreg_a8k_opt_f_reverse_scan_pos_offset(RegIndex.kreg_a8k_opt_f_reverse_scan_pos_offset),
kreg_a8k_opt_scan_step_interval(RegIndex.kreg_a8k_opt_scan_step_interval), kreg_a8k_opt_scan_step_interval(RegIndex.kreg_a8k_opt_scan_step_interval),
kreg_a8k_opt_scan_pointnum(RegIndex.kreg_a8k_opt_scan_pointnum), kreg_a8k_opt_scan_pointnum(RegIndex.kreg_a8k_opt_scan_pointnum),
;
kreg_a8k_opt_scan_vdefault(RegIndex.kreg_a8k_opt_scan_vdefault),
kreg_a8k_opt_scan_vstart(RegIndex.kreg_a8k_opt_scan_vstart),
kreg_a8k_opt_scan_a1(RegIndex.kreg_a8k_opt_scan_a1),
kreg_a8k_opt_scan_amax(RegIndex.kreg_a8k_opt_scan_amax),
kreg_a8k_opt_scan_v1(RegIndex.kreg_a8k_opt_scan_v1),
kreg_a8k_opt_scan_dmax(RegIndex.kreg_a8k_opt_scan_dmax),
kreg_a8k_opt_scan_d1(RegIndex.kreg_a8k_opt_scan_d1),
kreg_a8k_opt_scan_vstop(RegIndex.kreg_a8k_opt_scan_vstop),
kreg_a8k_opt_scan_tzerowait(RegIndex.kreg_a8k_opt_scan_tzerowait),
;
public final RegIndex regIndex; public final RegIndex regIndex;
OptModuleRegIndex(RegIndex regIndex) { OptModuleRegIndex(RegIndex regIndex) {
this.regIndex = regIndex; this.regIndex = regIndex;
} }

4
src/main/java/a8k/app/hardware/initializer/A8kModParamInitializer.java

@ -112,7 +112,7 @@ public class A8kModParamInitializer {
} }
try { try {
Integer ver = canBus.moduleReadVersion(mid); Integer ver = canBus.moduleReadVersion(mid);
String moduleType = canBus.moduleReadType(mid);
String moduleType = canBus.moduleReadType(mid).toString();
logger.info(String.format("+ %-40s(%d): type:%-20s version:%s", mid, mid.index, moduleType, ver)); logger.info(String.format("+ %-40s(%d): type:%-20s version:%s", mid, mid.index, moduleType, ver));
} catch (AppException e) { } catch (AppException e) {
logger.error(String.format("+ %20s(%d): offline", mid, mid.index)); logger.error(String.format("+ %20s(%d): offline", mid, mid.index));
@ -322,6 +322,8 @@ public class A8kModParamInitializer {
setReg(RegIndex.kret_step_motor_io_trigger_append_distance, 10); setReg(RegIndex.kret_step_motor_io_trigger_append_distance, 10);
endInitModule(); endInitModule();
// //
// Hbot配置 // Hbot配置
// //

26
src/main/java/a8k/app/hardware/type/a8kcanprotocol/InputIOId.java

@ -1,24 +1,24 @@
package a8k.app.hardware.type.a8kcanprotocol; package a8k.app.hardware.type.a8kcanprotocol;
public enum InputIOId { public enum InputIOId {
TubeHeightPPS("入料平移通道-试管高低检测IO", ModuleType.kboard, MId.FeedingModBoard, 0, false), //高低试管检测IO
TubeExistPPS("入料平移通道-试管有无光电", ModuleType.kboard, MId.FeedingModBoard, 4, false),//试管有无光电
THChOuterPPS("入料平移通道-外光电", ModuleType.kboard, MId.FeedingModBoard, 1, false),//试管架转移通道有无检测
THChInterPPS("入料平移通道-内光电", ModuleType.kboard, MId.FeedingModBoard, 2, false),//试管架转移通道有无检测
InfeedPPS("入料区有无光电", ModuleType.kboard, MId.FeedingModBoard, 5, false),//试管架入料位置 试管架有无检测
OutfeedPPS("出料位有无检测", ModuleType.kboard, MId.FeedingModBoard, 3, false),//试管出料位置 试管架有无检测
TubeHeightPPS("入料平移通道-试管高低检测IO", ModuleType.Board, MId.FeedingModBoard, 0, false), //高低试管检测IO
TubeExistPPS("入料平移通道-试管有无光电", ModuleType.Board, MId.FeedingModBoard, 4, false),//试管有无光电
THChOuterPPS("入料平移通道-外光电", ModuleType.Board, MId.FeedingModBoard, 1, false),//试管架转移通道有无检测
THChInterPPS("入料平移通道-内光电", ModuleType.Board, MId.FeedingModBoard, 2, false),//试管架转移通道有无检测
InfeedPPS("入料区有无光电", ModuleType.Board, MId.FeedingModBoard, 5, false),//试管架入料位置 试管架有无检测
OutfeedPPS("出料位有无检测", ModuleType.Board, MId.FeedingModBoard, 3, false),//试管出料位置 试管架有无检测
RecycleBinOverflowPPS("废料仓满溢检测", ModuleType.kboard, MId.PlatesBoxTCMBoard, 2, false),//废料桶满溢检测
RecycleBinOverflowPPS("废料仓满溢检测", ModuleType.Board, MId.PlatesBoxTCMBoard, 2, false),//废料桶满溢检测
PlateBoxCoverClosurePPS("板夹仓-仓门光电", ModuleType.kboard, MId.PlatesBoxBoard, 0, true),//板夹仓舱盖闭合检测
PlateBoxPlateStuckPPS("板夹仓-卡板光电", ModuleType.kboard, MId.PlatesBoxBoard, 1, false),//板夹仓卡板检测
PlateBoxCoverClosurePPS("板夹仓-仓门光电", ModuleType.Board, MId.PlatesBoxBoard, 0, true),//板夹仓舱盖闭合检测
PlateBoxPlateStuckPPS("板夹仓-卡板光电", ModuleType.Board, MId.PlatesBoxBoard, 1, false),//板夹仓卡板检测
//转盘逻辑相关光电 //转盘逻辑相关光电
//钩板电机零点光电终点光电 //钩板电机零点光电终点光电
PullerMZeroPPS("光学模组-拉杆电机-零点光电", ModuleType.ktmc_step_motor, MId.OptModPullM, 0, false),//
PullerMEndPPS("光学模组-拉杆电机-限位光电", ModuleType.ktmc_step_motor, MId.OptModPullM, 1, false),//
PullerMZeroPPS("光学模组-拉杆电机-零点光电", ModuleType.TMCStepMotor, MId.OptModPullM, 0, false),//
PullerMEndPPS("光学模组-拉杆电机-限位光电", ModuleType.TMCStepMotor, MId.OptModPullM, 1, false),//
//推板电机零点光电终点光电 //推板电机零点光电终点光电
PusherMZeroPPS("推杆电机-零点光电", ModuleType.ktmc_step_motor, MId.PlatesBoxPusherM, 0, false),//
PusherMEndPPS("推杆电机-终点光电", ModuleType.ktmc_step_motor, MId.PlatesBoxPusherM, 1, false),//
PusherMZeroPPS("推杆电机-零点光电", ModuleType.TMCStepMotor, MId.PlatesBoxPusherM, 0, false),//
PusherMEndPPS("推杆电机-终点光电", ModuleType.TMCStepMotor, MId.PlatesBoxPusherM, 1, false),//
; ;
final public String chname; final public String chname;

52
src/main/java/a8k/app/hardware/type/a8kcanprotocol/ModuleType.java

@ -1,17 +1,38 @@
package a8k.app.hardware.type.a8kcanprotocol; package a8k.app.hardware.type.a8kcanprotocol;
public enum ModuleType { public enum ModuleType {
khbot_module(1), // hbot模块
ktemperature_ctrl_module(3), // 温度控制
kfan_ctrl_module(5), // 风扇控制
kcode_scaner(6), // 扫码器
kpipette_ctrl_module(7), // 移液体枪控制
ka8000_optical_module(8), // a8000光学模组
ktmc_step_motor(10), // 步进电机
kmini_servo_motor_module(11), // 舵机
kboard(12), // 板子
ka8000_idcard_reader(13), // id卡读卡器
ka8000_plate_code_scaner(14); // 反应板条扫码器
// Board(0), // 板子
// HBOT(1), // hbot模块
// WaterCoolingTemperatureCtrl(2), // 水冷温度控制
// FanCtrl(3), // 风扇控制
// CodeScaner(4), // 扫码器
// TMCStepMotor(5), // 步进电机
// MiniServo(6), // 舵机
// PipetteGunCtrl(7), // 移液体枪控制
//
// A8Kptical(100), // a8000光学模组
// A8KIdCardReader(101), // id卡读卡器
// A8KPlateCodeScaner(102), // 反应板条扫码器
//
// UNKNOWN(999) // 未知类型
HBOT(1), // hbot模块
WaterCoolingTemperatureCtrl(3), // 温度控制
FanCtrl(5), // 风扇控制
CodeScaner(6), // 扫码器
PipetteGunCtrl(7), // 移液体枪控制
A8kOptical(8), // a8000光学模组
TMCStepMotor(10), // 步进电机
MiniServo(11), // 舵机
Board(12), // 板子
A8KIdCardReader(13), // id卡读卡器
A8KPlateCodeScaner(14), // 反应板条扫码器
UNKNOWN(999); // 未知类型
final private int val; final private int val;
@ -23,5 +44,14 @@ public enum ModuleType {
return val; return val;
} }
static public ModuleType of(int val) {
for (ModuleType type : ModuleType.values()) {
if (type.val == val) {
return type;
}
}
return UNKNOWN;
}
} }

2
src/main/java/a8k/app/hardware/type/a8kcanprotocol/OutputIOId.java

@ -1,7 +1,7 @@
package a8k.app.hardware.type.a8kcanprotocol; package a8k.app.hardware.type.a8kcanprotocol;
public enum OutputIOId { public enum OutputIOId {
RecycleBinOverflowPPSPowerCtrl("废料仓-光栅电源",ModuleType.kboard, MId.PlatesBoxTCMBoard, 0,false),//废料桶光栅电源
RecycleBinOverflowPPSPowerCtrl("废料仓-光栅电源",ModuleType.Board, MId.PlatesBoxTCMBoard, 0,false),//废料桶光栅电源
; ;
final public String chname; final public String chname;

32
src/main/java/a8k/app/hardware/type/regindex/RegIndex.java

@ -41,19 +41,6 @@ public enum RegIndex {
kreg_pipette_capactitance_val(4001), // 移液枪电容值 kreg_pipette_capactitance_val(4001), // 移液枪电容值
kreg_pipette_tip_state(4002, false), // 移动液枪tip状态 kreg_pipette_tip_state(4002, false), // 移动液枪tip状态
// kreg_pipette_limit_ul(4051), //
// kreg_pipette_pump_acc(4052), //
// kreg_pipette_pump_dec(4053), //
// kreg_pipette_pump_vstart(4054), //
// kreg_pipette_pump_vstop(4055), //
// kreg_pipette_pump_vmax(4056), //
// kreg_pipette_aspirate_distribut_pump_vel(4057), //
// kreg_pipette_lld_pump_vel(4058), //
// kreg_pipette_lld_motor_vel_rpm(4059), //
// kreg_pipette_lld_detect_period_ms(4060), //
// kreg_pipette_lld_prepare_pos(4061), //
// kreg_pipette_lld_prepare_distribut_pos(4062), //
kreg_pipette_zm_pos(4101), kreg_pipette_zm_pos(4101),
kreg_pipette_zm_is_enable(4102), kreg_pipette_zm_is_enable(4102),
kreg_pipette_zm_dpos(4103), kreg_pipette_zm_dpos(4103),
@ -86,28 +73,29 @@ public enum RegIndex {
kreg_pipette_zm_io_trigger_append_distance(4131), kreg_pipette_zm_io_trigger_append_distance(4131),
/** /**
* @brief
*
* ------------------------------------------------------
*
* 光学模组
* *
* 扫描零点偏移:F光学向左扫描的起始位置 * 扫描零点偏移:F光学向左扫描的起始位置
* 扫描方向:1:板卡箭头方向-1板卡箭头反方向 * 扫描方向:1:板卡箭头方向-1板卡箭头反方向
* 扫描点数:固定为1200 * 扫描点数:固定为1200
* 扫描步距:固定为1 * 扫描步距:固定为1
*
* 返回点数:(1200) * 返回点数:(1200)
*
*
*/ */
// 坐标参数
kreg_a8k_opt_t_pos_offset(4501), // T光学正向扫描扫描起始位距离零点的偏移 kreg_a8k_opt_t_pos_offset(4501), // T光学正向扫描扫描起始位距离零点的偏移
kreg_a8k_opt_f_pos_offset(4502), // F光学正向扫描扫描起始位距离零点的偏移 kreg_a8k_opt_f_pos_offset(4502), // F光学正向扫描扫描起始位距离零点的偏移
kreg_a8k_opt_t_reverse_scan_pos_offset(4503), // T光学逆向扫描扫描起始位距离零点的偏移 kreg_a8k_opt_t_reverse_scan_pos_offset(4503), // T光学逆向扫描扫描起始位距离零点的偏移
kreg_a8k_opt_f_reverse_scan_pos_offset(4504), // F光学逆向扫描扫描起始位距离零点的偏移 kreg_a8k_opt_f_reverse_scan_pos_offset(4504), // F光学逆向扫描扫描起始位距离零点的偏移
kreg_a8k_opt_scan_step_interval(4505), // 参数固定:为1 kreg_a8k_opt_scan_step_interval(4505), // 参数固定:为1
kreg_a8k_opt_scan_pointnum(4506), // 参数固定:为1200个点 kreg_a8k_opt_scan_pointnum(4506), // 参数固定:为1200个点
kreg_a8k_opt_scan_vdefault(4520),
kreg_a8k_opt_scan_vstart(4521),
kreg_a8k_opt_scan_a1(4522),
kreg_a8k_opt_scan_amax(4523),
kreg_a8k_opt_scan_v1(4524),
kreg_a8k_opt_scan_dmax(4525),
kreg_a8k_opt_scan_d1(4526),
kreg_a8k_opt_scan_vstop(4527),
kreg_a8k_opt_scan_tzerowait(4528),
/*********************************************************************************************************************** /***********************************************************************************************************************
* XYROBOT * * XYROBOT *

2
src/main/java/a8k/app/service/data/ProjInfoMgrService.java

@ -32,8 +32,6 @@ public class ProjInfoMgrService {
ProjectBaseInfoDao projectBaseInfoDao; ProjectBaseInfoDao projectBaseInfoDao;
@Resource @Resource
ProjOptInfoDao projOptInfoDao; ProjOptInfoDao projOptInfoDao;
// @Resource
// ProjIDCardCtrlAndMonitorService projIDCardCtrlAndMonitorService;
public ProjBuildinInfo getProjBuildInInfo(Integer projId) throws AppException { public ProjBuildinInfo getProjBuildInInfo(Integer projId) throws AppException {

35
src/main/java/a8k/app/service/data/SubModuleRegInitialValueMgrService.java

@ -0,0 +1,35 @@
package a8k.app.service.data;
import a8k.app.a8ktype.exception.AppException;
import a8k.app.dao.db.AppUsrDao;
import a8k.app.dao.db.SubModuleRegInitialValueDao;
import a8k.app.dao.db.type.AppUser;
import a8k.app.dao.db.type.UsrRole;
import a8k.app.hardware.type.a8kcanprotocol.A8kEcode;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@Slf4j
@RequiredArgsConstructor
public class SubModuleRegInitialValueMgrService {
private final SubModuleRegInitialValueDao subModuleRegInitialValueDao;
void storageModuleRegVal() {
//存储所有电机的寄存器初始值
//存储所有舵机的寄存器初始值
//存储光学模组的寄存器初始值
}
}

9
src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java

@ -9,12 +9,10 @@ import a8k.extui.page.extsetting.db.ProjInfoMgrPage;
import a8k.extui.page.extsetting.db.ReactionRecordMgrDebugPage; import a8k.extui.page.extsetting.db.ReactionRecordMgrDebugPage;
import a8k.extui.page.init.DeviceInitPage; import a8k.extui.page.init.DeviceInitPage;
import a8k.extui.page.measurement.*; import a8k.extui.page.measurement.*;
import a8k.extui.page.test.driver.LowLevelBoardVersionPreviewPage;
import a8k.extui.page.test.driver.*;
import a8k.extui.page.test.codetest.OptFormulaTestPage; import a8k.extui.page.test.codetest.OptFormulaTestPage;
import a8k.extui.page.test.codetest.OptFormulaTestPageV2; import a8k.extui.page.test.codetest.OptFormulaTestPageV2;
import a8k.extui.page.test.driver.MotorCtrlPage;
import a8k.extui.page.test.driver.PipetteCtrlDriverPage;
import a8k.extui.page.extapp.debug_assistant.FakeReactionRecordGeneratorPage; import a8k.extui.page.extapp.debug_assistant.FakeReactionRecordGeneratorPage;
import a8k.extui.page.extapp.debug_assistant.VirtualEventGeneratorPage; import a8k.extui.page.extapp.debug_assistant.VirtualEventGeneratorPage;
@ -148,7 +146,10 @@ public class ExtApiPageGroupCfgMgr {
pushMenu(new Menu("子模块管理", ZList.of( pushMenu(new Menu("子模块管理", ZList.of(
new Menu(LowLevelBoardVersionPreviewPage.class, "子模块版本查看"), new Menu(LowLevelBoardVersionPreviewPage.class, "子模块版本查看"),
new Menu(PipetteCtrlDriverPage.getPageClass(), "移液抢驱动"), new Menu(PipetteCtrlDriverPage.getPageClass(), "移液抢驱动"),
new Menu(MotorCtrlPage.class, "电机驱动")
new Menu(MotorCtrlPage.class, "电机驱动"),
new Menu(MiniServoCtrlPage.class, "伺服电机驱动"),
new Menu(InputIOStateScannerPage.class, "输入IO状态查看"),
new Menu(CodeScanerDriverCtrlPage.class, "条码扫描仪")
))); )));

2
src/main/java/a8k/extui/page/test/driver/LowLevelBoardVersionPreviewPage.java

@ -250,7 +250,7 @@ public class LowLevelBoardVersionPreviewPage {
} }
try { try {
Integer version = canBus.moduleReadVersion(module); Integer version = canBus.moduleReadVersion(module);
String modueType = canBus.moduleReadType(module);
String modueType = canBus.moduleReadType(module).toString();
VersionInfo info = new VersionInfo(); VersionInfo info = new VersionInfo();
info.online = true; info.online = true;

4
src/main/java/a8k/extui/page/test/driver/MotorCtrlPage.java

@ -25,7 +25,7 @@ public class MotorCtrlPage {
Integer dpos = 10; Integer dpos = 10;
public void setStepMotorId(StepMotorMId id) {
public void setStepMotorIdRefreshPage(StepMotorMId id) {
this.id = id; this.id = id;
} }
@ -161,7 +161,7 @@ public class MotorCtrlPage {
void init() { void init() {
var page = extApiPageMgr.newPage(this); var page = extApiPageMgr.newPage(this);
page.newGroup("上下文"); page.newGroup("上下文");
page.addFunction("设置电机ID", this::setStepMotorId).setParamVal("id", () -> id);
page.addFunction("设置电机ID", this::setStepMotorIdRefreshPage).setParamVal("id", () -> id);
page.newGroup("基础操作"); page.newGroup("基础操作");
page.addFunction("使能电机", this::enableMotor); page.addFunction("使能电机", this::enableMotor);

Loading…
Cancel
Save