12 changed files with 174 additions and 38 deletions
-
13src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java
-
4src/main/java/com/iflytop/gd/app/cmd/DoorCloseCommand.java
-
10src/main/java/com/iflytop/gd/app/cmd/FilledSolutionStartCommand.java
-
26src/main/java/com/iflytop/gd/app/cmd/MoveToHeatAreaCommand.java
-
24src/main/java/com/iflytop/gd/app/cmd/MoveToSolutionAreaCommand.java
-
5src/main/java/com/iflytop/gd/app/cmd/ShakeStartCommand.java
-
5src/main/java/com/iflytop/gd/app/cmd/ShakeStopCommand.java
-
8src/main/java/com/iflytop/gd/app/cmd/SolutionAddCommand.java
-
2src/main/java/com/iflytop/gd/app/cmd/debug/DebugTransportationArmMoveCommand.java
-
106src/main/java/com/iflytop/gd/app/service/DeviceCommandTempUtilService.java
-
2src/main/java/com/iflytop/gd/app/service/DeviceInitService.java
-
7src/main/java/com/iflytop/gd/app/service/UserService.java
@ -0,0 +1,106 @@ |
|||||
|
package com.iflytop.gd.app.service; |
||||
|
|
||||
|
import com.iflytop.gd.app.core.device.HeatModuleState; |
||||
|
import com.iflytop.gd.common.cmd.CommandFuture; |
||||
|
import com.iflytop.gd.common.cmd.DeviceCommandBundle; |
||||
|
import com.iflytop.gd.common.cmd.DeviceCommandGenerator; |
||||
|
import com.iflytop.gd.common.enums.HeatModuleCode; |
||||
|
import com.iflytop.gd.common.enums.data.DevicePositionCode; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Arrays; |
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
import java.util.concurrent.CompletableFuture; |
||||
|
import java.util.concurrent.TimeUnit; |
||||
|
|
||||
|
/** |
||||
|
* 临时方法 以后应该会废弃 |
||||
|
*/ |
||||
|
@Slf4j |
||||
|
@Service |
||||
|
@RequiredArgsConstructor |
||||
|
public class DeviceCommandTempUtilService { |
||||
|
private final DeviceCommandService deviceCommandService; |
||||
|
private final DevicePositionService devicePositionService; |
||||
|
|
||||
|
private final DeviceStateService deviceStateService; |
||||
|
|
||||
|
private List<HeatModuleCode> moveTrayHeatModuleAvoidUpStateList = Collections.synchronizedList(new ArrayList<>()); |
||||
|
|
||||
|
/** |
||||
|
* 抬升 |
||||
|
* 临时移动托盘的时候,加热模块升降避让 |
||||
|
* 该方法会恢复之前升起的状态 |
||||
|
*/ |
||||
|
public void moveTrayHeatModuleAvoidUp(String cmdId, String cmdCode, HeatModuleCode targetHeatModuleCode) throws Exception { |
||||
|
double trayLift = devicePositionService.getPosition(DevicePositionCode.trayLift).getDistance(); //托盘升降抬升距离 |
||||
|
List<CommandFuture> futuresList = new ArrayList<>(); |
||||
|
for (HeatModuleCode heatModuleCode : moveTrayHeatModuleAvoidUpStateList) { |
||||
|
DeviceCommandBundle deviceCommand = getHeaterMotorMoveDeviceCommand(heatModuleCode, trayLift); |
||||
|
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand); |
||||
|
futuresList.add(deviceCommandFuture); |
||||
|
} |
||||
|
if(targetHeatModuleCode != null) { |
||||
|
DeviceCommandBundle deviceCommand = getHeaterMotorMoveDeviceCommand(targetHeatModuleCode, trayLift); |
||||
|
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand); |
||||
|
futuresList.add(deviceCommandFuture); |
||||
|
} |
||||
|
commandWait(futuresList.toArray(new CommandFuture[0])); |
||||
|
for (HeatModuleCode heatModuleCode : moveTrayHeatModuleAvoidUpStateList) { |
||||
|
deviceStateService.setHeatModuleStateTrayUp(heatModuleCode, 1);//加热模块托盘升降状态 |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 下降 |
||||
|
* 临时移动托盘的时候,加热模块升降避让 |
||||
|
* 该方法会下降所有升起的加热模块并且记录 |
||||
|
*/ |
||||
|
public void moveTrayHeatModuleAvoidDown(String cmdId, String cmdCode, HeatModuleCode targetHeatModuleCode) throws Exception { |
||||
|
moveTrayHeatModuleAvoidUpStateList.clear(); |
||||
|
List<HeatModuleState> heatModuleStateList = deviceStateService.getDeviceState().getHeatModule(); |
||||
|
double trayLower = devicePositionService.getPosition(DevicePositionCode.trayLower).getDistance(); //获取加热位下降托盘位置 |
||||
|
List<CommandFuture> futuresList = new ArrayList<>(); |
||||
|
for (HeatModuleState heatModuleState : heatModuleStateList) { |
||||
|
if (heatModuleState.getTrayUp() == 1) { |
||||
|
HeatModuleCode heatModuleCode = heatModuleState.getModuleCode(); |
||||
|
DeviceCommandBundle deviceCommand = getHeaterMotorMoveDeviceCommand(heatModuleCode, trayLower); |
||||
|
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand); |
||||
|
moveTrayHeatModuleAvoidUpStateList.add(heatModuleCode); |
||||
|
futuresList.add(deviceCommandFuture); |
||||
|
} |
||||
|
} |
||||
|
if(targetHeatModuleCode != null) { |
||||
|
DeviceCommandBundle deviceCommand = getHeaterMotorMoveDeviceCommand(targetHeatModuleCode, trayLower); |
||||
|
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand); |
||||
|
futuresList.add(deviceCommandFuture); |
||||
|
} |
||||
|
commandWait(futuresList.toArray(new CommandFuture[0])); |
||||
|
for (HeatModuleCode heatModuleCode : moveTrayHeatModuleAvoidUpStateList) { |
||||
|
deviceStateService.setHeatModuleStateTrayUp(heatModuleCode, 0);//加热模块托盘升降状态 |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public DeviceCommandBundle getHeaterMotorMoveDeviceCommand(HeatModuleCode heatModuleCode, Double position) { |
||||
|
return switch (heatModuleCode) { |
||||
|
case heat_module_01 -> DeviceCommandGenerator.heaterMotor1Move(position); |
||||
|
case heat_module_02 -> DeviceCommandGenerator.heaterMotor2Move(position); |
||||
|
case heat_module_03 -> DeviceCommandGenerator.heaterMotor3Move(position); |
||||
|
case heat_module_04 -> DeviceCommandGenerator.heaterMotor4Move(position); |
||||
|
case heat_module_05 -> DeviceCommandGenerator.heaterMotor5Move(position); |
||||
|
case heat_module_06 -> DeviceCommandGenerator.heaterMotor6Move(position); |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
protected void commandWait(CommandFuture... futures) throws Exception { |
||||
|
CompletableFuture<?>[] responseFutures = Arrays.stream(futures) |
||||
|
.map(CommandFuture::getResponseFuture) |
||||
|
.toArray(CompletableFuture[]::new); |
||||
|
CompletableFuture.allOf(responseFutures) |
||||
|
.get(120, TimeUnit.SECONDS); |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue