38 changed files with 2002 additions and 744 deletions
-
2src/main/java/a8k/app/hardware/channel/A8kCanBusConnection.java
-
98src/main/java/a8k/app/hardware/channel/LisUartChannel.java
-
12src/main/java/a8k/app/hardware/driver/HbotDriver.java
-
29src/main/java/a8k/app/hardware/driver/PipetteCtrlDriverV2.java
-
44src/main/java/a8k/app/hardware/driver/WaterTemperatureControllerDriver.java
-
30src/main/java/a8k/app/hardware/type/CmdId.java
-
7src/main/java/a8k/app/hardware/type/pipette_module/PipetteStateIndex.java
-
33src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java
-
12src/main/java/a8k/app/service/background/SensorDataUpdateService.java
-
8src/main/java/a8k/app/service/background/TemperatureCtrlService.java
-
22src/main/java/a8k/app/service/data/SubModuleRegInitialValueMgrService.java
-
11src/main/java/a8k/app/service/mainctrl/AppDeviceInitCtrlService.java
-
9src/main/java/a8k/app/type/VersionInfo.java
-
1src/main/java/a8k/extui/controler/ExtApiControler.java
-
25src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java
-
9src/main/java/a8k/extui/page/driver/CodeScannerDriverCtrlPage.java
-
16src/main/java/a8k/extui/page/extapp/profession_test/P02A8kTemperaturaVerfication.java
-
55src/main/java/a8k/extui/page/extsetting/db/A8kSubModuleConfigDebugPage.java
-
65src/main/java/a8k/extui/page/extsetting/db/A8kSubModuleParameterInitDebugPage.java
-
70src/main/java/a8k/extui/page/extsetting/db/A8kSubModuleRegAndConfigSyncPage.java
-
38src/main/java/a8k/extui/page/hardwaretest/A8kSubModuleRegAndConfigInitPage.java
-
100src/main/java/a8k/extui/page/hardwaretest/HBotHardwareTestPage.java
-
36src/main/java/a8k/extui/page/hardwaretest/ICCardReaderTestPage.java
-
37src/main/java/a8k/extui/page/hardwaretest/InputIOStateHardwareTestPage.java
-
164src/main/java/a8k/extui/page/hardwaretest/MiniServoHardwareTestPage.java
-
23src/main/java/a8k/extui/page/hardwaretest/MiscHardwareTestPage.java
-
389src/main/java/a8k/extui/page/hardwaretest/MotorHardwareTestPage.java
-
89src/main/java/a8k/extui/page/hardwaretest/MotorPPSHardwareTestPage.java
-
28src/main/java/a8k/extui/page/hardwaretest/OutputIOCtrlTestPage.java
-
82src/main/java/a8k/extui/page/hardwaretest/PipetteGunHardwareTestPage.java
-
131src/main/java/a8k/extui/page/hardwaretest/SubBoardProberPage.java
-
44src/main/java/a8k/extui/page/hardwaretest/SubModuleVersionPreviewPage.java
-
145src/main/java/a8k/extui/page/hardwaretest/WaterTempControllerTestPage.java
-
12src/main/java/a8k/extui/type/ExtUIPageCfg.java
@ -0,0 +1,98 @@ |
|||
package a8k.app.hardware.channel; |
|||
|
|||
import a8k.app.config.IflytophaldConnectionConfig; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.java_websocket.client.WebSocketClient; |
|||
import org.java_websocket.enums.ReadyState; |
|||
import org.java_websocket.handshake.ServerHandshake; |
|||
import org.springframework.scheduling.annotation.Scheduled; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import java.io.UnsupportedEncodingException; |
|||
import java.net.URI; |
|||
import java.util.LinkedList; |
|||
import java.util.Queue; |
|||
|
|||
|
|||
@Slf4j |
|||
@Component |
|||
@RequiredArgsConstructor |
|||
public class LisUartChannel { |
|||
WebSocketClient conn; |
|||
|
|||
private final IflytophaldConnectionConfig config; |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
String url = config.getDatachUrl("lis"); |
|||
log.info("LisUartChannel url: {}", url); |
|||
conn = new WebSocketClient(URI.create(url)) { |
|||
@Override |
|||
public void onOpen(ServerHandshake serverHandshake) { |
|||
LisUartChannel.this.onOpen(serverHandshake); |
|||
} |
|||
|
|||
@Override |
|||
public void onMessage(String s) { |
|||
LisUartChannel.this.onMessage(s); |
|||
} |
|||
|
|||
@Override |
|||
public void onClose(int i, String s, boolean b) { |
|||
LisUartChannel.this.onClose(i, s, b); |
|||
} |
|||
|
|||
@Override |
|||
public void onError(Exception e) { |
|||
LisUartChannel.this.onError(e); |
|||
} |
|||
}; |
|||
conn.connect(); |
|||
} |
|||
|
|||
public void tx(byte[] toSend) { |
|||
if (toSend == null || toSend.length == 0) { |
|||
return; |
|||
} |
|||
conn.send(toSend); |
|||
} |
|||
|
|||
private void onMessage(String s) {} |
|||
|
|||
|
|||
// |
|||
// PRIVATE |
|||
// |
|||
|
|||
|
|||
private void onOpen(ServerHandshake serverHandshake) { |
|||
log.info("a8k canbus connect sucess"); |
|||
} |
|||
|
|||
private void onClose(int i, String s, boolean b) { |
|||
log.warn("a8k canbus lost connection..."); |
|||
} |
|||
|
|||
private void onError(Exception e) { |
|||
log.info("a8k can-websocket-channel on error"); |
|||
} |
|||
|
|||
|
|||
@Scheduled(fixedRate = 1000) |
|||
private void autoConnect() { |
|||
if (!conn.isOpen()) { |
|||
if (conn.getReadyState().equals(ReadyState.NOT_YET_CONNECTED)) { |
|||
try { |
|||
conn.connect(); |
|||
} catch (IllegalStateException ignored) { |
|||
} |
|||
} else if (conn.getReadyState().equals(ReadyState.CLOSED)) { |
|||
conn.reconnect(); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
@ -0,0 +1,9 @@ |
|||
package a8k.app.type; |
|||
|
|||
public class VersionInfo { |
|||
public Integer moduleId; |
|||
public String moduleName; |
|||
public Boolean online; |
|||
public String moduleType; |
|||
public Integer version; |
|||
} |
@ -1,55 +0,0 @@ |
|||
package a8k.extui.page.extsetting.db; |
|||
|
|||
import a8k.app.controler.filemgr.StorageControler; |
|||
import a8k.app.hardware.channel.A8kCanBusService; |
|||
import a8k.app.service.data.SubModuleConfigService; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtUIPageCfg; |
|||
import a8k.extui.type.param.ExtUIFile; |
|||
import a8k.extui.type.ret.FileToBeDownload; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@RequiredArgsConstructor |
|||
public class A8kSubModuleConfigDebugPage { |
|||
|
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
private final A8kCanBusService canBus; |
|||
private final SubModuleConfigService subModuleConfigService; |
|||
|
|||
public FileToBeDownload export() { |
|||
subModuleConfigService.export(); |
|||
return new FileToBeDownload(StorageControler.getDoloadPath(subModuleConfigService.getExportPath())); |
|||
} |
|||
|
|||
public void syncFromMirco() throws AppException { |
|||
subModuleConfigService.syncFromMirco(); |
|||
} |
|||
|
|||
public void syncToMirco() throws AppException { |
|||
subModuleConfigService.syncToMirco(); |
|||
} |
|||
|
|||
public void importFromCSV(ExtUIFile file) { |
|||
String filecontent = new String(file.bytes); |
|||
subModuleConfigService.importFromCSV(filecontent); |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
ExtUIPageCfg page = new ExtUIPageCfg(this); |
|||
page.newGroup("sync"); |
|||
page.addFunction("syncFromMirco", this::syncFromMirco); |
|||
page.addFunction("syncToMirco", this::syncToMirco); |
|||
|
|||
page.newGroup("导入/导出"); |
|||
page.addFunction("导出", this::export); |
|||
page.addFunction("导入", this::importFromCSV); |
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
@ -1,65 +0,0 @@ |
|||
package a8k.extui.page.extsetting.db; |
|||
|
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.app.controler.filemgr.StorageControler; |
|||
import a8k.app.dao.type.db.SubModuleRegInitialValue; |
|||
import a8k.app.hardware.channel.A8kCanBusService; |
|||
import a8k.app.hardware.type.MId; |
|||
import a8k.app.service.data.SubModuleRegInitialValueMgrService; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtUIPageCfg; |
|||
import a8k.extui.type.ExtUiTable; |
|||
import a8k.extui.type.param.ExtUIFile; |
|||
import a8k.extui.type.ret.FileToBeDownload; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@RequiredArgsConstructor |
|||
public class A8kSubModuleParameterInitDebugPage { |
|||
|
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
private final SubModuleRegInitialValueMgrService subModuleRegInitialValueMgrService; |
|||
private final A8kCanBusService canBus; |
|||
|
|||
public FileToBeDownload export() { |
|||
subModuleRegInitialValueMgrService.export(); |
|||
return new FileToBeDownload(StorageControler.getDoloadPath(subModuleRegInitialValueMgrService.getExportPath())); |
|||
} |
|||
|
|||
public ExtUiTable getDeviceActionParam() { |
|||
return new ExtUiTable(SubModuleRegInitialValue.class, subModuleRegInitialValueMgrService.getAll()); |
|||
} |
|||
|
|||
public ExtUiTable syncFromMirco() throws AppException { |
|||
subModuleRegInitialValueMgrService.syncFromMirco(); |
|||
return getDeviceActionParam(); |
|||
} |
|||
|
|||
public void importDeviceActionParam(ExtUIFile file) { |
|||
String filecontent = new String(file.bytes); |
|||
subModuleRegInitialValueMgrService.importFromCSV(filecontent); |
|||
} |
|||
|
|||
public void tmp() throws AppException { |
|||
while (true) { |
|||
canBus.moduleReadVersion(MId.A8kIdCardReaderBoard); |
|||
|
|||
} |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
ExtUIPageCfg page = new ExtUIPageCfg(this); |
|||
page.newGroup("sync"); |
|||
page.addFunction("syncFromMirco", this::syncFromMirco); |
|||
page.addFunction("tmp", this::tmp); |
|||
page.newGroup("导入/导出"); |
|||
page.addFunction("导出", this::export); |
|||
page.addFunction("导入", this::importDeviceActionParam); |
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
@ -0,0 +1,70 @@ |
|||
package a8k.extui.page.extsetting.db; |
|||
|
|||
import a8k.app.controler.filemgr.StorageControler; |
|||
import a8k.app.hardware.channel.A8kCanBusService; |
|||
import a8k.app.service.data.SubModuleConfigService; |
|||
import a8k.app.service.data.SubModuleRegInitialValueMgrService; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtUIPageCfg; |
|||
import a8k.extui.type.param.ExtUIFile; |
|||
import a8k.extui.type.ret.FileToBeDownload; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@RequiredArgsConstructor |
|||
public class A8kSubModuleRegAndConfigSyncPage { |
|||
|
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
private final A8kCanBusService canBus; |
|||
private final SubModuleConfigService subModuleConfigService; |
|||
private final SubModuleRegInitialValueMgrService subModuleRegInitialValueMgrService; |
|||
|
|||
|
|||
public void syncFromMirco() throws AppException { |
|||
subModuleConfigService.syncFromMirco(); |
|||
subModuleRegInitialValueMgrService.syncFromMirco(); |
|||
} |
|||
|
|||
public void syncToMirco() throws AppException { |
|||
subModuleConfigService.syncToMirco(); |
|||
subModuleRegInitialValueMgrService.syncToMirco(); |
|||
} |
|||
|
|||
public FileToBeDownload exportConfig() { |
|||
subModuleConfigService.export(); |
|||
return new FileToBeDownload(StorageControler.getDoloadPath(subModuleConfigService.getExportPath())); |
|||
} |
|||
|
|||
public FileToBeDownload exportRegInitVal() { |
|||
subModuleRegInitialValueMgrService.export(); |
|||
return new FileToBeDownload(StorageControler.getDoloadPath(subModuleRegInitialValueMgrService.getExportPath())); |
|||
} |
|||
|
|||
public void importConfigValFromCSV(ExtUIFile file) { |
|||
subModuleConfigService.importFromCSV(new String(file.bytes)); |
|||
} |
|||
|
|||
public void importRegValFromCSV(ExtUIFile file) { |
|||
subModuleConfigService.importFromCSV(new String(file.bytes)); |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
ExtUIPageCfg page = new ExtUIPageCfg(this); |
|||
page.newGroup("同步"); |
|||
page.addFunction("SyncFromMircoToDB", this::syncFromMirco); |
|||
page.addFunction("syncFromDBToMirco", this::syncToMirco); |
|||
|
|||
page.newGroup("导入/导出"); |
|||
page.addFunction("导出寄存器初始化配置", this::exportRegInitVal); |
|||
page.addFunction("导入寄存器初始化配置", this::importRegValFromCSV); |
|||
page.addFunction("导出子模块配置", this::exportConfig); |
|||
page.addFunction("导入子模块配置", this::importConfigValFromCSV); |
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
@ -0,0 +1,38 @@ |
|||
package a8k.extui.page.hardwaretest; |
|||
|
|||
import a8k.app.controler.filemgr.StorageControler; |
|||
import a8k.app.hardware.channel.A8kCanBusService; |
|||
import a8k.app.service.data.SubModuleConfigService; |
|||
import a8k.app.service.data.SubModuleRegInitialValueMgrService; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtUIPageCfg; |
|||
import a8k.extui.type.param.ExtUIFile; |
|||
import a8k.extui.type.ret.FileToBeDownload; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@RequiredArgsConstructor |
|||
public class A8kSubModuleRegAndConfigInitPage { |
|||
|
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
private final SubModuleConfigService subModuleConfigService; |
|||
private final SubModuleRegInitialValueMgrService subModuleRegInitialValueMgrService; |
|||
|
|||
|
|||
public void syncToMirco() throws AppException { |
|||
subModuleConfigService.syncToMirco(); |
|||
subModuleRegInitialValueMgrService.syncToMirco(); |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
ExtUIPageCfg page = new ExtUIPageCfg(this); |
|||
page.addFunction("initSubBoard", this::syncToMirco); |
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
@ -0,0 +1,100 @@ |
|||
package a8k.extui.page.hardwaretest; |
|||
|
|||
import a8k.OS; |
|||
import a8k.app.hardware.driver.HbotDriver; |
|||
import a8k.app.hardware.driver.PipetteCtrlDriverV2; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtApiStatu; |
|||
import cn.hutool.core.text.StrBuilder; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@RequiredArgsConstructor |
|||
public class HBotHardwareTestPage { |
|||
|
|||
|
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
private final HbotDriver hbotDriver; |
|||
private final PipetteCtrlDriverV2 pipetteCtrlDriver; |
|||
|
|||
public void disableHbot() throws AppException { |
|||
hbotDriver.enable(0); |
|||
} |
|||
|
|||
public void enableHbot() throws AppException { |
|||
hbotDriver.enable(1); |
|||
} |
|||
|
|||
public void leftMotorMoveClockwise(Integer step) throws AppException { |
|||
hbotDriver.enable(1); |
|||
hbotDriver.moveByDirectBlock(-step, 0); |
|||
} |
|||
|
|||
public void leftMotorMoveCounterClockwise(Integer step) throws AppException { |
|||
hbotDriver.enable(1); |
|||
hbotDriver.moveByDirectBlock(step, 0); |
|||
} |
|||
|
|||
public void rightMotorMoveClockwise(Integer step) throws AppException { |
|||
hbotDriver.enable(1); |
|||
hbotDriver.moveByDirectBlock(0, -step); |
|||
} |
|||
|
|||
public void rightMotorMoveCounterClockwise(Integer step) throws AppException { |
|||
hbotDriver.enable(1); |
|||
hbotDriver.moveByDirectBlock(0, step); |
|||
} |
|||
|
|||
|
|||
public String checkMotorEncoder(Integer step) throws AppException { |
|||
hbotDriver.enable(1); |
|||
Integer[] encPos = hbotDriver.readEncDirect(); |
|||
hbotDriver.moveByDirectBlock(step, step); |
|||
Integer[] afterRunEncPos = hbotDriver.readEncDirect(); |
|||
|
|||
StrBuilder report = new StrBuilder(); |
|||
report.append(String.format("左电机: 实际运行:%d 编码器:%d", step, afterRunEncPos[0] - encPos[0])); |
|||
report.append(String.format("右电机: 实际运行:%d 编码器:%d", step, afterRunEncPos[1] - encPos[1])); |
|||
return report.toString(); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "左光电状态", order = 1) |
|||
public Boolean getLeftPpsState() { |
|||
try { |
|||
return hbotDriver.readInIO(0); |
|||
} catch (AppException e) { |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "右光电状态", order = 2) |
|||
public Boolean getRightPpsState() { |
|||
try { |
|||
return hbotDriver.readInIO(1); |
|||
} catch (AppException e) { |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
@PostConstruct |
|||
public void init() { |
|||
var page = extApiPageMgr.newPage(this); |
|||
page.newGroup("基础"); |
|||
page.addFunction("使能", this::enableHbot); |
|||
page.addFunction("失能", this::disableHbot); |
|||
page.newGroup("电机测试"); |
|||
page.addFunction("左电机顺时针移动(900约等于1/8圈)", this::leftMotorMoveClockwise).setParamVal("step", () -> 900); |
|||
page.addFunction("左电机逆时针移动", this::leftMotorMoveCounterClockwise).setParamVal("step", () -> 900); |
|||
page.addFunction("右电机顺时针移动", this::rightMotorMoveClockwise).setParamVal("step", () -> 900); |
|||
page.addFunction("右电机逆时针移动", this::rightMotorMoveCounterClockwise).setParamVal("step", () -> 900); |
|||
page.newGroup("编码器测试"); |
|||
page.addFunction("检查电机编码器", this::checkMotorEncoder).setParamVal("step", () -> 100); |
|||
|
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
@ -0,0 +1,36 @@ |
|||
package a8k.extui.page.hardwaretest; |
|||
|
|||
import a8k.app.dao.type.db.ProjExtInfoCard; |
|||
import a8k.app.service.background.ProjIDCardCtrlAndMonitorService; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
public class ICCardReaderTestPage { |
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
private final ProjIDCardCtrlAndMonitorService projIDCardCtrlAndMonitorService; |
|||
|
|||
public void xxxx() { |
|||
|
|||
} |
|||
|
|||
public ProjExtInfoCard readProjExtInfoCard() { |
|||
return projIDCardCtrlAndMonitorService.getMountedIdCardInfo(); |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
var page = extApiPageMgr.newPage(this); |
|||
page.addFunction("插入卡和拔卡都会正常情况都会弹窗", this::xxxx); |
|||
page.addFunction("读取当前挂载卡的内容", this::readProjExtInfoCard); |
|||
extApiPageMgr.addPage(page); |
|||
|
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,164 @@ |
|||
package a8k.extui.page.hardwaretest; |
|||
|
|||
|
|||
import a8k.app.constant.MiniServoConstant; |
|||
import a8k.app.hardware.driver.MiniServoDriver; |
|||
import a8k.app.hardware.type.MiniServoMId; |
|||
import a8k.app.service.mainctrl.AppDeviceInitCtrlService; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtUIPageCfg; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
public class MiniServoHardwareTestPage { |
|||
|
|||
final private MiniServoDriver miniServoDriver; |
|||
final private AppDeviceInitCtrlService appDeviceInitCtrlService; |
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
ExtUIPageCfg pageConfig; |
|||
|
|||
public void disableAllServos() throws AppException { |
|||
appDeviceInitCtrlService.disableAllMiniServo(); |
|||
} |
|||
|
|||
public void enableAllServos() throws AppException { |
|||
appDeviceInitCtrlService.enableAllMiniServo(); |
|||
} |
|||
|
|||
public Integer readPos(MiniServoMId id) { |
|||
try { |
|||
return miniServoDriver.miniServoReadPos(id); |
|||
} catch (AppException e) { |
|||
log.error("readPos error for {}", id, e); |
|||
return 0; |
|||
} |
|||
} |
|||
|
|||
public void regBasicFunctions() { |
|||
pageConfig.newGroup("基本功能"); |
|||
pageConfig.addFunction("使能所有舵机", this::enableAllServos); |
|||
pageConfig.addFunction("禁用所有舵机", this::disableAllServos); |
|||
} |
|||
|
|||
// ShakeModTubeScanerRotateSV |
|||
public void shakeModTubeScannerRotateSVRotateClockwise() throws AppException { |
|||
miniServoDriver.miniServoRotateWithTorque(MiniServoMId.ShakeModTubeScanerRotateSV, -300); |
|||
} |
|||
|
|||
public void shakeModTubeScannerRotateSVRotateCounterClockwise() throws AppException { |
|||
miniServoDriver.miniServoRotateWithTorque(MiniServoMId.ShakeModTubeScanerRotateSV, 300); |
|||
} |
|||
|
|||
public void shakeModTubeScannerRotateSVStop() throws AppException { |
|||
miniServoDriver.moduleStop(MiniServoMId.ShakeModTubeScanerRotateSV); |
|||
} |
|||
|
|||
public void registerShakeModTubeScannerRotateSV() { |
|||
pageConfig.newGroup("扫码旋转舵机"); |
|||
pageConfig.addFunction("顺时针转动", this::shakeModTubeScannerRotateSVRotateClockwise); |
|||
pageConfig.addFunction("逆时针转动", this::shakeModTubeScannerRotateSVRotateCounterClockwise); |
|||
pageConfig.addFunction("停止转动", this::shakeModTubeScannerRotateSVStop); |
|||
} |
|||
|
|||
// ShakeModTubeScanerClampingSV |
|||
public void shakeModTubeScannerClampingSVMoveTo(Integer step) throws AppException { |
|||
miniServoDriver.miniServoMoveToBlock(MiniServoMId.ShakeModTubeScanerClampingSV, step); |
|||
} |
|||
|
|||
public Integer shakeModTubeScannerClampingSVReadPos() throws AppException { |
|||
return miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModTubeScanerClampingSV); |
|||
} |
|||
|
|||
public void shakeModTubeScannerClampingSVStop() throws AppException { |
|||
miniServoDriver.moduleStop(MiniServoMId.ShakeModTubeScanerClampingSV); |
|||
} |
|||
|
|||
public void registerShakeModTubeScannerClampingSV() { |
|||
pageConfig.newGroup("扫码夹紧舵机"); |
|||
pageConfig.addFunction("移动到", this::shakeModTubeScannerClampingSVMoveTo) |
|||
.setParamVal("step", () ->readPos(MiniServoMId.ShakeModTubeScanerClampingSV)); |
|||
pageConfig.addFunction("读取位置", this::shakeModTubeScannerClampingSVReadPos); |
|||
pageConfig.addFunction("停止转动", this::shakeModTubeScannerClampingSVStop); |
|||
} |
|||
|
|||
// ShakeModGripperYSV(MId.ShakeModGripperYSV),// |
|||
public void shakeModGripperYSVMoveTo(Integer step) throws AppException { |
|||
miniServoDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperYSV, step); |
|||
} |
|||
|
|||
public Integer shakeModGripperYSVReadPos() throws AppException { |
|||
return miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperYSV); |
|||
} |
|||
|
|||
public void shakeModGripperYSVStop() throws AppException { |
|||
miniServoDriver.moduleStop(MiniServoMId.ShakeModGripperYSV); |
|||
} |
|||
|
|||
public void registerShakeModGripperYSV() { |
|||
pageConfig.newGroup("摇匀模组-前后移动舵机"); |
|||
pageConfig.addFunction("移动到", this::shakeModGripperYSVMoveTo) |
|||
.setParamVal("step", () -> readPos(MiniServoMId.ShakeModGripperYSV)); |
|||
pageConfig.addFunction("读取位置", this::shakeModGripperYSVReadPos); |
|||
pageConfig.addFunction("停止转动", this::shakeModGripperYSVStop); |
|||
} |
|||
|
|||
// ShakeModGripperSV(MId.ShakeModGripperSV),// |
|||
public void shakeModGripperSVMoveTo(Integer step) throws AppException { |
|||
miniServoDriver.miniServoMoveToBlock(MiniServoMId.ShakeModGripperSV, step); |
|||
} |
|||
|
|||
public Integer shakeModGripperSVReadPos() throws AppException { |
|||
return miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperSV); |
|||
} |
|||
|
|||
public void shakeModGripperSVStop() throws AppException { |
|||
miniServoDriver.moduleStop(MiniServoMId.ShakeModGripperSV); |
|||
} |
|||
|
|||
public void registerShakeModGripperSV() { |
|||
pageConfig.newGroup("摇匀模组-夹爪舵机"); |
|||
pageConfig.addFunction("移动到", this::shakeModGripperSVMoveTo) |
|||
.setParamVal("step", () -> readPos(MiniServoMId.ShakeModGripperSV)); |
|||
pageConfig.addFunction("读取位置", this::shakeModGripperSVReadPos); |
|||
pageConfig.addFunction("停止转动", this::shakeModGripperSVStop); |
|||
} |
|||
|
|||
// ShakeModLiftingSV(MId.ShakeModLiftingSV),// |
|||
public void shakeModLiftingSVMoveTo(Integer step) throws AppException { |
|||
miniServoDriver.miniServoMoveToBlock(MiniServoMId.ShakeModLiftingSV, step); |
|||
} |
|||
|
|||
public Integer shakeModLiftingSVReadPos() throws AppException { |
|||
return miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModLiftingSV); |
|||
} |
|||
|
|||
public void shakeModLiftingSVStop() throws AppException { |
|||
miniServoDriver.moduleStop(MiniServoMId.ShakeModLiftingSV); |
|||
} |
|||
|
|||
public void registerShakeModLiftingSV() { |
|||
pageConfig.newGroup("摇匀模组-顶升舵机"); |
|||
pageConfig.addFunction("移动到", this::shakeModLiftingSVMoveTo) |
|||
.setParamVal("step", () -> readPos(MiniServoMId.ShakeModLiftingSV)); |
|||
pageConfig.addFunction("读取位置", this::shakeModLiftingSVReadPos); |
|||
pageConfig.addFunction("停止转动", this::shakeModLiftingSVStop); |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
pageConfig = extApiPageMgr.newPage(this); |
|||
regBasicFunctions(); |
|||
registerShakeModTubeScannerRotateSV(); |
|||
registerShakeModTubeScannerClampingSV(); |
|||
registerShakeModGripperYSV(); |
|||
registerShakeModGripperSV(); |
|||
registerShakeModLiftingSV(); |
|||
extApiPageMgr.addPage(pageConfig); |
|||
} |
|||
} |
@ -0,0 +1,23 @@ |
|||
package a8k.extui.page.hardwaretest; |
|||
|
|||
|
|||
import a8k.app.hardware.driver.MiniServoDriver; |
|||
import a8k.app.service.mainctrl.AppDeviceInitCtrlService; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtUIPageCfg; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
public class MiscHardwareTestPage { |
|||
final private MiniServoDriver miniServoDriver; |
|||
final private AppDeviceInitCtrlService appDeviceInitCtrlService; |
|||
final private ExtApiPageMgr extApiPageMgr; |
|||
ExtUIPageCfg pageConfig; |
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,389 @@ |
|||
package a8k.extui.page.hardwaretest; |
|||
|
|||
import a8k.app.hardware.driver.StepMotorCtrlDriver; |
|||
import a8k.app.hardware.type.StepMotorMId; |
|||
import a8k.app.hardware.type.StepMotorRegIndex; |
|||
import a8k.app.hardware.type.StepMotorSpeedLevel; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.app.utils.ZJsonNode; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtUIPageCfg; |
|||
import jakarta.annotation.PostConstruct; |
|||
import jakarta.annotation.Resource; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
public class MotorHardwareTestPage { |
|||
|
|||
|
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
private final StepMotorCtrlDriver stepMotorCtrlDriver; |
|||
|
|||
ExtUIPageCfg pageConfig; |
|||
|
|||
// |
|||
// 入料电机 |
|||
// |
|||
public void infeedMotorIn() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModInfeedM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyRotate(StepMotorMId.FeedingModInfeedM, -1); |
|||
} |
|||
|
|||
public void infeedMotorOut() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModInfeedM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyRotate(StepMotorMId.FeedingModInfeedM, 1); |
|||
} |
|||
|
|||
public void infeedMotorStop() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorStop(StepMotorMId.FeedingModInfeedM); |
|||
} |
|||
|
|||
void regFeedingModInfeedM() { |
|||
pageConfig.newGroup("入料电机"); |
|||
pageConfig.addFunction("向内转动", this::infeedMotorIn); |
|||
pageConfig.addFunction("向外转动", this::infeedMotorOut); |
|||
pageConfig.addFunction("停止", this::infeedMotorStop); |
|||
} |
|||
|
|||
// |
|||
// 出料电机 |
|||
// |
|||
|
|||
public void outfeedMotorIn() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModOutfeedM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyRotate(StepMotorMId.FeedingModOutfeedM, -1); |
|||
} |
|||
|
|||
public void outfeedMotorOut() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModOutfeedM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyRotate(StepMotorMId.FeedingModOutfeedM, 1); |
|||
} |
|||
|
|||
public void outfeedMotorStop() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorStop(StepMotorMId.FeedingModOutfeedM); |
|||
} |
|||
|
|||
void regFeedingModOutfeedM() { |
|||
pageConfig.newGroup("出料电机"); |
|||
pageConfig.addFunction("向内转动", this::outfeedMotorIn); |
|||
pageConfig.addFunction("向外转动", this::outfeedMotorOut); |
|||
pageConfig.addFunction("停止", this::outfeedMotorStop); |
|||
} |
|||
|
|||
// |
|||
// 入料平移电机 |
|||
// |
|||
public void feedingModXMFLeft(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModXM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.FeedingModXM, step); |
|||
} |
|||
|
|||
public void feedingModXMRight(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModXM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.FeedingModXM, -step); |
|||
} |
|||
|
|||
public void feedingModXMZero() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.FeedingModXM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.FeedingModXM); |
|||
} |
|||
|
|||
public void feedingModeStop() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorStop(StepMotorMId.FeedingModXM); |
|||
} |
|||
|
|||
|
|||
void regFeedingModXM() { |
|||
pageConfig.newGroup("入料平移电机"); |
|||
pageConfig.addFunction("归零", this::feedingModXMZero); |
|||
pageConfig.addFunction("向左移动", this::feedingModXMFLeft).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("向右移动", this::feedingModXMRight).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("停止", this::feedingModeStop); |
|||
} |
|||
|
|||
// |
|||
// 摇匀模组 |
|||
// |
|||
public void shakeModGripperZMUp(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModGripperZM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModGripperZM, -step); |
|||
} |
|||
|
|||
public void shakeModGripperZMDown(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModGripperZM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModGripperZM, step); |
|||
} |
|||
|
|||
public void shakeModGripperZMZero() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModGripperZM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModGripperZM); |
|||
} |
|||
|
|||
|
|||
public void shakeModGripperZMStop() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorStop(StepMotorMId.ShakeModGripperZM); |
|||
} |
|||
|
|||
void regShakeModGripperZM() { |
|||
pageConfig.newGroup("摇匀模组Z轴"); |
|||
pageConfig.addFunction("归零", this::shakeModGripperZMZero); |
|||
pageConfig.addFunction("向上移动", this::shakeModGripperZMUp).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("向下移动", this::shakeModGripperZMDown).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("停止", this::shakeModGripperZMStop); |
|||
} |
|||
|
|||
|
|||
public void shakeModClampingMClamping(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModClampingM, -step); |
|||
} |
|||
|
|||
public void shakeModClampingMRelease(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModClampingM, step); |
|||
} |
|||
|
|||
public void shakeModClampingMZero() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModClampingM); |
|||
} |
|||
|
|||
|
|||
public void shakeModClampingMStop() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorStop(StepMotorMId.ShakeModClampingM); |
|||
} |
|||
|
|||
void regShakeModClampingM() { |
|||
pageConfig.newGroup("摇匀模组夹紧电机"); |
|||
pageConfig.addFunction("归零", this::shakeModClampingMZero); |
|||
pageConfig.addFunction("夹紧", this::shakeModClampingMClamping).setParamVal("step", () -> 10); |
|||
pageConfig.addFunction("释放", this::shakeModClampingMRelease).setParamVal("step", () -> 10); |
|||
pageConfig.addFunction("停止", this::shakeModClampingMStop); |
|||
} |
|||
|
|||
public void shakeModShakeMClockwise(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModShakeM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModShakeM, step); |
|||
} |
|||
|
|||
public void shakeModShakeMAntiClockwise(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModShakeM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModShakeM, -step); |
|||
} |
|||
|
|||
public void shakeModShakeMZero() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModShakeM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModShakeM); |
|||
} |
|||
|
|||
public void shakeModShakeMStop() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorStop(StepMotorMId.ShakeModShakeM); |
|||
} |
|||
|
|||
void regShakeModShakeM() { |
|||
pageConfig.newGroup("摇匀模组摇匀电机"); |
|||
pageConfig.addFunction("归零", this::shakeModShakeMZero); |
|||
pageConfig.addFunction("顺时针转动", this::shakeModShakeMClockwise).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("逆时针转动", this::shakeModShakeMAntiClockwise).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("停止", this::shakeModShakeMStop); |
|||
} |
|||
|
|||
|
|||
// |
|||
// 板夹仓电机 |
|||
// |
|||
public void platesBoxYMForward(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.PlatesBoxYM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.PlatesBoxYM, step); |
|||
} |
|||
|
|||
public void platesBoxYMBackward(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.PlatesBoxYM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.PlatesBoxYM, -step); |
|||
} |
|||
|
|||
public void platesBoxYZero() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.PlatesBoxYM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.PlatesBoxYM); |
|||
} |
|||
|
|||
|
|||
public void platesBoxYMStop() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorStop(StepMotorMId.PlatesBoxYM); |
|||
} |
|||
|
|||
void regPlatesBoxYM() { |
|||
pageConfig.newGroup("板夹仓Y轴"); |
|||
pageConfig.addFunction("归零", this::platesBoxYZero); |
|||
pageConfig.addFunction("向内移动", this::platesBoxYMForward).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("向外移动", this::platesBoxYMBackward).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("停止", this::platesBoxYMStop); |
|||
} |
|||
|
|||
public void platesBoxPusherForward(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.PlatesBoxPusherM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.PlatesBoxPusherM, step); |
|||
} |
|||
|
|||
public void platesBoxPusherBackward(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.PlatesBoxPusherM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.PlatesBoxPusherM, -step); |
|||
} |
|||
|
|||
public void platesBoxPusherZero() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.PlatesBoxPusherM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.PlatesBoxPusherM); |
|||
} |
|||
|
|||
|
|||
public void platesBoxPusherStop() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorStop(StepMotorMId.PlatesBoxPusherM); |
|||
} |
|||
|
|||
void regPlatesBoxPusherM() { |
|||
pageConfig.newGroup("板夹仓推料电机"); |
|||
pageConfig.addFunction("归零", this::platesBoxPusherZero); |
|||
pageConfig.addFunction("推出", this::platesBoxPusherForward).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("返回", this::platesBoxPusherBackward).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("停止", this::platesBoxPusherStop); |
|||
} |
|||
|
|||
// |
|||
// 孵育盘 |
|||
// |
|||
public String incubatorRotateCtrlMDiagnosticEnc() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.IncubatorRotateCtrlM, 1); |
|||
|
|||
//失能enc |
|||
stepMotorCtrlDriver.setReg(StepMotorMId.IncubatorRotateCtrlM, StepMotorRegIndex.kreg_step_motor_enable_enc, 0); |
|||
Integer beforeRunEncPos = stepMotorCtrlDriver.stepMotorReadEncPos(StepMotorMId.IncubatorRotateCtrlM); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.IncubatorRotateCtrlM, 200); |
|||
Integer afterRunEncPos = stepMotorCtrlDriver.stepMotorReadEncPos(StepMotorMId.IncubatorRotateCtrlM); |
|||
stepMotorCtrlDriver.setReg(StepMotorMId.IncubatorRotateCtrlM, StepMotorRegIndex.kreg_step_motor_enable_enc, 1); |
|||
int dpos = afterRunEncPos - beforeRunEncPos; |
|||
if (Math.abs(dpos) < 10) { |
|||
return String.format("编码器接线异常, 步进移动距离: %d, 编码器移动距离: %d", 200, dpos); |
|||
} |
|||
if (dpos < 0) { |
|||
return String.format("编码器方向异常或 步进移动距离: %d, 编码器移动距离: %d", 200, dpos); |
|||
} |
|||
if (Math.abs(200 - dpos) > 2) { |
|||
return String.format("电机导程(减速比)错误, 或者编码器一圈脉冲数错误, 步进移动距离: %d, 编码器移动距离: %d", 200, dpos); |
|||
} |
|||
return String.format("编码器诊断正常, 步进移动距离: %d, 编码器移动距离: %d", 200, dpos); |
|||
} |
|||
|
|||
public void incubatorRotateCtrlMAntiClockwise(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.IncubatorRotateCtrlM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.IncubatorRotateCtrlM, -step); |
|||
} |
|||
|
|||
public void incubatorRotateCtrlMClockwise(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.IncubatorRotateCtrlM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.IncubatorRotateCtrlM, step); |
|||
} |
|||
|
|||
public void incubatorRotateCtrlMZero() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.IncubatorRotateCtrlM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.IncubatorRotateCtrlM); |
|||
} |
|||
|
|||
|
|||
public void incubatorRotateCtrlMStop() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorStop(StepMotorMId.IncubatorRotateCtrlM); |
|||
} |
|||
|
|||
void regIncubatorRotateCtrlM() { |
|||
pageConfig.newGroup("孵育盘转动电机"); |
|||
pageConfig.addFunction("归零", this::incubatorRotateCtrlMZero); |
|||
pageConfig.addFunction("逆时针转动", this::incubatorRotateCtrlMAntiClockwise).setParamVal("step", () -> 200); |
|||
pageConfig.addFunction("顺时针转动", this::incubatorRotateCtrlMClockwise).setParamVal("step", () -> 200); |
|||
pageConfig.addFunction("停止", this::incubatorRotateCtrlMStop); |
|||
pageConfig.addFunction("编码器诊断", this::incubatorRotateCtrlMDiagnosticEnc); |
|||
} |
|||
|
|||
|
|||
public void optModScannerMLeft(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.OptModScannerM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.OptModScannerM, step); |
|||
} |
|||
|
|||
public void optModScannerMRight(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.OptModScannerM, 1); |
|||
|
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.OptModScannerM, -step); |
|||
} |
|||
|
|||
public void optModScannerMZero() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.OptModScannerM, 1); |
|||
|
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.OptModScannerM); |
|||
} |
|||
|
|||
public void optModScannerMStop() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorStop(StepMotorMId.OptModScannerM); |
|||
} |
|||
|
|||
void regOptModScannerM() { |
|||
pageConfig.newGroup("光学模组扫描电机"); |
|||
pageConfig.addFunction("归零", this::optModScannerMZero); |
|||
pageConfig.addFunction("向左移动", this::optModScannerMLeft).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("向右移动", this::optModScannerMRight).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("停止", this::optModScannerMStop); |
|||
} |
|||
|
|||
// |
|||
//OptModPullM |
|||
// |
|||
public void optModPullMLeft(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.OptModPullM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.OptModPullM, -step); |
|||
} |
|||
|
|||
public void optModPullMRight(Integer step) throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.OptModPullM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.OptModPullM, step); |
|||
} |
|||
|
|||
public void optModPullMZero() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.OptModPullM, 1); |
|||
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.OptModPullM); |
|||
} |
|||
|
|||
public void optModPullMStop() throws AppException { |
|||
stepMotorCtrlDriver.stepMotorStop(StepMotorMId.OptModPullM); |
|||
} |
|||
|
|||
|
|||
void regOptModPullM() { |
|||
pageConfig.newGroup("光学模组拉伸电机"); |
|||
pageConfig.addFunction("归零", this::optModPullMZero); |
|||
pageConfig.addFunction("回零方向移动", this::optModPullMLeft).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("勾取方向移动", this::optModPullMRight).setParamVal("step", () -> 30); |
|||
pageConfig.addFunction("停止", this::optModPullMStop); |
|||
} |
|||
|
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
pageConfig = extApiPageMgr.newPage(this); |
|||
regFeedingModInfeedM(); |
|||
regFeedingModOutfeedM(); |
|||
regFeedingModXM(); |
|||
regShakeModGripperZM(); |
|||
regShakeModClampingM(); |
|||
regShakeModShakeM(); |
|||
regPlatesBoxYM(); |
|||
regPlatesBoxPusherM(); |
|||
regIncubatorRotateCtrlM(); |
|||
regOptModScannerM(); |
|||
regOptModPullM(); |
|||
extApiPageMgr.addPage(pageConfig); |
|||
} |
|||
} |
@ -0,0 +1,89 @@ |
|||
package a8k.extui.page.hardwaretest; |
|||
|
|||
import a8k.app.hardware.driver.StepMotorCtrlDriver; |
|||
import a8k.app.hardware.type.StepMotorMId; |
|||
import a8k.app.hardware.type.StepMotorRegIndex; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtApiStatu; |
|||
import a8k.extui.type.ExtUIPageCfg; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
public class MotorPPSHardwareTestPage { |
|||
|
|||
|
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
private final StepMotorCtrlDriver stepMotorCtrlDriver; |
|||
|
|||
ExtUIPageCfg pageConfig; |
|||
|
|||
// |
|||
// 入料平移电机 |
|||
// |
|||
@ExtApiStatu(name = "", group = "入料平移电机-IO", order = 1, minWidth = "100%") |
|||
public String feedingModXMReadIOState() { |
|||
return readIOState(StepMotorMId.FeedingModXM); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "摇匀模组-Z轴-IO", order = 2, minWidth = "100%") |
|||
public String shakeModGripperZMReadIOState() { |
|||
return readIOState(StepMotorMId.ShakeModGripperZM); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "摇匀模组-夹紧-IO", order = 3, minWidth = "100%") |
|||
public String shakeModClampingMReadIOState() { |
|||
return readIOState(StepMotorMId.ShakeModClampingM); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "摇匀模组-摇匀-IO", order = 4, minWidth = "100%") |
|||
public String shakeModShakeMReadIOState() { |
|||
return readIOState(StepMotorMId.ShakeModShakeM); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "板夹仓-前后移动电机-IO", order = 5, minWidth = "100%") |
|||
public String platesBoxYMReadIOState() { |
|||
return readIOState(StepMotorMId.PlatesBoxYM); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "板夹仓-推杆电机-IO", order = 6, minWidth = "100%") |
|||
public String platesBoxPusherReadIOState() { |
|||
return readIOState(StepMotorMId.PlatesBoxPusherM); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "孵育盘电机-IO", order = 7, minWidth = "100%") |
|||
public String incubatorRotateCtrlMReadIOState() { |
|||
return readIOState(StepMotorMId.IncubatorRotateCtrlM); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "光学模组-扫码电机-IO", order = 8, minWidth = "100%") |
|||
public String optModScannerMReadIOState() { |
|||
return readIOState(StepMotorMId.OptModScannerM); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "光学模组-拉杆电机-IO", order = 9, minWidth = "100%") |
|||
public String optModPullMReadIOState() { |
|||
return readIOState(StepMotorMId.OptModPullM); |
|||
} |
|||
|
|||
private String readIOState(StepMotorMId mid) { |
|||
try { |
|||
Boolean zeroIOState = stepMotorCtrlDriver.stepMotorReadIoState(mid, 0); |
|||
Boolean limitIOState = stepMotorCtrlDriver.stepMotorReadIoState(mid, 1); |
|||
return String.format("ZERO IO: [%s] LIMIT IO: [%s]", zeroIOState ? 1 : 0, limitIOState ? 1 : 0); |
|||
} catch (AppException e) { |
|||
return "读取IO异常"; |
|||
} |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
pageConfig = extApiPageMgr.newPage(this); |
|||
extApiPageMgr.addPage(pageConfig); |
|||
} |
|||
} |
@ -0,0 +1,28 @@ |
|||
package a8k.extui.page.hardwaretest; |
|||
|
|||
import a8k.app.hardware.driver.OutputIOCtrlDriver; |
|||
import a8k.app.hardware.type.OutputIOId; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@RequiredArgsConstructor |
|||
public class OutputIOCtrlTestPage { |
|||
final private ExtApiPageMgr extApiPageMgr; |
|||
final private OutputIOCtrlDriver outputIOCtrlDriver; |
|||
|
|||
|
|||
public void setIOState(Boolean state) throws AppException { |
|||
outputIOCtrlDriver.setIOState(OutputIOId.RecycleBinOverflowPPSPowerCtrl, state); |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
var page = extApiPageMgr.newPage(this); |
|||
page.addFunction("废料仓光栅控制", this::setIOState).setParamVal("state", ()->true); |
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
@ -0,0 +1,82 @@ |
|||
package a8k.extui.page.hardwaretest; |
|||
|
|||
import a8k.app.hardware.driver.PipetteCtrlDriverV2; |
|||
import a8k.app.hardware.type.ModuleStatus; |
|||
import a8k.app.hardware.type.pipette_module.PipetteStateIndex; |
|||
import a8k.app.hardware.type.pipette_module.cfg.ZMBasicConfigIndex; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.app.utils.ZJsonNode; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import cn.hutool.core.text.StrBuilder; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
public class PipetteGunHardwareTestPage { |
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
private final PipetteCtrlDriverV2 pipetteCtrlDriverV2; |
|||
|
|||
|
|||
public void enableMotor() throws AppException { |
|||
pipetteCtrlDriverV2.zMotorEnable(1); |
|||
} |
|||
|
|||
public void disableMotor() throws AppException { |
|||
pipetteCtrlDriverV2.zMotorEnable(0); |
|||
} |
|||
|
|||
public void stepMotorEasyMoveToZero() throws AppException { |
|||
pipetteCtrlDriverV2.zMotorMoveZeroBlock(); |
|||
} |
|||
|
|||
|
|||
public void stepMotorStop() throws AppException { |
|||
pipetteCtrlDriverV2.moduleStop(); |
|||
} |
|||
|
|||
public void stepMotorEasyMoveForward(Integer dpos) throws AppException { |
|||
pipetteCtrlDriverV2.zMotorMoveByBlock(dpos); |
|||
} |
|||
|
|||
public void stepMotorEasyMoveBackward(Integer dpos) throws AppException { |
|||
pipetteCtrlDriverV2.zMotorMoveByBlock(-dpos); |
|||
} |
|||
|
|||
|
|||
public Integer readPos() throws AppException { |
|||
return pipetteCtrlDriverV2.zMotorReadPos(); |
|||
} |
|||
|
|||
|
|||
public PipetteCtrlDriverV2.PipetteGunConnectivityTestReport readPipetteConnectedState() throws AppException { |
|||
pipetteCtrlDriverV2.pipetteTestConnectivity(); |
|||
return pipetteCtrlDriverV2.readPipetteConnectedState(); |
|||
} |
|||
|
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
var page = extApiPageMgr.newPage(this); |
|||
|
|||
page.newGroup("基础操作"); |
|||
page.addFunction("使能电机", this::enableMotor); |
|||
page.addFunction("失能电机", this::disableMotor); |
|||
page.addFunction("归零", this::stepMotorEasyMoveToZero); |
|||
page.addFunction("正向移动", this::stepMotorEasyMoveForward).setParamVal("dpos", () -> 50); |
|||
page.addFunction("反向移动", this::stepMotorEasyMoveBackward).setParamVal("dpos", () -> 50); |
|||
page.addFunction("停止", this::stepMotorStop); |
|||
|
|||
page.newGroup("状态"); |
|||
page.addFunction("读取位置", this::readPos); |
|||
page.addFunction("读取连接状态", this::readPipetteConnectedState); |
|||
|
|||
extApiPageMgr.addPage(page); |
|||
|
|||
|
|||
} |
|||
|
|||
} |
@ -0,0 +1,131 @@ |
|||
package a8k.extui.page.hardwaretest; |
|||
|
|||
import a8k.app.hardware.channel.A8kCanBusService; |
|||
import a8k.app.hardware.type.MId; |
|||
import a8k.app.type.VersionInfo; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.app.utils.ZList; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtApiStatu; |
|||
import jakarta.annotation.PostConstruct; |
|||
import jakarta.annotation.Resource; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
@Component |
|||
public class SubBoardProberPage { |
|||
|
|||
|
|||
@Resource |
|||
ExtApiPageMgr extApiPageMgr; |
|||
|
|||
@Resource |
|||
A8kCanBusService canBus; |
|||
|
|||
|
|||
Map<MId, VersionInfo> versionInfos = new HashMap<>(); |
|||
|
|||
@ExtApiStatu(name = "", group = "机械臂板模块-10", order = 1) |
|||
public VersionInfo getHbotBoard() { |
|||
return versionInfos.get(MId.HbotBoard); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "板夹仓模块-20", order = 3) |
|||
public VersionInfo getPlatesBoxBoard() { |
|||
return versionInfos.get(MId.PlatesBoxBoard); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "摇匀模组板-30", order = 7) |
|||
public VersionInfo getShakeModBoard() { |
|||
return versionInfos.get(MId.ShakeModBoard); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "反应板夹温度控板-40", order = 15) |
|||
public VersionInfo getPlatesBoxTCMBoard() { |
|||
return versionInfos.get(MId.PlatesBoxTCMBoard); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "孵育盘温空板-50", order = 18) |
|||
public VersionInfo getIncubatorTCMBoard() { |
|||
return versionInfos.get(MId.IncubatorTCMBoard); |
|||
} |
|||
|
|||
|
|||
@ExtApiStatu(name = "", group = "出入料模块-60", order = 20) |
|||
public VersionInfo getFeedingModBoard() { |
|||
return versionInfos.get(MId.FeedingModBoard); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "孵育盘旋转板-70", order = 25) |
|||
public VersionInfo getIncubatorRotateBoard() { |
|||
return versionInfos.get(MId.IncubatorRotateBoard); |
|||
} |
|||
|
|||
|
|||
@ExtApiStatu(name = "", group = "机械臂Z轴板-80", order = 27) |
|||
public VersionInfo getPipetteModBoard() { |
|||
return versionInfos.get(MId.PipetteModBoard); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "光学模组板-90", order = 30) |
|||
public VersionInfo getOptModBoard() { |
|||
return versionInfos.get(MId.OptModBoard); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "A8K读卡器板-100", order = 34) |
|||
public VersionInfo getA8kIdCardReaderBoard() { |
|||
return versionInfos.get(MId.A8kIdCardReaderBoard); |
|||
} |
|||
|
|||
|
|||
public void refreshBoardState() { |
|||
var modules = ZList.of( |
|||
MId.HbotBoard, |
|||
MId.PlatesBoxBoard, |
|||
MId.ShakeModBoard, |
|||
MId.PlatesBoxTCMBoard, |
|||
MId.IncubatorTCMBoard, |
|||
MId.FeedingModBoard, |
|||
MId.IncubatorRotateBoard, |
|||
MId.PipetteModBoard, |
|||
MId.OptModBoard, |
|||
MId.A8kIdCardReaderBoard |
|||
); |
|||
for (var module : modules) { |
|||
if (module == MId.NotSet) { |
|||
continue; |
|||
} |
|||
try { |
|||
Integer version = canBus.moduleReadVersion(module); |
|||
String modueType = canBus.moduleReadType(module).toString(); |
|||
|
|||
VersionInfo info = new VersionInfo(); |
|||
info.online = true; |
|||
info.moduleType = modueType; |
|||
info.moduleId = module.index; |
|||
info.moduleName = module.chname; |
|||
info.version = version; |
|||
versionInfos.put(module, info); |
|||
|
|||
} catch (AppException e) { |
|||
VersionInfo info = new VersionInfo(); |
|||
info.online = false; |
|||
info.moduleId = module.index; |
|||
info.moduleName = module.chname; |
|||
versionInfos.put(module, info); |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
var page = extApiPageMgr.newPage(this); |
|||
page.regPageInitFn(this::refreshBoardState); |
|||
page.addFunction("刷新", this::refreshBoardState); |
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,145 @@ |
|||
package a8k.extui.page.hardwaretest; |
|||
|
|||
import a8k.app.hardware.driver.WaterTemperatureControllerDriver; |
|||
import a8k.app.hardware.type.TemperatureControlerMid; |
|||
import a8k.app.hardware.type.TemperatureControlerRegIndex; |
|||
import a8k.app.type.exception.AppException; |
|||
import a8k.extui.mgr.ExtApiPageMgr; |
|||
import a8k.extui.type.ExtApiStatu; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@RequiredArgsConstructor |
|||
public class WaterTempControllerTestPage { |
|||
|
|||
|
|||
final private ExtApiPageMgr extApiPageMgr; |
|||
final private WaterTemperatureControllerDriver waterTemperatureControllerDriver; |
|||
|
|||
@ExtApiStatu(name = "", group = "孵育盘反馈温度", order = 1, minWidth = "50%") |
|||
public Double readIncubateBoxReadFeedbackTemperature() throws AppException { |
|||
return waterTemperatureControllerDriver.readFeedbakTemperature(TemperatureControlerMid.IncubatorTCM); |
|||
} |
|||
|
|||
|
|||
@ExtApiStatu(name = "", group = "板夹仓反馈温度", order = 2, minWidth = "50%") |
|||
public Double readPlatesBoxTCMFeedbackTemperature() throws AppException { |
|||
return waterTemperatureControllerDriver.readIncubateBoxTemperature(); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "孵育盘温度传感器", order = 3, minWidth = "50%") |
|||
public String readIncubateBoxReadTemperatures() throws AppException { |
|||
Integer temp0 = waterTemperatureControllerDriver.readReg(TemperatureControlerMid.IncubatorTCM, TemperatureControlerRegIndex.kreg_water_cooling_tmp_controler_temp0); |
|||
Integer temp1 = waterTemperatureControllerDriver.readReg(TemperatureControlerMid.IncubatorTCM, TemperatureControlerRegIndex.kreg_water_cooling_tmp_controler_temp1); |
|||
Integer temp2 = waterTemperatureControllerDriver.readReg(TemperatureControlerMid.IncubatorTCM, TemperatureControlerRegIndex.kreg_water_cooling_tmp_controler_temp2); |
|||
Integer temp3 = waterTemperatureControllerDriver.readReg(TemperatureControlerMid.IncubatorTCM, TemperatureControlerRegIndex.kreg_water_cooling_tmp_controler_temp3); |
|||
return String.format("S0: %d, S1: %d, S2: %d, S3: %d", temp0, temp1, temp2, temp3); |
|||
} |
|||
|
|||
@ExtApiStatu(name = "", group = "板夹仓温度传感器", order = 4, minWidth = "50%") |
|||
public String readPlatesBoxTCMReadTemperatures() throws AppException { |
|||
Integer temp0 = waterTemperatureControllerDriver.readReg(TemperatureControlerMid.PlatesBoxTCM, TemperatureControlerRegIndex.kreg_water_cooling_tmp_controler_temp0); |
|||
Integer temp1 = waterTemperatureControllerDriver.readReg(TemperatureControlerMid.PlatesBoxTCM, TemperatureControlerRegIndex.kreg_water_cooling_tmp_controler_temp1); |
|||
Integer temp2 = waterTemperatureControllerDriver.readReg(TemperatureControlerMid.PlatesBoxTCM, TemperatureControlerRegIndex.kreg_water_cooling_tmp_controler_temp2); |
|||
Integer temp3 = waterTemperatureControllerDriver.readReg(TemperatureControlerMid.PlatesBoxTCM, TemperatureControlerRegIndex.kreg_water_cooling_tmp_controler_temp3); |
|||
return String.format("S0: %d, S1: %d, S2: %d, S3: %d", temp0, temp1, temp2, temp3); |
|||
} |
|||
|
|||
|
|||
public void incubatorTCMStartCtrlTemperature(Double targetTemp) throws AppException { |
|||
waterTemperatureControllerDriver.startCtrlTemperature(TemperatureControlerMid.IncubatorTCM, targetTemp); |
|||
} |
|||
|
|||
public void incubatorTCMStopCtrlTemperature() throws AppException { |
|||
waterTemperatureControllerDriver.stopCtrlTemperature(TemperatureControlerMid.IncubatorTCM); |
|||
} |
|||
|
|||
|
|||
public void incubatorTCMSetPeltierPower(Integer val0To100) throws AppException { |
|||
waterTemperatureControllerDriver.setPeltierPower(TemperatureControlerMid.IncubatorTCM, val0To100); |
|||
} |
|||
public void incubatorTCMSetPeltierClose() throws AppException { |
|||
waterTemperatureControllerDriver.setPeltierPower(TemperatureControlerMid.IncubatorTCM, 0); |
|||
} |
|||
|
|||
|
|||
public void incubatorTCMSetCtrlFanLevel(Integer val0To100) throws AppException { |
|||
waterTemperatureControllerDriver.setCtrlFanLevel(TemperatureControlerMid.IncubatorTCM, val0To100); |
|||
} |
|||
public void incubatorTCMSetCtrlFanClose() throws AppException { |
|||
waterTemperatureControllerDriver.setCtrlFanLevel(TemperatureControlerMid.IncubatorTCM, 0); |
|||
} |
|||
|
|||
public void incubatorTCMSetWaterPumpSpeed(Integer val0To100) throws AppException { |
|||
waterTemperatureControllerDriver.setWaterPumpSpeed(TemperatureControlerMid.IncubatorTCM, val0To100); |
|||
} |
|||
public void incubatorTCMSetWaterPumpClose() throws AppException { |
|||
waterTemperatureControllerDriver.setWaterPumpSpeed(TemperatureControlerMid.IncubatorTCM, 0); |
|||
} |
|||
|
|||
|
|||
public void platesBoxTCMStartCtrlTemperature(Double targetTemp) throws AppException { |
|||
waterTemperatureControllerDriver.startCtrlTemperature(TemperatureControlerMid.PlatesBoxTCM, targetTemp); |
|||
} |
|||
|
|||
|
|||
public void platesBoxTCMStopCtrlTemperature() throws AppException { |
|||
waterTemperatureControllerDriver.stopCtrlTemperature(TemperatureControlerMid.PlatesBoxTCM); |
|||
} |
|||
|
|||
public void platesBoxTCMSetPeltierPower(Integer val0To100) throws AppException { |
|||
waterTemperatureControllerDriver.setPeltierPower(TemperatureControlerMid.PlatesBoxTCM, val0To100); |
|||
} |
|||
|
|||
public void platesBoxTCMSetPeltierClose() throws AppException { |
|||
waterTemperatureControllerDriver.setPeltierPower(TemperatureControlerMid.PlatesBoxTCM, 0); |
|||
} |
|||
|
|||
|
|||
public void platesBoxTCMSetCtrlFanLevel(Integer val0To100) throws AppException { |
|||
waterTemperatureControllerDriver.setCtrlFanLevel(TemperatureControlerMid.PlatesBoxTCM, val0To100); |
|||
} |
|||
public void platesBoxTCMSetCtrlFanClose() throws AppException { |
|||
waterTemperatureControllerDriver.setCtrlFanLevel(TemperatureControlerMid.PlatesBoxTCM, 0); |
|||
} |
|||
|
|||
public void platesBoxTCMSetWaterPumpSpeed(Integer val0To100) throws AppException { |
|||
waterTemperatureControllerDriver.setWaterPumpSpeed(TemperatureControlerMid.PlatesBoxTCM, val0To100); |
|||
} |
|||
public void platesBoxTCMSetWaterPumpClose() throws AppException { |
|||
waterTemperatureControllerDriver.setWaterPumpSpeed(TemperatureControlerMid.PlatesBoxTCM, 0); |
|||
} |
|||
|
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
var page = extApiPageMgr.newPage(this); |
|||
page.newGroup("孵育盘-温度控制"); |
|||
page.addFunction("孵育箱TCM开始控温", this::incubatorTCMStartCtrlTemperature); |
|||
page.addFunction("孵育箱TCM停止控温", this::incubatorTCMStopCtrlTemperature); |
|||
page.newGroup("孵育盘-温度控制-测试"); |
|||
page.addFunction("设置加热片功率(-100...+100)", this::incubatorTCMSetPeltierPower); |
|||
page.addFunction("关闭加热片", this::incubatorTCMSetPeltierClose); |
|||
page.addFunction("设置风扇转速", this::incubatorTCMSetCtrlFanLevel); |
|||
page.addFunction("关闭风扇", this::incubatorTCMSetCtrlFanClose); |
|||
page.addFunction("设置水泵转速", this::incubatorTCMSetWaterPumpSpeed); |
|||
page.addFunction("关闭水泵", this::incubatorTCMSetWaterPumpClose); |
|||
page.newGroup("板夹仓-温度控制"); |
|||
page.addFunction("板夹仓TCM开始控温", this::platesBoxTCMStartCtrlTemperature); |
|||
page.addFunction("板夹仓TCM停止控温", this::platesBoxTCMStopCtrlTemperature); |
|||
page.newGroup("板夹仓-温度控制-测试"); |
|||
page.addFunction("设置加热片功率(-100...+100)", this::platesBoxTCMSetPeltierPower); |
|||
page.addFunction("关闭加热片", this::platesBoxTCMSetPeltierClose); |
|||
page.addFunction("设置风扇转速", this::platesBoxTCMSetCtrlFanLevel); |
|||
page.addFunction("关闭风扇", this::platesBoxTCMSetCtrlFanClose); |
|||
page.addFunction("设置水泵转速", this::platesBoxTCMSetWaterPumpSpeed); |
|||
page.addFunction("关闭水泵", this::platesBoxTCMSetWaterPumpClose); |
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
|
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue