林豪 左 hace 1 año
padre
commit
1162f8c2a3

+ 1 - 1
ServiceCenter/Logs/LogHub.cs

@@ -129,7 +129,7 @@ namespace ServiceCenter.Logs
                 {
                     var path = $"D:\\WCSLogs\\{DateTime.Now.yyyyMMdd()}\\日志处理进程";
                     if (!Directory.Exists(path)) Directory.CreateDirectory(path);
-                    File.AppendAllText(Path.Combine($"D:\\WCSLogs\\{DateTime.Now.yyyyMMdd()}\\日志处理进程", "Error.txt"), $"{JsonConvert.SerializeObject(log)}--{ex.Message}--{ex.StackTrace}\n");
+                    //File.AppendAllText(Path.Combine($"D:\\WCSLogs\\{DateTime.Now.yyyyMMdd()}\\日志处理进程", "Error.txt"), $"{JsonConvert.SerializeObject(log)}--{ex.Message}--{ex.StackTrace}\n");
                 }
             }
         }

+ 3 - 3
WCS.Service/PLCAccessors/SiemensS7PLC.cs

@@ -25,7 +25,7 @@ namespace WCS.Service.PLCAccessors
 
             if (!plc.Connected)
                 plc.Connect();
-           
+
             var res = plc.ReadArea(AreaType.DB, db, address, length, DataType.Byte);
             if (res == null)
                 throw new Exception("读取DB块数据失败");
@@ -43,8 +43,8 @@ namespace WCS.Service.PLCAccessors
                 if (!plc.Connected)
                     plc.Connect();
                 var res = plc.WriteArea(AreaType.DB, db, address, (ushort)data.Length, DataType.Byte, data);
-                if (!res)
-                    throw new Exception("写入DB块数据失败");
+                if (!res) throw new Exception("写入DB块数据失败");
+
             }
         }
     }

+ 6 - 6
业务工程/分拣库/WCS.Entity.Protocol/SRM/SrmEnum.cs

@@ -232,16 +232,16 @@ namespace WCS.Entity.Protocol.SRM
         CanTaskIssued = 1 << 7,
 
         /// <summary>
-        ///  单堆垛机是否可以跑全程
+        ///  保留
         /// </summary>
-        [Description("单堆垛机是否可以跑全程")]
-        Stopper_Mark = 1 << 8,
+        [Description("保留")]
+        RES1 = 1 << 8,
 
         /// <summary>
-        ///  保留
+        ///  单堆垛机是否可以跑全程
         /// </summary>
-        [Description("保留")]
-        RES2 = 1 << 9,
+        [Description("单堆垛机是否可以跑全程")]
+        Stopper_Mark = 1 << 9,
 
         /// <summary>
         ///  保留

+ 3 - 13
业务工程/分拣库/WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -111,11 +111,6 @@ namespace WCS.WorkEngineering.Systems
                             this.ExRecord(obj.Entity.Code, ex.Message);
                         }
                     }
-
-                    foreach (var taskInfo in taskInfos.Where(taskInfo => taskInfo.Status == TaskStatus.Finish))
-                    {
-                        WmsApi.CompleteTask(taskInfo.ID);
-                    }
                 }
             }
             else if (obj.Entity.Code == "2533")
@@ -153,11 +148,7 @@ namespace WCS.WorkEngineering.Systems
                                     case AGVTaskStatus.RequestOrPermission1 when agv.Status != AGVTaskStatus.Complete1:
                                         {
                                             var task = db.Default.Queryable<WCS_TaskOld>().Where(x => x.Id == agv.TaskId).SplitTable(x => x.Take(2)).First();
-                                            if (task == null)
-                                            {
-                                                World.Log($"未找到对应的WCS任务{agv.TaskId}");
-                                                return;
-                                            }
+                                            if (task == null) throw new Exception($"未找到对应的WCS任务{agv.TaskId}");
 
                                             //获取当前任务可以去的目标地址
                                             var positionList = new List<string>();
@@ -168,7 +159,7 @@ namespace WCS.WorkEngineering.Systems
                                                     break;
 
                                                 case "1S":
-                                                    positionList.AddRange(new List<string>() { "2701", "2705", "2709", "2713" });
+                                                    positionList.AddRange(new List<string>() { /*"2701", "2705", "2709", "2713"*/"2501", "2505", "2509", "2513" });
                                                     break;
 
                                                 case "2N":
@@ -189,7 +180,7 @@ namespace WCS.WorkEngineering.Systems
                                             }
 
                                             //当前可用地址正在执行的任务
