#
zjj
2024-06-21 9372f61dcb41eeb2e09871caefce0f764d6ab021
#
15个文件已修改
3个文件已添加
564 ■■■■■ 已修改文件
zy-asrs-flow/src/pages/device/lift/index.jsx 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/index.jsx 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/SwitchWorkModeParam.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasConveyorSta.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/dto/WorkModeTypeDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/enums/WorkModeType.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/StaProtocol.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/DevpThread.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SiemensDevpThread.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SuopaiSiemensDevpThread.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/device/lift/index.jsx
@@ -201,6 +201,16 @@
                        label: '当前层',
                        children: item.lev,
                    },
                    {
                        key: '11',
                        label: '已完成任务号',
                        children: item.completeTaskNo,
                    },
                    {
                        key: '12',
                        label: '扩展',
                        children: JSON.stringify(item.extend),
                    },
                ];
                return <div key={item.id} style={{ width: '45%' }}>
                    <div style={{ marginBottom: '10px' }}>
zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/index.jsx
@@ -143,60 +143,60 @@
                setSearchParam={setSearchParam}
            />,
        },
        {
            title: '修改人员',
            dataIndex: 'updateBy$',
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <LinkFilter
                name='updateBy'
                major='user'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
        },
        {
            title: '创建人员',
            dataIndex: 'createBy$',
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <LinkFilter
                name='createBy'
                major='user'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
        },
        {
            title: '创建时间',
            dataIndex: 'createTime$',
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <DatetimeRangeFilter
                name='createTime'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
        },
        {
            title: '修改时间',
            dataIndex: 'updateTime$',
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <DatetimeRangeFilter
                name='updateTime'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
        },
        // {
        //     title: '修改人员',
        //     dataIndex: 'updateBy$',
        //     valueType: 'text',
        //     hidden: false,
        //     width: 140,
        //     filterDropdown: (props) => <LinkFilter
        //         name='updateBy'
        //         major='user'
        //         {...props}
        //         actionRef={actionRef}
        //         setSearchParam={setSearchParam}
        //     />,
        // },
        // {
        //     title: '创建人员',
        //     dataIndex: 'createBy$',
        //     valueType: 'text',
        //     hidden: false,
        //     width: 140,
        //     filterDropdown: (props) => <LinkFilter
        //         name='createBy'
        //         major='user'
        //         {...props}
        //         actionRef={actionRef}
        //         setSearchParam={setSearchParam}
        //     />,
        // },
        // {
        //     title: '创建时间',
        //     dataIndex: 'createTime$',
        //     valueType: 'text',
        //     hidden: false,
        //     width: 140,
        //     filterDropdown: (props) => <DatetimeRangeFilter
        //         name='createTime'
        //         {...props}
        //         actionRef={actionRef}
        //         setSearchParam={setSearchParam}
        //     />,
        // },
        // {
        //     title: '修改时间',
        //     dataIndex: 'updateTime$',
        //     valueType: 'text',
        //     hidden: false,
        //     width: 140,
        //     filterDropdown: (props) => <DatetimeRangeFilter
        //         name='updateTime'
        //         {...props}
        //         actionRef={actionRef}
        //         setSearchParam={setSearchParam}
        //     />,
        // },
        {
            title: '备注',
            dataIndex: 'memo',
@@ -381,6 +381,19 @@
                setSearchParam={setSearchParam}
            />,
        },
        {
            title: '工作模式',
            dataIndex: 'workMode$',
            valueType: 'text',
            hidden: false,
            width: 140,
            filterDropdown: (props) => <TextFilter
                name='workMode'
                {...props}
                actionRef={actionRef}
                setSearchParam={setSearchParam}
            />,
        },
        {
            title: '操作',
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java
@@ -6,10 +6,7 @@
import com.zy.asrs.framework.common.R;
import com.zy.asrs.framework.common.SnowflakeIdWorker;
import com.zy.asrs.wcs.core.domain.dto.BasLiftStaDto;
import com.zy.asrs.wcs.core.domain.param.CreateInTaskParam;
import com.zy.asrs.wcs.core.domain.param.CreateManualTakeTaskParam;
import com.zy.asrs.wcs.core.domain.param.CreateMoveTaskParam;
import com.zy.asrs.wcs.core.domain.param.CreateOutTaskParam;
import com.zy.asrs.wcs.core.domain.param.*;
import com.zy.asrs.wcs.core.entity.*;
import com.zy.asrs.wcs.core.model.enums.DeviceCtgType;
import com.zy.asrs.wcs.core.model.enums.TaskCtgType;
@@ -21,6 +18,7 @@
import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
import com.zy.asrs.wcs.rcs.service.DeviceService;
import com.zy.asrs.wcs.rcs.thread.DevpThread;
import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
import com.zy.asrs.wcs.system.controller.BaseController;
import com.zy.asrs.wcs.system.entity.Dict;
@@ -58,6 +56,8 @@
    private BasConveyorPathService basConveyorPathService;
    @Autowired
    private BasLiftService basLiftService;
    @Autowired
    private BasConveyorService basConveyorService;
    //生成入库任务
    @PostMapping("/createInTask")
@@ -364,4 +364,24 @@
        return R.ok();
    }
    //切换工作模式
    @PostMapping("/switchWorkMode")
    public R switchWorkMode(@RequestBody SwitchWorkModeParam param) {
        BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>().eq(BasConveyor::getConveyorNo, param.getConveyorNo()));
        if(basConveyor == null) {
            return R.error("输送线不存在");
        }
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
        if(devpThread == null) {
            return R.error("输送线线程不存在");
        }
        boolean result = devpThread.switchWorkMode(param.getSiteId(), param.getWorkMode());
        if (!result) {
            return R.error("模式切换失败");
        }
        return R.ok();
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/SwitchWorkModeParam.java
New file
@@ -0,0 +1,17 @@
package com.zy.asrs.wcs.core.domain.param;
import lombok.Data;
@Data
public class SwitchWorkModeParam {
    //工作模式
    private Integer workMode;
    //输送线号
    private Integer conveyorNo;
    //站点
    private Integer siteId;
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasConveyorSta.java
@@ -4,6 +4,7 @@
import java.util.Date;
import com.zy.asrs.wcs.core.service.BasConveyorService;
import com.zy.asrs.wcs.rcs.model.enums.WorkModeType;
import com.zy.asrs.wcs.system.entity.Host;
import com.zy.asrs.wcs.system.entity.User;
import org.springframework.format.annotation.DateTimeFormat;
@@ -171,6 +172,12 @@
    @ApiModelProperty(value= "工作号")
    private Integer taskNo;
    /**
     * 工作模式
     */
    @ApiModelProperty(value= "工作模式")
    private Integer workMode;
    public BasConveyorSta() {}
    public BasConveyorSta(Long conveyorId,Integer conveyorNo,Long updateBy,Long createBy,Date createTime,Date updateTime,String memo,Integer deleted,Long hostId,Integer siteNo,String inEnable,String outEnable,String autoing,String loading,String canining,String canouting,Integer locType1,Integer locType2,Integer locType3,String locNo,String qrCodeValue) {
@@ -325,5 +332,14 @@
        }
    }
    public String getWorkMode$() {
        if (null == this.workMode){ return null; }
        WorkModeType workModeType = WorkModeType.get(this.workMode.shortValue());
        if(!Cools.isEmpty(workModeType)){
            return workModeType.desc;
        }
        return null;
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java
@@ -217,7 +217,6 @@
     * 是否删除 1: 是  0: 否  
     */
    @ApiModelProperty(value= "是否删除 1: 是  0: 否  ")
    @TableLogic
    private Integer deleted;
    /**
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
@@ -1176,6 +1176,14 @@
                    MotionCtgType.SHUTTLE_MOVE_TO_LIFT
            ));
            // 向提升机发送小车已到位信号
            motionList.addAll(kernelService.liftShuttleArrival(
                    null
                    , MotionDto.build((dto -> {
                        dto.setLiftNo(liftDevice.getId().intValue());
                    }))
            ));
            // 解锁提升机
            motionList.addAll(kernelService.liftUnlock(
                    null
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
@@ -182,6 +182,36 @@
        return motionList;
    }
    /**
     * 提升机-小车已到位
     */
    public List<Motion> liftShuttleArrival(MotionDto origin, MotionDto target) {
        List<Motion> motionList = new ArrayList<>();
        motionList.add(Motion.build(motion -> {
            motion.setDeviceCtg(DeviceCtgType.LIFT.val());
            motion.setDevice(String.valueOf(target.getLiftNo()));
            motion.setMotionCtg(MotionCtgType.LIFT_SHUTTLE_ARRIVAL.val());
        }));
        return motionList;
    }
    /**
     * 提升机-小车已驶离
     */
    public List<Motion> liftShuttleLeave(MotionDto origin, MotionDto target) {
        List<Motion> motionList = new ArrayList<>();
        motionList.add(Motion.build(motion -> {
            motion.setDeviceCtg(DeviceCtgType.LIFT.val());
            motion.setDevice(String.valueOf(target.getLiftNo()));
            motion.setMotionCtg(MotionCtgType.LIFT_SHUTTLE_LEAVE.val());
        }));
        return motionList;
    }
    // shuttle -----------------------------------------------------------------------------
    /**
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
@@ -52,11 +52,6 @@
            return false;
        }
        //判断提升机是否自动
        if (!liftThread.isIdle()) {
            return false;
        }
        if (motionService.count(new LambdaQueryWrapper<Motion>()
                .eq(Motion::getDeviceCtg, DeviceCtgType.LIFT.val())
                .eq(Motion::getDevice, motion.getDevice())
@@ -83,6 +78,11 @@
        List<LiftCommand> command = new ArrayList<>();
        switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){
            case LIFT_MOVE:
                //判断提升机是否自动
                if (!liftThread.isIdle()) {
                    return false;
                }
                // 如果已经在目标层,那边层过滤
                if (liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
                    liftThread.setSyncTaskNo(motion.getTaskNo());
@@ -93,6 +93,10 @@
                list.addAll(command);
                return liftAction.assignWork(liftThread.getDevice(), assignCommand);
            case LIFT_WITH_GOODS:
                //判断提升机是否自动
                if (!liftThread.isIdle()) {
                    return false;
                }
//                if (liftProtocol.getHasTray()) {
//                    return false;
//                }
@@ -101,6 +105,11 @@
                list.addAll(command);
                return liftAction.assignWork(liftThread.getDevice(), assignCommand);
            case LIFT_WITH_SHUTTLE:
                //判断提升机是否自动
                if (!liftThread.isIdle()) {
                    return false;
                }
                if (!liftProtocol.getHasCar()) {
                    return false;
                }
@@ -109,30 +118,46 @@
                list.addAll(command);
                return liftAction.assignWork(liftThread.getDevice(), assignCommand);
            case LIFT_WITH_GOODS_AND_SHUTTLE:
                //判断提升机是否自动
                if (!liftThread.isIdle()) {
                    return false;
                }
                return false;
//                if (!liftProtocol.getPlatShuttleCheck()) {
//                    return false;
//                }
//
//                command = liftThread.getLiftUpDownCommand(Integer.parseInt(motion.getTarget()));
//                command.setLiftNo(deviceNo.shortValue());
//                command.setTaskNo(motion.getWrkNo().shortValue());
//                return liftThread.assignWork(command);
            case LIFT_TRANSPORT_TO_CONVEYOR:
                return false;
            case LIFT_LOCK:
                //锁定提升机
                //判断提升机是否自动
                if (!liftThread.isIdle(MotionCtgType.LIFT_LOCK)) {
                    return false;
                }
                command = liftThread.getLockCommand(motion.getTaskNo(), true);//获取提升机锁定命令
                list.addAll(command);
                return liftAction.assignWork(liftThread.getDevice(), assignCommand);
            case LIFT_UNLOCK:
                //锁定提升机
                //解锁提升机
                //判断提升机是否自动
                if (!liftThread.isIdle(MotionCtgType.LIFT_UNLOCK)) {
                    return false;
                }
                command = liftThread.getLockCommand(motion.getTaskNo(), false);//获取提升机解定命令
                list.addAll(command);
                return liftAction.assignWork(liftThread.getDevice(), assignCommand);
            case LIFT_SHUTTLE_ARRIVAL:
                //提升机-小车已到位
                //判断提升机是否自动
                if (!liftThread.isIdle(MotionCtgType.LIFT_SHUTTLE_ARRIVAL)) {
                    return false;
                }
                command = liftThread.getShuttleSignalCommand(motion.getTaskNo(), true);//获取小车已到位命令
                list.addAll(command);
                return liftAction.assignWork(liftThread.getDevice(), assignCommand);
            default:
                break;
        }
        return Boolean.TRUE;
@@ -223,6 +248,9 @@
                    return false;
                }
                break;
            case LIFT_SHUTTLE_ARRIVAL:
                break;
            default:
                return false;
        }
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
@@ -192,7 +192,7 @@
                if (!liftThread.isLock(new ExecuteSupport() {
                    @Override
                    public Boolean judgement() {
                        return true;
                        return true;//牛眼没有提升机锁,直接返回true
                    }
                })) {
                    return false;
@@ -311,54 +311,24 @@
                }
                //判断提升机是否被锁定
                if (liftThread.isLock(new ExecuteSupport() {
                if (!liftThread.isLock(new ExecuteSupport() {
                    @Override
                    public Boolean judgement() {
                        return false;
                    }
                })) {
                    //解锁提升机
                    List<LiftCommand> lockCommand = liftThread.getLockCommand(motion.getTaskNo(), false);//获取提升机解锁命令
                    LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
                    liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
                    liftAssignCommand.setTaskNo(motion.getTaskNo());
                    ArrayList<LiftCommand> list = new ArrayList<>();
                    list.addAll(lockCommand);
                    liftAssignCommand.setCommands(list);
                    liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
                    return false;//等待下一次轮询
                }
                //判断小车是否已到位
                if (liftProtocol.getHasCar()) {
                    List<LiftCommand> signalCommand = liftThread.getShuttleSignalCommand(motion.getTaskNo(), true);//获取小车已到位命令
                    if(signalCommand != null) {
                        boolean hasKey = redisUtil.hasKey(DeviceRedisConstant.COMMAND_TMP + motion.getTaskNo());
                        if (!hasKey) {
                            LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
                            liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
                            liftAssignCommand.setTaskNo(motion.getTaskNo());
                            ArrayList<LiftCommand> list = new ArrayList<>();
                            list.addAll(signalCommand);
                            liftAssignCommand.setCommands(list);
                            liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
                            redisUtil.set(DeviceRedisConstant.COMMAND_TMP + motion.getTaskNo(), true, 120);
                            return false;
                        }
                    }
                }
                //判断提升机工作号是否和当前任务相同
                if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
                    return false;
                }
                if (liftProtocol.getTaskNo() != 0) {
                    //清空提升机号
                    liftThread.setSyncTaskNo(0);
                //判断小车是否已到位
                if (!liftProtocol.getHasCar()) {
                    return false;
                }
//                //判断提升机工作号是否和当前任务相同
//                if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
//                    return false;
//                }
                break;
            case SHUTTLE_MOVE_FROM_LIFT:
                liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getTemp()));
@@ -372,54 +342,24 @@
                }
                //判断提升机是否被锁定
                if (liftThread.isLock(new ExecuteSupport() {
                if (!liftThread.isLock(new ExecuteSupport() {
                    @Override
                    public Boolean judgement() {
                        return false;
                    }
                })) {
                    //解锁提升机
                    List<LiftCommand> lockCommand = liftThread.getLockCommand(motion.getTaskNo(), false);//获取提升机解锁命令
                    LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
                    liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
                    liftAssignCommand.setTaskNo(motion.getTaskNo());
                    ArrayList<LiftCommand> list = new ArrayList<>();
                    list.addAll(lockCommand);
                    liftAssignCommand.setCommands(list);
                    liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
                    return false;//等待下一次轮询
                }
                //判断小车是否已离开
                if (!liftProtocol.getHasCar()) {
                    List<LiftCommand> signalCommand = liftThread.getShuttleSignalCommand(motion.getTaskNo(), false);//获取小车已驾离命令
                    if(signalCommand != null) {
                        boolean hasKey = redisUtil.hasKey(DeviceRedisConstant.COMMAND_TMP + motion.getTaskNo());
                        if (!hasKey) {
                            redisUtil.set(DeviceRedisConstant.COMMAND_TMP + motion.getTaskNo(), JSON.toJSONString(signalCommand), 120);
                            LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
                            liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
                            liftAssignCommand.setTaskNo(motion.getTaskNo());
                            ArrayList<LiftCommand> list = new ArrayList<>();
                            list.addAll(signalCommand);
                            liftAssignCommand.setCommands(list);
                            liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
                            return false;
                        }
                    }
                }
                //判断提升机工作号是否和当前任务相同
                if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
                    return false;
                }
                if (liftProtocol.getTaskNo() != 0) {
                    //清空提升机号
                    liftThread.setSyncTaskNo(0);
                //判断小车是否已离开
                if (liftProtocol.getHasCar()) {
                    return false;
                }
//                //判断提升机工作号是否和当前任务相同
//                if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
//                    return false;
//                }
                break;
            case SHUTTLE_TRANSPORT_FROM_LIFT:
            case SHUTTLE_TRANSPORT_TO_LIFT:
@@ -441,28 +381,12 @@
                        return false;
                    }
                })) {
                    //解锁提升机
                    List<LiftCommand> lockCommand = liftThread.getLockCommand(motion.getTaskNo(), false);//获取提升机解锁命令
                    LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
                    liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
                    liftAssignCommand.setTaskNo(motion.getTaskNo());
                    ArrayList<LiftCommand> list = new ArrayList<>();
                    list.addAll(lockCommand);
                    liftAssignCommand.setCommands(list);
                    liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
                    return false;//等待下一次轮询
                    return false;
                }
                //判断提升机工作号是否和当前任务相同
                if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
                    return false;
                }
                if (liftProtocol.getTaskNo() != 0) {
                    //清空提升机号
                    liftThread.setSyncTaskNo(0);
                }
                break;
            case SHUTTLE_UPDATE_LOCATION://小车坐标更新
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
@@ -29,6 +29,8 @@
    LIFT_MISSION_COMPLETE(LIFT),
    LIFT_LOCK(LIFT),
    LIFT_UNLOCK(LIFT),
    LIFT_SHUTTLE_ARRIVAL(LIFT),
    LIFT_SHUTTLE_LEAVE(LIFT),
    // 穿梭车 --------------------------------------------
    SHUTTLE_MOVE(SHUTTLE),
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/dto/WorkModeTypeDto.java
New file
@@ -0,0 +1,20 @@
package com.zy.asrs.wcs.rcs.model.dto;
import com.zy.asrs.wcs.rcs.model.enums.WorkModeType;
import lombok.Data;
@Data
public class WorkModeTypeDto {
    private Integer siteId;
    private WorkModeType workModeType;
    private String address;
    public WorkModeTypeDto(Integer siteId, WorkModeType workModeType, String address) {
        this.siteId = siteId;
        this.workModeType = workModeType;
        this.address = address;
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/enums/WorkModeType.java
New file
@@ -0,0 +1,30 @@
package com.zy.asrs.wcs.rcs.model.enums;
/**
 * 入出库模式枚举
 */
public enum WorkModeType {
    NONE((short) 0, "未知"),
    PAKIN_MODE((short) 1, "入库模式"),
    PAKOUT_MODE((short) 2, "出库模式"),
    ;
    public Short id;
    public String desc;
    WorkModeType(Short id, String desc) {
        this.id = id;
        this.desc = desc;
    }
    public static WorkModeType get(Short id) {
        for (WorkModeType type : WorkModeType.values()) {
            if (id.equals(type.id)) {
                return type;
            }
        }
        return WorkModeType.NONE;
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/StaProtocol.java
@@ -71,6 +71,9 @@
    // 扫码失败
    private boolean barcodeErr;
    // 工作模式
    private Integer workMode;
    @Override
    public StaProtocol clone() {
        try {
@@ -88,6 +91,7 @@
        station.setLoading(loading?"Y":"N");
        station.setInEnable(inEnable?"Y":"N");
        station.setOutEnable(outEnable?"Y":"N");
        station.setWorkMode(workMode);
        station.setLocType1(0);  // 高低类型{0:未知,1:低库位,2:高库位}
        station.setLocType2(0);  // 宽窄类型{0:未知,1:窄库位,2:宽库位}
        station.setLocType3(0);  // 轻重类型{0:未知,1:轻库位,2:重库位}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/DevpThread.java
@@ -16,4 +16,6 @@
    void setPakMk(Integer siteId, boolean pakMk);
    boolean switchWorkMode(int siteId, int workMode);
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SiemensDevpThread.java
@@ -17,6 +17,8 @@
import com.zy.asrs.wcs.rcs.News;
import com.zy.asrs.wcs.rcs.cache.OutputQueue;
import com.zy.asrs.wcs.rcs.entity.Device;
import com.zy.asrs.wcs.rcs.model.dto.WorkModeTypeDto;
import com.zy.asrs.wcs.rcs.model.enums.WorkModeType;
import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol;
import com.zy.asrs.wcs.rcs.thread.DevpThread;
import lombok.extern.slf4j.Slf4j;
@@ -44,9 +46,21 @@
     */
    private int barcodeSize = 2;
    /**
     * 入出库模式
     * 0:未知
     * 1:入库启动中
     * 2.入库模式
     * 3.出库启动中 (不能生成入库工作档)
     * 4.出库模式
     */
    private Map<Integer, WorkModeTypeDto> workModeTypes = new ConcurrentHashMap<>();
    public SiemensDevpThread(Device device, RedisUtil redisUtil) {
        this.device = device;
        this.redisUtil = redisUtil;
        workModeTypes.put(101, new WorkModeTypeDto(101, WorkModeType.NONE, "DB1001.120"));
    }
    private ArrayList<BasConveyorSta> getStaNo() {
@@ -287,4 +301,29 @@
            staProtocol.setPakMk(pakMk);
        }
    }
    private void updateWorkMode() {
        for (Map.Entry<Integer, WorkModeTypeDto> entry : workModeTypes.entrySet()) {
            WorkModeTypeDto workModeTypeDto = entry.getValue();
            WorkModeType workModeType = workModeTypeDto.getWorkModeType();
            if (workModeType != WorkModeType.NONE) {
                if (!siemensS7Net.Write(workModeTypeDto.getAddress(), workModeType.id).IsSuccess) {
                    OutputQueue.DEVP.offer(MessageFormat.format("写入输送线{1}入出库模式失败。输送线编号={0}", device.getId(), workModeTypeDto.getSiteId()));
                    log.error("写入输送线{1}入出库模式失败。输送线编号={0}", device.getId(), workModeTypeDto.getSiteId());
                }
            }
        }
    }
    @Override
    public boolean switchWorkMode(int siteId, int workMode) {
        WorkModeTypeDto workModeTypeDto = workModeTypes.get(siteId);
        if(workModeTypeDto == null) {
            return false;
        }
        workModeTypeDto.setWorkModeType(WorkModeType.get((short) workMode));
        workModeTypes.put(siteId, workModeTypeDto);
        return false;
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SuopaiSiemensDevpThread.java
@@ -17,6 +17,8 @@
import com.zy.asrs.wcs.rcs.News;
import com.zy.asrs.wcs.rcs.cache.OutputQueue;
import com.zy.asrs.wcs.rcs.entity.Device;
import com.zy.asrs.wcs.rcs.model.dto.WorkModeTypeDto;
import com.zy.asrs.wcs.rcs.model.enums.WorkModeType;
import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol;
import com.zy.asrs.wcs.rcs.thread.DevpThread;
import lombok.extern.slf4j.Slf4j;
@@ -44,9 +46,21 @@
     */
    private int barcodeSize = 2;
    /**
     * 入出库模式
     * 0:未知
     * 1:入库启动中
     * 2.入库模式
     * 3.出库启动中 (不能生成入库工作档)
     * 4.出库模式
     */
    private Map<Integer, WorkModeTypeDto> workModeTypes = new ConcurrentHashMap<>();
    public SuopaiSiemensDevpThread(Device device, RedisUtil redisUtil) {
        this.device = device;
        this.redisUtil = redisUtil;
        workModeTypes.put(101, new WorkModeTypeDto(101, WorkModeType.NONE, "DB1001.120"));
    }
    private ArrayList<BasConveyorSta> getStaNo() {
@@ -86,6 +100,7 @@
    }
    private void read() throws InterruptedException {
        updateWorkMode();
        ArrayList<BasConveyorSta> staNos = getStaNo();
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB1000.100", (short) (staNoSize * 40));
@@ -105,6 +120,7 @@
                staProtocol.setLoading(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 32) == 1);  // 有物
                staProtocol.setInEnable(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 14) == 1); // 可入
                staProtocol.setOutEnable(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 14) == 2);// 可出
                staProtocol.setWorkMode((int) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 8));// 工作模式
//                staProtocol.setEmptyMk(status[4]);  // 空板信号
//                staProtocol.setFullPlt(status[5]);  // 满托盘
//                staProtocol.setHigh(status[6]);     // 高库位
@@ -265,4 +281,29 @@
            staProtocol.setPakMk(pakMk);
        }
    }
    private void updateWorkMode() {
        for (Map.Entry<Integer, WorkModeTypeDto> entry : workModeTypes.entrySet()) {
            WorkModeTypeDto workModeTypeDto = entry.getValue();
            WorkModeType workModeType = workModeTypeDto.getWorkModeType();
            if (workModeType != WorkModeType.NONE) {
                if (!siemensS7Net.Write(workModeTypeDto.getAddress(), workModeType.id).IsSuccess) {
                    OutputQueue.DEVP.offer(MessageFormat.format("写入输送线{1}入出库模式失败。输送线编号={0}", device.getId(), workModeTypeDto.getSiteId()));
                    log.error("写入输送线{1}入出库模式失败。输送线编号={0}", device.getId(), workModeTypeDto.getSiteId());
                }
            }
        }
    }
    @Override
    public boolean switchWorkMode(int siteId, int workMode) {
        WorkModeTypeDto workModeTypeDto = workModeTypes.get(siteId);
        if(workModeTypeDto == null) {
            return false;
        }
        workModeTypeDto.setWorkModeType(WorkModeType.get((short) workMode));
        workModeTypes.put(siteId, workModeTypeDto);
        return true;
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
@@ -104,6 +104,8 @@
                liftProtocol.setErrorCode("0");
                //层
                liftProtocol.setLev(data.getInteger("curFloor"));
                //已完成的任务号
                liftProtocol.setCompleteTaskNo(data.getString("completeTaskNo"));
                //************补充扩展字段*************
@@ -381,7 +383,11 @@
        switch (Objects.requireNonNull(MotionCtgType.get(String.valueOf(flag)))){
            case SHUTTLE_MOVE_FROM_LIFT://穿梭车出提升机
            case SHUTTLE_MOVE_TO_LIFT://穿梭车进提升机
            case LIFT_SHUTTLE_ARRIVAL://提升机解锁
                return isIdleShuttleMoveToLift();
            case LIFT_LOCK://提升机锁定
            case LIFT_UNLOCK://提升机解锁
                return isIdleLiftLock();
        }
        return false;
@@ -409,6 +415,21 @@
        return false;
    }
    //提升机锁定-提升机状态判断
    private boolean isIdleLiftLock() {
        // 判断提升机是否自动、就绪、空闲
        if (this.liftProtocol.getModel()
                && !this.liftProtocol.getRun()
                && this.liftProtocol.getPakMk()
                && this.liftProtocol.getErrorCode().equals("0")
                && (this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.IDLE)
                || this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.WAITING))
        ) {
            return true;
        }
        return false;
    }
    @Override
    public boolean isDeviceIdle() {
        return isDeviceIdle(null);