Browse Source

加热盘初始化

master
sige 2 years ago
parent
commit
3992384b46
  1. 11
      src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDevice.java
  2. 13
      src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceRegisterManager.java
  3. 40
      src/src/main/java/com/my/graphiteDigesterBg/diframe/connection/DiConSerialPort.java
  4. 29
      src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java
  5. 59
      src/src/main/resources/device.yml

11
src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDevice.java

@ -148,6 +148,17 @@ public class DiDevice {
return (String)((Map<String,Object>)config).get(lastKey);
}
// get config
public <T> T getConfig(String path, Class<T> clazz) {
String[] parts = path.split("\\.");
Object config = this.config;
for ( int i=0; i<parts.length-1; i++ ) {
config = ((Map<String,Object>)config).get(parts[i]);
}
String lastKey = parts[parts.length-1];
return clazz.cast(((Map<String,Object>)config).get(lastKey));
}
// execute device command
protected DiCommandResponse call( DiCommand cmd, Integer mid, Object... args ) {
DiCommandRequest request = null;

13
src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceRegisterManager.java

@ -1,8 +1,14 @@
package com.my.graphiteDigesterBg.diframe;
import com.my.graphiteDigesterBg.diframe.connection.DiConSerialPort;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DiDeviceRegisterManager {
// logger
public static final Logger LOG = LoggerFactory.getLogger(DiDeviceRegisterManager.class);
// device instance
private final DiDevice device;
// id => actuator
@ -40,6 +46,7 @@ public class DiDeviceRegisterManager {
public void resetAllByModuleId( Integer mid ) {
for ( DiDeviceRegister register : this.registers.values() ) {
if ( register.mid.equals(mid) ) {
LOG.info("[Register:${}] {}@{} = {}", register.key, register.index, register.mid, register.defaultValue);
this.device.call(DiCommand.MODULE_SET_REG, register.mid, register.index, register.defaultValue);
}
}
@ -49,4 +56,10 @@ public class DiDeviceRegisterManager {
public void get( String id ) {
this.registers.get(id);
}
// get value
public Integer getValue(Integer mid, Integer index) {
DiCommandResponse response = this.device.call(DiCommand.MODULE_GET_REG, mid, index);
return response.readInteger(0);
}
}

40
src/src/main/java/com/my/graphiteDigesterBg/diframe/connection/DiConSerialPort.java

@ -43,12 +43,11 @@ public class DiConSerialPort implements DiDeviceConnection {
@Override
public void connect() {
Environment env = this.device.getEnv();
String path = env.getProperty("device.connection.path");
String path = this.device.getConfig("connection.path");
if ( null == path ) {
throw new RuntimeException("device option 'device.connection.path' is required.");
}
Integer baudRate = env.getProperty("device.connection.baudRate", Integer.class);
Integer baudRate = this.device.getConfig("connection.baudRate", Integer.class);
if ( null == baudRate ) {
throw new RuntimeException("device option 'device.connection.baudRate' is required.");
}
@ -95,7 +94,7 @@ public class DiConSerialPort implements DiDeviceConnection {
}
};
this.receivedDataTimer = new Timer();
Integer frameTimeout = this.device.getEnv().getProperty("device.connection.frameTimeout", Integer.class, 1000);
Integer frameTimeout = this.device.getConfig("connection.frameTimeout", Integer.class);
this.receivedDataTimer.schedule(timerTask, frameTimeout);
}
@ -133,7 +132,7 @@ public class DiConSerialPort implements DiDeviceConnection {
}
}
if ( null == request ) {
throw new RuntimeException("unknown message id: " + messageId);
return ; // 可能是超时了 已经被处理掉了 ~~~
}
request.response = this.receivedData;
request.isResponseReceived = true;
@ -149,6 +148,18 @@ 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);
synchronized ( request ) {
try {
request.wait();
@ -158,4 +169,23 @@ public class DiConSerialPort implements DiDeviceConnection {
}
LOG.info("Command <= {}", DiByteBuffer.toHex(request.response));
}
// handle call timeout
private void handleCallTimeout(DiCommandRequest request) {
if ( request.isResponseReceived ) {
return ;
}
request.timeoutCount ++;
if ( request.timeoutCount > 3 ) {
synchronized ( request ) {
request.errorCode = 8000;
request.notify();
}
return ;
}
byte[] data = request.parameter.array();
this.connection.writeBytes(data, data.length);
LOG.info("Command (Retry:{}) => {} : [{}]", request.timeoutCount, request.parameterText, DiByteBuffer.toHex(request.parameter));
}
}

29
src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java

@ -37,6 +37,35 @@ public class TaskStartReset extends DiTaskBase {
slot.coverOpen();
}
// 搬运机械臂左右移动初始化
DiActMotor transLrMotor = this.getActuator(MyDevice.ACT_TRANSFER_LR_MOTOR, DiActMotor.class);
transLrMotor.setEnable(true);
registers.resetAllByModuleId(transLrMotor.getMid());
transLrMotor.activeConfig();
transLrMotor.reset();
// 搬运机械臂上下移动初始化
DiActMotor transUdMotor = this.getActuator(MyDevice.ACT_TRANSFER_UD_MOTOR, DiActMotor.class);
transUdMotor.setEnable(true);
registers.resetAllByModuleId(transUdMotor.getMid());
transUdMotor.activeConfig();
transUdMotor.reset();
// 加液转盘
DiActMotor liquidPlateMotor = this.getActuator(MyDevice.ACT_LIQUID_PLATE_MOTOR, DiActMotor.class);
liquidPlateMotor.setEnable(true);
registers.resetAllByModuleId(liquidPlateMotor.getMid());
liquidPlateMotor.activeConfig();
liquidPlateMotor.reset();
// 加热盘转盘
DiActMotor heatPlateMotor = this.getActuator(MyDevice.ACT_HEAT_PLATE_MOTOR, DiActMotor.class);
heatPlateMotor.setEnable(true);
registers.resetAllByModuleId(heatPlateMotor.getMid());
heatPlateMotor.activeConfig();
heatPlateMotor.reset();
//
this.setStatus(TaskStatus.FINISHED);
}
}

