From 6ffae400a866a13d3421c662c6c728867721a954 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Mon, 12 May 2025 08:18:54 +0800 Subject: [PATCH] add outputIOCtrl --- .../app/hardware/driver/OutputIOCtrlDriver.java | 26 +++++++++++++++ .../java/iflytop/app/hardware/type/OutputIOId.java | 35 +++++++++++++------- .../iflytop/app/menu/ExtApiPageGroupCfgMgr.java | 3 +- .../java/iflytop/app/page/OutputIOCtrlPage.java | 38 ++++++++++++++++++++++ 4 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 src/main/java/iflytop/app/hardware/driver/OutputIOCtrlDriver.java create mode 100644 src/main/java/iflytop/app/page/OutputIOCtrlPage.java diff --git a/src/main/java/iflytop/app/hardware/driver/OutputIOCtrlDriver.java b/src/main/java/iflytop/app/hardware/driver/OutputIOCtrlDriver.java new file mode 100644 index 0000000..0d8381b --- /dev/null +++ b/src/main/java/iflytop/app/hardware/driver/OutputIOCtrlDriver.java @@ -0,0 +1,26 @@ +package iflytop.app.hardware.driver; + +import iflytop.app.hardware.channel.A8kCanBusService; +import iflytop.app.hardware.type.CmdId; +import iflytop.app.hardware.type.OutputIOId; +import iflytop.app.type.exception.HardwareException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class OutputIOCtrlDriver { + private final A8kCanBusService canBus; + + public void setIOState(OutputIOId IOOutput, Boolean state) throws HardwareException { + canBus.callcmd(IOOutput.mid, CmdId.write_out_io, IOOutput.ioIndex, state ? 1 : 0); + } + + public void open(OutputIOId IOOutput) throws HardwareException { + this.setIOState(IOOutput, true); + } + + public void close(OutputIOId IOOutput) throws HardwareException { + this.setIOState(IOOutput, false); + } +} diff --git a/src/main/java/iflytop/app/hardware/type/OutputIOId.java b/src/main/java/iflytop/app/hardware/type/OutputIOId.java index bf9424a..abdec63 100644 --- a/src/main/java/iflytop/app/hardware/type/OutputIOId.java +++ b/src/main/java/iflytop/app/hardware/type/OutputIOId.java @@ -1,21 +1,32 @@ package iflytop.app.hardware.type; public enum OutputIOId { -// RecycleBinOverflowPPSPowerCtrl("废料仓-光栅电源",ModuleType.Board, MId.PlatesBoxTCMBoard, 0,false),//废料桶光栅电源 + // RecycleBinOverflowPPSPowerCtrl("废料仓-光栅电源",ModuleType.Board, MId.PlatesBoxTCMBoard, 0,false),//废料桶光栅电源 + DO_FAN1("FAN1", MId.IO1_IO, 0, false), + DO_FAN2("FAN2", MId.IO1_IO, 1, false), + DO_FAN3("FAN3", MId.IO1_IO, 2, false), + DO_FAN4("FAN4", MId.IO1_IO, 3, false), + DO_FAN5("FAN5", MId.IO1_IO, 4, false), + DO_FAN6("FAN6", MId.IO1_IO, 5, false), + DO_TRAY_MOTOR_CLAMP("TRAY_MOTOR_CLAMP [ 托盘电机 ] ", MId.IO1_IO, 6, false), + DO_HBOTZ_MOTOR_CLAMP("HBOTZ_MOTOR_CLAMP [ 龙门架Z轴 ] ", MId.IO1_IO, 7, false), + DO_WATER_PUMP("WATER_PUMP [ 水泵 ] ", MId.IO1_IO, 12, false), + DO_VENTILATOR("VENTILATOR [ 风机电源 ]", MId.IO1_IO, 13, false), + DO_COLD_TRAP_POWER("COLD_TRAP_POWER[ 冷阱 电源 ]", MId.IO1_IO, 14, false), + DO_BEEP("DO_BEEP [ 蜂鸣器 ]", MId.IO1_IO, 16, false), + DO_OUT17("DO_OUT17", MId.IO1_IO, 17, false), ; - final public String chname; - final public ModuleType mtype; - final public MId mid; - final public int ioIndex; - final public boolean mirror; + final public String description; + final public MId mid; + final public int ioIndex; + final public boolean mirror; - OutputIOId(String chname, ModuleType mtype, MId mid, int ioIndex, boolean mirror) { - this.chname = chname; - this.mtype = mtype; - this.mid = mid; - this.ioIndex = ioIndex; - this.mirror = mirror; + OutputIOId(String description, MId mid, int ioIndex, boolean mirror) { + this.description = description; + this.mid = mid; + this.ioIndex = ioIndex; + this.mirror = mirror; } diff --git a/src/main/java/iflytop/app/menu/ExtApiPageGroupCfgMgr.java b/src/main/java/iflytop/app/menu/ExtApiPageGroupCfgMgr.java index ab359dd..8de19a3 100644 --- a/src/main/java/iflytop/app/menu/ExtApiPageGroupCfgMgr.java +++ b/src/main/java/iflytop/app/menu/ExtApiPageGroupCfgMgr.java @@ -69,7 +69,8 @@ public class ExtApiPageGroupCfgMgr { new Menu(MiniServoCtrlPage.class, "舵机驱动"), new Menu(MotorCtrlPage.class, "电机驱动"), new Menu(LiquidArmPage.class, "加液臂驱动"), - new Menu(LeisaiServoPage.class, "雷赛伺服电机驱动") + new Menu(LeisaiServoPage.class, "雷赛伺服电机驱动"), + new Menu(OutputIOCtrlPage.class, "输出IO控制") ))); diff --git a/src/main/java/iflytop/app/page/OutputIOCtrlPage.java b/src/main/java/iflytop/app/page/OutputIOCtrlPage.java new file mode 100644 index 0000000..8b31972 --- /dev/null +++ b/src/main/java/iflytop/app/page/OutputIOCtrlPage.java @@ -0,0 +1,38 @@ +package iflytop.app.page; + +import iflytop.app.hardware.driver.OutputIOCtrlDriver; +import iflytop.app.hardware.driver.StepMotorCtrlDriver; +import iflytop.app.hardware.type.*; +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 org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class OutputIOCtrlPage { + private static final Logger log = LoggerFactory.getLogger(OutputIOCtrlPage.class); + @Resource + OutputIOCtrlDriver outputIOCtrlDriver; + + @Resource + ExtApiPageMgr extApiPageMgr; + + public void setIOState(OutputIOId IOOutput, Boolean state) throws HardwareException { + outputIOCtrlDriver.setIOState(IOOutput, state); + } + + + @PostConstruct + void init() { + var page = extApiPageMgr.newPage(this); + page.addFunction("设置IO状态", this::setIOState); + + extApiPageMgr.addPage(page); + + + } +}