充电桩伸缩
This commit is contained in:
parent
b444194720
commit
fde40418c2
@ -27,6 +27,7 @@ import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotStatusCodeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaskStageEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.wait.WaitStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.service.information.DeviceInformationService;
|
||||
import cn.iocoder.yudao.module.system.service.path.PathPlanningService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.RobotTaskDetailService;
|
||||
@ -112,6 +113,9 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
@Resource
|
||||
private RobotTaskService taskService;
|
||||
|
||||
@Resource
|
||||
private DeviceInformationService deviceInformationService;
|
||||
|
||||
@Value("${zn.robot_doing_action.doing_action_cache_time:2*24*60*60}")
|
||||
private Long doingActionCacheTime;
|
||||
|
||||
@ -159,6 +163,16 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
taskDoing(robotCompleteTaskDTO, robotDoingActionKey);
|
||||
}
|
||||
|
||||
if ((PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||
|| PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType()))
|
||||
&& ObjectUtil.isNotEmpty(robotCompleteTaskDTO.getCommandStatus())
|
||||
&& CommandTypeEnum.MOVE_POSES.getType().equals(robotCompleteTaskDTO.getCommandStatus().getCommandType())
|
||||
&& RobotExecutionStateConstant.DONE.equals(robotCompleteTaskDTO.getCommandStatus().getExecutionState())) {
|
||||
log.info("充电任务准备让充电设备自动伸出 :{}",robotCompleteTaskDTO.getOrderId());
|
||||
RobotChargeLogDO robotChargeLog = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||
deviceInformationService.chargeDeviceExtend(robotChargeLog.getDeviceNo());
|
||||
}
|
||||
|
||||
sendStartDoActionToPP(robotCompleteTaskDTO.getCommandStatus(), robotCompleteTaskDTO.getMac(),
|
||||
String.valueOf(robotCompleteTaskDTO.getOrderId()));
|
||||
}
|
||||
@ -273,7 +287,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
.warnCode(robotCompleteTaskDTO.getStatusCode())
|
||||
.robotNo(robotNo)
|
||||
.warnType(RobotWarnType.ROBOT_WARN.getType())
|
||||
.warnMsg(robotNo +"_"+robotCompleteTaskDTO.getMessage())
|
||||
.warnMsg(robotNo + "_" + robotCompleteTaskDTO.getMessage())
|
||||
.warnSolve(robotCompleteTaskDTO.getSolution())
|
||||
.build();
|
||||
warnMsgMapper.insert(warnMsg);
|
||||
|
@ -118,4 +118,16 @@ public interface DeviceInformationService extends IService<DeviceInformationDO>
|
||||
* @return
|
||||
*/
|
||||
List<DeviceInformationDO> getDeviceInfoBindByMapId(Long positionMapId);
|
||||
|
||||
/**
|
||||
* 充电任务,让设备伸出
|
||||
* @param deviceNo
|
||||
*/
|
||||
void chargeDeviceExtend(String deviceNo);
|
||||
|
||||
/**
|
||||
* 充电设备, 缩
|
||||
* @param deviceNo
|
||||
*/
|
||||
void chargeDeviceShrink(String deviceNo);
|
||||
}
|
||||
|
@ -18,14 +18,21 @@ import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformati
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.device.DeviceAttributeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.device.DeviceStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.device.DeviceTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.device.PictureConfigEnum;
|
||||
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
|
||||
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||
import cn.iocoder.yudao.module.system.util.modbus3.ModbusUtils;
|
||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.serotonin.modbus4j.ModbusMaster;
|
||||
import com.serotonin.modbus4j.exception.ModbusInitException;
|
||||
import com.serotonin.modbus4j.exception.ModbusTransportException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -317,6 +324,105 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
||||
.isNotNull(DeviceInformationDO::getPositionMapItemId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 充电任务,让设备伸出
|
||||
*
|
||||
* @param deviceNo
|
||||
*/
|
||||
@Override
|
||||
@Async
|
||||
public void chargeDeviceExtend(String deviceNo) {
|
||||
DeviceInformationDO deviceInformationDO = informationMapper.selectOne(new LambdaQueryWrapperX<DeviceInformationDO>()
|
||||
.eq(DeviceInformationDO::getDeviceNo, deviceNo));
|
||||
if (ObjectUtil.isEmpty(deviceInformationDO)) {
|
||||
log.info("查不到此充电设备 :{}", deviceNo);
|
||||
return;
|
||||
}
|
||||
if (DeviceAttributeEnum.HAND_MOVEMENT.getType().equals(deviceInformationDO.getDeviceAttribute())) {
|
||||
log.info("手动充电设备,不需要伸出 :{}", deviceNo);
|
||||
return;
|
||||
}
|
||||
if (!DeviceTypeEnum.CHARGING_STATION.getType().equals(deviceInformationDO.getDeviceType())) {
|
||||
log.info("非充电设备,不能伸出 :{}", deviceNo);
|
||||
return;
|
||||
}
|
||||
if (ObjectUtil.isEmpty(deviceInformationDO.getDeviceIp()) || ObjectUtil.isEmpty(deviceInformationDO.getDevicePort())) {
|
||||
log.info("没有设备IP、端口不能伸出 :{}", deviceNo);
|
||||
return;
|
||||
}
|
||||
log.info("设备伸出 :{}",deviceNo);
|
||||
extend(deviceInformationDO.getDeviceIp(), Integer.parseInt(deviceInformationDO.getDevicePort()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 充电任务,缩
|
||||
* @param deviceNo
|
||||
*/
|
||||
@Override
|
||||
@Async
|
||||
public void chargeDeviceShrink(String deviceNo) {
|
||||
DeviceInformationDO deviceInformationDO = informationMapper.selectOne(new LambdaQueryWrapperX<DeviceInformationDO>()
|
||||
.eq(DeviceInformationDO::getDeviceNo, deviceNo));
|
||||
if (DeviceAttributeEnum.HAND_MOVEMENT.getType().equals(deviceInformationDO.getDeviceAttribute())) {
|
||||
log.info("手动充电设备,不需要缩 :{}", deviceNo);
|
||||
return;
|
||||
}
|
||||
if (!DeviceTypeEnum.CHARGING_STATION.getType().equals(deviceInformationDO.getDeviceType())) {
|
||||
log.info("非充电设备,不能缩回 :{}", deviceNo);
|
||||
return;
|
||||
}
|
||||
if (ObjectUtil.isEmpty(deviceInformationDO.getDeviceIp()) || ObjectUtil.isEmpty(deviceInformationDO.getDevicePort())) {
|
||||
log.info("没有设备IP、端口不能缩回 :{}", deviceNo);
|
||||
return;
|
||||
}
|
||||
log.info("设备缩回 :{}",deviceNo);
|
||||
shrink(deviceInformationDO.getDeviceIp(), Integer.parseInt(deviceInformationDO.getDevicePort()));
|
||||
}
|
||||
|
||||
public void shrink(String ip, int port) {
|
||||
boolean success = true;
|
||||
short[] shrinkArr = {0};
|
||||
for (int i = 0; i < 3; i++) {
|
||||
try {
|
||||
ModbusMaster asciiMaster = ModbusUtils.getMaster(ip, port);
|
||||
ModbusUtils.writeHoldingRegisters(asciiMaster, 1, 0, shrinkArr);
|
||||
} catch (ModbusInitException | ModbusTransportException e) {
|
||||
log.info("充电设备缩回时,出现异常 :{}", ip);
|
||||
success = false;
|
||||
}
|
||||
|
||||
if (success) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 控制设备伸缩
|
||||
* @param ip
|
||||
* @param port
|
||||
*/
|
||||
public void extend(String ip, int port) {
|
||||
boolean success = true;
|
||||
short[] extendArr = {1};
|
||||
short[] shrinkArr = {0};
|
||||
for (int i = 0; i < 3; i++) {
|
||||
try {
|
||||
ModbusMaster asciiMaster = ModbusUtils.getMaster(ip, port);
|
||||
ModbusUtils.writeHoldingRegisters(asciiMaster, 1, 0, shrinkArr);
|
||||
Thread.sleep(2500);
|
||||
ModbusUtils.writeHoldingRegisters(asciiMaster, 1, 0, extendArr);
|
||||
} catch (ModbusInitException | ModbusTransportException | InterruptedException e) {
|
||||
log.info("充电设备伸出时,出现异常 :{}", ip);
|
||||
success = false;
|
||||
}
|
||||
|
||||
if (success) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mapBindDeviceInfo(MapBindDeviceInfoDTO dto) {
|
||||
DeviceInformationDO deviceInformationDO = informationMapper.selectById(dto.getDeviceInfoId());
|
||||
|
@ -49,6 +49,7 @@ import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum;
|
||||
//import cn.iocoder.yudao.module.system.service.robot.job.RobotCommonTaskService;
|
||||
import cn.iocoder.yudao.module.system.enums.wait.WaitStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.service.information.DeviceInformationService;
|
||||
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||
import cn.iocoder.yudao.module.system.service.wait.MoveToWaitService;
|
||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||
@ -154,6 +155,9 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
||||
@Resource
|
||||
private UserOperationLogService userOperationLogService;
|
||||
|
||||
@Resource
|
||||
private DeviceInformationService deviceInformationService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createTask(RobotTaskSaveReqVO createReqVO) throws InterruptedException {
|
||||
@ -472,12 +476,10 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
||||
Long detailId = null;
|
||||
|
||||
Map<Long, String> deviceNoMap = new HashMap<>();
|
||||
RobotChargeLogDO robotChargeLogs = null;
|
||||
|
||||
Integer robotStatus = RobotStatusEnum.DOING.getType();
|
||||
|
||||
if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(taskAssignDTO.getOrderType())) {
|
||||
robotChargeLogs = chargeLogMapper.selectById(taskAssignDTO.getOrderId());
|
||||
RobotChargeLogDO robotChargeLogs = chargeLogMapper.selectById(taskAssignDTO.getOrderId());
|
||||
|
||||
robotChargeLogs.setTaskStatus(ChargeTaskStatusEnum.DOING.getType());
|
||||
chargeLogMapper.updateById(robotChargeLogs);
|
||||
@ -1270,8 +1272,9 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
||||
if (ObjectUtil.isEmpty(robotChargeLogDO) || !ChargeTaskStatusEnum.CHARGEING.getType().equals(robotChargeLogDO.getTaskStatus())) {
|
||||
return;
|
||||
}
|
||||
log.info("开始结束充电,并接任务 :{}", robotNo);
|
||||
log.info("结束充电任务 :{}", robotNo);
|
||||
robotChargeLogDO.setEndTime(LocalDateTime.now());
|
||||
deviceInformationService.chargeDeviceShrink(robotChargeLogDO.getDeviceNo());
|
||||
|
||||
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC + robotInformationDO.getMacAddress();
|
||||
Object object = redisUtil.get(pose2dKey);
|
||||
|
@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.util.modbus3;
|
||||
|
||||
import com.serotonin.modbus4j.ModbusFactory;
|
||||
import com.serotonin.modbus4j.ModbusMaster;
|
||||
import com.serotonin.modbus4j.code.DataType;
|
||||
import com.serotonin.modbus4j.exception.ErrorResponseException;
|
||||
import com.serotonin.modbus4j.exception.ModbusInitException;
|
||||
import com.serotonin.modbus4j.exception.ModbusTransportException;
|
||||
@ -188,7 +189,7 @@ public class ModbusUtils {
|
||||
* values 写入寄存器里的值
|
||||
*/
|
||||
public static void writeHoldingRegisters(ModbusMaster master, int slaveId, int startOffset, short[] values) throws ModbusTransportException {
|
||||
WriteRegistersRequest request = new WriteRegistersRequest(slaveId, startOffset, values);
|
||||
ModbusResponse response = master.send(request);
|
||||
WriteRegistersRequest request = new WriteRegistersRequest(slaveId, startOffset, values);
|
||||
master.send(request);
|
||||
}
|
||||
}
|
@ -2,9 +2,11 @@ package cn.iocoder.yudao.module.system.util.modbus3;
|
||||
|
||||
|
||||
import com.serotonin.modbus4j.ModbusMaster;
|
||||
import com.serotonin.modbus4j.code.DataType;
|
||||
import com.serotonin.modbus4j.exception.ErrorResponseException;
|
||||
import com.serotonin.modbus4j.exception.ModbusInitException;
|
||||
import com.serotonin.modbus4j.exception.ModbusTransportException;
|
||||
import com.serotonin.modbus4j.locator.BaseLocator;
|
||||
|
||||
public class SerialPortMasterTest {
|
||||
public static void main(String[] args) throws ModbusTransportException, ErrorResponseException, ModbusInitException {
|
||||
@ -17,7 +19,25 @@ public class SerialPortMasterTest {
|
||||
/*float f = ModbusUtils.readHoldingRegister(asciiMaster, 1, 0, DataType.FOUR_BYTE_FLOAT).floatValue();
|
||||
System.out.println(f);*/
|
||||
|
||||
//缩回去
|
||||
short[] arr = {1};
|
||||
ModbusUtils.writeHoldingRegisters(asciiMaster,1,1,arr);
|
||||
|
||||
//伸出来
|
||||
// short[] arr = {1};
|
||||
ModbusUtils.writeHoldingRegisters(asciiMaster,1,0,arr);
|
||||
asciiMaster.destroy();
|
||||
}
|
||||
|
||||
public void query() {
|
||||
try {
|
||||
ModbusMaster master = ModbusUtils.getMaster("192.168.10.234", 8899);
|
||||
BaseLocator<Number> loc = BaseLocator.holdingRegister(1, 9, DataType.TWO_BYTE_INT_UNSIGNED);
|
||||
Number value = master.getValue(loc);
|
||||
byte b = value.byteValue();
|
||||
System.out.println("----------"+b);
|
||||
System.out.println("结果 "+ value.longValue());
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user