-                                            var agvs = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && positionList.Contains(v.Station))
+                                            var agvs = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && positionList.Contains(v.Station))
                                                 .SplitTable(v => v.Take(2)).ToList();
                                             var agvPositionList = agvs.Select(x => x.Station).Distinct();
                                             //World.Log($"执行中的AGV任务目标地址:{JsonConvert.SerializeObject(agvPositionList)}");
@@ -217,7 +208,6 @@ namespace WCS.WorkEngineering.Systems
                                             World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
                                             task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
                                             World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
-                                            //调继续执行任务接口
                                             AgvApi.ContinueTask(agv.AgvID, agv.Station);
                                             World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
 

+ 186 - 176
业务工程/分拣库/WCS.WorkEngineering/Systems/RGVSystems.cs

@@ -44,218 +44,228 @@ namespace WCS.WorkEngineering.Systems
 
         public override void Do(Device<IRGV520, IRGV521, IBCR81> obj)
         {
-            //var dev1 = new Device<IStation520>(Device.All.First(x => x.Code == "1602"), World);
-            //dev1.Data.TaskNumber = 0;
-            //dev1.Data.GoodsEnd=0;
-
-            if (obj.Data.VoucherNo != obj.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}", LogLevelEnum.High);
-            if (obj.Data2.WorkMode != RGVWorkMode.Automatic) return;
-
-            if (obj.Data.RES1 == 1) return; //wcs任务完成确认信号未清除
-
-            if (obj.Data2.Status.HasFlag(RGVStatus.Taskfinishi))
+            try
             {
-                switch (obj.Data2.CmdType)
+                if (obj.Data.VoucherNo != obj.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}", LogLevelEnum.High);
+                if (obj.Data2.WorkMode != RGVWorkMode.Automatic) return;
+                if (obj.Data.RES1 == 1) return; //wcs任务完成确认信号未清除
+
+                if (obj.Data2.Status.HasFlag(RGVStatus.Taskfinishi))
                 {
-                    case RGVCmdType.PickGoods: //单独取货任务完成,默认只有空托盘才会下发单独取货任务
-                        //开始申请读码信息
-                        var bcrCode = obj.Data3.GetBCRCode();
-                        var taskNumber = 0;
-                        SqlSugarHelper.Do(_db =>
-                        {
-                            var db = _db.Default;
-                            var dev = Device.All.First(x => x.Code == obj.Data2.StartPosition.ToString());
-                            if (dev.HasFlag(DeviceFlags.拆盘机09))
+                    switch (obj.Data2.CmdType)
+                    {
+                        case RGVCmdType.PickGoods: //单独取货任务完成,默认只有空托盘才会下发单独取货任务
+                                                   //开始申请读码信息
+                            var bcrCode = obj.Data3.GetBCRCode();
+                            var taskNumber = 0;
+                            SqlSugarHelper.Do(_db =>
                             {
-                                //开始绑定任务,并下发新的任务信息到小车
-                                var palletizingInfo = db.Queryable<WCS_Palletizing>().Single(x => x.Id == obj.Data2.TaskNumber);
-                                if (palletizingInfo == null) return;
-                                palletizingInfo.PalleCode = bcrCode;
-                                db.Updateable(palletizingInfo).ExecuteCommand();
-                                taskNumber = palletizingInfo.Id;
-                            }
-                            else if (dev.HasFlag(DeviceFlags.拆盘机非09))
+                                var db = _db.Default;
+                                var dev = Device.All.First(x => x.Code == obj.Data2.StartPosition.ToString());
+                                if (dev.HasFlag(DeviceFlags.拆盘机09))
+                                {
+                                    //开始绑定任务,并下发新的任务信息到小车
+                                    var palletizingInfo = db.Queryable<WCS_Palletizing>().Single(x => x.Id == obj.Data2.TaskNumber);
+                                    if (palletizingInfo == null) return;
+                                    palletizingInfo.PalleCode = bcrCode;
+                                    db.Updateable(palletizingInfo).ExecuteCommand();
+                                    taskNumber = palletizingInfo.Id;
+                                }
+                                else if (dev.HasFlag(DeviceFlags.拆盘机非09))
+                                {
+                                    //开始处理对应的搬运任务信息
+                                    var task = db.Queryable<WCS_TaskInfo>().First(x => x.Type == TaskType.Delivery && x.ID == obj.Data2.TaskNumber && x.AddrTo == obj.Data2.DestPosition.ToString());
+                                    if (task == null) throw new KnownException($"未找到对应的任务{obj.Data2.TaskNumber}", LogLevelEnum.Mid);
+                                    task.BarCode = bcrCode;
+                                    db.Updateable(task).ExecuteCommand();
+                                    task.AddWCS_TASK_DTL(db, obj.Entity.Code, obj.Data2.DestPosition.ToString(), $"环形库码垛位{obj.Data2.DestPosition}搬运任务绑定条码信息{bcrCode}");
+                                    taskNumber = task.ID;
+                                }
+                            });
+                            if (taskNumber == 0) return;
+                            //清空起始点信息
+                            var staDev = new Device<IStation520>(Device.All.FirstOrDefault(x => x.Code == obj.Data2.DestPosition.ToString())!, World);
+                            staDev.Data.TaskNumber = 0;
+                            staDev.Data.GoodsStart = 0;
+                            staDev.Data.GoodsEnd = 0;
+                            obj.Data2.TaskNumber = taskNumber;
+                            obj.Data.RES1 = 1;
+                            break;
+
+                        case RGVCmdType.PutGoods:
+                            WCS_TaskInfo finishiTask = null;
+                            var startPosition = Device.All.Where(x => x.Code == obj.Data2.StartPosition.ToString()).Select(x => new Device<IStation520, IStation521, IStation523>(x, World)).FirstOrDefault();
+                            var destPosition = Device.All.FirstOrDefault(x => x.Code == obj.Data2.DestPosition.ToString());
+                            var isPalletizing = destPosition!.HasFlag(DeviceFlags.桁架码垛位, DeviceFlags.环形库码垛工位);
+                            short countQty = 0;
+                            short shortCode = 0;
+                            SqlSugarHelper.Do(_db =>
                             {
-                                //开始处理对应的搬运任务信息
-                                var task = db.Queryable<WCS_TaskInfo>().First(x => x.Type == TaskType.Delivery && x.ID == obj.Data2.TaskNumber && x.AddrTo == obj.Data2.DestPosition.ToString());
-                                if (task == null) throw new KnownException($"未找到对应的任务{obj.Data2.TaskNumber}", LogLevelEnum.Mid);
-                                task.BarCode = bcrCode;
-                                db.Updateable(task).ExecuteCommand();
-                                task.AddWCS_TASK_DTL(db, obj.Entity.Code, obj.Data2.DestPosition.ToString(), $"环形库码垛位{obj.Data2.DestPosition}搬运任务绑定条码信息{bcrCode}");
-                                taskNumber = task.ID;
-                            }
-                        });
-                        if (taskNumber == 0) return;
-                        //清空起始点信息
-                        var staDev = new Device<IStation520>(Device.All.FirstOrDefault(x => x.Code == obj.Data2.DestPosition.ToString())!, World);
-                        staDev.Data.TaskNumber = 0;
-                        staDev.Data.GoodsStart = 0;
-                        staDev.Data.GoodsEnd = 0;
-                        obj.Data2.TaskNumber = taskNumber;
-                        obj.Data.RES1 = 1;
-                        break;
+                                var db = _db.Default;
+                                if (isPalletizing)
+                                {
+                                    if (destPosition.HasFlag(DeviceFlags.桁架码垛位))
+                                    {
+                                        var palletizingInfo = db.Queryable<WCS_Palletizing>().First(x => x.Id == obj.Data.TaskNumber);
+                                        countQty = palletizingInfo.CountQty.ToShort();
+                                        shortCode = palletizingInfo.ShortCode;
+                                    }
+                                    else if (destPosition.HasFlag(DeviceFlags.环形库码垛工位))
+                                    {
+                                        var deliveryTask = db.Queryable<WCS_TaskInfo>().First(x => x.ID == obj.Data.TaskNumber);
+                                        countQty = deliveryTask.FullQty;
+                                        shortCode = deliveryTask.PalletType;
+                                        deliveryTask.Status = TaskStatus.RgvCompleted;
+                                        deliveryTask.EditTime = DateTime.Now;
+                                        deliveryTask.LastInteractionPoint = obj.Entity.Code;
+                                        db.Updateable(deliveryTask).ExecuteCommand();
+                                        deliveryTask.AddWCS_TASK_DTL(db, deliveryTask.AddrTo, $"RGV任务执行结束");
+                                    }
+                                }
+                            });
 
-                    case RGVCmdType.PutGoods:
-                        WCS_TaskInfo finishiTask = null;
-                        var startPosition = Device.All.Where(x => x.Code == obj.Data2.StartPosition.ToString()).Select(x => new Device<IStation520, IStation521, IStation523>(x, World)).FirstOrDefault();
-                        var destPosition = Device.All.FirstOrDefault(x => x.Code == obj.Data2.DestPosition.ToString());
-                        var isPalletizing = destPosition!.HasFlag(DeviceFlags.桁架码垛位, DeviceFlags.环形库码垛工位);
-                        short countQty = 0;
-                        short shortCode = 0;
-                        SqlSugarHelper.Do(_db =>
-                        {
-                            var db = _db.Default;
+                            //初始化起始点信息
+                            startPosition.Data.TaskNumber = 0;
+                            startPosition.Data.GoodsEnd = 0;
+                            //目标地址是码垛工位
                             if (isPalletizing)
                             {
                                 if (destPosition.HasFlag(DeviceFlags.桁架码垛位))
                                 {
-                                    var palletizingInfo = db.Queryable<WCS_Palletizing>().First(x => x.Id == obj.Data.TaskNumber);
-                                    countQty = palletizingInfo.CountQty.ToShort();
-                                    shortCode = palletizingInfo.ShortCode;
+                                    var dest = new Device<ITruss530>(destPosition!, World);
+                                    dest.Data.MaxQuantity = countQty;
+                                    dest.Data.Type = shortCode;
+                                    dest.Data.VoucherNo++;
                                 }
                                 else if (destPosition.HasFlag(DeviceFlags.环形库码垛工位))
                                 {
-                                    var deliveryTask = db.Queryable<WCS_TaskInfo>().First(x => x.ID == obj.Data.TaskNumber);
-                                    countQty = deliveryTask.FullQty;
-                                    shortCode = deliveryTask.PalletType;
-                                    deliveryTask.Status = TaskStatus.RgvCompleted;
-                                    deliveryTask.EditTime = DateTime.Now;
-                                    deliveryTask.LastInteractionPoint = obj.Entity.Code;
-                                    db.Updateable(deliveryTask).ExecuteCommand();
-                                    deliveryTask.AddWCS_TASK_DTL(db, deliveryTask.AddrTo, $"RGV任务执行结束");
+                                    var dest = new Device<IRobot530>(destPosition!, World);
+                                    dest.Data.MaxQuantity = countQty;
+                                    dest.Data.Type = shortCode;
+                                    dest.Data.VoucherNo++;
                                 }
                             }
-                        });
+                            obj.Data.RES1 = 1;
+                            break;
 
-                        //初始化起始点信息
-                        startPosition.Data.TaskNumber = 0;
-                        startPosition.Data.GoodsEnd = 0;
-                        //目标地址是码垛工位
-                        if (isPalletizing)
-                        {
-                            if (destPosition.HasFlag(DeviceFlags.桁架码垛位))
-                            {
-                                var dest = new Device<ITruss530>(destPosition!, World);
-                                dest.Data.MaxQuantity = countQty;
-                                dest.Data.Type = shortCode;
-                                dest.Data.VoucherNo++;
-                            }
-                            else if (destPosition.HasFlag(DeviceFlags.环形库码垛工位))
-                            {
-                                var dest = new Device<IRobot530>(destPosition!, World);
-                                dest.Data.MaxQuantity = countQty;
-                                dest.Data.Type = shortCode;
-                                dest.Data.VoucherNo++;
-                            }
-                        }
-                        obj.Data.RES1 = 1;
-                        break;
+                        case RGVCmdType.Move:
+                            obj.Data.RES1 = 1;
+                            break;
 
-                    case RGVCmdType.Move:
-                        obj.Data.RES1 = 1;
-                        break;
+                        case RGVCmdType.ChangePutGoods:
+                            break;
 
-                    case RGVCmdType.ChangePutGoods:
-                        break;
+                        case RGVCmdType.ChangePickGoods:
+                            break;
 
-                    case RGVCmdType.ChangePickGoods:
-                        break;
+                        case RGVCmdType.PickPutGoods:
+                            staDev = new Device<IStation520, IStation521>(Device.All.FirstOrDefault(x => x.Code == obj.Data.DestPosition.ToString())!, World);
+                            staDev.Data.TaskNumber = 0;
+                            staDev.Data.GoodsStart = 0;
+                            staDev.Data.GoodsEnd = 0;
+                            obj.Data.RES1 = 1;
+                            break;
 
-                    case RGVCmdType.PickPutGoods:
-                        staDev = new Device<IStation520, IStation521>(Device.All.FirstOrDefault(x => x.Code == obj.Data.DestPosition.ToString())!, World);
-                        staDev.Data.TaskNumber = 0;
-                        staDev.Data.GoodsStart = 0;
-                        staDev.Data.GoodsEnd = 0;
-                        obj.Data.RES1 = 1;
-                        break;
-
-                    default:
-                        throw new ArgumentOutOfRangeException();
+                        default:
+                            throw new ArgumentOutOfRangeException();
+                    }
+                    return;
                 }
