gkj 2 лет назад
Родитель
Сommit
129bcb9b33

+ 16 - 47
WCS.WorkEngineering/Extensions/TaskExtension.cs

@@ -102,53 +102,22 @@ namespace WCS.WorkEngineering.Extensions
             }
         }
 
-        /// <summary>
-        ///  获取出库任务
-        /// </summary>
-        /// <param name="taskInfo">任务</param>
-        /// <param name="db">db</param>
-        /// <param name="allOutCode">可用出库站台</param>
-        /// <param name="floor">楼层</param>
-        /// <param name="obj">堆垛机</param>
-        /// <param name="index">递归次数</param>
-        /// <returns></returns>
-        /// <exception cref="KnownException"></exception>
-        public static WCS_TaskInfo GetOutTask(this WCS_TaskInfo taskInfo, SqlSugarHelper db, List<string> allOutCode, int floor, SRM obj, int index = 1)
-        {
-            //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层
-            var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
-                                                           .Where(v => allOutCode.Contains(v.SrmStation))
-                                                           .OrderByDescending(v => v.Priority)
-                                                           .OrderByDescending(v => v.Floor == floor ? 1 : 0)
-                                                           .Take(index).ToList();
-            if (!tasks.Any()) throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High);
-            var task = tasks.ToArray()[tasks.Count - 1];
-
-            //判断是否是二深位任务
-            var addrFrom = task.AddrFrom.Split("-");
-            if (addrFrom[4] == "02")
-            {
-                var res = WmsApi.AddWcsMoveTask(task.ID);
-                switch (res.ResData.ResType)
-                {
-                    case WmsApiMoveTask.允许2升位执行:
-                        break;
-
-                    case WmsApiMoveTask.执行移库任务:
-                        throw new KnownException($"堆垛机{obj.Entity.Code}需要先执行移库任务", LogLevelEnum.Mid);
-
-                    case WmsApiMoveTask.一深位有出库任务:
-                        task = db.Default.Queryable<WCS_TaskInfo>()
-                                         .Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
-                                         .Where(v => allOutCode.Contains(v.SrmStation) && v.AddrFrom == res.ResData.CellNo)
-                                         .First();
-                        if (task == null) task.GetOutTask(db, allOutCode, floor, obj, index + 1);
-                        break;
-                };
-            }
-
-            return task;
-        }
+        ///// <summary>
+        /////  获取出库任务
+        ///// </summary>
+        ///// <param name="taskInfo">任务</param>
+        ///// <param name="db">db</param>
+        ///// <param name="allOutCode">可用出库站台</param>
+        ///// <param name="floor">楼层</param>
+        ///// <param name="obj">堆垛机</param>
+        ///// <param name="index">递归次数</param>
+        ///// <returns></returns>
+        ///// <exception cref="KnownException"></exception>
+        //public static WCS_TaskInfo GetOutTask(this WCS_TaskInfo taskInfo, SqlSugarHelper db, List<string> allOutCode, int floor, SRM obj, int index = 1)
+        //{
+            
+        //    return task;
+        //}
 
         /// <summary>
         /// 获取AGV任务ID

+ 91 - 84
WCS.WorkEngineering/Systems/DataCollectionSysyem.cs

