Browse Source

fix:初始化设备应该检测是否是虚拟模式

master
白凤吉 3 months ago
parent
commit
45a29b0e29
  1. 3
      src/main/java/com/iflytop/gd/app/cmd/DoorCloseCommand.java
  2. 3
      src/main/java/com/iflytop/gd/app/cmd/SolutionAddCommand.java
  3. 5
      src/main/java/com/iflytop/gd/app/service/CraftsStepService.java
  4. 58
      src/main/java/com/iflytop/gd/app/service/DeviceCommandUtilService.java
  5. 15
      src/main/java/com/iflytop/gd/app/service/DeviceInitService.java
  6. 24
      src/main/java/com/iflytop/gd/hardware/type/IO/InputIOMId.java
  7. 68
      src/main/resources/init/zapp_sub_module_reg_initial_value.csv

3
src/main/java/com/iflytop/gd/app/cmd/DoorCloseCommand.java

@ -6,6 +6,7 @@ import com.iflytop.gd.app.service.DeviceCommandUtilService;
import com.iflytop.gd.app.service.DevicePositionService; import com.iflytop.gd.app.service.DevicePositionService;
import com.iflytop.gd.common.annotation.CommandMapping; import com.iflytop.gd.common.annotation.CommandMapping;
import com.iflytop.gd.common.enums.data.DevicePositionCode; import com.iflytop.gd.common.enums.data.DevicePositionCode;
import com.iflytop.gd.hardware.service.GDDeviceStatusService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -22,12 +23,14 @@ import java.util.concurrent.CompletableFuture;
public class DoorCloseCommand extends BaseCommandHandler { public class DoorCloseCommand extends BaseCommandHandler {
private final DeviceCommandUtilService deviceCommandUtilService; private final DeviceCommandUtilService deviceCommandUtilService;
private final DevicePositionService devicePositionService; private final DevicePositionService devicePositionService;
private final GDDeviceStatusService gDDeviceStatusService;
@Override @Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) { public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
return runAsync(() -> { return runAsync(() -> {
Double doorOpenDistance = devicePositionService.getPosition(DevicePositionCode.doorClose).getDistance(); Double doorOpenDistance = devicePositionService.getPosition(DevicePositionCode.doorClose).getDistance();
deviceCommandUtilService.doorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), doorOpenDistance); deviceCommandUtilService.doorMove(cmdDTO.getCommandId(), cmdDTO.getCommand(), doorOpenDistance);
//TODO 关门口判断加液模块是否有托盘
}); });
} }
} }

3
src/main/java/com/iflytop/gd/app/cmd/SolutionAddCommand.java

@ -44,8 +44,7 @@ public class SolutionAddCommand extends BaseCommandHandler {
if (acidPumpDevice == null) { if (acidPumpDevice == null) {
throw new AppException(ResultCode.CRAFT_CONTAINER_NOT_FOUND); throw new AppException(ResultCode.CRAFT_CONTAINER_NOT_FOUND);
} }
Point2D tubePoint2D = deviceCommandUtilService.getPointByTubeNum(tubeNum);//根据试管编号获取点位
deviceCommandUtilService.dualRobotMovePoint(cmdDTO.getCommandId(), cmdDTO.getCommand(), tubePoint2D);//移动加液机械臂到指定试管点位
deviceCommandUtilService.dualRobotMovePoint(tubeNum);//移动加液机械臂到指定试管点位
deviceCommandUtilService.acidPumpMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), acidPumpDevice, volume);//添加溶液 deviceCommandUtilService.acidPumpMoveBy(cmdDTO.getCommandId(), cmdDTO.getCommand(), acidPumpDevice, volume);//添加溶液
} }
} }

5
src/main/java/com/iflytop/gd/app/service/CraftsStepService.java

