Browse Source

-- PLC业务读写优化

star 1 year ago
parent
commit
efaaccb950

+ 30 - 9
README.md

@@ -1,11 +1,32 @@
 # AMS产品
-# IP 192.168.2.1
-# V600.0-添加托盘,读到true生成任务,执行V600.3
+# --------------------------PLC上空托-----------------------------
+# V600.0-添加托盘,读到true生成任务,然后执行V610.0
+# "VB600.0"
+
+# VB610.0-生成任务后,AGV将其写成true
+# "VB610.0"
+
+# V610.2-到点申请卸货前,先写PLC,让PLC将是否允许卸货的状态写到 V600.1
+# "VB610.2"
+
 # V600.1-读到true,允许添加托盘,AGV开始卸货
-# V600.2-AGV添加托盘完成,码垛机可再次检测V600.0和V600.3是否写成false
-# V600.3-生成任务后,AGV将其写成true,码垛机读到true后将V600.0和C600.3写成false
-  
-# V601.0-把跺移。读到true生成任务,执行V601.3
-# V601.1-读到true,允许取货,AGV开始取货
-# V601.2-是AGV取货完成,码垛机可再次检测V601.0和V601.3是否写成false
-# V601.3-生成任务后,AGV将其写成true,码垛机读到true后将V601.0和C601.3写成false
+# "VB600.1"
+
+# VB610.4-上空托-卸货完成写
+# "VB610.4"
+    
+# --------------------------PLC下料------------------------------
+# V600.2-把跺移走。读到true生成任务,执行V610.1
+# "VB600.2"
+
+# V610.1-生成任务后,AGV将其写成true
+# "VB610.1"
+
+# V610.3-到点申请取货前,先写PLC,让PLC将是否允许取货的状态写到 V600.3
+# "VB610.3"
+
+# V600.3-读到true,允许取货,AGV开始取货
+# "VB600.3"
+
+# VB610.5-下料-取货完成写
+# "VB610.5"

+ 21 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/tm/TsPostApiController.java