-                return;
-            }
 
-            if (obj.Data2.SystemStatus != RGVSystemStatus.空闲) return;
+                if (obj.Data2.SystemStatus != RGVSystemStatus.空闲) return;
 
-            if (obj.Data2.Status.HasFlag(RGVStatus.RES1)) //离开非安全区域
-            {
-                obj.Data.TaskNumber = obj.Data.TaskNumber;
-                obj.Data.CmdType = RGVCmdType.Move;
-                obj.Data.DestPosition = obj.Entity.Code switch
-                {
-                    "RGV1" => 1668,
-                    "RGV2" => 1683,
-                    "RGV3" => 1698,
-                    "RGV4" => 1713,
-                    "RGV5" => 1728,
-                    "RGV6" => 1743,
-                    _ => throw new ArgumentOutOfRangeException()
-                };
-                obj.Data.VoucherNo++;
-                return;
-            }
-
-            if (obj.Data2.CmdType == RGVCmdType.PickGoods && !obj.Data2.Status.HasFlag(RGVStatus.Taskfinishi))
-            {
-                if (obj.Data2.Status.HasFlag(RGVStatus.PH_Status))
+                if (obj.Data2.Status.HasFlag(RGVStatus.RES1)) //离开非安全区域
                 {
                     obj.Data.TaskNumber = obj.Data.TaskNumber;
-                    obj.Data.CmdType = RGVCmdType.PutGoods;
-                    obj.Data.StartPosition = obj.Data2.StartPosition;
-                    obj.Data.DestPosition = obj.Data2.DestPosition;
+                    obj.Data.CmdType = RGVCmdType.Move;
+                    obj.Data.DestPosition = obj.Entity.Code switch
+                    {
+                        "RGV1" => 1668,
+                        "RGV2" => 1683,
+                        "RGV3" => 1698,
+                        "RGV4" => 1713,
+                        "RGV5" => 1728,
+                        "RGV6" => 1743,
+                        _ => throw new ArgumentOutOfRangeException()
+                    };
                     obj.Data.VoucherNo++;
                     return;
                 }
-            }
-            var pickUpDevices = _pickUpDevices.FirstOrDefault(x => x.Key == obj.Entity.Code).Value;
 
-            //有货且需要搬运货物的站台
-            var devs = pickUpDevices.Where(v => v.Data3.Status.HasFlag(StationStatus.PH_Status) && v.Data.TaskNumber != 0)
-                                                  .Where(v => v.Entity.Code.ToShort() != v.Data.GoodsEnd && v.Data.GoodsEnd != 0)
-                                                  .ToList();
-            //筛选出目标站台无货的站台
-            var putDev = obj.Entity.Targets.Where(x => x.HasFlag(DeviceFlags.输送机))
-                .Select(x => new Device<IStation520, IStation521, IStation523>(x, World))
-                .Where(x => !x.Data3.Status.HasFlag(StationStatus.PH_Status))
-                .Select(x => x.Entity.Code.ToShort());
-            var devList = devs.OrderBy(x => x.Entity.Code).Where(x => putDev.Contains(x.Data.GoodsEnd));
+                if (obj.Data2.CmdType == RGVCmdType.PickGoods && !obj.Data2.Status.HasFlag(RGVStatus.Taskfinishi))
+                {
+                    if (obj.Data2.Status.HasFlag(RGVStatus.PH_Status))
+                    {
+                        obj.Data.TaskNumber = obj.Data.TaskNumber;
+                        obj.Data.CmdType = RGVCmdType.PutGoods;
+                        obj.Data.StartPosition = obj.Data2.StartPosition;
+                        obj.Data.DestPosition = obj.Data2.DestPosition;
+                        obj.Data.VoucherNo++;
+                        return;
+                    }
+                }
+                var pickUpDevices = _pickUpDevices.FirstOrDefault(x => x.Key == obj.Entity.Code).Value;
+
+                //有货且需要搬运货物的站台
+                var devs = pickUpDevices.Where(v => v.Data3.Status.HasFlag(StationStatus.PH_Status) && v.Data.TaskNumber != 0)
+                                                      .Where(v => v.Entity.Code.ToShort() != v.Data.GoodsEnd && v.Data.GoodsEnd != 0)
+                                                      .ToList();
+                //筛选出目标站台无货的站台
+                var putDev = obj.Entity.Targets.Where(x => x.HasFlag(DeviceFlags.输送机))
+                    .Select(x => new Device<IStation520, IStation521, IStation523>(x, World))
+                    .Where(x => !x.Data3.Status.HasFlag(StationStatus.PH_Status))
+                    .Select(x => x.Entity.Code.ToShort());
+                var devList = devs.OrderBy(x => x.Entity.Code).Where(x => putDev.Contains(x.Data.GoodsEnd));
 