59
src/src/main/resources/device.yml

@ -2,7 +2,8 @@ connection :
class : com.my.graphiteDigesterBg.diframe.connection.DiConSerialPort
path : COM7
baudRate : 921600
frameTimeout : 1000
frameTimeout : 200
callTimeout : 5000
mode : binary # text | hex | binary
# device registers
registers :
@ -17,6 +18,60 @@ 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}
- {key: "LiquidMotorStepMotorIHold" , mid: 41, index: 1058, defaultValue: 1 }
- {key: "LiquidMotorStepMotorIRun" , mid: 41, index: 1059, defaultValue: 2 }
# 加热盘 Slot Cover
- {key: "HeatingPlateSlot1CoverServeMotorDefaultVelocity" , mid : 12, index : 1054, defaultValue : 150}
- {key: "HeatingPlateSlot1CoverServeMotorDefaultTorque" , mid : 12, index : 1077, defaultValue : 330}
- {key: "HeatingPlateSlot1CoverServeMotorDefaultTorque" , mid : 12, index : 1077, defaultValue : 330}
# 搬运机械臂左右
- {key: "TransferArmLRMotorShaft" , mid : 31, index : 1051, defaultValue : 1}
- {key: "TransferArmLRMotorOneCirclePulse" , mid : 31, index : 1052, defaultValue : 10000}
- {key: "TransferArmLRMotorOneCirclePulseDenominator" , mid : 31, index : 1053, defaultValue : 18}
- {key: "TransferArmLRMotorDefaultVelocity" , mid : 31, index : 1054, defaultValue : 40}
- {key: "TransferArmLRMotorDefaultAcc" , mid : 31, index : 1055, defaultValue : 1}
- {key: "TransferArmLRMotorDefaultDec" , mid : 31, index : 1056, defaultValue : 1}
- {key: "TransferArmLRMotorRunToZeroSpeed" , mid : 31, index : 1073, defaultValue : 50}
- {key: "TransferArmLRMotorRunToZeroDec" , mid : 31, index : 1074, defaultValue : 30}
- {key: "TransferArmLRMotorLookZeroEdgeSpeed" , mid : 31, index : 1075, defaultValue : 25}
- {key: "TransferArmLRMotorLookZeroEdgeDec" , mid : 31, index : 1076, defaultValue : 30}
- {key: "TransferArmLRMotorStepMotorIHold" , mid : 31, index : 1058, defaultValue : 1}
- {key: "TransferArmLRMotorStepMotorIRun" , mid : 31, index : 1059, defaultValue : 2}
# 搬运机械臂上下
- {key: "TransferArmUDMotorShaft" , mid : 21, index : 1051, defaultValue : 0}
- {key: "TransferArmUDMotorOneCirclePulse" , mid : 21, index : 1052, defaultValue : 40}
- {key: "TransferArmUDMotorOneCirclePulseDenominator" , mid : 21, index : 1053, defaultValue : 1}
- {key: "TransferArmUDMotorDefaultVelocity" , mid : 21, index : 1054, defaultValue : 300}
- {key: "TransferArmUDMotorDefaultAcc" , mid : 21, index : 1055, defaultValue : 100}
- {key: "TransferArmUDMotorDefaultDec" , mid : 21, index : 1056, defaultValue : 100}
- {key: "TransferArmUDMotorRunToZeroSpeed" , mid : 21, index : 1073, defaultValue : 50}
- {key: "TransferArmUDMotorRunToZeroDec" , mid : 21, index : 1074, defaultValue : 100}
- {key: "TransferArmUDMotorLookZeroEdgeSpeed" , mid : 21, index : 1075, defaultValue : 25}
- {key: "TransferArmUDMotorLookZeroEdgeDec" , mid : 21, index : 1076, defaultValue : 100}
- {key: "TransferArmUDMotorStepMotorIHold" , mid : 21, index : 1058, defaultValue : 1}
- {key: "TransferArmUDMotorStepMotorIRun" , mid : 21, index : 1059, defaultValue : 5}
# 加液转盘
- {key: "LiquidPlateMotorShaft" , mid : 51, index : 1051, defaultValue : 1}
- {key: "LiquidPlateMotorOneCirclePulse" , mid : 51, index : 1052, defaultValue : 10000}
- {key: "LiquidPlateMotorOneCirclePulseDenominator" , mid : 51, index : 1053, defaultValue : 18}
- {key: "LiquidPlateMotorDefaultVelocity" , mid : 51, index : 1054, defaultValue : 40}
- {key: "LiquidPlateMotorDefaultAcc" , mid : 51, index : 1055, defaultValue : 2}
- {key: "LiquidPlateMotorDefaultDec" , mid : 51, index : 1056, defaultValue : 2}
- {key: "LiquidPlateMotorRunToZeroSpeed" , mid : 51, index : 1073, defaultValue : 50}
- {key: "LiquidPlateMotorRunToZeroDec" , mid : 51, index : 1074, defaultValue : 30}
- {key: "LiquidPlateMotorLookZeroEdgeSpeed" , mid : 51, index : 1075, defaultValue : 25}
- {key: "LiquidPlateMotorLookZeroEdgeDec" , mid : 51, index : 1076, defaultValue : 30}
- {key: "LiquidPlateMotorStepMotorIHold" , mid : 51, index : 1058, defaultValue : 1}
- {key: "LiquidPlateMotorStepMotorIRun" , mid : 51, index : 1059, defaultValue : 2}
# 加热盘
- {key: "HeatingPlateMotorShaft" , mid : 11, index : 1051, defaultValue : 0}
- {key: "HeatingPlateMotorOneCirclePulse" , mid : 11, index : 1052, defaultValue : 10000}
- {key: "HeatingPlateMotorOneCirclePulseDenominator" , mid : 11, index : 1053, defaultValue : 30}
- {key: "HeatingPlateMotorDefaultVelocity" , mid : 11, index : 1054, defaultValue : 150}
- {key: "HeatingPlateMotorDefaultAcc" , mid : 11, index : 1055, defaultValue : 10}
- {key: "HeatingPlateMotorDefaultDec" , mid : 11, index : 1056, defaultValue : 10}
- {key: "HeatingPlateMotorRunToZeroSpeed" , mid : 11, index : 1073, defaultValue : 50}
- {key: "HeatingPlateMotorRunToZeroDec" , mid : 11, index : 1074, defaultValue : 30}
- {key: "HeatingPlateMotorLookZeroEdgeSpeed" , mid : 11, index : 1075, defaultValue : 25}
- {key: "HeatingPlateMotorLookZeroEdgeDec" , mid : 11, index : 1076, defaultValue : 30}
- {key: "HeatingPlateMotorStepMotorIHold" , mid : 11, index : 1058, defaultValue : 0}
- {key: "HeatingPlateMotorStepMotorIRun" , mid : 11, index : 1059, defaultValue : 15}
Loading…
Cancel
Save