@ -126,9 +126,8 @@ public class CraftsStepService {
if (acidPumpDevice == null) { if (acidPumpDevice == null) {
throw new AppException(ResultCode.CRAFT_CONTAINER_NOT_FOUND); throw new AppException(ResultCode.CRAFT_CONTAINER_NOT_FOUND);
} }
Point2D tubePoint2D = deviceCommandUtilService.getPointByTubeNum(tubeNum);//根据试管编号获取点位
webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatId, "移动加液机械臂到指定试管点位", tubePoint2D));
deviceCommandUtilService.dualRobotMovePoint(tubePoint2D);//移动加液机械臂到指定试管点位
webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatId, "移动加液机械臂到指定试管", tubeNum));
deviceCommandUtilService.dualRobotMovePoint(tubeNum);//移动加液机械臂到指定试管
webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatId, "添加溶液", addLiquid)); webSocketService.pushCraftsDebug(CraftsDebugGenerator.generateJson(heatId, "添加溶液", addLiquid));
deviceCommandUtilService.acidPumpMoveBy(acidPumpDevice, volume);//添加溶液 deviceCommandUtilService.acidPumpMoveBy(acidPumpDevice, volume);//添加溶液
} }

58
src/main/java/com/iflytop/gd/app/service/DeviceCommandUtilService.java

@ -10,6 +10,8 @@ import com.iflytop.gd.common.enums.AcidPumpDeviceCode;
import com.iflytop.gd.common.enums.HeatModuleCode; import com.iflytop.gd.common.enums.HeatModuleCode;
import com.iflytop.gd.common.enums.cmd.CmdAxis; import com.iflytop.gd.common.enums.cmd.CmdAxis;
import com.iflytop.gd.common.enums.data.DevicePositionCode; import com.iflytop.gd.common.enums.data.DevicePositionCode;
import com.iflytop.gd.hardware.type.LiquidDistributionArmDriver;
import com.iflytop.gd.hardware.type.Servo.LiquidArmMId;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -22,6 +24,7 @@ import java.util.concurrent.TimeUnit;
public class DeviceCommandUtilService { public class DeviceCommandUtilService {
private final DeviceCommandService deviceCommandService; private final DeviceCommandService deviceCommandService;
private final DevicePositionService devicePositionService; private final DevicePositionService devicePositionService;
private final LiquidDistributionArmDriver liquidDistributionArmDriver;
/** /**
* 门电机移动 * 门电机移动
@ -287,39 +290,46 @@ public class DeviceCommandUtilService {
commandWait(deviceCommandFuture); commandWait(deviceCommandFuture);
} }
/**
* 双轴械臂 移动至指定点
*/
public void dualRobotMovePoint(Point2D point2D) throws Exception {
dualRobotMovePoint(null, null, point2D);
}
// /**
// * 双轴械臂 移动至指定点
// */
// public void dualRobotMovePoint(Point2D point2D) throws Exception {
// dualRobotMovePoint(null, null, point2D);
// }
/**
* 双轴械臂 移动至指定点
*/
public void dualRobotMovePoint(String cmdId, String cmdCode, Point2D point2D) throws Exception {
DeviceCommandBundle deviceCommand = DeviceCommandGenerator.dualRobotMovePoint(point2D.getX(), point2D.getY());
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand);
commandWait(deviceCommandFuture);
}
// /**
// * 双轴械臂 移动至指定点
// */
// public void dualRobotMovePoint(String cmdId, String cmdCode, Point2D point2D) throws Exception {
// DeviceCommandBundle deviceCommand = DeviceCommandGenerator.dualRobotMovePoint(point2D.getX(), point2D.getY());
// CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand);
// commandWait(deviceCommandFuture);
// }
/** /**
* 加液机械臂回原点
* 双轴械臂 移动至指定试管
*/ */
public void dualRobotOrigin() throws Exception {
dualRobotOrigin(null, null);
public void dualRobotMovePoint(int index) throws Exception {
liquidDistributionArmDriver.liquidDistributionArmMoveTo(LiquidArmMId.LiquidDistributionArm, index);
} }
/** /**
* 加液机械臂回原点 * 加液机械臂回原点
*/ */
public void dualRobotOrigin(String cmdId, String cmdCode) throws Exception {
DeviceCommandBundle dualRobotJoint1OriginDeviceCommand = DeviceCommandGenerator.dualRobotJoint1Origin();
DeviceCommandBundle dualRobotJoint2OriginDeviceCommand = DeviceCommandGenerator.dualRobotJoint2Origin();
CommandFuture dualRobotJoint1OriginDeviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, dualRobotJoint1OriginDeviceCommand);
CommandFuture dualRobotJoint2OriginDeviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, dualRobotJoint2OriginDeviceCommand);
commandWait(dualRobotJoint1OriginDeviceCommandFuture, dualRobotJoint2OriginDeviceCommandFuture);
}
public void dualRobotOrigin() throws Exception {
liquidDistributionArmDriver.liquidDistributionArmMoveTo(LiquidArmMId.LiquidDistributionArm, 0);
}
// /**
// * 加液机械臂回原点
// */
// public void dualRobotOrigin(String cmdId, String cmdCode) throws Exception {
// DeviceCommandBundle dualRobotJoint1OriginDeviceCommand = DeviceCommandGenerator.dualRobotJoint1Origin();
// DeviceCommandBundle dualRobotJoint2OriginDeviceCommand = DeviceCommandGenerator.dualRobotJoint2Origin();
// CommandFuture dualRobotJoint1OriginDeviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, dualRobotJoint1OriginDeviceCommand);
// CommandFuture dualRobotJoint2OriginDeviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, dualRobotJoint2OriginDeviceCommand);
// commandWait(dualRobotJoint1OriginDeviceCommandFuture, dualRobotJoint2OriginDeviceCommandFuture);
// }
/** /**
* 加液机械臂回原点 * 加液机械臂回原点

15
src/main/java/com/iflytop/gd/app/service/DeviceInitService.java

@ -9,7 +9,9 @@ import com.iflytop.gd.common.enums.ContainerCode;
import com.iflytop.gd.common.enums.ContainerType; import com.iflytop.gd.common.enums.ContainerType;
import com.iflytop.gd.common.enums.HeatModuleCode; import com.iflytop.gd.common.enums.HeatModuleCode;
import com.iflytop.gd.hardware.comm.can.A8kCanBusService; import com.iflytop.gd.hardware.comm.can.A8kCanBusService;
import com.iflytop.gd.hardware.exception.HardwareException;
import com.iflytop.gd.hardware.type.MId; import com.iflytop.gd.hardware.type.MId;
import com.iflytop.gd.hardware.type.RegIndex;
import com.opencsv.CSVReader; import com.opencsv.CSVReader;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -35,6 +37,9 @@ public class DeviceInitService {
} }
public void initDeviceSetData() { public void initDeviceSetData() {
if (deviceStateService.getDeviceState().isVirtual()) {
return;
}
try { try {
Thread.sleep(2000); Thread.sleep(2000);
String filePath = Paths.get("src", "main", "resources", "init", "zapp_sub_module_reg_initial_value.csv").toString(); String filePath = Paths.get("src", "main", "resources", "init", "zapp_sub_module_reg_initial_value.csv").toString();
@ -51,14 +56,20 @@ public class DeviceInitService {
} }
reader.close(); reader.close();
} catch (Exception e) { } catch (Exception e) {
initDeviceSetData();
log.error("设备初始化失败", e); log.error("设备初始化失败", e);
} }
} }
public void sendToDevice(DeviceInitializationData data) { public void sendToDevice(DeviceInitializationData data) {
System.out.println("Sending to device: " + data.getMid() + " - " + data.getRegIndex() + " = " + data.getRegInitVal());
// canBusService.moduleSetReg(MId.valueOf(data.getMid()));
try {
log.info("初始化设备: {} - {} = {}", data.getMid(), data.getRegIndex(), data.getRegInitVal());
canBusService.moduleSetReg(MId.valueOf(data.getMid()), RegIndex.valueOf(data.getRegIndex()), data.getRegInitVal());
} catch (HardwareException e) {
log.error("初始化设备错误: {} - {} = {}", data.getMid(), data.getRegIndex(), data.getRegInitVal());
throw new RuntimeException(e);
}
} }
public void initDeviceState() { public void initDeviceState() {

24
src/main/java/com/iflytop/gd/hardware/type/IO/InputIOMId.java

@ -3,18 +3,18 @@ package com.iflytop.gd.hardware.type.IO;
import com.iflytop.gd.hardware.type.MId; import com.iflytop.gd.hardware.type.MId;
public enum InputIOMId { public enum InputIOMId {
Heater_CAP1_EXSIT("Heater_CAP1_EXSIT [ 加热拍子1到位 ]", MId.IO1_IO, 0,false),
Heater_CAP2_EXSIT("Heater_CAP2_EXSIT [ 加热拍子2到位 ]", MId.IO1_IO, 1,false),
Heater_CAP3_EXSIT("Heater_CAP3_EXSIT [ 加热拍子3到位 ]", MId.IO1_IO, 2,false),
Heater_CAP4_EXSIT("Heater_CAP4_EXSIT [ 加热拍子4到位 ]", MId.IO1_IO, 3,false),
Heater_CAP5_EXSIT("Heater_CAP5_EXSIT [ 加热拍子5到位 ]", MId.IO1_IO, 4,false),
Heater_CAP6_EXSIT("Heater_CAP6_EXSIT [ 加热拍子6到位 ]", MId.IO1_IO, 5,false),
Heater_TUBE1_EXSIT("Heater_TUBE1_EXSIT [ 加热位试管架1到位 ]", MId.IO1_IO, 6,false),
Heater_TUBE2_EXSIT("Heater_TUBE2_EXSIT [ 加热位试管架2到位 ]", MId.IO1_IO, 7,false),
Heater_TUBE3_EXSIT("Heater_TUBE3_EXSIT [ 加热位试管架3到位 ]", MId.IO1_IO, 8,false),
Heater_TUBE4_EXSIT("Heater_TUBE4_EXSIT [ 加热位试管架4到位 ]", MId.IO1_IO, 9,false),
Heater_TUBE5_EXSIT("Heater_TUBE5_EXSIT [ 加热位试管架5到位 ]", MId.IO1_IO, 10,false),
Heater_TUBE6_EXSIT("Heater_TUBE6_EXSIT [ 加热位试管架6到位 ]", MId.IO1_IO, 11,false),
Heater_CAP1_EXSIT("Heater_CAP1_EXSIT [ 加热模块拍子1到位 ]", MId.IO1_IO, 0,false),
Heater_CAP2_EXSIT("Heater_CAP2_EXSIT [ 加热模块拍子2到位 ]", MId.IO1_IO, 1,false),
Heater_CAP3_EXSIT("Heater_CAP3_EXSIT [ 加热模块拍子3到位 ]", MId.IO1_IO, 2,false),
Heater_CAP4_EXSIT("Heater_CAP4_EXSIT [ 加热模块拍子4到位 ]", MId.IO1_IO, 3,false),
Heater_CAP5_EXSIT("Heater_CAP5_EXSIT [ 加热模块拍子5到位 ]", MId.IO1_IO, 4,false),
Heater_CAP6_EXSIT("Heater_CAP6_EXSIT [ 加热模块拍子6到位 ]", MId.IO1_IO, 5,false),
Heater_TUBE1_EXSIT("Heater_TUBE1_EXSIT [ 加热模块托盘1到位 ]", MId.IO1_IO, 6,false),
Heater_TUBE2_EXSIT("Heater_TUBE2_EXSIT [ 加热模块托盘2到位 ]", MId.IO1_IO, 7,false),
Heater_TUBE3_EXSIT("Heater_TUBE3_EXSIT [ 加热模块托盘3到位 ]", MId.IO1_IO, 8,false),
Heater_TUBE4_EXSIT("Heater_TUBE4_EXSIT [ 加热模块托盘4到位 ]", MId.IO1_IO, 9,false),
Heater_TUBE5_EXSIT("Heater_TUBE5_EXSIT [ 加热模块托盘5到位 ]", MId.IO1_IO, 10,false),
Heater_TUBE6_EXSIT("Heater_TUBE6_EXSIT [ 加热模块托盘6到位 ]", MId.IO1_IO, 11,false),
TRAY_CAP1_EXSIT("TRAY_CAP1_EXSIT [ 拍子存放位拍子1到位 ]", MId.IO1_IO, 12,false), TRAY_CAP1_EXSIT("TRAY_CAP1_EXSIT [ 拍子存放位拍子1到位 ]", MId.IO1_IO, 12,false),
TRAY_CAP2_EXSIT("TRAY_CAP2_EXSIT [ 拍子存放位拍子2到位 ]", MId.IO1_IO, 13,false), TRAY_CAP2_EXSIT("TRAY_CAP2_EXSIT [ 拍子存放位拍子2到位 ]", MId.IO1_IO, 13,false),
TRAY_CAP3_EXSIT("TRAY_CAP3_EXSIT [ 拍子存放位拍子3到位 ]", MId.IO1_IO, 14,false), TRAY_CAP3_EXSIT("TRAY_CAP3_EXSIT [ 拍子存放位拍子3到位 ]", MId.IO1_IO, 14,false),

68
src/main/resources/init/zapp_sub_module_reg_initial_value.csv

@ -48,40 +48,40 @@ id,mid,regIndex,regInitVal
47,DualRobotAxis2SV,kreg_mini_servo_servo_overload_torque,80 47,DualRobotAxis2SV,kreg_mini_servo_servo_overload_torque,80
48,DualRobotAxis2SV,kreg_mini_servo_servo_acc,0 48,DualRobotAxis2SV,kreg_mini_servo_servo_acc,0
49,LiquidDistributionArm,kreg_liquid_distribution_arm_enable,1 49,LiquidDistributionArm,kreg_liquid_distribution_arm_enable,1
50,LiquidDistributionArm,kreg_liquid_distribution_arm_pos0_d0,1800
51,LiquidDistributionArm,kreg_liquid_distribution_arm_pos0_d1,1800
52,LiquidDistributionArm,kreg_liquid_distribution_arm_pos1_d0,1799
53,LiquidDistributionArm,kreg_liquid_distribution_arm_pos1_d1,2100
54,LiquidDistributionArm,kreg_liquid_distribution_arm_pos2_d0,0
55,LiquidDistributionArm,kreg_liquid_distribution_arm_pos2_d1,0
56,LiquidDistributionArm,kreg_liquid_distribution_arm_pos3_d0,0
57,LiquidDistributionArm,kreg_liquid_distribution_arm_pos3_d1,0
58,LiquidDistributionArm,kreg_liquid_distribution_arm_pos4_d0,0
59,LiquidDistributionArm,kreg_liquid_distribution_arm_pos4_d1,0
60,LiquidDistributionArm,kreg_liquid_distribution_arm_pos5_d0,0
61,LiquidDistributionArm,kreg_liquid_distribution_arm_pos5_d1,0
62,LiquidDistributionArm,kreg_liquid_distribution_arm_pos6_d0,0
63,LiquidDistributionArm,kreg_liquid_distribution_arm_pos6_d1,0
64,LiquidDistributionArm,kreg_liquid_distribution_arm_pos7_d0,0
65,LiquidDistributionArm,kreg_liquid_distribution_arm_pos7_d1,0
66,LiquidDistributionArm,kreg_liquid_distribution_arm_pos8_d0,0
67,LiquidDistributionArm,kreg_liquid_distribution_arm_pos8_d1,0
68,LiquidDistributionArm,kreg_liquid_distribution_arm_pos9_d0,0
69,LiquidDistributionArm,kreg_liquid_distribution_arm_pos9_d1,0
70,LiquidDistributionArm,kreg_liquid_distribution_arm_pos10_d0,0
71,LiquidDistributionArm,kreg_liquid_distribution_arm_pos10_d1,0
72,LiquidDistributionArm,kreg_liquid_distribution_arm_pos11_d0,0
73,LiquidDistributionArm,kreg_liquid_distribution_arm_pos11_d1,0
74,LiquidDistributionArm,kreg_liquid_distribution_arm_pos12_d0,0
75,LiquidDistributionArm,kreg_liquid_distribution_arm_pos12_d1,0
76,LiquidDistributionArm,kreg_liquid_distribution_arm_pos13_d0,0
77,LiquidDistributionArm,kreg_liquid_distribution_arm_pos13_d1,0
78,LiquidDistributionArm,kreg_liquid_distribution_arm_pos14_d0,0
79,LiquidDistributionArm,kreg_liquid_distribution_arm_pos14_d1,0
80,LiquidDistributionArm,kreg_liquid_distribution_arm_pos15_d0,0
81,LiquidDistributionArm,kreg_liquid_distribution_arm_pos15_d1,0
82,LiquidDistributionArm,kreg_liquid_distribution_arm_pos16_d0,0
83,LiquidDistributionArm,kreg_liquid_distribution_arm_pos16_d1,0
50,LiquidDistributionArm,kreg_liquid_distribution_arm_pos0_d0,571
51,LiquidDistributionArm,kreg_liquid_distribution_arm_pos0_d1,1149
52,LiquidDistributionArm,kreg_liquid_distribution_arm_pos1_d0,616
53,LiquidDistributionArm,kreg_liquid_distribution_arm_pos1_d1,613
54,LiquidDistributionArm,kreg_liquid_distribution_arm_pos2_d0,841
55,LiquidDistributionArm,kreg_liquid_distribution_arm_pos2_d1,519
56,LiquidDistributionArm,kreg_liquid_distribution_arm_pos3_d0,1140
57,LiquidDistributionArm,kreg_liquid_distribution_arm_pos3_d1,514
58,LiquidDistributionArm,kreg_liquid_distribution_arm_pos4_d0,1504
59,LiquidDistributionArm,kreg_liquid_distribution_arm_pos4_d1,627
60,LiquidDistributionArm,kreg_liquid_distribution_arm_pos5_d0,834
61,LiquidDistributionArm,kreg_liquid_distribution_arm_pos5_d1,825
62,LiquidDistributionArm,kreg_liquid_distribution_arm_pos6_d0,987
63,LiquidDistributionArm,kreg_liquid_distribution_arm_pos6_d1,747
64,LiquidDistributionArm,kreg_liquid_distribution_arm_pos7_d0,1212
65,LiquidDistributionArm,kreg_liquid_distribution_arm_pos7_d1,758
66,LiquidDistributionArm,kreg_liquid_distribution_arm_pos8_d0,1469
67,LiquidDistributionArm,kreg_liquid_distribution_arm_pos8_d1,816
68,LiquidDistributionArm,kreg_liquid_distribution_arm_pos9_d0,1037
69,LiquidDistributionArm,kreg_liquid_distribution_arm_pos9_d1,1079
70,LiquidDistributionArm,kreg_liquid_distribution_arm_pos10_d0,1165
71,LiquidDistributionArm,kreg_liquid_distribution_arm_pos10_d1,1010
72,LiquidDistributionArm,kreg_liquid_distribution_arm_pos11_d0,1341
73,LiquidDistributionArm,kreg_liquid_distribution_arm_pos11_d1,1001
74,LiquidDistributionArm,kreg_liquid_distribution_arm_pos12_d0,1557
75,LiquidDistributionArm,kreg_liquid_distribution_arm_pos12_d1,1073
76,LiquidDistributionArm,kreg_liquid_distribution_arm_pos13_d0,1317
77,LiquidDistributionArm,kreg_liquid_distribution_arm_pos13_d1,1463
78,LiquidDistributionArm,kreg_liquid_distribution_arm_pos14_d0,1413
79,LiquidDistributionArm,kreg_liquid_distribution_arm_pos14_d1,1389
80,LiquidDistributionArm,kreg_liquid_distribution_arm_pos15_d0,1562
81,LiquidDistributionArm,kreg_liquid_distribution_arm_pos15_d1,1389
82,LiquidDistributionArm,kreg_liquid_distribution_arm_pos16_d0,1748
83,LiquidDistributionArm,kreg_liquid_distribution_arm_pos16_d1,1450
84,DoorM,kreg_step_motor_shaft,1 84,DoorM,kreg_step_motor_shaft,1
85,DoorM,kreg_step_motor_one_circle_pulse,10000 85,DoorM,kreg_step_motor_one_circle_pulse,10000
86,DoorM,kreg_step_motor_one_circle_pulse_denominator,1 86,DoorM,kreg_step_motor_one_circle_pulse_denominator,1

Loading…
Cancel
Save