林豪 左 1 年間 前
コミット
02cb262263

+ 3 - 4
业务工程/分拣库/WCS.WorkEngineering/Systems/分拣主线/满轮主线预写入目标地址.cs

@@ -33,7 +33,8 @@ namespace WCS.WorkEngineering.Systems
             //缓存条码组
             var cacheBcrList = obj.Data3.GetBcrCodeList();
             var codes = pendingBcrList.Where(x => !cacheBcrList.Contains(x));
-            World.Log($"预分配点:{JsonConvert.SerializeObject(cacheBcrList)}");
+            World.Log($"扫码器:{JsonConvert.SerializeObject(pendingBcrList)}");
+            World.Log($"缓存信息:{JsonConvert.SerializeObject(cacheBcrList)}");
             //循环处理所有缓存条码组中没有的条码
             foreach (var bcrCode in codes)
             {
@@ -88,13 +89,11 @@ namespace WCS.WorkEngineering.Systems
                     obj.Data3.NextIndex++;
                 }
             }
-
-            World.Log($"预分配信息:{JsonConvert.SerializeObject(obj.Data3.GetBcrCodeList())}");
         }
 
         public override bool Select(Device dev)
         {
-            return dev.Code == "18";
+            return dev.Code is "18" or "118";
         }
     }
 

+ 13 - 3
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架.cs

@@ -108,7 +108,13 @@ namespace WCS.WorkEngineering.Systems
             if (obj.Data2.Status != TrussStatus.Idle) return;
 
             //查找所有的可用开始搬运的线体
-            var pickUpDevices = _pickUpDevices.Where(x => x.Key.Data2.Status1.HasFlag(StationStatus1.IsLock)).ToList();
+            var pickUpDevices = _pickUpDevices.Where(v => v.Value.All(x => !x.Data2.Status.HasFlag(StationStatus.Run) && x.Data2.Status.HasFlag(StationStatus.Auto)))
+                .Select(x => new
+                {
+                    key = x.Key.Entity.Code,
+                    Count = x.Value.Count(v => v.Data2.Status.HasFlag(StationStatus.PH_Status) && v.Data.TaskNumber > 0),
+                    Dev = x
+                }).ToList();
 
             List<WCS_PalletizingRow> palletizingRowList = null;
             WCS_Palletizing palletizing = null;
@@ -159,7 +165,11 @@ namespace WCS.WorkEngineering.Systems
                         .MinBy(x => x.LayerNo)
                         .Rows
                         .Where(x => x is { Finish: false, IsEmpty: false, LineCode: not null })
-                        .Where(x => pickUpDevices.Select(p => p.Key.Entity.Code).Contains(x.LineCode))
+                        .Where(x =>
+                        {
+                            var devs = pickUpDevices.Where(p => p.Count == x.QtyMaxCount).Select(v => v.key);
+                            return devs.Contains(x.LineCode);
+                        })
                         .OrderBy(x => x.RowNo)
                         .Take(2)
                         .ToList();
@@ -191,7 +201,7 @@ namespace WCS.WorkEngineering.Systems
             {
                 var palletizingRow = palletizingRowList[i];
                 var locs = palletizingRow.Locs.OrderBy(x => x.XYNo.ToInt()).ToArray();
-                var devs = pickUpDevices.FirstOrDefault(x => x.Key.Entity.Code == palletizingRow.LineCode).Value
+                var devs = pickUpDevices.FirstOrDefault(x => x.key == palletizingRow.LineCode).Dev.Value
                     .OrderBy(x => x.Entity.Code).ToArray();
 
                 switch (i)

+ 2 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架码垛工位任务结束处理.cs

@@ -1,4 +1,5 @@
 using ServiceCenter.Extensions;
+using ServiceCenter.Logs;
 using ServiceCenter.SqlSugars;
 using System.ComponentModel;
 using WCS.Core;
@@ -45,7 +46,7 @@ namespace WCS.WorkEngineering.Systems
                 var taskCodes = taskList.Select(x => x.BarCode).ToList();
                 if (!obj.Data5.CmdType.HasFlag(TrussCmdType.End1))
                 {
-                    if (taskList.Count != TaskNoList.Count) return;
+                    if (taskList.Count != TaskNoList.Count) throw new KnownException($"任务数量不一致!,请检查托盘任务信息", LogLevelEnum.Mid);
                 }
                 var taskInfo = db.Queryable<WCS_TaskInfo>().Single(x => x.BarCode == palletizing.PalleCode && x.Type == TaskType.EnterDepot && x.Status == TaskStatus.WaitingToExecute);
                 if (taskInfo == null)

+ 3 - 0
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架缓存放行点.cs

@@ -53,6 +53,9 @@ namespace WCS.WorkEngineering.Systems
                 {
                     //判断下一个地址当前是否有对应的任务
                     if (db.Queryable<WCS_CacheLine>().Any(x => x.LocationNo == nextCode && x.IsTruss == false)) return;
+                    //下一个地址没有光电
+                    var dev = new Device<IStation523>(Device.All.First(x => x.Code == nextCode.ToString()), World);
+                    if (dev.Data.Status.HasFlag(StationStatus.PH_Status)) return;
                     //没有对应的任务,开始释放缓存
                     cacheLine.InStock = true;
                     cacheLine.LocationNo = devCode.Code.ToShort();

+ 16 - 9
业务工程/分拣库/WCS.WorkEngineering/Systems/环形库/机械臂cs.cs

@@ -102,10 +102,17 @@ namespace WCS.WorkEngineering.Systems
                 if (!tasks.Any()) throw new KnownException("数据库提交事务错误", LogLevelEnum.High);
                 foreach (var task in tasks)
                 {
-                    //通知WMS任务完成
-                    if (task.Status == TaskStatus.Finish) WmsApi.CompleteTask(task.ID);
-                    //如果是出库任务,上报放货完成
-                    if (task is { Type: TaskType.OutDepot, Status: TaskStatus.ConveyorExecution }) WmsApi.SrmPickOutCompleted(task.ID);
+                    try
+                    {
+                        //通知WMS任务完成
+                        if (task.Status == TaskStatus.Finish) WmsApi.CompleteTask(task.ID);
+                        //如果是出库任务,上报放货完成
+                        if (task is { Type: TaskType.OutDepot, Status: TaskStatus.ConveyorExecution }) WmsApi.SrmPickOutCompleted(task.ID);
+                    }
+                    catch (Exception e)
+                    {
+                        World.Log(e.Message);
+                    }
                 }
 
                 // 写入信号
@@ -294,11 +301,10 @@ namespace WCS.WorkEngineering.Systems
                             var allOutCode = arrOut.Select(v => v.Entity.Code).ToList();
                             //TODO:两个工位同时码垛,并不会一个执行一次,只有一个托盘任务全部执行完毕,才会继续执行下一个,设备号较小的码垛工位会优先执行
                             var taskInfos = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == Entity.TaskStatus.WaitingToExecute)
-                                                                                                    .Where(v => allOutCode.Contains(v.SrmStation)).ToList()
-                                                                                                    .OrderBy(x => x.SrmStation.ToInt()) //按照码垛站台号进行一次排序
-                                                                                                    .ThenBy(x => x.ProdLine) //码垛从小到大
-                                                                                                    .ThenBy(x => x.AddTime)//任务生成时间从早到晚
-                                                                                                    .Take(2).ToList();
+                                                                                                    .Where(v => allOutCode.Contains(v.SrmStation)).ToList();
+                            var srmStation = taskInfos.OrderBy(x => x.AddTime).First().SrmStation;
+                            taskInfos = taskInfos.Where(x => x.SrmStation == srmStation).OrderBy(x => x.ProdLine).Take(2).ToList();
+
                             if (taskInfos.Count == 2) //有两个任务
                             {
                                 var minDepth = taskInfos!.MinBy(x => x.Depth);
@@ -314,6 +320,7 @@ namespace WCS.WorkEngineering.Systems
                             {
                                 task.Status = Entity.TaskStatus.StackerExecution;
                                 task.LastInteractionPoint = task.Device;
+                                task.StartTime = DateTime.Now;
                                 task.EditWho = "WCS";
                                 nextAdd = task.SrmStation;
                                 db.Default.Updateable(task).ExecuteCommand();

+ 5 - 2
业务工程/分拣库/WCS.WorkEngineering/Systems/环形库/环形库码垛结束.cs

@@ -29,7 +29,10 @@ namespace WCS.WorkEngineering.Systems.环形库
 
         public override void Do(Device<IStation520, IStation521, IStation523, IRobot530, IRobot531> obj)
         {
-            if (!obj.Data5.CmdType.HasFlag(RobotCmdType.End)) obj.Data4.CmdType = 0;
+            if (!obj.Data5.CmdType.HasFlag(RobotCmdType.End))
+            {
+                obj.Data4.CmdType = 0;
+            }
             if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status)) return;
             if (!obj.Data5.CmdType.HasFlag(RobotCmdType.End)) return;
             if (obj.Data5.MaxQuantity != obj.Data5.Quantity || obj.Data5.Quantity == 0 || obj.Data5.MaxQuantity == 0) throw new KnownException($"码垛数量异常:最大码垛数量[{obj.Data5.MaxQuantity}]已码数量{obj.Data5.Quantity}", LogLevelEnum.High);
@@ -57,7 +60,7 @@ namespace WCS.WorkEngineering.Systems.环形库
                 foreach (var item in tasks)
                 {
                     item.Status = TaskStatus.Finish;
-                    item.EditTime = DateTime.Now;
+                    item.EedTime = DateTime.Now;
                     db.Updateable(item).ExecuteCommand();
                     item.AddWCS_TASK_DTL(db, obj.Entity.Code, "任务结束");
                 }

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

@@ -115,14 +115,15 @@ namespace WCS.WorkEngineering
             {
                 new("10.30.37.166",new List<Tuple<int, int>>()
                 {
-                    new(1, 110),
+                    new(1, 100),
+                    new(1001, 1010),
                     new(401, 599),
                 }),
-                //new("10.30.37.198",new List<Tuple<int, int>>()
-                //{
-                //    new(101, 210),
-                //    new(601, 799),
-                //})
+                new("10.30.37.198",new List<Tuple<int, int>>()
+                {
+                    new(101, 210),
+                    new(601, 799),
+                })
             };
 
             foreach (var item in mLtuples523)
@@ -436,10 +437,13 @@ namespace WCS.WorkEngineering
                 //一楼AGV入口
                 //主线入口--预分配点
                 new RouteInfo("1", new string[] { "18" }),
+                new RouteInfo("101", new string[] { "118" }),
                 //预分配点--主线分流点
                 new RouteInfo("18", new string[] { "22" }),
+                  new RouteInfo("118", new string[] { "122" }),
                 //主线分流点--环形库分流点
                 new RouteInfo("22", new string[] { "418" }),
+                new RouteInfo("122", new string[] { "618" }),
                 //环形库分流点--环形库取货点
                 new RouteInfo("418", new string[] { "424","433","442" }),
                 //环形库分流点--桁架分流点
@@ -536,7 +540,10 @@ namespace WCS.WorkEngineering
                 //环形库一北侧机械手取货位
                 new("424",new List<string> {"424","425"}),
                 new("433",new List<string> {"433","434"}),
-                new("442",new List<string> {"442","443"})
+                new("442",new List<string> {"442","443"}),
+                //new("624",new List<string> {"624","625"}),
+                //new("633",new List<string> {"633","634"}),
+                //new("642",new List<string> {"642","643"})
             };
             foreach (var item in tuples2)
             {