From 2158cd65e6e173a27fc141a296f5af4cba66180f Mon Sep 17 00:00:00 2001 From: sige Date: Tue, 23 Jan 2024 15:38:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E7=83=AD=E8=AF=95=E7=AE=A1=E5=8D=A1?= =?UTF-8?q?=E4=BD=8D=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/my/graphiteDigesterBg/MyDevice.java | 10 +++---- .../diframe/DiApplicationRunner.java | 2 +- .../my/graphiteDigesterBg/diframe/DiCommand.java | 3 +- .../diframe/DiDeviceResourceManager.java | 1 + .../diframe/DiResourceManager.java | 2 ++ .../diframe/actuator/DiActServo.java | 11 +++++--- .../resource/ResHeatingTubeRackSlot.java | 32 ++++++++++++++++++++-- .../resource/ResHeatingTubeRackSlotManager.java | 25 ++++++++++++++++- .../my/graphiteDigesterBg/task/TaskStartReset.java | 18 ++++++++++++ src/src/main/resources/device.yml | 4 +++ 10 files changed, 93 insertions(+), 15 deletions(-) diff --git a/src/src/main/java/com/my/graphiteDigesterBg/MyDevice.java b/src/src/main/java/com/my/graphiteDigesterBg/MyDevice.java index 3606055..8edd48e 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/MyDevice.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/MyDevice.java @@ -2,7 +2,7 @@ package com.my.graphiteDigesterBg; import com.my.graphiteDigesterBg.diframe.DiDevice; public class MyDevice extends DiDevice { public static String ACT_HEAT_PLATE_MOTOR = "heatPlateMotor"; - public static String ACT_HEAT_SLOT_01_COVER_SERVO = "heatSlot01CoverServo"; + public static String ACT_HEAT_SLOT_01_COVER_SERVO = "heatSlot0CoverServo"; public static String ACT_TRANSFER_LR_MOTOR = "transferLeftRightMotor"; public static String ACT_TRANSFER_UD_MOTOR = "transferUpDownMotor"; public static String ACT_TRANSFER_CLIP_SERVO = "transferClipServo"; @@ -10,10 +10,10 @@ public class MyDevice extends DiDevice { public static String ACT_LIQUID_PLATE_MOTOR = "liquidPlateMotor"; public static String ACT_LIQUID_PERISTALTIC_PUMP = "liquidPeristalticPump"; - public static String IO_HEAT_SLOT_01_HEATER_01 = "heatSlot01Heater01"; - public static String IO_HEAT_SLOT_01_HEATER_02 = "heatSlot01Heater02"; - public static String IO_HEAT_SLOT_01_HEATER_03 = "heatSlot01Heater03"; - public static String IO_HEAT_SLOT_01_HEATER_04 = "heatSlot01Heater04"; + public static String IO_HEAT_SLOT_01_HEATER_01 = "heatSlot1Heater1"; + public static String IO_HEAT_SLOT_01_HEATER_02 = "heatSlot1Heater2"; + public static String IO_HEAT_SLOT_01_HEATER_03 = "heatSlot1Heater3"; + public static String IO_HEAT_SLOT_01_HEATER_04 = "heatSlot1Heater4"; public static String IO_AIR_COMPRESSOR = "airCompressor"; public static String RES_HEATING_TUBE_RACK_SLOT = "HeatingTubeRackSlot"; diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiApplicationRunner.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiApplicationRunner.java index 7fee866..e9ad9c6 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiApplicationRunner.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiApplicationRunner.java @@ -4,7 +4,7 @@ import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; -@Order(1) +@Order(2) @Component public class DiApplicationRunner implements ApplicationRunner { @Resource diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiCommand.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiCommand.java index 5956030..ca1b21b 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiCommand.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiCommand.java @@ -6,7 +6,8 @@ public enum DiCommand { MODULE_GET_REG("module_get_reg", 0x0106), MODULE_ENABLE("module_enable", 0x0114), MOTOR_EASY_MOVE_BY("motor_easy_move_by", 0x0212), - MOTOR_EASY_MOVE_TO_ZERO("motor_easy_move_to_zero", 0x0214); + MOTOR_EASY_MOVE_TO_ZERO("motor_easy_move_to_zero", 0x0214), + MOTO_EASY_MOVE_TO("moto_easy_move_to", 0x0213); // command name private final String name; diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceResourceManager.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceResourceManager.java index 9fb74a6..53ffb21 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceResourceManager.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceResourceManager.java @@ -36,6 +36,7 @@ public class DiDeviceResourceManager { LOG.info("(Resource) {} => {}", manAnnotation.name(), resManClass.getName()); DiResourceManager man = this.getDiResourceManagerInstance(resManClass); + man.setDevice(this.device); this.managersNameMap.put(manAnnotation.name(), man); this.managersClassMap.put(resManClass, man); } diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiResourceManager.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiResourceManager.java index b254fa7..4b66ca4 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiResourceManager.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiResourceManager.java @@ -1,3 +1,5 @@ package com.my.graphiteDigesterBg.diframe; public interface DiResourceManager { + // set device + void setDevice( DiDevice device ); } diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/actuator/DiActServo.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/actuator/DiActServo.java index a1c3248..5a7f396 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/diframe/actuator/DiActServo.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/actuator/DiActServo.java @@ -1,11 +1,14 @@ package com.my.graphiteDigesterBg.diframe.actuator; - import com.my.graphiteDigesterBg.diframe.DiActuatorBase; - +import com.my.graphiteDigesterBg.diframe.DiCommand; public class DiActServo extends DiActuatorBase { - public void moveTo( Integer pos ) {} + // move to position + public void moveTo( Integer pos ) { + this.call(DiCommand.MOTO_EASY_MOVE_TO, pos); + this.waitForFinish(); + } + public void moveBy( Integer delta ) {} public void rotate( Integer direction ) {} public void stop() {} - public void reset() {} } diff --git a/src/src/main/java/com/my/graphiteDigesterBg/resource/ResHeatingTubeRackSlot.java b/src/src/main/java/com/my/graphiteDigesterBg/resource/ResHeatingTubeRackSlot.java index 0db7863..ebaa51c 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/resource/ResHeatingTubeRackSlot.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/resource/ResHeatingTubeRackSlot.java @@ -1,12 +1,18 @@ package com.my.graphiteDigesterBg.resource; +import com.my.graphiteDigesterBg.diframe.actuator.DiActServo; public class ResHeatingTubeRackSlot { // index of slot - public Integer index; + private final Integer index; // is slot locked private Boolean isLocked; + // manager + private final ResHeatingTubeRackSlotManager manager; - public Integer getOperationWindowLocation() { - return 0; + // constructor + public ResHeatingTubeRackSlot( ResHeatingTubeRackSlotManager manager, Integer index ) { + this.isLocked = false; + this.index = index; + this.manager = manager; } // get is slot locked @@ -23,4 +29,24 @@ public class ResHeatingTubeRackSlot { public void unlock() { this.isLocked = false; } + + // get cover servo + public DiActServo getCoverServo() { + String servoKey = "heatSlot" + this.index.toString() + "CoverServo"; + return (DiActServo) this.manager.getDevice().getActuators().get(servoKey); + } + + // open cover + public void coverOpen() { + this.getCoverServo().moveTo(1000); + } + + // close cover + public void coverClose() { + this.getCoverServo().moveTo(2047); + } + + public Integer getOperationWindowLocation() { + return 0; + } } diff --git a/src/src/main/java/com/my/graphiteDigesterBg/resource/ResHeatingTubeRackSlotManager.java b/src/src/main/java/com/my/graphiteDigesterBg/resource/ResHeatingTubeRackSlotManager.java index 9bb94b6..2667079 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/resource/ResHeatingTubeRackSlotManager.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/resource/ResHeatingTubeRackSlotManager.java @@ -1,4 +1,5 @@ package com.my.graphiteDigesterBg.resource; +import com.my.graphiteDigesterBg.diframe.DiDevice; import com.my.graphiteDigesterBg.diframe.DiResourceManagerBase; import com.my.graphiteDigesterBg.diframe.ResourceManager; @@ -6,11 +7,33 @@ import java.util.ArrayList; import java.util.List; @ResourceManager(name="HeatingTubeRackSlot") public class ResHeatingTubeRackSlotManager extends DiResourceManagerBase { + // device + private DiDevice device; // slots - private List slots; + private final List slots; + // constructor public ResHeatingTubeRackSlotManager() { this.slots = new ArrayList<>(); + for (int i = 0; i < 1; i++) { + ResHeatingTubeRackSlot slot = new ResHeatingTubeRackSlot(this, i); + this.slots.add(slot); + } + } + + // set device + public void setDevice( DiDevice device ) { + this.device = device; + } + + // get device + public DiDevice getDevice() { + return this.device; + } + + // get slots + public List getSlots() { + return this.slots; } // get free slot diff --git a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java index 2ec9f63..6fdfdad 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java @@ -4,6 +4,10 @@ import com.my.graphiteDigesterBg.diframe.DiDeviceRegisterManager; import com.my.graphiteDigesterBg.diframe.DiTaskBase; import com.my.graphiteDigesterBg.diframe.Task; import com.my.graphiteDigesterBg.diframe.actuator.DiActMotor; +import com.my.graphiteDigesterBg.diframe.actuator.DiActServo; +import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlot; +import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager; +import java.util.List; @Task(name="StartReset") public class TaskStartReset extends DiTaskBase { @Override @@ -17,7 +21,21 @@ public class TaskStartReset extends DiTaskBase { liquidMotor.activeConfig(); liquidMotor.reset(); + // 加热盘Slot初始化 + ResHeatingTubeRackSlotManager heatingSlotMan = this.getResourceManager(ResHeatingTubeRackSlotManager.class); + List heatingSlots = heatingSlotMan.getSlots(); + for ( ResHeatingTubeRackSlot slot : heatingSlots ) { + // 初始化加热盘卡Slot盖子 + DiActServo slotCoverServo = slot.getCoverServo(); + slotCoverServo.setEnable(true); + registers.resetAllByModuleId(slotCoverServo.getMid()); + slotCoverServo.activeConfig(); + } + // 打开所有加热盘上的试管架盖: 假设断电时正在准备取试管架或者试管 + for ( ResHeatingTubeRackSlot slot : heatingSlots ) { + slot.coverOpen(); + } this.setStatus(TaskStatus.FINISHED); } diff --git a/src/src/main/resources/device.yml b/src/src/main/resources/device.yml index 2b7ccbf..d6f4bf3 100644 --- a/src/src/main/resources/device.yml +++ b/src/src/main/resources/device.yml @@ -6,6 +6,7 @@ connection : mode : binary # text | hex | binary # device registers registers : + # 加液电机 - {key: "LiquidMotorShaft" , mid : 41, index : 1051, defaultValue : 1} - {key: "LiquidMotorOneCirclePulse" , mid : 41, index : 1052, defaultValue : 10000} - {key: "LiquidMotorOneCirclePulseDenominator" , mid : 41, index : 1053, defaultValue : 18} @@ -16,3 +17,6 @@ registers : - {key: "LiquidMotorRunToZeroDec" , mid : 41, index : 1074, defaultValue : 30} - {key: "LiquidMotorLookZeroEdgeSpeed" , mid : 41, index : 1075, defaultValue : 25} - {key: "LiquidMotorLookZeroEdgeDec" , mid : 41, index : 1076, defaultValue : 30} + # 加热盘 Slot Cover + - {key: "HeatingPlateSlot1CoverServeMotorDefaultVelocity" , mid : 12, index : 1054, defaultValue : 150} + - {key: "HeatingPlateSlot1CoverServeMotorDefaultTorque" , mid : 12, index : 1077, defaultValue : 330} \ No newline at end of file