-            foreach (var dev in devList)
-            {
-                //区分任务是拆盘机到码垛工位,还是码垛工位到拆盘机
-                if (dev.Entity.HasFlag(DeviceFlags.拆盘机09, DeviceFlags.拆盘机非09))
+                foreach (var dev in devList)
                 {
-                    obj.Data.TaskNumber = dev.Data.TaskNumber;
-                    obj.Data.CmdType = RGVCmdType.PickGoods;
+                    //区分任务是拆盘机到码垛工位,还是码垛工位到拆盘机
+                    if (dev.Entity.HasFlag(DeviceFlags.拆盘机09, DeviceFlags.拆盘机非09))
+                    {
+                        obj.Data.TaskNumber = dev.Data.TaskNumber;
+                        obj.Data.CmdType = RGVCmdType.PickGoods;
+                        obj.Data.StartPosition = dev.Entity.Code.ToShort();
+                        obj.Data.DestPosition = dev.Data.GoodsEnd;
+                        obj.Data.VoucherNo++;
+                        return;
+                    }
+
+                    //非拆盘机起始任务
+                    //站台中的任务号
+                    WCS_TaskInfo task = null;
+                    SqlSugarHelper.Do(_db =>
+                    {
+                        var db = _db.Default;
+                        var taskInfo = db.Queryable<WCS_TaskInfo>().First(p => p.ID == dev.Data.TaskNumber && p.Status == TaskStatus.ConveyorExecution);
+                        if (taskInfo == null) return;
+                        taskInfo.Status = TaskStatus.RgvExecution;
+                        taskInfo.AddrNext = obj.Entity.Code;
+                        taskInfo.EditWho = "WCS";
+                        taskInfo.EditTime = DateTime.Now; ;
+                        db.Updateable(taskInfo).ExecuteCommand();
+                        taskInfo.AddWCS_TASK_DTL(db, dev.Entity.Code, obj.Entity.Code, $"任务分配至{obj.Entity.Code}");
+                        task = taskInfo;
+                    });
+                    if (task == null) continue;
+                    obj.Data.TaskNumber = task.ID;
+                    obj.Data.CmdType = RGVCmdType.PickPutGoods;
                     obj.Data.StartPosition = dev.Entity.Code.ToShort();
                     obj.Data.DestPosition = dev.Data.GoodsEnd;
                     obj.Data.VoucherNo++;
                     return;
                 }
-
-                //非拆盘机起始任务
-                //站台中的任务号
-                WCS_TaskInfo task = null;
-                SqlSugarHelper.Do(_db =>
+            }
+            catch (Exception ex)
+            {
+                if (ex.Message == "Destination array was not long enough. Check the destination index, length, and the array's lower bounds")
+                {
+                    World.Log($"未知异常:{ex.StackTrace}");
+                }
+                else if (ex.Message == "Number was less than the array's lower bound in the first dimension")
                 {
-                    var db = _db.Default;
-                    var taskInfo = db.Queryable<WCS_TaskInfo>().First(p => p.ID == dev.Data.TaskNumber && p.Status == TaskStatus.ConveyorExecution);
-                    if (taskInfo == null) return;
-                    taskInfo.Status = TaskStatus.RgvExecution;
-                    taskInfo.AddrNext = obj.Entity.Code;
-                    taskInfo.EditWho = "WCS";
-                    taskInfo.EditTime = DateTime.Now; ;
-                    db.Updateable(taskInfo).ExecuteCommand();
-                    taskInfo.AddWCS_TASK_DTL(db, dev.Entity.Code, obj.Entity.Code, $"任务分配至{obj.Entity.Code}");
-                    task = taskInfo;
-                });
-                if (task == null) continue;
-                obj.Data.TaskNumber = task.ID;
-                obj.Data.CmdType = RGVCmdType.PickPutGoods;
-                obj.Data.StartPosition = dev.Entity.Code.ToShort();
-                obj.Data.DestPosition = dev.Data.GoodsEnd;
-                obj.Data.VoucherNo++;
-                return;
+                    World.Log($"未知异常:{ex.StackTrace}");
+                }
+                else throw new KnownException(ex.Message, LogLevelEnum.Mid);
             }
         }
 

+ 2 - 2
业务工程/分拣库/WCS.WorkEngineering/Systems/SrmSystems.cs

@@ -328,7 +328,7 @@ namespace WCS.WorkEngineering.Systems
                                                 && !v.Data3.Status.HasFlag(StationStatus.UnassignedTask) //未分配任务
                                                 && v.Data3.Status.HasFlag(StationStatus.Auto)).ToList(); //自动
 
-                if (!arrOut.Any()) throw new KnownException($"[{obj.Entity.Code}]等待出库任务输送到位", LogLevelEnum.Mid);
+                if (!arrOut.Any()) throw new KnownException($"[{obj.Entity.Code}]无可用放货站台", LogLevelEnum.Mid);
 
                 WCS_TaskInfo taskInfo = null;
 
@@ -372,7 +372,7 @@ namespace WCS.WorkEngineering.Systems
 
         public override bool Select(Device dev)
         {
-            return dev.HasProtocol(typeof(ISRM520));
+            return dev.Code is "SRM1" or "SRM2" or "SRM3" or "SRM4" or "SRM5" or "SRM6";
         }
     }
 }

+ 50 - 15
业务工程/分拣库/WCS.WorkEngineering/Systems/UpLoadSystems.cs

@@ -27,34 +27,40 @@ namespace WCS.WorkEngineering.Systems
             //更新出库放货完成状态
             SqlSugarHelper.Do(_db =>
             {
+                var taskIdList = new List<int>();
+                var nowTime = DateTime.Now;
+
                 var db = _db.Default;
                 var taskList = db.Queryable<WCS_TaskInfo>().Where(x => x.Type == TaskType.OutDepot && x.Status == TaskStatus.ConveyorExecution && x.Uploaded != TaskStatus.ConveyorExecution).ToList();
 
                 foreach (var task in taskList)
                 {
                     var res = WmsApi.SrmPickOutCompleted(task.ID);
-                    if (res.ResCode == ResponseStatusCodeEnum.Sucess) //更新成功
-                    {
-                        task.Uploaded = TaskStatus.ConveyorExecution;
-                        task.EditTime = DateTime.Now;
-                        db.Updateable(task).ExecuteCommand();
-                        task.AddWCS_TASK_DTL(db, "", $"同步出库任务放货完成状态同步至WMS");
-                    }
-                    else
-                    {
-                        World.Log($"出库放货完成状态同步失败:{task.ID}[{res.ResMsg}]");
-                    }
+                    if (res.ResCode == ResponseStatusCodeEnum.Sucess) taskIdList.Add(task.ID); //更新成功
+                    else World.Log($"出库放货完成状态同步失败:{task.ID}[{res.ResMsg}]");
+                }
+
+                //拆分防止锁表
+                foreach (var taskId in taskIdList)
+                {
+                    var task = db.Queryable<WCS_TaskInfo>().SplitTable(x => x.Take(2)).First(x => x.ID == taskId);
+                    task.Uploaded = TaskStatus.ConveyorExecution;
+                    task.EditTime = DateTime.Now;
+                    db.Updateable(task).ExecuteCommand();
+                    task.AddWCS_TASK_DTL(db, "", $"同步出库任务放货完成状态同步至WMS");
                 }
             });
 
-            var taskIdList = new List<int>();
-            var nowTime = DateTime.Now;
-            //环形库组盘任务/立库入库任务 更新完成
+            //环形库组盘任务/立库入库任务/二楼立库出库 更新完成
             SqlSugarHelper.Do(_db =>
             {
+                var taskIdList = new List<int>();
+                var nowTime = DateTime.Now;
                 var db = _db.Default;
                 var taskList = db.Queryable<WCS_TaskOld>().SplitTable(x => x.Take(2))
-                    .Where(x => ((x.Type == TaskType.SetPlate && x.WarehouseCode.Contains("R")) || (x.Type == TaskType.EnterDepot && !x.WarehouseCode.Contains("R")))
+                    .Where(x =>
+                                ((x.Type == TaskType.SetPlate && x.WarehouseCode.Contains("R"))
+                                 || ((x.Type == TaskType.EnterDepot || x.Type == TaskType.OutDepot) && !x.WarehouseCode.Contains("R")))
                                 && x.Status == TaskStatus.Finish
                                 && x.Uploaded != TaskStatus.Finish).ToList();
 
@@ -75,6 +81,35 @@ namespace WCS.WorkEngineering.Systems
                     task.AddWCS_TASK_DTL(db, "", $"同步入库完成状态同步至WMS");
                 }
             });
