林豪 左 2 年之前
父节点
当前提交
b48c915d63

+ 24 - 10
WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -88,20 +88,34 @@ namespace WCS.WorkEngineering.Systems
 
                                         case TaskType.OutDepot:
                                             {
-                                                if (task.SrmStation.IsNullOrEmpty()) //如果没有指定放货站台
+                                                if (task.Device.Contains("Robot"))
                                                 {
-                                                    if (task.Device.IsNullOrEmpty())
+                                                    var pos = task.AddrFrom.Split("-");
+                                                    task.Status = Entity.TaskStatus.WaitingToExecute;
+                                                    task.Line = pos[0].ToShort();
+                                                    task.Col = pos[1].ToShort();
+                                                    task.Layer = pos[2].ToShort();
+                                                    task.Depth = pos[3].ToShort();
+                                                    db.Default.Updateable(task).ExecuteCommand();
+                                                    task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
+                                                }
+                                                else
+                                                {
+                                                    if (task.SrmStation.IsNullOrEmpty()) //如果没有指定放货站台
                                                     {
-                                                        task.Device = "SRM" + task.Tunnel.GetLastDigit();
+                                                        if (task.Device.IsNullOrEmpty())
+                                                        {
+                                                            task.Device = "SRM" + task.Tunnel.GetLastDigit();
+                                                        }
+                                                        //获取堆垛机到目标地址的路径信息
+                                                        var path = DevicePath.GetPath(task.Device, task.AddrTo);
+                                                        task.SrmStation = path.Points[1].Code;
                                                     }
-                                                    //获取堆垛机到目标地址的路径信息
-                                                    var path = DevicePath.GetPath(task.Device, task.AddrTo);
-                                                    task.SrmStation = path.Points[1].Code;
+                                                    //更新任务状态
+                                                    task.Status = Entity.TaskStatus.WaitingToExecute;
+                                                    db.Default.Updateable(task).ExecuteCommand();
+                                                    task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
                                                 }
-                                                //更新任务状态
-                                                task.Status = Entity.TaskStatus.WaitingToExecute;
-                                                db.Default.Updateable(task).ExecuteCommand();
-                                                task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
                                                 break;
                                             }
                                         //一楼叉车搬运任务

+ 1 - 1
WCS.WorkEngineering/Systems/RGVSystems.cs

@@ -81,7 +81,7 @@ namespace WCS.WorkEngineering.Systems
                         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.码垛位09, DeviceFlags.码垛位非09);
