sige 2 years ago
parent
commit
f487086506
  1. 63
      src/src/main/java/com/my/graphiteDigesterBg/MyApplicationRunner.java
  2. 13
      src/src/main/java/com/my/graphiteDigesterBg/MyDevice.java
  3. 4
      src/src/main/java/com/my/graphiteDigesterBg/diframe/DiApplicationRunner.java
  4. 1
      src/src/main/java/com/my/graphiteDigesterBg/diframe/DiCommand.java
  5. 1
      src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceIO.java
  6. 33
      src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceIOManager.java
  7. 13
      src/src/main/java/com/my/graphiteDigesterBg/diframe/api/DiApiDevice.java
  8. 11
      src/src/main/resources/device.yml

63
src/src/main/java/com/my/graphiteDigesterBg/MyApplicationRunner.java

@ -1,63 +0,0 @@
package com.my.graphiteDigesterBg;
import com.my.graphiteDigesterBg.diframe.DiDevice;
import com.my.graphiteDigesterBg.diframe.DiDeviceActuatorManager;
import com.my.graphiteDigesterBg.diframe.DiDeviceIO;
import com.my.graphiteDigesterBg.diframe.DiDeviceIOManager;
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.diframe.util.DiClassHelper;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Order(1)
@Component
public class MyApplicationRunner implements ApplicationRunner {
@Resource
private DiDevice device;
@Override
public void run(ApplicationArguments args) throws Exception {
this.device.getRegisters().setup();
this.device.getActuators().setup();
this.setupIO();
this.setupActuators();
}
// setup IO
private void setupIO() {
DiDeviceIOManager io = this.device.getIO();
io.register(MyDevice.IO_HEAT_SLOT_01_HEATER_01, new DiDeviceIO(){{
mid = 70;
index = 0;
}});
io.register(MyDevice.IO_HEAT_SLOT_01_HEATER_02, new DiDeviceIO(){{
mid = 70;
index = 1;
}});
io.register(MyDevice.IO_HEAT_SLOT_01_HEATER_03, new DiDeviceIO(){{
mid = 70;
index = 5;
}});
io.register(MyDevice.IO_HEAT_SLOT_01_HEATER_04, new DiDeviceIO(){{
mid = 70;
index = 6;
}});
io.register(MyDevice.IO_AIR_COMPRESSOR, new DiDeviceIO(){{
mid = 70;
index = 4;
}});
}
// setup actuators
private void setupActuators() {
DiDeviceActuatorManager actuators = this.device.getActuators();
actuators.register(MyDevice.ACT_HEAT_SLOT_01_COVER_SERVO, new DiActServo(){{
mid = 12;
}});
}
}

13
src/src/main/java/com/my/graphiteDigesterBg/MyDevice.java

@ -1,9 +1,5 @@
package com.my.graphiteDigesterBg;
import com.my.graphiteDigesterBg.diframe.DiDevice;
import java.util.HashMap;
import java.util.Map;
public class MyDevice extends DiDevice {
public static String ACT_HEAT_PLATE_MOTOR = "HeatingPlateMotor";
public static String ACT_LIQUID_PLATE_MOTOR = "LiquidPlateMotor";
@ -20,18 +16,9 @@ public class MyDevice extends DiDevice {
public static String ACT_HEAT_SLOT_01_COVER_SERVO = "heatSlot0CoverServo";
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";
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";
}

4
src/src/main/java/com/my/graphiteDigesterBg/diframe/DiApplicationRunner.java

@ -12,6 +12,10 @@ public class DiApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
this.device.getRegisters().setup();
this.device.getActuators().setup();
this.device.getIO().setup();
this.device.getTaskManager().scanTaskClasses("com.my.graphiteDigesterBg.task");
this.device.getTaskManager().scanTaskStepClasses("com.my.graphiteDigesterBg.step");
this.device.getResource().scanResourceManagerClasses("com.my.graphiteDigesterBg.resource");

1
src/src/main/java/com/my/graphiteDigesterBg/diframe/DiCommand.java

@ -4,6 +4,7 @@ public enum DiCommand {
MODULE_GET_STATUS("module_get_status", 0x0104),
MODULE_SET_REG("module_set_reg", 0x0105),
MODULE_GET_REG("module_get_reg", 0x0106),
MODULE_READ_IO("module_readio", 0x0107),
MODULE_ENABLE("module_enable", 0x0114),
MOTOR_EASY_MOVE_BY("motor_easy_move_by", 0x0212),
MOTOR_EASY_MOVE_TO("motor_easy_move_to", 0x0213),

1
src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceIO.java

@ -1,5 +1,6 @@
package com.my.graphiteDigesterBg.diframe;
public class DiDeviceIO {
protected String key;
protected Integer mid;
protected Integer index;
}

33
src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceIOManager.java

@ -1,5 +1,6 @@
package com.my.graphiteDigesterBg.diframe;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DiDeviceIOManager {
// device instance
@ -13,13 +14,33 @@ public class DiDeviceIOManager {
this.ios = new HashMap<String, DiDeviceIO>();
}
// register actuator
public void register( String id, DiDeviceIO io ) {
this.ios.put( id, io );
// setup
public void setup() {
Object config = this.device.getConfig().get("io");
if ( config == null ) {
return;
}
// get actuator
public void get( String id ) {
this.ios.get(id);
if ( !(config instanceof List) ) {
throw new RuntimeException("Invalid io config");
}
List<Map<String,Object>> ioList = (List<Map<String, Object>>) config;
for ( Map<String,Object> item : ioList ) {
DiDeviceIO io = new DiDeviceIO();
io.key = (String)item.get("key");
io.mid = (Integer)item.get("mid");
io.index = (Integer)item.get("index");
this.ios.put(io.key, io);
}
}
// get io value
public Integer getValue( String key ) {
DiDeviceIO io = this.ios.get(key);
var response = this.device.call(DiCommand.MODULE_READ_IO, io.mid);
Integer value = response.readInteger(0);
value = (value >> io.index) & 0x01;
return value;
}
}

13
src/src/main/java/com/my/graphiteDigesterBg/diframe/api/DiApiDevice.java

@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class DiApiDevice extends DiApiControllerBase {
@ -50,6 +51,18 @@ public class DiApiDevice extends DiApiControllerBase {
return this.success(result);
}
@ResponseBody
@PostMapping("/api/device/io-get-values-by-key-list")
public DiApiResponse getIOValuesByKeyList( @RequestBody Map<String, Object> params ) {
List<String> keys = (List<String>)params.get("keys");
var io = this.device.getIO();
Map<String, Integer> result = new HashMap<>();
for ( String key : keys ) {
result.put(key, io.getValue(key));
}
return this.success(result);
}
public void pause() {}
public void resume() {}
}

11
src/src/main/resources/device.yml

@ -345,6 +345,17 @@ actuators :
stepMotorIHold: 0
stepMotorIRun: 4
# device io
io :
- {key: "AcidLiquidLevelSensor0", mid: 70, index: 0}
- {key: "AcidLiquidLevelSensor1", mid: 70, index: 1}
- {key: "AcidLiquidLevelSensor2", mid: 70, index: 2}
- {key: "AcidLiquidLevelSensor3", mid: 70, index: 3}
- {key: "AcidLiquidLevelSensor4", mid: 70, index: 4}
- {key: "AcidLiquidLevelSensor5", mid: 70, index: 5}
- {key: "AcidLiquidLevelSensor6", mid: 70, index: 6}
- {key: "AcidLiquidLevelSensor7", mid: 70, index: 7}
# device registers
registers :
# 加热盘 Slot Cover

Loading…
Cancel
Save