林豪 左 2 anos atrás
pai
commit
110cc02de7

+ 1 - 1
Projects/永冠/WCS.Entity.Protocol/Station/IStation521.cs

@@ -109,7 +109,7 @@ namespace WCS.Entity.Protocol
         bool PH_STATUS2 { get; set; }
 
         /// <summary>
-        /// 备用
+        /// 备用,WCS标识单号不符需自动排除
         /// </summary>
         bool RES4 { get; set; }
 

+ 43 - 0
Projects/永冠/WCS.Service/Helpers/GeneralHelper.cs

@@ -0,0 +1,43 @@
+using DBHelper;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WCS.Core;
+using WCS.Entity;
+using WCS.Entity.Protocol;
+
+namespace WCS.Service.Helpers
+{
+    /// <summary>
+    /// 通用帮助内
+    /// </summary>
+    public class GeneralHelper
+    {
+        /// <summary>
+        /// 托盘排出
+        /// </summary>
+        public static void DischargeOfTray(Device<IStation521, IStation520, IRobotStation> device)
+        {
+            DB.Do(db =>
+            {
+                var t = db.Default.Set<WCS_TASK>().Find(device.Data.TASKNUM);
+                if (t != null)
+                {
+                    t.ADDRTO = "2202";
+                    db.Default.SaveChanges();
+                    WMS.UnBound(t.BARCODE);
+                }
+                device.Data3.PalletType = 0;
+                device.Data3.MaxQty = 0;
+                device.Data3.DocId = 0;
+
+                device.Data2.TASKNUM = device.Data.TASKNUM;
+                device.Data2.GOODSSIZE = device.Data.GOODSSIZE;
+                device.Data2.GOODSEND = 2202;
+                device.Data2.CONFIRM = true;
+            });
+        }
+    }
+}

+ 23 - 2
Projects/永冠/WCS.Service/Works/Robots/RobotWork.cs

@@ -4,6 +4,7 @@ using System.Linq;
 using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol;
+using WCS.Service.Helpers;
 
 namespace WCS.Service.Works.Robots
 {
@@ -97,11 +98,31 @@ namespace WCS.Service.Works.Robots
             if (target == null)
                 throw new Exception("机器人目标位置" + workShop + "不存在");
 
+            if (target == null)
+
             if (Ltc.Do(target, target => target.Data.PH_STATUS == false))
                 throw new Exception($"目标位置[{target}]无光电信号");
 
-            if (Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSCODE != C2153.Data.GOODSCODE))
-                throw new Exception($"目标位置{target}单号不符");
+            if (Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSCODE != C2153.Data.GOODSCODE)) //单号不符
+            {
+                if ((Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSTYPE != C2153.Data.GOODSTYPE))) //托盘类型不符
+                {
+                    GeneralHelper.DischargeOfTray(target);
+                    LogHelper.AddWCS_EXCEPTION($"2153:{C2153.Data.TASKNUM}与{target.Entity.CODE}单号不符,托盘有货,自动排出");
+                    return;
+                }
+                if (target.Data3.Qty > 0) //有托盘
+                {
+                    GeneralHelper.DischargeOfTray(target);
+                    LogHelper.AddWCS_EXCEPTION($"2153:{C2153.Data.TASKNUM}与{target.Entity.CODE}单号不符,托盘有货,自动排出");
+                    return;
+                }
+                if (target.Data3.Qty == 0) //无托盘
+                {
+                    target.Data.RES4 = true;
+                    LogHelper.AddWCS_EXCEPTION($"2153:{C2153.Data.TASKNUM}与{target.Entity.CODE}单号不符,托盘为空,允许组盘");
+                }
+            }
 
             if (Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSTYPE != C2153.Data.GOODSTYPE))
                 return;

+ 49 - 1
Projects/永冠/WCS.Service/Works/SC/SCWork.cs

@@ -120,14 +120,62 @@ namespace WCS.Service.Works
             if (Ltc.Do(dev, v => v.Data.Mode != SCMode.远程)) return;
             if (Ltc.Do(dev, v => v.Data.Status != SCRunStatus.空闲)) return;
 
+            var isTransfer = new List<WCS_TASK>();
+
             DB.Do(db =>
             {
                 var t = db.Default.Set<WCS_TASK>().Where(v => v.DEVICE == dev.Entity.CODE).Where(v => v.STATUS == TaskStatus.堆垛机执行).FirstOrDefault();
-                if (t != null) throw new Exception($"[{deviceCode}]有正在执行的任务:[{t.ID}]");
+                if (t != null) throw new Exception($"[{deviceCode}]有正在执行的任务:" + t.ID);
+                //属于当前堆垛机未执行的移库任务
+                isTransfer = db.Default.Set<WCS_TASK>().AsNoTracking().Where(v => v.DEVICE == dev.Entity.CODE && v.TYPE == TaskType.移库 && v.STATUS < TaskStatus.堆垛机执行).ToList();
+                //判断是否存在调整优先级任务,存在初始化isTransfer值 让本次执行优先任务
+                if (db.Default.Set<WCS_TASK>().AsNoTracking().Any(v => v.DEVICE == dev.Entity.CODE && v.TYPE != TaskType.移库 && v.STATUS < TaskStatus.堆垛机执行 && v.Priority > 0))
+                    isTransfer = new List<WCS_TASK>();
             });
 
             var LastIsOut = dev.Entity.Get<bool>("LastIsOut");
             dev.Entity.Set("LastIsOut", !LastIsOut);
+            if (isTransfer.Count > 0) //防止因为无当前堆垛机移库任务导致无法执行其他类型任务
+            {
+                #region 移库
+
+                Ltc.Log($"[{deviceCode}]开始获取移库任务");
+
+                DB.Do(db =>
+                {
+                    //获取当前堆垛机未执行的任务
+                    var task = db.Default.Set<WCS_TASK>().Where(v => v.DEVICE == dev.Entity.CODE && v.TYPE == TaskType.移库 && v.STATUS < TaskStatus.堆垛机执行).OrderBy(p => p.CREATETIME).FirstOrDefault();
+                    if (task == null) return;
+                    var loc = WMS.GetLocalIn(task.WMSTASK, task.TUNNEL, task.ADDRTO);
+                    var locno = string.Format("{0}-{1}-{2}", loc.Row, loc.Colomn, loc.Layer);
+
+                    task.STARTTIME = DateTime.Now;
+                    task.UPDATETIME = DateTime.Now;
+                    task.STATUS = WCS.Entity.TaskStatus.堆垛机执行;
+                    task.DEVICE = dev.Entity.CODE;
+
+                    task.TUNNEL = task.TUNNEL;
+                    db.Default.SaveChanges();
+                    task.CreateStatusLog(db);
+
+                    Uploader.Upload(db);
+
+                    dev.Data2.TaskID = task.ID;
+                    var addrFrom = task.ADDRFROM.Split("-");
+                    dev.Data2.SLine = short.Parse(addrFrom[1]);
+                    dev.Data2.SCol = short.Parse(addrFrom[2]);
+                    dev.Data2.SLayer = short.Parse(addrFrom[3]);
+
+                    var addrTo = task.ADDRTO.Split("-");
+                    dev.Data2.ELine = short.Parse(addrTo[1]);
+                    dev.Data2.ECol = short.Parse(addrTo[2]);
+                    dev.Data2.ELayer = short.Parse(addrTo[3]);
+
+                    dev.Data2.Trigger = 1;
+                });
+
+                #endregion 移库
+            }
             if (LastIsOut)
             {
                 #region 入库

+ 10 - 21
Projects/永冠/WCS.Service/Works/Stations/组盘位.cs

@@ -4,6 +4,7 @@ using System.Linq;
 using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol;
+using WCS.Service.Helpers;
 
 namespace WCS.Service.Works.Stations
 {
@@ -18,6 +19,14 @@ namespace WCS.Service.Works.Stations
         protected override void Do(Device<IStation521, IStation520, IRobotStation> dev)
         {
             var dev1 = Device.Find(dev.Entity.CODE).Device<IStation523>();
+
+            if (dev.Data.RES4)
+            {
+                GeneralHelper.DischargeOfTray(dev);
+                LogHelper.AddWCS_EXCEPTION($"{dev.Entity.CODE}单号不符,托盘有货,自动排出");
+                return;
+            }
+
             //断电复位校验
             if (dev.Data.TASKNUM > 10000 && dev.Data.PH_STATUS && !dev1.Data.Status.HasFlag(StationStatus.自动)) //有任务有光电,代表当前有货
             {
@@ -146,27 +155,7 @@ namespace WCS.Service.Works.Stations
                         }
                     }
 
-                    if (move)
-                    {
-                        DB.Do(db =>
-                        {
-                            var t = db.Default.Set<WCS_TASK>().Find(dev.Data.TASKNUM);
-                            if (t != null)
-                            {
-                                t.ADDRTO = "2202";
-                                db.Default.SaveChanges();
-                                WMS.UnBound(t.BARCODE);
-                            }
-                            dev.Data3.PalletType = 0;
-                            dev.Data3.MaxQty = 0;
-                            dev.Data3.DocId = 0;
-
-                            dev.Data2.TASKNUM = dev.Data.TASKNUM;
-                            dev.Data2.GOODSSIZE = dev.Data.GOODSSIZE;
-                            dev.Data2.GOODSEND = 2202;
-                            dev.Data2.CONFIRM = true;
-                        });
-                    }
+                    if (move) GeneralHelper.DischargeOfTray(dev);
                 }
             }
         }