@@ -7,8 +7,6 @@ import com.ruoyi.ams.tm.entity.TsDataResponse;
 import com.ruoyi.ams.tm.entity.TsRequest;
 import com.ruoyi.ams.tm.entity.TsTaskStateResponse;
 import com.ruoyi.ams.tm.service.ITsTaskService;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.core.page.TableSupport;
 import com.ruoyi.taiye.service.ProcessService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -39,7 +37,7 @@ public class TsPostApiController {
      */
     @ApiOperation("TS-天目取卸货申请")
     @PostMapping("/applyUpAndUnload")
-    public TsTaskStateResponse applyUpAndUnload(@RequestBody TsRequest tsRequest) {
+    public TsTaskStateResponse applyUpAndUnload(@RequestBody TsRequest tsRequest) throws InterruptedException {
 
         return iTsTaskService.confirmAnalysis(tsRequest.getTsOrder(),tsRequest.getReqType(),tsRequest.getAgvNo());
     }
@@ -162,4 +160,24 @@ public class TsPostApiController {
         processService.createPackingMachineUpEmptyPallets("PM_SK","100001");
         return new TsDataResponse();
     }
+
+
+    /**
+     * PLC-读取信号
+     */
+    @ApiOperation("PLC-读取信号")
+    @PostMapping("/readPlcInfo")
+    public boolean readPlcInfo(String address) {
+        return iTsTaskService.readPlcState(address);
+    }
+
+
+    /**
+     * PLC-写入信号
+     */
+    @ApiOperation("PLC-写入信号")
+    @PostMapping("/writePlcInfo")
+    public void writePlcInfo(String address,boolean falg) {
+        iTsTaskService.writePlcState(address,falg);
+    }
 }

+ 9 - 12
ruoyi-dongfangyaiye/src/main/java/com/ruoyi/taiye/job/AMSJob.java

@@ -1,8 +1,6 @@
 package com.ruoyi.taiye.job;
 
-import com.ruoyi.system.init.PlcConnectServiceRunner;
-import com.ruoyi.taiye.domain.DeviceLog;
-import com.ruoyi.system.enums.PLCConnectNameEnum;
+import com.ruoyi.ams.tm.service.ITsTaskService;
 import com.ruoyi.system.enums.PLCEnum;
 import com.ruoyi.taiye.service.IDeviceLogService;
 import com.ruoyi.taiye.service.ProcessService;
@@ -13,12 +11,11 @@ import org.springframework.stereotype.Component;
 @Component("AMSJob")
 @Slf4j
 public class AMSJob {
-    @Autowired
-    PlcConnectServiceRunner plcConnectServiceRunner;
 
     @Autowired
     private ProcessService processService;
-
+    @Autowired
+    private ITsTaskService iTsTaskService;
     @Autowired
     private IDeviceLogService deviceLogService;
 
@@ -30,9 +27,9 @@ public class AMSJob {
      * 下料
      */
     public void onePackingMachineUnloadingTask() {
-        boolean b = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata())
-                .readBoolean(PLCEnum.PACKING_BLANK_0.getMetadata());
-        deviceLogService.insertDeviceLog(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_1.getMetaName(),"获取到下料信号:"+b,"1"));
+        boolean b = iTsTaskService.readPlcState(PLCEnum.PACKING_BLANK_0.getMetadata());
+        //下料信号读取
+        log.info("PLC下料信号读取-----"+b);
         if (b) {
             processService.createPackingMachineUnloadingTask("PM_XL","100000");
         }
@@ -43,9 +40,9 @@ public class AMSJob {
      * 上空
      */
     public void onePackingMachineUpEmptyPallets() {
-        boolean b = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata())
-                .readBoolean(PLCEnum.PACKING_CALL_EMPTY_0.getMetadata());
-        deviceLogService.insertDeviceLog(new DeviceLog(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata(),PLCConnectNameEnum.PACKING_MACHINE_1.getMetaName(),"获取到上空信号:"+b,"1"));
+        boolean b = iTsTaskService.readPlcState(PLCEnum.PACKING_CALL_EMPTY_0.getMetadata());
+        //下料信号读取
+        log.info("PLC上空信号读取-----"+b);
         if (b) {
             processService.createPackingMachineUpEmptyPallets("PM_SK","100001");
         }

+ 3 - 0
ruoyi-dongfangyaiye/src/main/java/com/ruoyi/taiye/service/impl/DeviceLogServiceImpl.java

@@ -111,6 +111,9 @@ public class DeviceLogServiceImpl implements IDeviceLogService
         return deviceLogMapper.deleteDeviceLogByDeviceLogId(deviceLogId);
     }
 
+    /**
+     * 清空PLC信号日志
+     */
     @Override
     public int cleanUpDataFromAWeekAgo() {
         return  deviceLogMapper.cleanUpDataFromAWeekAgo();

+ 1 - 10
ruoyi-dongfangyaiye/src/main/java/com/ruoyi/taiye/service/impl/ProcessServiceImpl.java

@@ -3,12 +3,9 @@ package com.ruoyi.taiye.service.impl;
 import com.ruoyi.ams.business.IBusinessService;
 import com.ruoyi.ams.config.domain.dto.AgvCallDTO;
 import com.ruoyi.ams.config.domain.dto.AgvCallItemDTO;
-import com.ruoyi.ams.config.domain.dto.LotattDTO;
 import com.ruoyi.ams.task.domain.WcsTask;
 import com.ruoyi.ams.task.mapper.WcsTaskMapper;
 import com.ruoyi.base.constant.Constant;
-import com.ruoyi.base.domain.BaseLocationInfo;
-import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.taiye.service.ProcessService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,16 +19,10 @@ import java.util.List;
 public class ProcessServiceImpl implements ProcessService {
 
     @Autowired
-    WcsTaskMapper wcsTaskMapper;
-
-    private final String SMID = "";
-
+    private WcsTaskMapper wcsTaskMapper;
     @Autowired
     private IBusinessService iBusinessService;
 
-    @Autowired
-    private IBaseLocationInfoService iBaseLocationInfoService;
-
     @Override
     public void createPackingMachineUnloadingTask(String taskType, String loc) {
         WcsTask wcsTask = new WcsTask();

+ 30 - 15
ruoyi-system/src/main/java/com/ruoyi/system/enums/PLCEnum.java

@@ -3,44 +3,59 @@ package com.ruoyi.system.enums;
 public enum PLCEnum {
 
     /**
-     * V600.0-添加托盘,读到true生成任务,执行V600.3
+     * V600.0-添加托盘,读到true生成任务,然后执行V610.0
      */
     PACKING_CALL_EMPTY_0("VB600.0"),
 
     /**
-     * V600.1-读到true,允许添加托盘,AGV开始卸货
+     * VB610.0-生成任务后,AGV将其写成true
      */
-    PACKING_CALL_EMPTY_1("VB600.1"),
+    PACKING_CALL_EMPTY_1("VB610.0"),
 
     /**
-     * V600.2-AGV添加托盘完成,AGV将其写成true,码垛机可再次检测V600.0和V600.3是否写成false
+     *  V610.2-到点申请卸货前,先写PLC,让PLC将是否允许卸货的状态写到 V600.1
+     */
+    PACKING_CALL_EMPTY_2("VB610.2"),
+    /**
+     * V600.1-读到true,允许添加托盘,AGV开始卸货
      */
-    PACKING_CALL_EMPTY_2("VB600.2"),
+    PACKING_CALL_EMPTY_3("VB600.1"),
+
+
+
+
 
     /**
-     *  V600.3-生成任务后,AGV将其写成true,码垛机读到true后将V600.0和C600.3写成false
+     * V600.2-把跺移走。读到true生成任务,执行V610.1
      */
-    PACKING_CALL_EMPTY_3("VB600.3"),
+    PACKING_BLANK_0("VB600.2"),
 
     /**
-     * V601.0-把跺移。读到true生成任务,执行V601.3
+     * V610.1-生成任务后,AGV将其写成true
      */
-    PACKING_BLANK_0("VB601.0"),
+    PACKING_BLANK_1("VB610.1"),
 
     /**
-     * V601.1-读到true,允许取货,AGV开始取货
+     * V610.3-到点申请取货前,先写PLC,让PLC将是否允许取货的状态写到 V600.3
      */
-    PACKING_BLANK_1("VB601.1"),
+    PACKING_BLANK_2("VB610.3"),
 
     /**
-     * V601.2-是AGV取货完成,AGV将其写成true,码垛机可再次检测V601.0和V601.3是否写成false
+     * V600.3-读到true,允许取货,AGV开始取货
      */
-    PACKING_BLANK_2("VB601.2"),
+    PACKING_BLANK_3("VB600.3"),
+
+
 
     /**
-     * V601.3-生成任务后,AGV将其写成true,码垛机读到true后将V601.0和C601.3写成false
+     * VB610.4-上空托-卸货完成写
      */
-    PACKING_BLANK_3("VB601.3");
+    UNLOAD_SEND("VB610.4"),
+    /**
+     * VB610.5-下料-取货完成写
+     */
+    PICK_UP_SEND("VB610.5");
+
 
 
 

+ 4 - 13
warewms-ams/src/main/java/com/ruoyi/ams/business/BusinessServiceImpl.java

@@ -5,7 +5,6 @@ import com.ruoyi.ams.agv.ndc.common.ByteUtil;
 import com.ruoyi.ams.agv.ndc.common.CRC16Util;
 import com.ruoyi.ams.agv.ndc.domain.AmsTask;
 import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
-import com.ruoyi.ams.box.service.IWmsBoxInfoService;
 import com.ruoyi.ams.config.domain.AsnSoStrategy;
 import com.ruoyi.ams.config.domain.dto.*;
 import com.ruoyi.ams.config.domain.vo.FlowConfigHeaderVO;
@@ -16,7 +15,6 @@ import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.inv.service.IInvLotAttService;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.task.domain.WcsTask;
-import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
 import com.ruoyi.ams.task.mapper.WcsTaskMapper;
 import com.ruoyi.ams.task.service.IWcsTaskService;
 import com.ruoyi.ams.tm.entity.TsDataResponse;
@@ -25,7 +23,6 @@ import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.domain.BaseLocationZone;
 import com.ruoyi.base.domain.BaseSku;
-import com.ruoyi.base.domain.dto.BaseLocationInfoSameColDTO;
 import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
 import com.ruoyi.base.mapper.BaseLocationInfoMapper;
 import com.ruoyi.base.service.IBaseLocationInfoService;
@@ -36,9 +33,7 @@ import com.ruoyi.common.core.redis.RedisKey;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.uuid.SnowflakeIdWorker;
-import com.ruoyi.system.enums.PLCConnectNameEnum;
 import com.ruoyi.system.enums.PLCEnum;
-import com.ruoyi.system.init.PlcConnectServiceRunner;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -71,16 +66,12 @@ public class BusinessServiceImpl implements IBusinessService {
     @Autowired
     private IInvLotAttService iInvLotAttService;
     @Autowired
-    private IWmsBoxInfoService wmsBoxInfoService;
-    @Autowired
     private IInvLotLocIdService invLotLocIdService;
     @Autowired
     private AsnSoStrategyMapper asnSoStrategyMapper;
     @Autowired
     private BaseLocationInfoMapper baseLocationInfoMapper;
     @Autowired
-    private PlcConnectServiceRunner plcConnectServiceRunner;
-    @Autowired
     private IFlowConfigHeaderService flowConfigHeaderService;
     @Autowired
     private IBaseLocationInfoService baseLocationInfoService;
@@ -171,8 +162,8 @@ public class BusinessServiceImpl implements IBusinessService {
                     baseLocationInfoService.occupyLocation(locationFrom.getId(),Constant.WAREHOUSE_ID,"AMS");
                     wcsTaskList.addAll(this.genTask(locationFrom, locationTo, flowConfigHeaderVO, agvCallDTO, token));
                     //下料 任务生成成功后 写PLC
-                    plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata())
-                            .writeBoolean(PLCEnum.PACKING_BLANK_3.getMetadata(), true);
+                    iTsTaskService.writePlcState(PLCEnum.PACKING_BLANK_1.getMetadata(),true);
+
                 }
                 if ("PM_SK".equals(flowConfigHeaderVO.getFlowType())){
 
@@ -180,8 +171,8 @@ public class BusinessServiceImpl implements IBusinessService {
                     invLotLocIdService.deleteInvLotLocIdById(locationTo.getId());
                     wcsTaskList.addAll(this.genTask(locationFrom, locationTo, flowConfigHeaderVO, agvCallDTO, token));
                     //上空 任务生成成功后 写PLC
-                    plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata())
-                            .writeBoolean(PLCEnum.PACKING_CALL_EMPTY_3.getMetadata(), true);
+                    iTsTaskService.writePlcState(PLCEnum.PACKING_CALL_EMPTY_1.getMetadata(),true);
+
                 }
             }
             return AjaxResult.success("任务下发成功");

+ 16 - 2
warewms-ams/src/main/java/com/ruoyi/ams/tm/service/ITsTaskService.java

@@ -4,7 +4,6 @@ package com.ruoyi.ams.tm.service;
 import com.ruoyi.ams.task.domain.WcsTask;
 import com.ruoyi.ams.tm.entity.TsDataResponse;
 import com.ruoyi.ams.tm.entity.TsTaskStateResponse;
-import com.ruoyi.common.core.domain.AjaxResult;
 
 public interface ITsTaskService {
 
@@ -15,7 +14,7 @@ public interface ITsTaskService {
      * reqType 取卸货编号 (1-取货申请,2-卸货申请)
      * agvNo 车号
      */
-    TsTaskStateResponse confirmAnalysis(String tsOrder,String reqType, String agvNo);
+    TsTaskStateResponse confirmAnalysis(String tsOrder,String reqType, String agvNo) throws InterruptedException;
 
     /**
      * TS-天目任务状态反馈
@@ -64,4 +63,19 @@ public interface ITsTaskService {
      * agvNo ——车辆名称
      */
     TsDataResponse delChargeJob(String agvTaskNo);
+
+
+    /**
+     * 读取PLC状态信号
+     * @param address
+     * @return
+     */
+    boolean readPlcState(String address);
+
+    /**
+     * 写入PLC状态
+     * @param address
+     * @param falg
+     */
+    void writePlcState(String address,boolean falg);
 }

+ 56 - 30
warewms-ams/src/main/java/com/ruoyi/ams/tm/service/impl/TsTaskServiceImpl.java

@@ -24,7 +24,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import sun.security.krb5.internal.crypto.Des;
 
 import java.util.ArrayList;
 import java.util.Date;
@@ -82,7 +81,7 @@ public class TsTaskServiceImpl implements ITsTaskService {
 
 
     @Override
-    public synchronized TsTaskStateResponse confirmAnalysis(String tsOrder,String reqType, String agvNo) {
+    public synchronized TsTaskStateResponse confirmAnalysis(String tsOrder,String reqType, String agvNo) throws InterruptedException {
 
 
         log.info("TS-天目取卸货申请------------->:TS任务号-{},状态-{},车号-{}",tsOrder,reqType,agvNo);
@@ -94,18 +93,24 @@ public class TsTaskServiceImpl implements ITsTaskService {
         }
 
         //取卸货编号 (1:取货申请 2:卸货申请)
-        boolean b = true;
-        /*if("1".equals(reqType)){
+        boolean b = false;
 
-            b = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata())
-                    .readBoolean(PLCEnum.PACKING_BLANK_1.getMetadata());
+        if("1".equals(reqType)){
+
+            //开启取货 是否允许
+            writePlcState(PLCEnum.PACKING_BLANK_2.getMetadata(), true);
+            Thread.sleep(500);
+            b = readPlcState(PLCEnum.PACKING_BLANK_3.getMetadata());
         }else{
 
-            b = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata())
-                    .readBoolean(PLCEnum.PACKING_CALL_EMPTY_1.getMetadata());
-        }*/
+            //开启卸货 是否允许
+            writePlcState(PLCEnum.PACKING_CALL_EMPTY_2.getMetadata(), true);
+            Thread.sleep(500);
+            b = readPlcState(PLCEnum.PACKING_CALL_EMPTY_3.getMetadata());
+        }
         log.info("TsTaskServiceImpl---confirmAnalysis:申请PLC取卸货-" + JSON.toJSONString(b));
 
+
         if(b){
             return TsTaskStateResponse.success("申请PLC取卸货-可执行取卸货","");
         }else{
@@ -180,10 +185,6 @@ public class TsTaskServiceImpl implements ITsTaskService {
                     wcsTask.setRemark("任务取货申请中!");
                     break;
                 case 4:
-                    if (wcsTask.getState() == 4) {
-                        log.info("不能重复取货!" + wcsTask.getTaskNo());
-                        return TsTaskStateResponse.error("不能重复取货!","");
-                    }
                     // 解锁起始库位
                     baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom()), Constant.WAREHOUSE_ID, "TS-TM");
                     // 将起始点库存移动到中间缓存位
@@ -192,25 +193,25 @@ public class TsTaskServiceImpl implements ITsTaskService {
                     if (!StringUtils.isEmpty(wcsTask.getExt8())) {
                         redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()), wcsTask.getLocationFrom());
                     }
+
+                    //关闭下料 任务生成和取货申请状态
+                    if (wcsTask.getTaskType().equals(Constant.FLOW_CONFIG_ID.PM_XL.name())){
+                        writePlcState(PLCEnum.PACKING_BLANK_1.getMetadata(), false);
+                        Thread.sleep(500);
+                        writePlcState(PLCEnum.PACKING_BLANK_2.getMetadata(), false);
+                    }
                     //下料 取货完成后 写PLC
-                    /*if (wcsTask.getTaskType().equals(Constant.FLOW_CONFIG_ID.PM_XL.name())) {
-                        plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata())
-                                .writeBoolean(PLCEnum.PACKING_BLANK_2.getMetadata(), true);
-                    }*/
+                    if (wcsTask.getTaskType().equals(Constant.FLOW_CONFIG_ID.PM_XL.name())) {
+                        writePlcState(PLCEnum.PICK_UP_SEND.getMetadata(), true);
+                        Thread.sleep(1000);
+                        writePlcState(PLCEnum.PICK_UP_SEND.getMetadata(), false);
+                    }
                     wcsTask.setRemark("任务取货完成!");
                     break;
                 case 5:
                     wcsTask.setRemark("任务卸货申请中!");
                     break;
                 case 6:
-                    if (wcsTask.getState() != 4) {
-                        log.info("任务未取货,不能直接卸货!" + wcsTask.getTaskNo());
-                        return TsTaskStateResponse.error("任务未取货,不能直接卸货!","");
-                    }
-                    if (wcsTask.getState() == 6) {
-                        log.info("不能重复卸货!" + wcsTask.getTaskNo());
-                        return TsTaskStateResponse.error("不能重复卸货!","");
-                    }
                     // 解锁终点库位
                     baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationTo()), Constant.WAREHOUSE_ID, "TS-TM");
                     // 将中间缓存位库存移动到终点
@@ -219,11 +220,20 @@ public class TsTaskServiceImpl implements ITsTaskService {
                     if (!StringUtils.isEmpty(wcsTask.getExt8())) {
                         redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()));
                     }
-                    // 添加空托 卸货完成后 写PLC
-                    /*if (wcsTask.getTaskType().equals(Constant.FLOW_CONFIG_ID.PM_SK.name())) {
-                        plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata())
-                                .writeBoolean(PLCEnum.PACKING_CALL_EMPTY_2.getMetadata(), true);
-                    }*/
+
+                    //关闭上空 任务生成和卸货申请状态
+                    if (wcsTask.getTaskType().equals(Constant.FLOW_CONFIG_ID.PM_SK.name())) {
+                        writePlcState(PLCEnum.PACKING_CALL_EMPTY_1.getMetadata(), false);
+                        Thread.sleep(500);
+                        writePlcState(PLCEnum.PACKING_CALL_EMPTY_2.getMetadata(), false);
+                    }
+                    // 上空任务完成 写PLC
+                    if (wcsTask.getTaskType().equals(Constant.FLOW_CONFIG_ID.PM_SK.name())) {
+                        writePlcState(PLCEnum.UNLOAD_SEND.getMetadata(), true);
+                        Thread.sleep(1000);
+                        writePlcState(PLCEnum.UNLOAD_SEND.getMetadata(), false);
+                    }
+
                     wcsTask.setRemark("任务卸货完成!");
                     break;
                 case 7:
@@ -550,4 +560,20 @@ public class TsTaskServiceImpl implements ITsTaskService {
             return new TsDataResponse();
         }
     }
+
+    @Override
+    public boolean readPlcState(String address) {
+        log.info("------读取PLC状态,PLC地址:" + address );
+        boolean b = plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata())
+                .readBoolean(address);
+        return b;
+    }
+
+
+    @Override
+    public void writePlcState(String address,boolean falg) {
+        log.info("------写入PLC状态,PLC地址:" + address +",状态:"+falg);
+        plcConnectServiceRunner.getPlcServer(PLCConnectNameEnum.PACKING_MACHINE_1.getMetadata())
+                .writeBoolean(address, falg);
+    }
 }

+ 1 - 1
warewms-ams/src/main/resources/mapper/ams/WcsTaskMapper.xml

@@ -369,6 +369,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="parentTask != null  and parentTask != ''"> and parent_task = #{parentTask}</if>
             <if test="agvNo != null  and agvNo != ''"> and agv_no like concat('%', #{agvNo}, '%')</if>
         </where>
-        and state in(1,3,4,5,6,8,9,10)
+        and state in(1,3,4,5,8,9,10)
     </select>
 </mapper>