林豪 左 hai 1 ano
pai
achega
b7ace38b57

+ 4 - 4
WCS.Entity.Protocol/Protocol/Station/StationEnum.cs

@@ -371,25 +371,25 @@ namespace WCS.Entity.Protocol.Protocol.Station
     public enum StationCmd : ushort
     {
         /// <summary>
-        /// 备用
+        /// AGV放货通知
         /// </summary>
         [Description("备用")]
         Res = 1 << 0,
 
         /// <summary>
-        /// 备用
+        /// AGV取货通知
         /// </summary>
         [Description("备用")]
         Res1 = 1 << 1,
 
         /// <summary>
-        /// 备用
+        ///  AGV放货结束
         /// </summary>
         [Description("备用")]
         Res2 = 1 << 2,
 
         /// <summary>
-        /// 备用
+        ///  AGV取货结束
         /// </summary>
         [Description("备用")]
         Res3 = 1 << 3,

+ 5 - 82
WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -152,79 +152,7 @@ namespace WCS.WorkEngineering.Systems
                                     //巷道分配
                                     case AGVTaskStatus.RequestOrPermission1 when agv.Status != AGVTaskStatus.Complete1:
                                         {
-                                            //if (agv.TaskType == AGVTaskType.EnterDepot)
-                                            //{
-                                            //    //找到对应WCS任务
-                                            //    var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == agv.TaskId);
-                                            //    if (task == null) throw new Exception($"AGV任务{agv.ID}未找到对应WCS任务");
-                                            //    //向WMS获取巷道优先级
-                                            //    var res = WmsApi.GetTunnelPriorityList(task.ID);
-                                            //    var tunnelNo = res.ResData.Split(",").Select(v => "SRM" + v).ToList();
 
-                                            //    //开始获取堆垛机与可用站台信息
-                                            //    SRM srm = null;
-                                            //    var stations = new List<Station>();
-
-                                            //    //一楼三个入库口
-                                            //    stations = devs.Where(v => v.Entity.Code is "1021" or "1023" or "1025").ToList();
-                                            //    //筛选出可用站台
-                                            //    stations = stations.Where(v => v.Data.VoucherNo == v.Data2.VoucherNo && v.Data3.Status.HasFlag(StationStatus.Auto))
-                                            //        .Where(v => !v.Data3.Status.HasFlag(StationStatus.PH_Status) && !v.Data3.Status.HasFlag(StationStatus.OT_Status))
-                                            //        .Where(v => !v.Data3.Status.HasFlag(StationStatus.Run)).ToList(); // 筛选出可用站台
-                                            //    //可用堆垛机
-                                            //    srm = stations.Select(v => v.Entity.Sources).SelectMany(v => v).Where(v => v.IsTunnel()) //上一个地址是巷道的
-                                            //        .Select(v => v.Sources).SelectMany(v => v).Where(v => v.HasProtocol(typeof(ISRM520))) //筛选出堆垛机
-                                            //        .Select(v => new SRM(v, this.World)) //转换为SRM
-                                            //        .Where(v => !v.Data2.Status.HasFlag(SrmStatus.Alarm) && v.Data2.AutoStatus == SrmAutoStatus.Automatic) //筛选出可用堆垛机
-                                            //        .Where(v => tunnelNo.Contains(v.Entity.Code)) //筛选出巷道优先级最高的堆垛机
-                                            //        .MinBy(v => tunnelNo.IndexOf(v.Entity.Code));//按照巷道优先级排序
-                                            //    if (srm == null) throw new Exception($"agv任务{agv.ID}无可用堆垛机");
-
-                                            //    //筛选出堆垛机的放货站台
-                                            //    var nextPos = stations.FirstOrDefault(v => v.Entity.Sources.Where(t => t.IsTunnel()).Select(t => t.Sources).SelectMany(v => v) //获取所有巷道
-                                            //        .Where(t => t.HasProtocol(typeof(ISRM520)))//筛选出堆垛机
-                                            //        .SelectMany(v => v.Sources).Any(t => t.Code == srm.Entity.Parent.Code));
-
-                                            //    var flag = false;
-                                            //    if ((task.BusType is "二楼湿拉线退料回立库" or "二楼湿拉线余料回立库" && task.Floor == 2))
-                                            //    {
-                                            //        flag = true;
-                                            //        nextPos.Entity.Code = "1025";
-                                            //    }
-                                            //    var agvs = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status < AGVTaskStatus.MissionCompleted && v.Position == nextPos.Entity.Code).SplitTable(v => v.Take(2)).ToList();
-                                            //    if (agvs.Any())
-                                            //    {
-                                            //        var msg = agvs.Aggregate("已无可用放货站台,任务正在执行中:", (current, ag) => current + $"[任务号:{ag.ID},目标地址:{ag.Position}]");
-                                            //        throw new Exception(msg);
-                                            //    }
-
-                                            //    //更新AGV任务状态
-                                            //    agv.Status = AGVTaskStatus.Complete1;
-                                            //    agv.Position = flag == true ? "1025" : nextPos.Entity.Code;
-                                            //    db.Default.Updateable(agv).SplitTable().ExecuteCommand();
-                                            //    //更新WCS任务状态
-                                            //    if (flag)
-                                            //    {
-                                            //        srm.Entity.Code = "SRM3";
-                                            //        task.Device = srm.Entity.Code;
-                                            //        task.Tunnel = "3";
-                                            //        task.AddrNext = "1025";
-                                            //    }
-                                            //    else
-                                            //    {
-                                            //        task.Device = srm.Entity.Code;
-                                            //        task.Tunnel = task.Device.GetLastDigit().ToString();
-                                            //        task.AddrNext = agv.Position;
-                                            //    }
-                                            //    db.Default.Updateable(task).ExecuteCommand();
-                                            //    task.AddWCS_TASK_DTL(db.Default, "AGV巷道分配点", nextPos.Entity.Code, $"任务分配至堆垛机:{srm.Entity.Code}");
-                                            //    this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID}分配至堆垛机:{srm.Entity.Code}");
-                                            //    //调继续执行任务接口
-                                            //    AgvApi.ContinueTask(agv.AgvID, nextPos.Entity.Code);
-                                            //}
-                                            //else if (agv.TaskType == AGVTaskType.Transport)
-                                            //{
-                                            //更新AGV任务状态
                                             agv.Status = AGVTaskStatus.Complete1;
                                             agv.Position = "2501";
                                             db.Default.Updateable(agv).SplitTable().ExecuteCommand();
@@ -237,24 +165,19 @@ namespace WCS.WorkEngineering.Systems
                                             //}
                                             break;
                                         }
-                                    //货站点安全交互
+                                    //货站点安全交互
                                     case AGVTaskStatus.RequestOrPermission2 when agv.Status != AGVTaskStatus.RequestOrPermission2:
                                         {
                                             if (agv.Position.IsNullOrEmpty()) throw new Exception($"无有效放货地址");
                                             var dev = Device.All.First(x => x.Code == agv.Position);
-
-                                            //if (dev.Data.VoucherNo != dev.Data2.VoucherNo) throw new Exception($"AGV请求放货,但{dev.Entity.Code}凭证号不一致");
-                                            //if (!dev.Data3.Status.HasFlag(StationStatus.Auto)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}不在自动状态");
-                                            //if (dev.Data3.Status.HasFlag(StationStatus.PH_Status)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}光电有货");
-                                            //if (dev.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}任务有货");
-                                            //if (dev.Data3.Status.HasFlag(StationStatus.Run)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}在运行状态");
-                                            //agv.Status = AGVTaskStatus.RequestOrPermission2;
-                                            //db.Default.Updateable(agv).SplitTable().ExecuteCommand();
-
                                             //调继续执行任务接口
                                             AgvApi.ContinueTask(agv.AgvID, dev.Code);
                                             break;
                                         }
+                                    case AGVTaskStatus.LeaveGet when agv.Status != AGVTaskStatus.LeaveGet:
+                                        var devinfo = new Device<IStation520, IStation521>(Device.All.First(x => x.Code == agv.Position), World);
+                                        devinfo.Data.CmdType = StationCmd.Res3;
+                                        break;
                                     //完成任务
                                     case AGVTaskStatus.MissionCompleted when agv.Status != AGVTaskStatus.MissionCompleted:
                                         if (agv.TaskType == AGVTaskType.EnterDepot)

+ 8 - 1
WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -16,7 +16,7 @@ namespace WCS.WorkEngineering.Systems
     /// <summary>
     ///  无交互系统
     /// </summary>
-    [BelongTo(typeof(MainWorld))]
+    [BelongTo(typeof(NoInteractionWorld))]
     [Description("无交互系统")]
     public class NoInteractionSystems : DeviceSystem<Station>
     {
@@ -108,6 +108,13 @@ namespace WCS.WorkEngineering.Systems
                                                 }
                                                 else
                                                 {
+                                                    if (task.SrmStation == "1")
+                                                    {
+
+                                                        task.SrmStation = "";
+                                                        task.AddrTo = "2534";
+                                                        task.Device = "SRM" + task.WarehouseCode.Substring(0, 1);
+                                                    }
                                                     if (task.SrmStation.IsNullOrEmpty()) //如果没有指定放货站台
                                                     {
                                                         if (task.Device.IsNullOrEmpty())

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

@@ -19,7 +19,7 @@ namespace WCS.WorkEngineering.Systems
     /// <summary>
     ///  Agv交互系统
     /// </summary>
-    [BelongTo(typeof(MainWorld))]
+    [BelongTo(typeof(RgvWorld))]
     [Description("RGV交互系统")]
     public class RGVSystems : DeviceSystem<Device<IRGV520, IRGV521, IBCR81>>
     {

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

@@ -19,7 +19,7 @@ namespace WCS.WorkEngineering.Systems
     /// <summary>
     /// 堆垛机系统
     /// </summary>
-    [BelongTo(typeof(MainWorld))]
+    [BelongTo(typeof(SrmWorld))]
     [Description("堆垛机系统")]
     public class SrmSystems : DeviceSystem<SRM>
     {

+ 5 - 1
WCS.WorkEngineering/Systems/环形库/环形库码垛结束.cs

@@ -28,6 +28,10 @@ namespace WCS.WorkEngineering.Systems.环形库
 
         public override void Do(Device<IStation520, IStation521, IStation523, IRobot530, IRobot531> obj)
         {
+            if (obj.Entity.Code == "1666")
+            {
+                obj.Data.GoodsEnd = 1604;
+            }
             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;
@@ -45,7 +49,7 @@ namespace WCS.WorkEngineering.Systems.环形库
                 if (taskInfo == null)
                 {
                     //开始获取当前位置的空托盘搬运任务信息
-                    var cbrCode = db.Queryable<WCS_TaskInfo>().First(x => x.Status == TaskStatus.RgvCompleted && x.ID == obj.Data2.TaskNumber);
+                    var cbrCode = db.Queryable<WCS_TaskInfo>().First(x => x.Status == TaskStatus.RgvCompleted && x.AddrTo == obj.Entity.Code);
                     //开始绑盘
                     WmsApi.BingPallet(cbrCode.BarCode, tasks.Select(x => x.BarCode).ToList(), obj.Entity.Code.GetWareCode(), obj.Entity.Code);
                     return;

+ 17 - 0
WCS.WorkEngineering/Worlds/RGVWorld.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.Worlds
+{
+    /// <summary>
+    ///  RGV
+    /// </summary>
+    [Description("RGV")]
+    public class RgvWorld:MainWorld
+    {
+    }
+}

+ 17 - 0
WCS.WorkEngineering/Worlds/SrmWorld.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.Worlds
+{
+    /// <summary>
+    ///  堆垛机
+    /// </summary>
+    [Description("堆垛机")]
+    public class SrmWorld:MainWorld
+    {
+    }
+}