+                        var isPalletizing = destPosition!.HasFlag(DeviceFlags.码垛位09, DeviceFlags.环形库码垛位);
                         palletizing = null;
                         SqlSugarHelper.Do(_db =>
                         {

+ 2 - 3
WCS.WorkEngineering/Systems/机台叫料生成AGV任务.cs

@@ -1,5 +1,4 @@
-using PlcSiemens.Core.Extension;
-using System.ComponentModel;
+using System.ComponentModel;
 using WCS.Core;
 using WCS.WorkEngineering.Protocol.Station;
 using WCS.WorkEngineering.WebApi.Controllers;
@@ -18,7 +17,7 @@ namespace WCS.WorkEngineering.Systems
 
         public override void Do(Device<IStation520, IStation521, IStation523> obj)
         {
-            //var res = AgvApi.测试路径("2534", "2225552");
+            var res = AgvApi.测试路径("2533", "12346");
             //var res = AgvApi.机台叫料("2534", "LX32", Guid.NewGuid().ToString().Replace("-", ""));
             //var res = AgvApi.托盘回库("LX32", Guid.NewGuid().ToString().Replace("-",""));
 

+ 90 - 30
WCS.WorkEngineering/Systems/环形库/机械臂cs.cs

@@ -206,8 +206,9 @@ namespace WCS.WorkEngineering.Systems
                         break;
 
                     case 2:
+                        taskList = taskList.OrderBy(x => x.Item1.Depth).ToList();
                         //一工位取深度较大的任务
-                        var taskInfo = taskList.MaxBy(x => x.Item1.Depth);
+                        var taskInfo = taskList[1];
                         task = taskInfo.Item1;
                         dev = taskInfo.Item2;
                         obj.Data.TaskNumber1 = task.ID;
@@ -220,7 +221,7 @@ namespace WCS.WorkEngineering.Systems
                         obj.Data.ELayer1 = task.Layer.ToShort();
                         obj.Data.EDepth1 = task.Depth.ToShort();
                         //二工位取深度较少的值
-                        taskInfo = taskList.MinBy(x => x.Item1.Depth);
+                        taskInfo = taskList[0];
                         task = taskInfo.Item1;
                         dev = taskInfo.Item2;
                         obj.Data.TaskNumber2 = task.ID;
@@ -253,47 +254,106 @@ namespace WCS.WorkEngineering.Systems
 
                 //获取当前堆垛机所有的取货站台
                 var arrOut = PutDevices.First(v => v.Key == obj.Entity.Code).Value;
-
                 if (!arrOut.Any()) throw new KnownException($"机械臂{obj.Entity.Code}无放货路径点", LogLevelEnum.High);
 
                 //获取可以放货的设备集合
                 arrOut = arrOut.Where(v => v.Data3.Status.HasFlag(StationStatus.PH_Status)).ToList();//无光电
-
                 if (!arrOut.Any()) throw new KnownException($"[{obj.Entity.Code}]等待出库任务输送到位", LogLevelEnum.Mid);
 
-                WCS_TaskInfo taskInfo = null;
+                List<WCS_TaskInfo> taskInfoList = new List<WCS_TaskInfo>();
+                string nextAdd = "";
 
                 SqlSugarHelper.Do(db =>
                         {
+                            //所有出库点设备号,即
                             var allOutCode = arrOut.Select(v => v.Entity.Code).ToList();
 
-                            var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == Entity.TaskStatus.WaitingToExecute)
-                                                                         .Where(v => allOutCode.Contains(v.SrmStation))
-                                                                         .OrderByDescending(v => v.Priority)
-                                                                         .OrderBy(v => v.AddTime)
-                                                                         .First() ?? throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High);
-
-                            task.Status = Entity.TaskStatus.StackerExecution;
-                            task.LastInteractionPoint = task.Device;
-                            task.EditWho = "WCS";
-                            db.Default.Updateable(task).ExecuteCommand();
-                            task.AddWCS_TASK_DTL(db.Default, task.Device, task.SrmStation, "任务下发机械臂执行");
-                            taskInfo = task;
+                            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.ProdLine)
+                                                                                                    .ThenBy(x => x.AddTime)
+                                                                                                    .Take(2);
+                            if (taskInfos!.MinBy(x => x.Depth).Depth + 1 != taskInfos.MaxBy(x => x.Depth).Depth)
+                            {
+                                taskInfos = taskInfos!.OrderBy(x => x.ProdLine).Take(1);
+                            }
+
+                            foreach (var task in taskInfos)
+                            {
+                                task.Status = Entity.TaskStatus.StackerExecution;
+                                task.LastInteractionPoint = task.Device;
+                                task.EditWho = "WCS";
+                                nextAdd = task.SrmStation;
+                                db.Default.Updateable(task).ExecuteCommand();
+                                task.AddWCS_TASK_DTL(db.Default, task.Device, task.SrmStation, "任务下发机械臂执行");
+                                taskInfoList!.Add(task);
+                            }
                         });
 
