From 93ec1188a263ed009cd9cbf8fa68138ecbb6c491 Mon Sep 17 00:00:00 2001 From: sige Date: Tue, 23 Jan 2024 18:58:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../my/graphiteDigesterBg/MyApplicationRunner.java | 4 +-- .../java/com/my/graphiteDigesterBg/MyDevice.java | 2 +- .../diframe/DiCommandRequest.java | 4 +++ .../diframe/connection/DiConSerialPort.java | 33 ++++++++++++++-------- .../my/graphiteDigesterBg/task/TaskDigestion.java | 6 ---- .../my/graphiteDigesterBg/task/TaskStartReset.java | 17 ++++++++++- src/src/main/resources/application.yml | 14 +-------- src/src/main/resources/device.yml | 12 ++++++++ 8 files changed, 57 insertions(+), 35 deletions(-) diff --git a/src/src/main/java/com/my/graphiteDigesterBg/MyApplicationRunner.java b/src/src/main/java/com/my/graphiteDigesterBg/MyApplicationRunner.java index c59fb13..6f76769 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/MyApplicationRunner.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/MyApplicationRunner.java @@ -63,7 +63,7 @@ public class MyApplicationRunner implements ApplicationRunner { actuators.register(MyDevice.ACT_TRANSFER_UD_MOTOR, new DiActMotor(){{ mid = 21; }}); - actuators.register(MyDevice.ACT_TRANSFER_CLIP_SERVO, new DiActMotor(){{ + actuators.register(MyDevice.ACT_TRANSFER_CLIP_SERVO, new DiActServo(){{ mid = 22; }}); actuators.register(MyDevice.ACT_TRANSFER_LR_MOTOR, new DiActMotor(){{ @@ -75,7 +75,7 @@ public class MyApplicationRunner implements ApplicationRunner { actuators.register(MyDevice.ACT_LIQUID_PLATE_MOTOR, new DiActMotor(){{ mid = 51; }}); - actuators.register(MyDevice.ACT_LIQUID_PERISTALTIC_PUMP, new DiActPeristalticPump(){{ + actuators.register(MyDevice.ACT_LIQUID_PERISTALTIC_PUMP_0, new DiActPeristalticPump(){{ mid = 61; }}); } diff --git a/src/src/main/java/com/my/graphiteDigesterBg/MyDevice.java b/src/src/main/java/com/my/graphiteDigesterBg/MyDevice.java index 8edd48e..c6ffae7 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/MyDevice.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/MyDevice.java @@ -8,7 +8,7 @@ public class MyDevice extends DiDevice { public static String ACT_TRANSFER_CLIP_SERVO = "transferClipServo"; public static String ACT_LIQUID_MOTOR = "liquidMotor"; public static String ACT_LIQUID_PLATE_MOTOR = "liquidPlateMotor"; - public static String ACT_LIQUID_PERISTALTIC_PUMP = "liquidPeristalticPump"; + public static String ACT_LIQUID_PERISTALTIC_PUMP_0 = "liquidPeristalticPump_0"; public static String IO_HEAT_SLOT_01_HEATER_01 = "heatSlot1Heater1"; public static String IO_HEAT_SLOT_01_HEATER_02 = "heatSlot1Heater2"; diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiCommandRequest.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiCommandRequest.java index 465ef7c..9b794be 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiCommandRequest.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiCommandRequest.java @@ -1,5 +1,7 @@ package com.my.graphiteDigesterBg.diframe; import java.nio.ByteBuffer; +import java.util.Timer; + public class DiCommandRequest { // message id public short id; @@ -15,4 +17,6 @@ public class DiCommandRequest { public Boolean isResponseReceived = false; // timeout count public Integer timeoutCount = 0; + // timeout timer + public Timer timeoutTimer = null; } diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/connection/DiConSerialPort.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/connection/DiConSerialPort.java index 7a1e8d8..7a98e22 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/diframe/connection/DiConSerialPort.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/connection/DiConSerialPort.java @@ -136,6 +136,10 @@ public class DiConSerialPort implements DiDeviceConnection { } request.response = this.receivedData; request.isResponseReceived = true; + if ( null != request.timeoutTimer ) { + request.timeoutTimer.cancel(); + request.timeoutTimer = null; + } this.receivedData = null; synchronized ( request ) { request.notify(); @@ -148,18 +152,7 @@ public class DiConSerialPort implements DiDeviceConnection { byte[] data = request.parameter.array(); this.connection.writeBytes(data, data.length); LOG.info("Command => {} : [{}]", request.parameterText, DiByteBuffer.toHex(request.parameter)); - - // setup timeout timer - TimerTask callTimeoutTimerTask = new TimerTask() { - @Override - public void run() { - DiConSerialPort.this.handleCallTimeout(request); - } - }; - Timer callTimeoutTimer = new Timer(); - Integer callTimeout = this.device.getConfig("connection.callTimeout", Integer.class); - callTimeoutTimer.schedule(callTimeoutTimerTask, callTimeout); - + this.setupRequestTimeoutTimer(request); synchronized ( request ) { try { request.wait(); @@ -175,9 +168,11 @@ public class DiConSerialPort implements DiDeviceConnection { if ( request.isResponseReceived ) { return ; } + request.timeoutCount ++; if ( request.timeoutCount > 3 ) { synchronized ( request ) { + request.timeoutTimer = null; request.errorCode = 8000; request.notify(); } @@ -187,5 +182,19 @@ public class DiConSerialPort implements DiDeviceConnection { byte[] data = request.parameter.array(); this.connection.writeBytes(data, data.length); LOG.info("Command (Retry:{}) => {} : [{}]", request.timeoutCount, request.parameterText, DiByteBuffer.toHex(request.parameter)); + this.setupRequestTimeoutTimer(request); + } + + // setup request timeout timer + private void setupRequestTimeoutTimer(DiCommandRequest request) { + TimerTask callTimeoutTimerTask = new TimerTask() { + @Override + public void run() { + DiConSerialPort.this.handleCallTimeout(request); + } + }; + request.timeoutTimer = new Timer(); + Integer callTimeout = this.device.getConfig("connection.callTimeout", Integer.class); + request.timeoutTimer.schedule(callTimeoutTimerTask, callTimeout); } } diff --git a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskDigestion.java b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskDigestion.java index 1c19339..3265595 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskDigestion.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskDigestion.java @@ -1,16 +1,10 @@ package com.my.graphiteDigesterBg.task; -import com.my.graphiteDigesterBg.MyDevice; import com.my.graphiteDigesterBg.diframe.DiTaskBase; import com.my.graphiteDigesterBg.diframe.Task; -import com.my.graphiteDigesterBg.diframe.actuator.DiActPeristalticPump; @Task(name="Digestion") public class TaskDigestion extends DiTaskBase { @Override public void run() { - DiActPeristalticPump peristalticPump = (DiActPeristalticPump)this.getDevice().getActuators().get(MyDevice.ACT_LIQUID_PERISTALTIC_PUMP); - peristalticPump.setEnable(true); - peristalticPump.rotate(); - System.out.println("TaskDigestion.run()"); this.setStatus(TaskStatus.FINISHED); } 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 6135465..6658972 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,7 @@ 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.DiActPeristalticPump; import com.my.graphiteDigesterBg.diframe.actuator.DiActServo; import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlot; import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager; @@ -65,7 +66,21 @@ public class TaskStartReset extends DiTaskBase { heatPlateMotor.activeConfig(); heatPlateMotor.reset(); - // + // 试管夹爪舵机 + DiActServo transferClipServo = this.getActuator(MyDevice.ACT_TRANSFER_CLIP_SERVO, DiActServo.class); + transferClipServo.setEnable(true); + registers.resetAllByModuleId(transferClipServo.getMid()); + transferClipServo.activeConfig(); + + // 蠕动泵 + for (int i = 0; i<1; i++) { + String pumpKey = "liquidPeristalticPump_" + Integer.toString(i); + DiActPeristalticPump pump = this.getActuator(pumpKey, DiActPeristalticPump.class); + pump.setEnable(true); + registers.resetAllByModuleId(pump.getMid()); + pump.activeConfig(); + } + this.setStatus(TaskStatus.FINISHED); } } diff --git a/src/src/main/resources/application.yml b/src/src/main/resources/application.yml index 8fc4b7a..7ca618a 100644 --- a/src/src/main/resources/application.yml +++ b/src/src/main/resources/application.yml @@ -4,16 +4,4 @@ device : path : COM7 baudRate : 921600 frameTimeout : 1000 - mode : binary # text | hex | binary - # device registers - registers : ["1", "2"] -# - {name: "LiquidMotorShaft" , mid : 41, index : 1051, defaultValue : 1} -# - {name: "LiquidMotorOneCirclePulse" , mid : 41, index : 1052, defaultValue : 10000} -# - {name: "LiquidMotorOneCirclePulseDenominator" , mid : 41, index : 1053, defaultValue : 18} -# - {name: "LiquidMotorDefaultVelocity" , mid : 41, index : 1054, defaultValue : 40} -# - {name: "LiquidMotorDefaultAcc" , mid : 41, index : 1055, defaultValue : 2} -# - {name: "LiquidMotorDefaultDec" , mid : 41, index : 1056, defaultValue : 2} -# - {name: "LiquidMotorRunToZeroSpeed" , mid : 41, index : 1073, defaultValue : 50} -# - {name: "LiquidMotorRunToZeroDec" , mid : 41, index : 1074, defaultValue : 30} -# - {name: "LiquidMotorLookZeroEdgeSpeed" , mid : 41, index : 1075, defaultValue : 25} -# - {name: "LiquidMotorLookZeroEdgeDec" , mid : 41, index : 1076, defaultValue : 30} + mode : binary # text | hex | binary \ No newline at end of file diff --git a/src/src/main/resources/device.yml b/src/src/main/resources/device.yml index bdd5bd7..ee7ea05 100644 --- a/src/src/main/resources/device.yml +++ b/src/src/main/resources/device.yml @@ -75,3 +75,15 @@ registers : - {key: "HeatingPlateMotorLookZeroEdgeDec" , mid : 11, index : 1076, defaultValue : 30} - {key: "HeatingPlateMotorStepMotorIHold" , mid : 11, index : 1058, defaultValue : 0} - {key: "HeatingPlateMotorStepMotorIRun" , mid : 11, index : 1059, defaultValue : 15} + # 试管夹爪舵机 + - {key: "TransferClipServeMotorDefaultVelocity" , mid : 22, index : 1054, defaultValue : 400} + - {key: "TransferClipServeMotorDefaultTorque" , mid : 22, index : 1077, defaultValue : 300} + # 加酸蠕动泵 + - {key: "LiquidPeristalticPump0MotorShaft" , mid : 61, index : 1051, defaultValue : 0} + - {key: "LiquidPeristalticPump0MotorOneCirclePulse" , mid : 61, index : 1052, defaultValue : 100} + - {key: "LiquidPeristalticPump0MotorOneCirclePulseDenominator" , mid : 61, index : 1053, defaultValue : 1} + - {key: "LiquidPeristalticPump0MotorDefaultVelocity" , mid : 61, index : 1054, defaultValue : 500} + - {key: "LiquidPeristalticPump0MotorDefaultAcc" , mid : 61, index : 1055, defaultValue : 300} + - {key: "LiquidPeristalticPump0MotorDefaultDec" , mid : 61, index : 1056, defaultValue : 300} + - {key: "LiquidPeristalticPump0MotorStepMotorIHold" , mid : 61, index : 1058, defaultValue : 0} + - {key: "LiquidPeristalticPump0MotorStepMotorIRun" , mid : 61, index : 1059, defaultValue : 4}