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. 6
      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. 11
      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;

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

@ -14,11 +14,9 @@ public class OptCfg implements Serializable {
public String subProjShortName; //子项目 缩写名称 public String subProjShortName; //子项目 缩写名称
/*光学类型*/ /*光学类型*/
public A8kOptType optType; //子项目 光学类型 necessity
public Integer optScanRange; //子项目 扫描范围 扫描范围
public A8kOptType optType; //子项目 光学类型 necessity
public Integer optScanRange; //子项目 扫描范围 扫描范围
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() {
//存储所有电机的寄存器初始值
//存储所有舵机的寄存器初始值
//存储光学模组的寄存器初始值
}
}

11
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,8 +146,11 @@ 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, "条码扫描仪")
)));
pushMenu(new Menu("高级应用", ZList.of( pushMenu(new Menu("高级应用", ZList.of(

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