Junjie
3 天以前 63b01db83d9aad8a15276b4236a9a22e4aeef065
src/main/java/com/zy/core/thread/impl/ZySiemensCrnV2Thread.java
@@ -12,6 +12,7 @@
import com.zy.common.utils.RedisUtil;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.enums.CrnModeType;
import com.zy.core.enums.CrnTaskModeType;
import com.zy.core.enums.RedisKeyType;
import com.zy.core.enums.SlaveType;
@@ -24,6 +25,7 @@
import com.zy.core.network.entity.ZyCrnStatusEntity;
import com.zy.core.service.WrkCommandRollbackService;
import com.zy.core.thread.CrnThread;
import com.zy.core.task.DeviceAsyncLogPublisher;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@@ -42,10 +44,12 @@
    private ZyCrnV2ConnectDriver zyCrnConnectDriver;
    private CrnProtocol crnProtocol;
    private int deviceLogCollectTime = 200;
    private final DeviceAsyncLogPublisher deviceAsyncLogPublisher;
    public ZySiemensCrnV2Thread(DeviceConfig deviceConfig, RedisUtil redisUtil) {
        this.deviceConfig = deviceConfig;
        this.redisUtil = redisUtil;
        this.deviceAsyncLogPublisher = SpringUtils.getBean(DeviceAsyncLogPublisher.class);
    }
    @Override
@@ -150,6 +154,7 @@
    private void readStatus(){
        ZyCrnStatusEntity crnStatus = zyCrnConnectDriver.getStatus();
        if (crnStatus == null) {
            crnProtocol.setMode(CrnModeType.NONE);
            OutputQueue.CRN.offer(MessageFormat.format("【{0}】读取堆垛机plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort()));
            return;
        }
@@ -164,6 +169,7 @@
        crnProtocol.setWalkPos(crnStatus.getWalkPos());
        crnProtocol.setLoaded(crnStatus.getLoaded());
        crnProtocol.setAlarm(crnStatus.getAlarm());
        crnProtocol.setLaserValue(crnStatus.getLaserValue());
        crnProtocol.setTemp1(crnStatus.getTemp1());
        crnProtocol.setTemp2(crnStatus.getTemp2());
        crnProtocol.setTemp3(crnStatus.getTemp3());
@@ -196,7 +202,7 @@
            deviceDataLog.setDeviceNo(crnProtocol.getCrnNo());
            deviceDataLog.setCreateTime(new Date());
            redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24);
            deviceAsyncLogPublisher.publishLatest(deviceDataLog);
            //更新采集时间
            crnProtocol.setDeviceDataLog(System.currentTimeMillis());
        }
@@ -252,14 +258,15 @@
    @Override
    public CrnCommand getPickAndPutCommand(String sourceLocNo, String targetLocNo, Integer taskNo, Integer crnNo) {
        BasCrnp basCrnp = getBasCrnp(crnNo);
        CrnCommand crnCommand = new CrnCommand();
        crnCommand.setCrnNo(crnNo); // 堆垛机编号
        crnCommand.setTaskNo(taskNo); // 工作号
        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE.id); // 任务模式:  库位移转
        crnCommand.setSourcePosX(Utils.getRow(sourceLocNo));     // 源库位排
        crnCommand.setSourcePosX(resolveCommandRow(sourceLocNo, basCrnp));     // 源库位排
        crnCommand.setSourcePosY(Utils.getBay(sourceLocNo));     // 源库位列
        crnCommand.setSourcePosZ(Utils.getLev(sourceLocNo));     // 源库位层
        crnCommand.setDestinationPosX(Utils.getRow(targetLocNo));     // 目标库位排
        crnCommand.setDestinationPosX(resolveCommandRow(targetLocNo, basCrnp));     // 目标库位排
        crnCommand.setDestinationPosY(Utils.getBay(targetLocNo));     // 目标库位列
        crnCommand.setDestinationPosZ(Utils.getLev(targetLocNo));     // 目标库位层
        crnCommand.setCommand(1);     // 任务确认
@@ -268,21 +275,39 @@
    @Override
    public CrnCommand getMoveCommand(String targetLocNo, Integer taskNo, Integer crnNo) {
        Integer targetRow = resolveCommandRow(targetLocNo, crnNo);
        CrnCommand crnCommand = new CrnCommand();
        crnCommand.setCrnNo(crnNo); // 堆垛机编号
        crnCommand.setTaskNo(taskNo); // 工作号
        crnCommand.setAckFinish(0);  // 任务完成确认位
        crnCommand.setTaskMode(CrnTaskModeType.CRN_MOVE.id); // 任务模式:  堆垛机移动
        crnCommand.setSourcePosX(Utils.getRow(targetLocNo));     // 目标库位排
        crnCommand.setSourcePosX(targetRow);     // 目标库位排
        crnCommand.setSourcePosY(Utils.getBay(targetLocNo));     // 目标库位列
        crnCommand.setSourcePosZ(Utils.getLev(targetLocNo));     // 目标库位层
        crnCommand.setDestinationPosX(Utils.getRow(targetLocNo));     // 目标库位排
        crnCommand.setDestinationPosX(targetRow);     // 目标库位排
        crnCommand.setDestinationPosY(Utils.getBay(targetLocNo));     // 目标库位列
        crnCommand.setDestinationPosZ(Utils.getLev(targetLocNo));     // 目标库位层
        crnCommand.setCommand(1);     // 任务确认
        return crnCommand;
    }
    private Integer resolveCommandRow(String locNo, Integer crnNo) {
        return resolveCommandRow(locNo, getBasCrnp(crnNo));
    }
    private Integer resolveCommandRow(String locNo, BasCrnp basCrnp) {
        Integer locationRow = Utils.getRow(locNo);
        if (basCrnp == null) {
            return locationRow;
        }
        return basCrnp.getCommandRow(locationRow);
    }
    private BasCrnp getBasCrnp(Integer crnNo) {
        BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
        return basCrnpService.getById(crnNo);
    }
    @Override
    public CrnCommand getResetCommand(Integer taskNo, Integer crnNo) {
        CrnCommand crnCommand = new CrnCommand();