@@ -46,96 +46,103 @@ namespace WCS.Service.Systems
 
         public override void Do(SRM obj)
         {
-            SqlSugarHelper.Do(db =>
-            {
-                DeviceDataPack pack = new DeviceDataPack();
+            //try
+            //{
+            //    SqlSugarHelper.Do(db =>
+            //    {
+            //        DeviceDataPack pack = new DeviceDataPack();
 
-                //处理输送线
-                List<StationData> DevList = new List<StationData>();
-                foreach (var item in ConvList)
-                {
-                    var dev = new StationData()
-                    {
-                        Code = item.Entity.Code,
-                        Frame = DateTime.Now,
-                        D520 = TypeExtension.Mapper<WCS_Station520, IStation520>(item.Data),
-                        D521 = TypeExtension.Mapper<WCS_Station521, IStation521>(item.Data2),
-                        D523 = TypeExtension.Mapper<WCS_Station523, IStation523>(item.Data3),
-                        D90 = new WCS_Station90(),
-                        D91 = new WCS_Station91(),
-                        D80 = new WCS_BCR80(),
-                        D81 = new WCS_BCR81()
-                    };
-                    if (Conv91List.Any(v => v.Entity.Code == item.Entity.Code))
-                    {
-                        var d91 = Conv91List.First(v => v.Entity.Code == item.Entity.Code);
-                        dev.D91 = TypeExtension.Mapper<WCS_Station91, IStation91>(d91.Data);
-                    }
-                    if (Bcrs.Any(v => v.Entity.Code == item.Entity.Code))
-                    {
-                        var d81 = Bcrs.First(v => v.Entity.Code == item.Entity.Code);
-                        dev.D81 = TypeExtension.Mapper<WCS_BCR81, IBCR81>(d81.Data);
-                    }
-                    //保存报警
-                    RedisHub.WMS.Set($"{nameof(EquipmentAlarm)}:{item.Entity.Code}", JsonConvert.SerializeObject(new EquipmentAlarm()
-                    {
-                        Code = item.Entity.Code,
-                        Msg = item.Data3.Alarm.ToString(),
-                        Time = DateTime.Now
-                    }));
+            //        //处理输送线
+            //        List<StationData> DevList = new List<StationData>();
+            //        foreach (var item in ConvList)
+            //        {
+            //            var dev = new StationData()
+            //            {
+            //                Code = item.Entity.Code,
+            //                Frame = DateTime.Now,
+            //                D520 = TypeExtension.Mapper<WCS_Station520, IStation520>(item.Data),
+            //                D521 = TypeExtension.Mapper<WCS_Station521, IStation521>(item.Data2),
+            //                D523 = TypeExtension.Mapper<WCS_Station523, IStation523>(item.Data3),
+            //                D90 = new WCS_Station90(),
+            //                D91 = new WCS_Station91(),
+            //                D80 = new WCS_BCR80(),
+            //                D81 = new WCS_BCR81()
+            //            };
+            //            if (Conv91List.Any(v => v.Entity.Code == item.Entity.Code))
+            //            {
+            //                var d91 = Conv91List.First(v => v.Entity.Code == item.Entity.Code);
+            //                dev.D91 = TypeExtension.Mapper<WCS_Station91, IStation91>(d91.Data);
+            //            }
+            //            if (Bcrs.Any(v => v.Entity.Code == item.Entity.Code))
+            //            {
+            //                var d81 = Bcrs.First(v => v.Entity.Code == item.Entity.Code);
+            //                dev.D81 = TypeExtension.Mapper<WCS_BCR81, IBCR81>(d81.Data);
+            //            }
+            //            //保存报警
+            //            RedisHub.WMS.Set($"{nameof(EquipmentAlarm)}:{item.Entity.Code}", JsonConvert.SerializeObject(new EquipmentAlarm()
+            //            {
+            //                Code = item.Entity.Code,
+            //                Msg = item.Data3.Alarm.ToString(),
+            //                Time = DateTime.Now
+            //            }));
 
-                    DevList.Add(dev);
-                }
-                //保存模式
-                var status = ConvList.Select(v => new Tuple<string, string>(v.Entity.Code, v.Data2.Mode.ToString()));
-                RedisHub.WMS.Set($"ConvStatus", JsonConvert.SerializeObject(status));
-                pack.StationDatas = new DeviceDataCollection<StationData>(DateTime.Now, DevList.ToArray());
+            //            DevList.Add(dev);
+            //        }
+            //        //保存模式
+            //        var status = ConvList.Select(v => new Tuple<string, string>(v.Entity.Code, v.Data2.Mode.ToString()));
+            //        RedisHub.WMS.Set($"ConvStatus", JsonConvert.SerializeObject(status));
+            //        pack.StationDatas = new DeviceDataCollection<StationData>(DateTime.Now, DevList.ToArray());
 
-                //处理堆垛机
-                List<SRMData> srmList = new List<SRMData>();
-                foreach (var item in Srms)
-                {
-                    var dev = new SRMData()
-                    {
-                        Code = item.Entity.Code,
-                        Frame = DateTime.Now,
-                        D520 = TypeExtension.Mapper<WCS_SRM520, ISRM520>(item.Data),
-                        D521 = TypeExtension.Mapper<WCS_SRM521, ISRM521>(item.Data2),
-                        D537 = TypeExtension.Mapper<WCS_SRM537, ISRM537>(item.Data3),
-                    };
+            //        //处理堆垛机
+            //        List<SRMData> srmList = new List<SRMData>();
+            //        foreach (var item in Srms)
+            //        {
+            //            var dev = new SRMData()
+            //            {
+            //                Code = item.Entity.Code,
+            //                Frame = DateTime.Now,
+            //                D520 = TypeExtension.Mapper<WCS_SRM520, ISRM520>(item.Data),
+            //                D521 = TypeExtension.Mapper<WCS_SRM521, ISRM521>(item.Data2),
+            //                D537 = TypeExtension.Mapper<WCS_SRM537, ISRM537>(item.Data3),
+            //            };
 
-                    //保存报警
-                    RedisHub.WMS.Set($"{nameof(EquipmentAlarm)}:{item.Entity.Code}", JsonConvert.SerializeObject(new EquipmentAlarm()
-                    {
-                        Code = item.Entity.Code,
-                        Msg = item.Data3.Alarm.ToString(),
-                        Time = DateTime.Now
-                    }));
-                    srmList.Add(dev);
-                }
-                //保存模式
-                var status1 = Srms.Select(v => new Tuple<string, string>(v.Entity.Code, v.Data2.AutoStatus.ToString()));
-                RedisHub.WMS.Set($"SrmStatus", JsonConvert.SerializeObject(status1));
-                pack.SRMDatas = new DeviceDataCollection<SRMData>(DateTime.Now, srmList.ToArray());
-                pack.Frame = DateTime.Now;
+            //            //保存报警
+            //            RedisHub.WMS.Set($"{nameof(EquipmentAlarm)}:{item.Entity.Code}", JsonConvert.SerializeObject(new EquipmentAlarm()
+            //            {
+            //                Code = item.Entity.Code,
+            //                Msg = item.Data3.Alarm.ToString(),
+            //                Time = DateTime.Now
+            //            }));
+            //            srmList.Add(dev);
+            //        }
+            //        //保存模式
+            //        var status1 = Srms.Select(v => new Tuple<string, string>(v.Entity.Code, v.Data2.AutoStatus.ToString()));
+            //        RedisHub.WMS.Set($"SrmStatus", JsonConvert.SerializeObject(status1));
+            //        pack.SRMDatas = new DeviceDataCollection<SRMData>(DateTime.Now, srmList.ToArray());
+            //        pack.Frame = DateTime.Now;
 
-                //保存到Redis
-                RedisHub.Monitor.RPush("Packs", pack);
-                RedisHub.Monitor.Set(nameof(DeviceDataPack), pack);
-                if (RedisHub.Monitor.LLen("Packs") > 500000)
-                {
-                    RedisHub.Monitor.LTrim("Packs", 5000, -1);
-                }
+            //        //保存到Redis
+            //        RedisHub.Monitor.RPush("Packs", pack);
+            //        RedisHub.Monitor.Set(nameof(DeviceDataPack), pack);
+            //        if (RedisHub.Monitor.LLen("Packs") > 500000)
+            //        {
+            //            RedisHub.Monitor.LTrim("Packs", 5000, -1);
+            //        }
 
-                //保存到数据库
-                var plcData = new WCS_PlcData()
-                {
-                    AddWho = "WCS",
-                    WAREHOUSE = ServiceHub.WarehouseName,
-                    CONTENT = JsonConvert.SerializeObject(pack, null, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }),
-                };
-                db.Default.Insertable(plcData).ExecuteCommand();
-            });
+            //        //保存到数据库
+            //        var plcData = new WCS_PlcData()
+            //        {
+            //            AddWho = "WCS",
+            //            WAREHOUSE = ServiceHub.WarehouseName,
+            //            CONTENT = JsonConvert.SerializeObject(pack, null, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }),
+            //        };
+            //        db.Default.Insertable(plcData).ExecuteCommand();
+            //    });
+            //}
+            //catch (Exception ex)
+            //{
+            //    //World.Log(ex.StackTrace, ServiceCenter.Logs.LogLevelEnum.Mid);
+            //}
         }
     }
 

+ 36 - 4
WCS.WorkEngineering/Systems/SrmSystems.cs

@@ -2,6 +2,7 @@
 using ServiceCenter.Extensions;
 using ServiceCenter.Logs;
 using ServiceCenter.SqlSugars;
+using System;
 using System.ComponentModel;
 using WCS.Core;
 using WCS.Entity;
@@ -9,6 +10,7 @@ using WCS.Entity.Protocol.SRM;
 using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.WebApi.Controllers;
+using WCS.WorkEngineering.WebApi.Models.AGV.Response;
 using WCS.WorkEngineering.Worlds;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
 using KnownException = ServiceCenter.Logs.KnownException;
@@ -307,15 +309,45 @@ namespace WCS.WorkEngineering.Systems
                {
                    var allOutCode = arrOut.Select(v => v.Entity.Code).ToList();
 
-                   var task = taskInfo.GetOutTask(db, allOutCode, floor, obj);
+                   //按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层
+                   var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
+                                                                  .Where(v => allOutCode.Contains(v.SrmStation))
+                                                                  .OrderByDescending(v => v.Priority)
+                                                                  .OrderByDescending(v => v.Floor == floor ? 1 : 0)
+                                                                  .First();
+                   if (task == null) throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High);
+                   var taskId = task.ID;
+
+                   //判断是否是二深位任务
+                   var addrFrom = task.AddrFrom.Split("-");
+                   if (addrFrom[4] == "02")
+                   {
+                       var res = WmsApi.AddWcsMoveTask(task.ID);
+                       switch (res.ResData.ResType)
+                       {
+                           case WmsApiMoveTask.允许2升位执行:
+                               break;
+
+                           case WmsApiMoveTask.执行移库任务:
+                               throw new KnownException($"堆垛机{obj.Entity.Code}需要先执行移库任务", LogLevelEnum.Mid);
+
+                           case WmsApiMoveTask.一深位有出库任务:
+                               task = db.Default.Queryable<WCS_TaskInfo>()
+                                                .Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
+                                                .Where(v => allOutCode.Contains(v.SrmStation) && v.AddrFrom == res.ResData.CellNo)
+                                                .First();
+                               break;
+                       };
+                       if (res.ResData.ResType == WmsApiMoveTask.执行移库任务) return;
+                       if (res.ResData.ResType == WmsApiMoveTask.一深位有出库任务 && res.ResData.CellNo != task.AddrFrom) return;
+                   }
 
                    task.Status = TaskStatus.StackerExecution;
                    task.LastInteractionPoint = task.Device;
                    task.EditWho = "WCS";
                    task.AddWCS_TASK_DTL(db, task.Device, task.SrmStation, "任务下发堆垛机执行");
-                   db.Default.Updateable(task).AddQueue();
+                   db.Default.Updateable(task).ExecuteCommand();
                    taskInfo = task;
-                   db.Default.SaveQueues();
                });
 
                 if (taskInfo == null) throw new KnownException("数据更新错误", LogLevelEnum.High);
@@ -338,7 +370,7 @@ namespace WCS.WorkEngineering.Systems
 
         public override bool Select(Device dev)
         {
-            //return dev.Code == "SRM3";
+            //return dev.Code == "SRM2";
             return dev.HasProtocol(typeof(ISRM520));
         }
     }

+ 1 - 1
WCS.WorkEngineering/Systems/二楼入库工位处理系统.cs

@@ -52,7 +52,7 @@ namespace WCS.WorkEngineering.Systems
                    if (taskInfo != null)
                    {
                        task = taskInfo;
-                       if (task.Type == TaskType.EmptyInit && task.Status == Entity.TaskStatus.WaitingToExecute) throw new KnownException($"任务:{task.ID}不是待执行状态,请检查异常原因", LogLevelEnum.High);
+                       if (task.Type != TaskType.EmptyInit && task.Status != Entity.TaskStatus.WaitingToExecute) throw new KnownException($"任务:{task.ID}不是待执行状态,请检查异常原因", LogLevelEnum.High);
                    }
                }