-                if (taskInfo == null) throw new KnownException("数据更新错误", LogLevelEnum.High);
-                var addrFrom = taskInfo.AddrFrom.Split("-");
-                obj.Data.TaskNumber1 = taskInfo.ID;
-                obj.Data.SLine1 = addrFrom[0].ToShort();
-                obj.Data.SCol1 = addrFrom[1].ToShort();
-                obj.Data.SLayer1 = addrFrom[2].ToShort();
-                obj.Data.SDepth1 = addrFrom[3].ToShort();
-                obj.Data.ELine1 = taskInfo.SrmStation.ToShort();
-                obj.Data.ECol1 = taskInfo.ProdLine;
-                obj.Data.TaskSum = 1;
-                obj.Data.GoodsType = 1;
-                obj.Data.TaskType = 4;
-                obj.Data.VoucherNo++;
+                if (!taskInfoList.Any()) return;
+
+                switch (taskInfoList.Count)
+                {
+                    case 1:
+                        var task = taskInfoList.FirstOrDefault();
+                        //下发任务
+                        obj.Data.TaskNumber1 = task.ID;
+                        obj.Data.SLine1 = task.Line.ToShort();
+                        obj.Data.SCol1 = task.Col.ToShort();
+                        obj.Data.SLayer1 = task.Layer.ToShort();
+                        obj.Data.SDepth1 = task.Depth.ToShort();
+                        obj.Data.ELine1 = nextAdd.ToShort();
+                        obj.Data.ECol1 = task.ProdLine;
+                        obj.Data.ELayer1 = 0;
+                        obj.Data.EDepth1 = 0;
+                        obj.Data.TaskNumber2 = 0;
+                        obj.Data.SLine2 = 0;
+                        obj.Data.SCol2 = 0;
+                        obj.Data.SLayer2 = 0;
+                        obj.Data.SDepth2 = 0;
+                        obj.Data.ELine2 = 0;
+                        obj.Data.ECol2 = 0;
+                        obj.Data.ELayer2 = 0;
+                        obj.Data.EDepth2 = 0;
+                        obj.Data.TaskSum = taskInfoList.Count.ToShort();
+                        obj.Data.GoodsType = 1;
+                        obj.Data.TaskType = 4;
+                        obj.Data.VoucherNo++;
+                        break;
+
+                    case 2:
+                        taskInfoList = taskInfoList.OrderBy(x => x.Depth).ToList();
+                        //一工位取深度较大的任务
+                        var taskInfo = taskInfoList[1];
+                        obj.Data.TaskNumber1 = taskInfo.ID;
+                        obj.Data.SLine1 = taskInfo.Line.ToShort();
+                        obj.Data.SCol1 = taskInfo.Col.ToShort();
+                        obj.Data.SLayer1 = taskInfo.Layer.ToShort();
+                        obj.Data.SDepth1 = taskInfo.Depth.ToShort();
+                        obj.Data.ELine1 = nextAdd.ToShort();
+                        obj.Data.ECol1 = taskInfo.ProdLine;
+                        obj.Data.ELayer1 = 0;
+                        obj.Data.EDepth1 = 0;
+                        //二工位取深度较少的值
+                        taskInfo = taskInfoList[0];
+                        obj.Data.TaskNumber2 = taskInfo.ID;
+                        obj.Data.SLine2 = taskInfo.Line.ToShort();
+                        obj.Data.SCol2 = taskInfo.Col.ToShort();
+                        obj.Data.SLayer2 = taskInfo.Layer.ToShort();
+                        obj.Data.SDepth2 = taskInfo.Depth.ToShort();
+                        obj.Data.ELine2 = nextAdd.ToShort();
+                        obj.Data.ECol2 = taskInfo.ProdLine;
+                        obj.Data.ELayer2 = 0;
+                        obj.Data.EDepth2 = 0;
+                        obj.Data.TaskSum = taskInfoList.Count.ToShort();
+                        obj.Data.GoodsType = 1;
+                        obj.Data.TaskType = 4;
+                        obj.Data.VoucherNo++;
+                        break;
+
+                    default:
+                        throw new KnownException($"无法执行多个任务", LogLevelEnum.Mid);
+                }
             }
         }
 

+ 3 - 3
WCS.WorkEngineering/Systems/环形库/环形库码垛工位获取托盘.cs

@@ -1,6 +1,7 @@
 using System.ComponentModel;
 using WCS.Core;
 using WCS.WorkEngineering.Protocol.Station;
+using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.Worlds;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
 
@@ -19,14 +20,13 @@ namespace WCS.WorkEngineering.Systems.环形库
 
         public override void Do(Device<IStation520, IStation521, IStation523> obj)
         {
-            throw new NotImplementedException();
+            //获取目标地址当前位置的出库任务
+            //WmsApi.ApplyPalletizingStockOut()
         }
 
         public override bool Select(Device dev)
         {
             return dev.HasFlag(DeviceFlags.环形库码垛工位);
         }
-
-        public string GetWar
     }
 }

+ 5 - 5
WCS.WorkEngineering/WebApi/Controllers/AgvApi.cs

@@ -51,11 +51,11 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                 new positionCodeClass(){ //巷道分配点
                     positionCode="LX002",
                     type="00"
-                }/*,*/
-                //new positionCodeClass(){ //预分配放货点
-                //    positionCode="LXSS1",
-                //    type="00"
-                //}
+                },
+                new positionCodeClass(){ //预分配放货点
+                    positionCode="2501",
+                    type="00"
+                }
             }, "1", taskCode, "LX03", "1");
         }
 

+ 2 - 1
WCS.WorkEngineering/WebApi/Controllers/AgvController.cs

@@ -170,7 +170,8 @@ namespace WCS.WorkEngineering.WebApi.Controllers
         public AgvCallbackResponse AgvCallback([FromBody] AgvCallbackRequest reqDto)
         {
             var key = $"WCS:Lock:AGV:{nameof(AgvCallback)}";
-            var res = new AgvCallbackResponse() { code = AgvResponseCode.Fail, message = "失败" };
+            var res = new AgvCallbackResponse() { code = AgvResponseCode.Success, message = "失败" };
+            return res;
             try
             {
                 if (RedisHub.Default.Get(key) != null)

+ 36 - 18
WCS.WorkEngineering/WebApi/Controllers/WmsApi.cs

@@ -332,24 +332,6 @@ namespace WCS.WorkEngineering.WebApi.Controllers
             return res;
         }
 
-        /// <summary>
-        ///  获取仓库号
-        /// </summary>
-        public static string GetWareCode(string add)
-        {
-            return add switch
-            {
-                "2532" => "1N",
-                "2527" => "1N",
-                "2528" => "1N",
-                "2732" => "1S",
-                "2727" => "1S",
-                "2728" => "1S",
-                "1606" => "1N",
-                _ => "",
-            };
-        }
-
         /// <summary>
         ///  工字轮/芯股进入主线扫码
         /// </summary>
@@ -419,5 +401,41 @@ namespace WCS.WorkEngineering.WebApi.Controllers
             }
             return res;
         }
+
+        /// <summary>
+        ///   环形库申请码垛任务
+        /// </summary>
+        /// <param name="loc"></param>
+        /// <param name="robotCode"></param>
+        /// <returns></returns>
+        /// <exception cref="KnownException"></exception>
+        public static SRes ApplyPalletizingStockOut(string loc, string robotCode)
+        {
+            var res = APICaller.CallApi<SRes>(WmsUrl + "/api/FJ/ApplyPalletizingStockOut", new RingApplyPalletizingStockOutRequest(GetWareCode(loc), loc, robotCode));
+
+            if (res.ResCode != ResponseStatusCodeEnum.Sucess)
+            {
+                throw new KnownException(res.ResMsg, LogLevelEnum.High);
+            }
+            return res;
+        }
+
+        /// <summary>
+        ///  获取仓库号
+        /// </summary>
+        public static string GetWareCode(string add)
+        {
+            return add switch
+            {
+                "2532" => "1N",
+                "2527" => "1N",
+                "2528" => "1N",
+                "2732" => "1S",
+                "2727" => "1S",
+                "2728" => "1S",
+                "1606" => "1N",
+                _ => "",
+            };
+        }
     }
 }

+ 36 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/RingApplyPalletizingStockOutRequest.cs

@@ -0,0 +1,36 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    ///  环形库申请码垛出库任务
+    /// </summary>
+    public class RingApplyPalletizingStockOutRequest
+    {
+        /// <summary>
+        ///  环形库申请码垛出库任务
+        /// </summary>
+        /// <param name="wareHouseCode"></param>
+        /// <param name="equCode"></param>
+        /// <param name="device"></param>
+        public RingApplyPalletizingStockOutRequest(string wareHouseCode, string equCode, string device)
+        {
+            WareHouseCode = wareHouseCode;
+            EquCode = equCode;
+            Device = device;
+        }
+
+        /// <summary>
+        /// 仓库编码
+        /// </summary>
+        public string WareHouseCode { get; set; }
+
+        /// <summary>
+        /// 设备编号
+        /// </summary>
+        public string EquCode { get; set; }
+
+        /// <summary>
+        ///  机械臂
+        /// </summary>
+        public string Device { get; set; }
+    }
+}