17 changed files with 554 additions and 14 deletions
-
37src/main/java/iflytop/app/config/A8kSubModuleInitRegConfig.java
-
59src/main/java/iflytop/app/hardware/driver/LeisaiServoDriver.java
-
69src/main/java/iflytop/app/hardware/driver/LiquidDistributionArmDriver.java
-
14src/main/java/iflytop/app/hardware/type/CmdId.java
-
12src/main/java/iflytop/app/hardware/type/LeisaiRegIndex.java
-
16src/main/java/iflytop/app/hardware/type/LeisaiServoMId.java
-
9src/main/java/iflytop/app/hardware/type/LeisaiServoSpeedLevel.java
-
15src/main/java/iflytop/app/hardware/type/LiquidArmMId.java
-
45src/main/java/iflytop/app/hardware/type/LiquidArmRegIndex.java
-
6src/main/java/iflytop/app/hardware/type/MId.java
-
3src/main/java/iflytop/app/hardware/type/ModuleType.java
-
42src/main/java/iflytop/app/hardware/type/RegIndex.java
-
9src/main/java/iflytop/app/menu/ExtApiPageGroupCfgMgr.java
-
127src/main/java/iflytop/app/page/LeisaiServoPage.java
-
99src/main/java/iflytop/app/page/LiquidArmPage.java
-
4src/main/java/iflytop/app/page/MiniServoCtrlPage.java
-
2src/main/resources/application.yml
@ -0,0 +1,59 @@ |
|||
package iflytop.app.hardware.driver; |
|||
|
|||
import iflytop.app.hardware.channel.A8kCanBusConnection; |
|||
import iflytop.app.hardware.channel.A8kCanBusService; |
|||
import iflytop.app.hardware.type.*; |
|||
import iflytop.app.type.exception.HardwareException; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@RequiredArgsConstructor |
|||
public class LeisaiServoDriver { |
|||
final private A8kCanBusService canBus; |
|||
static public final Integer actionOvertime = 10000; |
|||
|
|||
public void moduleStop(LeisaiServoMId id) throws HardwareException { |
|||
log.info("moduleStop called with id: {}", id); |
|||
canBus.moduleStop(id.mid); |
|||
} |
|||
|
|||
public void enable(LeisaiServoMId id, Integer enable) throws HardwareException { |
|||
log.info("enable called with id: {}, enable: {}", id, enable); |
|||
canBus.callcmd(id.mid, CmdId.leisai_servo_enable, enable); |
|||
} |
|||
|
|||
public Integer readPosition(LeisaiServoMId id) throws HardwareException { |
|||
log.info("readPosition called with id: {}", id); |
|||
A8kPacket packet = canBus.callcmd(id.mid, CmdId.leisai_servo_read_pos); |
|||
return packet.getContentI32(0); |
|||
} |
|||
|
|||
public Integer readIoState(LeisaiServoMId id, Integer io_index) throws HardwareException { |
|||
log.info("readIoState called with id: {}, io_index: {}", id, io_index); |
|||
A8kPacket packet = canBus.callcmd(id.mid, CmdId.leisai_servo_read_io_state, io_index); |
|||
return packet.getContentI32(0); |
|||
} |
|||
|
|||
public void moveTo(LeisaiServoMId id, LeisaiServoSpeedLevel speedLevel, Integer pos) throws HardwareException { |
|||
log.info("moveTo called with id: {}, speedLevel: {}, pos: {}", id, speedLevel, pos); |
|||
canBus.callcmd(id.mid, CmdId.leisai_servo_move_to, speedLevel.ordinal(), pos); |
|||
} |
|||
|
|||
public void moveBy(LeisaiServoMId id, LeisaiServoSpeedLevel speedLevel, Integer dpos) throws HardwareException { |
|||
log.info("moveBy called with id: {}, speedLevel: {}, dpos: {}", id, speedLevel, dpos); |
|||
canBus.callcmd(id.mid, CmdId.leisai_servo_move_by, speedLevel.ordinal(), dpos); |
|||
} |
|||
|
|||
public void rotate(LeisaiServoMId id, LeisaiServoSpeedLevel speedLevel, Integer direction) throws HardwareException { |
|||
log.info("rotate called with id: {}, speedLevel: {}, direction: {}", id, speedLevel, direction); |
|||
canBus.callcmd(id.mid, CmdId.leisai_servo_rotate, speedLevel.ordinal(), direction); |
|||
} |
|||
|
|||
public void moveToZero(LeisaiServoMId id) throws HardwareException { |
|||
log.info("moveToZero called with id: {}", id); |
|||
canBus.callcmd(id.mid, CmdId.leisai_servo_move_to_zero); |
|||
} |
|||
} |
@ -0,0 +1,69 @@ |
|||
package iflytop.app.hardware.driver; |
|||
|
|||
import com.fasterxml.jackson.databind.node.ObjectNode; |
|||
import iflytop.app.hardware.channel.A8kCanBusService; |
|||
import iflytop.app.hardware.type.*; |
|||
import iflytop.app.type.exception.HardwareException; |
|||
import iflytop.app.utils.ZJsonHelper; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@RequiredArgsConstructor |
|||
public class LiquidDistributionArmDriver { |
|||
final private A8kCanBusService canBus; |
|||
|
|||
public void liquidDistributionArmEnable(LiquidArmMId id, int enable) throws HardwareException { |
|||
log.info("liquidDistributionArmEnable called with id: {}, enable: {}", id, enable); |
|||
canBus.callcmd(id.mid, CmdId.liquid_distribution_arm_enable, enable); |
|||
} |
|||
|
|||
public void liquidDistributionArmMoveTo(LiquidArmMId id, int index) throws HardwareException { |
|||
log.info("liquidDistributionArmMoveTo called with id: {}, index: {}", id, index); |
|||
canBus.callcmd(id.mid, CmdId.liquid_distribution_arm_move_to, index); |
|||
} |
|||
|
|||
public int liquidDistributionReadPos(LiquidArmMId id) throws HardwareException { |
|||
log.info("liquidDistributionReadPos called with id: {}", id); |
|||
var packet = canBus.callcmd(id.mid, CmdId.liquid_distribution_arm_read_pos); |
|||
return packet.getContentI32(0); |
|||
} |
|||
|
|||
public void liquidDistributionSetCurPosAsPresetPos(LiquidArmMId id, int index) throws HardwareException { |
|||
log.info("liquidDistributionSetCurPosAsPresetPos called with id: {}, index: {}", id, index); |
|||
canBus.callcmd(id.mid, CmdId.liquid_distribution_arm_set_cur_pos_as_preset_pos, index); |
|||
} |
|||
|
|||
public void liquidDistributionSetCurPosAsMidPos(LiquidArmMId id) throws HardwareException { |
|||
log.info("liquidDistributionSetCurPosAsMidPos called with id: {}", id); |
|||
canBus.callcmd(id.mid, CmdId.liquid_distribution_arm_set_cur_pos_as_mid_pos); |
|||
} |
|||
|
|||
public void moduleStop(LiquidArmMId id) throws HardwareException { |
|||
log.info("moduleStop called with id: {}", id); |
|||
canBus.moduleStop(id.mid); |
|||
} |
|||
|
|||
public void setReg(LiquidArmMId id, LiquidArmRegIndex regindex, int val) throws HardwareException { |
|||
log.info("setReg called with id: {}, regindex: {}, val: {}", id, regindex, val); |
|||
canBus.moduleSetReg(id.mid, regindex.regIndex, val); |
|||
} |
|||
|
|||
public Integer getReg(LiquidArmMId id, LiquidArmRegIndex regindex) throws HardwareException { |
|||
log.info("getReg called with id: {}, regindex: {}", id, regindex); |
|||
return canBus.moduleGetReg(id.mid, regindex.regIndex); |
|||
} |
|||
|
|||
public Object getAllReg(LiquidArmMId id) throws HardwareException { |
|||
log.info("getAllReg called with id: {}", id); |
|||
ObjectNode node = ZJsonHelper.createObjectNode(); |
|||
for (LiquidArmRegIndex regIndex : LiquidArmRegIndex.values()) { |
|||
Integer regVal = getReg(id, regIndex); |
|||
log.info("read reg {} -> {}", regIndex, regVal); |
|||
node.put(regIndex.name(), getReg(id, regIndex)); |
|||
} |
|||
return node; |
|||
} |
|||
} |
@ -0,0 +1,12 @@ |
|||
package iflytop.app.hardware.type; |
|||
|
|||
public enum LeisaiRegIndex { |
|||
kreg_mini_servo_firmware_main_version(RegIndex.kreg_mini_servo_firmware_main_version), |
|||
; |
|||
|
|||
public final RegIndex regIndex; |
|||
|
|||
LeisaiRegIndex(RegIndex regIndex) { |
|||
this.regIndex = regIndex; |
|||
} |
|||
} |
@ -0,0 +1,16 @@ |
|||
package iflytop.app.hardware.type; |
|||
|
|||
import org.springframework.util.Assert; |
|||
|
|||
public enum LeisaiServoMId { |
|||
HBotXLeisaiSV(MId.HBotXLeisaiSV), |
|||
HBotYLeisaiSV(MId.HBotYLeisaiSV), |
|||
; |
|||
|
|||
final public MId mid; |
|||
|
|||
LeisaiServoMId(MId mid) { |
|||
Assert.isTrue(this.name().equals(mid.name()), "LeisaiServoMId Init fail"); |
|||
this.mid = mid; |
|||
} |
|||
} |
@ -0,0 +1,9 @@ |
|||
package iflytop.app.hardware.type; |
|||
|
|||
public enum LeisaiServoSpeedLevel { |
|||
DEFAULT, |
|||
LOW, |
|||
MID, |
|||
HIGH, |
|||
; |
|||
} |
@ -0,0 +1,15 @@ |
|||
package iflytop.app.hardware.type; |
|||
|
|||
import org.springframework.util.Assert; |
|||
|
|||
public enum LiquidArmMId { |
|||
LiquidDistributionArm(MId.LiquidDistributionArm),// |
|||
; |
|||
|
|||
final public MId mid; |
|||
|
|||
LiquidArmMId(MId mid) { |
|||
Assert.isTrue(this.name().equals(mid.name()), "LiquidDistributionArm Init fail"); |
|||
this.mid = mid; |
|||
} |
|||
} |
@ -0,0 +1,45 @@ |
|||
package iflytop.app.hardware.type; |
|||
|
|||
public enum LiquidArmRegIndex { |
|||
kreg_liquid_distribution_arm_enable(RegIndex.kreg_liquid_distribution_arm_enable), // 电机使能 |
|||
kreg_liquid_distribution_arm_pos0_d0(RegIndex.kreg_liquid_distribution_arm_pos0_d0), // 位置0 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos0_d1(RegIndex.kreg_liquid_distribution_arm_pos0_d1), // 位置0 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos1_d0(RegIndex.kreg_liquid_distribution_arm_pos1_d0), // 位置1 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos1_d1(RegIndex.kreg_liquid_distribution_arm_pos1_d1), // 位置1 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos2_d0(RegIndex.kreg_liquid_distribution_arm_pos2_d0), // 位置2 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos2_d1(RegIndex.kreg_liquid_distribution_arm_pos2_d1), // 位置2 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos3_d0(RegIndex.kreg_liquid_distribution_arm_pos3_d0), // 位置3 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos3_d1(RegIndex.kreg_liquid_distribution_arm_pos3_d1), // 位置3 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos4_d0(RegIndex.kreg_liquid_distribution_arm_pos4_d0), // 位置4 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos4_d1(RegIndex.kreg_liquid_distribution_arm_pos4_d1), // 位置4 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos5_d0(RegIndex.kreg_liquid_distribution_arm_pos5_d0), // 位置5 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos5_d1(RegIndex.kreg_liquid_distribution_arm_pos5_d1), // 位置5 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos6_d0(RegIndex.kreg_liquid_distribution_arm_pos6_d0), // 位置6 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos6_d1(RegIndex.kreg_liquid_distribution_arm_pos6_d1), // 位置6 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos7_d0(RegIndex.kreg_liquid_distribution_arm_pos7_d0), // 位置7 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos7_d1(RegIndex.kreg_liquid_distribution_arm_pos7_d1), // 位置7 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos8_d0(RegIndex.kreg_liquid_distribution_arm_pos8_d0), // 位置8 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos8_d1(RegIndex.kreg_liquid_distribution_arm_pos8_d1), // 位置8 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos9_d0(RegIndex.kreg_liquid_distribution_arm_pos9_d0), // 位置9 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos9_d1(RegIndex.kreg_liquid_distribution_arm_pos9_d1), // 位置9 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos10_d0(RegIndex.kreg_liquid_distribution_arm_pos10_d0), // 位置10 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos10_d1(RegIndex.kreg_liquid_distribution_arm_pos10_d1), // 位置10 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos11_d0(RegIndex.kreg_liquid_distribution_arm_pos11_d0), // 位置11 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos11_d1(RegIndex.kreg_liquid_distribution_arm_pos11_d1), // 位置11 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos12_d0(RegIndex.kreg_liquid_distribution_arm_pos12_d0), // 位置12 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos12_d1(RegIndex.kreg_liquid_distribution_arm_pos12_d1), // 位置12 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos13_d0(RegIndex.kreg_liquid_distribution_arm_pos13_d0), // 位置13 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos13_d1(RegIndex.kreg_liquid_distribution_arm_pos13_d1), // 位置13 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos14_d0(RegIndex.kreg_liquid_distribution_arm_pos14_d0), // 位置14 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos14_d1(RegIndex.kreg_liquid_distribution_arm_pos14_d1), // 位置14 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos15_d0(RegIndex.kreg_liquid_distribution_arm_pos15_d0), // 位置15 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos15_d1(RegIndex.kreg_liquid_distribution_arm_pos15_d1), // 位置15 舵机1位置 |
|||
kreg_liquid_distribution_arm_pos16_d0(RegIndex.kreg_liquid_distribution_arm_pos16_d0), // 位置16 舵机0位置 |
|||
kreg_liquid_distribution_arm_pos16_d1(RegIndex.kreg_liquid_distribution_arm_pos16_d1); // 位置16 舵机1位置 |
|||
|
|||
public final RegIndex regIndex; |
|||
|
|||
LiquidArmRegIndex(RegIndex regIndex) { |
|||
this.regIndex = regIndex; |
|||
} |
|||
} |
@ -0,0 +1,127 @@ |
|||
package iflytop.app.page; |
|||
|
|||
import iflytop.app.hardware.driver.LeisaiServoDriver; |
|||
import iflytop.app.hardware.type.LeisaiServoMId; |
|||
import iflytop.app.hardware.type.LeisaiServoSpeedLevel; |
|||
import iflytop.app.type.exception.HardwareException; |
|||
import iflytop.app.utils.ZJsonNode; |
|||
import iflytop.extui.mgr.ExtApiPageMgr; |
|||
import jakarta.annotation.PostConstruct; |
|||
import jakarta.annotation.Resource; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@RequiredArgsConstructor |
|||
public class LeisaiServoPage { |
|||
private final LeisaiServoDriver driver; |
|||
|
|||
@Resource |
|||
private ExtApiPageMgr extApiPageMgr; |
|||
|
|||
private LeisaiServoMId id = LeisaiServoMId.HBotXLeisaiSV; |
|||
private Integer dpos = 10; |
|||
private LeisaiServoSpeedLevel speedLevel = LeisaiServoSpeedLevel.DEFAULT; |
|||
|
|||
public void setLeisaiServoId(LeisaiServoMId id) { |
|||
log.info("setLeisaiServoId called with id: {}", id); |
|||
this.id = id; |
|||
} |
|||
|
|||
public void setLeisaiServoDpos(Integer dpos) { |
|||
log.info("setLeisaiServoDpos called with dpos: {}", dpos); |
|||
this.dpos = dpos; |
|||
} |
|||
|
|||
public void setLeisaiServoSpeedLevel(LeisaiServoSpeedLevel speedLevel) { |
|||
log.info("setLeisaiServoSpeedLevel called with speedLevel: {}", speedLevel); |
|||
this.speedLevel = speedLevel; |
|||
} |
|||
|
|||
public void enableServo() throws Exception { |
|||
log.info("enableServo called"); |
|||
driver.enable(id, 1); |
|||
} |
|||
|
|||
public void disableServo() throws Exception { |
|||
log.info("disableServo called"); |
|||
driver.enable(id, 0); |
|||
} |
|||
|
|||
public Integer readPosition() throws Exception { |
|||
log.info("readPosition called"); |
|||
return driver.readPosition(id); |
|||
} |
|||
|
|||
public void moveTo(Integer pos) throws Exception { |
|||
log.info("moveTo called with pos: {}", pos); |
|||
driver.moveTo(id, speedLevel, pos); |
|||
} |
|||
|
|||
public void moveByForward() throws Exception { |
|||
log.info("moveByForward called with dpos: {}", dpos); |
|||
driver.moveBy(id, speedLevel, dpos); |
|||
} |
|||
|
|||
public void moveByBackward() throws Exception { |
|||
log.info("moveByBackward called with dpos: {}", dpos); |
|||
driver.moveBy(id, speedLevel, -dpos); |
|||
} |
|||
|
|||
public void rotateForward() throws Exception { |
|||
log.info("rotateForward called"); |
|||
driver.rotate(id, speedLevel, 1); |
|||
} |
|||
|
|||
public void rotateBackward() throws Exception { |
|||
log.info("rotateBackward called"); |
|||
driver.rotate(id, speedLevel, -1); |
|||
} |
|||
|
|||
public void moveToZero() throws Exception { |
|||
log.info("moveToZero called"); |
|||
driver.moveToZero(id); |
|||
} |
|||
|
|||
public Object readIOState() throws HardwareException { |
|||
log.info("readIOState called"); |
|||
ZJsonNode node = new ZJsonNode(); |
|||
node.get("IO1").set(driver.readIoState(id, 0)); |
|||
node.get("IO2").set(driver.readIoState(id, 1)); |
|||
return node.get(); |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() { |
|||
var page = extApiPageMgr.newPage(this); |
|||
|
|||
page.newGroup("上下文"); |
|||
page.addFunction("设置伺服ID", this::setLeisaiServoId).setParamVal("id", () -> id); |
|||
page.addFunction("设置速度等级", this::setLeisaiServoSpeedLevel).setParamVal("speedLevel", () -> speedLevel); |
|||
|
|||
page.newGroup("基础操作"); |
|||
page.addFunction("使能伺服", this::enableServo); |
|||
page.addFunction("失能伺服", this::disableServo); |
|||
page.addFunction("归零", this::moveToZero); |
|||
|
|||
page.newGroup("相对移动"); |
|||
page.addFunction("设置相对移动距离", this::setLeisaiServoDpos).setParamVal("dpos", () -> dpos); |
|||
page.addFunction("相对正向移动", this::moveByForward); |
|||
page.addFunction("相对反向移动", this::moveByBackward); |
|||
|
|||
page.newGroup("绝对移动"); |
|||
page.addFunction("绝对移动", this::moveTo); |
|||
|
|||
page.newGroup("旋转"); |
|||
page.addFunction("顺时针旋转", this::rotateForward); |
|||
page.addFunction("逆时针旋转", this::rotateBackward); |
|||
|
|||
page.newGroup("状态"); |
|||
page.addFunction("读取位置", this::readPosition); |
|||
page.addFunction("读取IO", this::readIOState); |
|||
|
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
@ -0,0 +1,99 @@ |
|||
package iflytop.app.page; |
|||
|
|||
import com.fasterxml.jackson.databind.JsonNode; |
|||
import iflytop.app.hardware.driver.LiquidDistributionArmDriver; |
|||
import iflytop.app.hardware.type.LiquidArmMId; |
|||
import iflytop.app.hardware.type.LiquidArmRegIndex; |
|||
import iflytop.app.type.exception.HardwareException; |
|||
import iflytop.app.utils.ZJsonNode; |
|||
import iflytop.extui.mgr.ExtApiPageMgr; |
|||
import jakarta.annotation.PostConstruct; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
@RequiredArgsConstructor |
|||
public class LiquidArmPage { |
|||
private final LiquidDistributionArmDriver liquidDistributionArmCtrlDriver; |
|||
private final ExtApiPageMgr extApiPageMgr; |
|||
|
|||
LiquidArmMId id = LiquidArmMId.LiquidDistributionArm; |
|||
|
|||
public void setLiquidArmId(LiquidArmMId id) { |
|||
log.info("setLiquidArmId called with id: {}", id); |
|||
this.id = id; |
|||
} |
|||
|
|||
public void enable(Boolean enable) throws HardwareException { |
|||
log.info("enable called with enable: {}", enable); |
|||
liquidDistributionArmCtrlDriver.liquidDistributionArmEnable(id, enable ? 1 : 0); |
|||
} |
|||
|
|||
public void stop() throws HardwareException { |
|||
log.info("stop called"); |
|||
liquidDistributionArmCtrlDriver.moduleStop(id); |
|||
} |
|||
|
|||
public void moveTo(Integer index) throws HardwareException { |
|||
log.info("moveTo called with index: {}", index); |
|||
liquidDistributionArmCtrlDriver.liquidDistributionArmMoveTo(id, index); |
|||
} |
|||
|
|||
public void setCurPosAsPresetPos(Integer index) throws HardwareException { |
|||
log.info("setCurPosAsPresetPos called with index: {}", index); |
|||
liquidDistributionArmCtrlDriver.liquidDistributionSetCurPosAsPresetPos(id, index); |
|||
} |
|||
|
|||
public void setCurPosAsMidPos() throws HardwareException { |
|||
log.info("setCurPosAsMidPos called"); |
|||
liquidDistributionArmCtrlDriver.liquidDistributionSetCurPosAsMidPos(id); |
|||
} |
|||
|
|||
public Integer readPosIndex() throws HardwareException { |
|||
log.info("readPosIndex called"); |
|||
return liquidDistributionArmCtrlDriver.liquidDistributionReadPos(id); |
|||
} |
|||
|
|||
public void setReg(LiquidArmRegIndex reg, Integer val) throws HardwareException { |
|||
log.info("setReg called with reg: {}, val: {}", reg, val); |
|||
liquidDistributionArmCtrlDriver.setReg(id, reg, val); |
|||
} |
|||
|
|||
public JsonNode getAllReg() { |
|||
log.info("getAllReg called"); |
|||
ZJsonNode jsonNode = new ZJsonNode(); |
|||
for (LiquidArmRegIndex reg : LiquidArmRegIndex.values()) { |
|||
try { |
|||
jsonNode.get(reg.name()).set(liquidDistributionArmCtrlDriver.getReg(id, reg)); |
|||
} catch (HardwareException e) { |
|||
log.error("Error reading register {}: {}", reg, e.getMessage()); |
|||
jsonNode.get(reg.name()).set("error"); |
|||
} |
|||
} |
|||
return jsonNode.get(); |
|||
} |
|||
|
|||
@PostConstruct |
|||
void init() |
|||
{ |
|||
var page = extApiPageMgr.newPage(this); |
|||
page.newGroup("上下文"); |
|||
page.addFunction("设置加液臂ID", this::setLiquidArmId).setParamVal("id", () -> id); |
|||
// |
|||
page.newGroup("基础操作"); |
|||
page.addFunction("使能", this::enable).setParamVal("enable", () -> true); |
|||
page.addFunction("读取当前索引", this::readPosIndex); |
|||
page.addFunction("设置当前位置为中点", this::setCurPosAsMidPos); |
|||
page.addFunction("移动到索引N位置", this::moveTo).setParamVal("index", () -> 0); |
|||
page.addFunction("设置当前位置为索引N位置", this::setCurPosAsPresetPos).setParamVal("index", () -> 0); |
|||
page.addFunction("停止", this::stop); |
|||
|
|||
page.newGroup("寄存器"); |
|||
page.addFunction("设置寄存器", this::setReg); |
|||
page.addFunction("获取寄存器", this::getAllReg); |
|||
|
|||
extApiPageMgr.addPage(page); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue