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