+
+            ////立库二楼出库更新完成
+            //SqlSugarHelper.Do(_db =>
+            //{
+            //    var taskIdList = new List<int>();
+            //    var nowTime = DateTime.Now;
+            //    var db = _db.Default;
+            //    var taskList = db.Queryable<WCS_TaskOld>().SplitTable(x => x.Take(2))
+            //        .Where(x => ((x.Type == TaskType.SetPlate && x.WarehouseCode.Contains("R")) || (x.Type == TaskType.EnterDepot && !x.WarehouseCode.Contains("R")))
+            //                    && x.Status == TaskStatus.Finish
+            //                    && x.Uploaded != TaskStatus.Finish).ToList();
+
+            //    foreach (var task in taskList)
+            //    {
+            //        var res = WmsApi.CompleteTask(task.Id);
+            //        if (res.ResCode == ResponseStatusCodeEnum.Sucess) taskIdList.Add(task.Id);
+            //        else World.Log($"入库完成状态同步失败:{task.Id}[{res.ResMsg}]");
+            //    }
+
+            //    //拆分防止锁表
+            //    foreach (var taskId in taskIdList)
+            //    {
+            //        var task = db.Queryable<WCS_TaskOld>().SplitTable(x => x.Take(2)).First(x => x.Id == taskId);
+            //        task.Uploaded = TaskStatus.Finish;
+            //        task.EditTime = nowTime;
+            //        db.Updateable(task).SplitTable(x => x.Take(2)).ExecuteCommand();
+            //        task.AddWCS_TASK_DTL(db, "", $"同步入库完成状态同步至WMS");
+            //    }
+            //});
         }
 
         public override bool Select(Device dev)

+ 1 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/环形库/环形库码垛区补空托盘任务生成.cs

@@ -31,7 +31,7 @@ namespace WCS.WorkEngineering.Systems
             {
                 var db = _db.Default;
                 //检查是否有待执行状态放货点是自己的出库任务
-                var ringTask = db.Queryable<WCS_TaskInfo>().First(x => x.Type == TaskType.OutDepot && x.Status == TaskStatus.WaitingToExecute && x.SrmStation == obj.Entity.Code);
+                var ringTask = db.Queryable<WCS_TaskInfo>().First(x => x.Type == TaskType.OutDepot && x.Status <= TaskStatus.WaitingToExecute && x.SrmStation == obj.Entity.Code);
                 if (ringTask == null)
                 {
                     //开始申请码垛任务

+ 1 - 1
业务工程/分拣库/WCS.WorkEngineering/WorkStart.cs

@@ -1076,7 +1076,7 @@ namespace WCS.WorkEngineering
                 { DeviceFlags.拆盘机09, new List<string>(){ "1606","1616","1626","1636","1646","1656" } },
                 { DeviceFlags.拆盘机非09, new List<string>(){ "1602","1612","1622","1632","1642","1652" } },
                 { DeviceFlags.桁架码垛位, new List<string>(){ "1670", "1671", "1672", "1673", "1674", "1675","1664","1662","1663","1665","1677","1678","1679","1680","1685","1686","1687","1688","1689","1690", "1692", "1693", "1694", "1695", "1700", "1701", "1702", "1703", "1704", "1705", "1707", "1708", "1709", "1710", "1715", "1716", "1717", "1718", "1719", "1720", "1722", "1723", "1724", "1725", "1730", "1731", "1732", "1733", "1734", "1735", "1737", "1738", "1739", "1740", "1745", "1746", "1747", "1748", "1749", "1750" } },
-                { DeviceFlags.环形库码垛工位, new List<string>(){ "1666", "1661"/*,"1676","1681", "1691", "1696", "1706", "1711", "1721", "1726", "1736", "1741"*/ } },
+                { DeviceFlags.环形库码垛工位, new List<string>(){ "1666", "1661", /*"1676",*/ "1681"/*, "1691", "1696", "1706", "1711", "1721", "1726", "1736", "1741"*/ } },
                 { DeviceFlags.AGV取货站台口, new List<string>(){ "2533", "2534", "2734","2733","2934","2933","3133","3134","3333","3334","3533","3534" } },
                 { DeviceFlags.Robot, new List<string>(){ "Robot1", "Robot2", "Robot3","Robot4" , "Robot5", "Robot6" } },
         };