Procházet zdrojové kódy

车间叫料数量配置、RGV报警信息上传

Administrator před 2 roky
rodič
revize
97f1328755

+ 14 - 5
Projects/永冠OPP/WCS.Service/Extensions/DeviceExtension.cs

@@ -142,12 +142,21 @@ namespace WCS.Service.Extensions
         public bool IsPickUp(RGVDevice rgvDevice)
         {
             if (Entity.CODE is "G2" or "G3") return true;
-            var dCount = Device.Where(v => v.CODE is "G1" or "G1340" or "G1337").Select(v => v.Create<StationDeviceGroup>()).Count(v =>
+            var emptyQty = ProtocolProxy.YGWMS150Redis.Get("TuBuRgvTaskCount").ToInt();
+            int dCount = 0;
+            if (emptyQty > 3)
             {
-                var count = v.Items.Count(v => !v.Data3.Status.HasFlag(StationStatus.运行状态位) && !v.Data2.Status.HasFlag(IstationStatus.光电状态) && v.Data2.Tasknum < 10000
-                  && v.Data3.Status.HasFlag(StationStatus.自动));
-                return count == 2 ? true : false;
-            });
+                dCount = emptyQty;
+            }
+            else
+            {
+                dCount = Device.Where(v => v.CODE is "G1" or "G1340" or "G1337").Select(v => v.Create<StationDeviceGroup>()).Count(v =>
+                {
+                    var count = v.Items.Count(v => !v.Data3.Status.HasFlag(StationStatus.运行状态位) && !v.Data2.Status.HasFlag(IstationStatus.光电状态) && v.Data2.Tasknum < 10000
+                      && v.Data3.Status.HasFlag(StationStatus.自动));
+                    return count == 2 ? true : false;
+                });
+            }           
             var rCount = rgvDevice.RGVList.Count(v => v.Data.DestPosition_1 == 1);
             return rCount < dCount;
         }

+ 15 - 0
Projects/永冠OPP/WCS.Service/Works/RGV/RGVWorks.cs

@@ -25,6 +25,11 @@ namespace WCS.Service.Works.RGV
             rgv.EX(rgv =>
             {
                 //RGV是自动且空闲的
+                if (rgv.Data3.Fault != 0)
+                {
+                    if (rgv.Entity.WakeupOn(5000)) WMS.DevInfo(rgv.Entity.CODE, rgv.Data3.Fault.ToString());
+                    return;
+                }
                 if (rgv.Data2.WorkMode != RGVMode.自动) throw new DoException($"{rgv.Data2.WorkMode}");
                 if (rgv.Data2.SystemStatus != RGVRunStatus.空闲) throw new DoException($"{rgv.Data2.SystemStatus}");
                 if (rgv.Data.Trigger_1 != rgv.Data2.Trigger_1) throw new WarnException("凭证好不一致");
@@ -102,6 +107,11 @@ namespace WCS.Service.Works.RGV
             {
                 //状态上抛
                 DeciceStateHelper.StatusCheck(obj.Entity.CODE, obj.Data2.WorkMode.ToString());
+                if (obj.Data3.Fault != 0)
+                {
+                    if (obj.Entity.WakeupOn(5000)) WMS.DevInfo(obj.Entity.CODE, obj.Data3.Fault.ToString());
+                    return;
+                }
                 if (rgvDevice.Data2.Trigger_1 != rgvDevice.Data.Trigger_1) throw new WarnException($"等待执行任务{rgvDevice.Data2.TaskID_1}--{rgvDevice.Data2.TaskID_2}");
                 if (rgvDevice.Data2.WorkMode != RGVMode.自动) throw new DoException(rgvDevice.Data2.WorkMode.ToString());
                 if (rgvDevice.Data2.SystemStatus != RGVRunStatus.空闲) throw new DoException(rgvDevice.Data2.SystemStatus.ToString());
@@ -293,6 +303,11 @@ namespace WCS.Service.Works.RGV
             {
                 //状态上抛
                 DeciceStateHelper.StatusCheck(obj.Entity.CODE, obj.Data2.WorkMode.ToString());
+                if (obj.Data3.Fault != 0)
+                {
+                    if (obj.Entity.WakeupOn(5000)) WMS.DevInfo(obj.Entity.CODE, obj.Data3.Fault.ToString());
+                    return;
+                }
                 if (obj.Data2.Trigger_1 != obj.Data.Trigger_1) throw new WarnException($"等待执行任务{obj.Data2.TaskID_1}--{obj.Data2.TaskID_2}");
                 if (obj.Data2.WorkMode != RGVMode.自动) throw new DoException(obj.Data2.WorkMode.ToString());
                 if (obj.Data2.SystemStatus != RGVRunStatus.空闲) throw new DoException(obj.Data2.SystemStatus.ToString());

+ 4 - 4
Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

@@ -90,8 +90,8 @@ namespace WCS.Service.Works.SRM
                         isTransfer = tasks.Any(v => v.TYPE == TaskType.移库 && v.STATUS < TaskStatus.堆垛机执行);
                         //判断是否存在调整优先级任务,存在初始化isTransfer值 让本次执行优先任务
                         if (tasks.Any(v => v.TYPE != TaskType.移库 && v.STATUS < TaskStatus.堆垛机执行 && v.Priority > 0)) isTransfer = false;
-                        enterPriority = tasks.Where(v => v.TYPE == TaskType.入库 && v.STATUS < TaskStatus.堆垛机执行).OrderByDescending(v => v.Priority).FirstOrDefault();
-                        outPriority = tasks.Where(v => v.TYPE == TaskType.出库 && v.STATUS < TaskStatus.堆垛机执行 && v.STATUS!= TaskStatus.执行中).OrderByDescending(v => v.Priority).FirstOrDefault();
+                        enterPriority = tasks.Where(v => v.TYPE == TaskType.入库 && v.STATUS < TaskStatus.堆垛机执行 && v.Priority > 0).OrderByDescending(v => v.Priority).FirstOrDefault();
+                        outPriority = tasks.Where(v => v.TYPE == TaskType.出库 && v.STATUS < TaskStatus.堆垛机执行 && v.STATUS!= TaskStatus.执行中 && v.Priority > 0).OrderByDescending(v => v.Priority).FirstOrDefault();
                     }
 
                     #endregion 没有倒库任务
@@ -630,10 +630,10 @@ namespace WCS.Service.Works.SRM
                                     if (db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == srm && d.STATUS == TaskStatus.堆垛机执行)) throw new WarnException($"[{deviceCode}]有正在执行的出库任务");
 
                                     //找出等待执行的出库任务
-                                    var waitTask = db.Default.Set<WCS_TASK>().Where(v => v.STATUS == TaskStatus.新建)
+                                    var waitTask = db.Default.Set<WCS_TASK>().Where(v => v.STATUS == TaskStatus.新建 && v.Priority >= 0)
                                                      .Where(v => v.DEVICE == srm)
                                                      .Where(v => v.TYPE == TaskType.出库)
-                                                     .Where(v => !db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == srm && d.STATUS == TaskStatus.堆垛机执行 && d.Priority >= 0))
+                                                     .Where(v => !db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == srm && d.STATUS == TaskStatus.堆垛机执行))
                                                      .Where(v => groupList.Contains(v.SRMSTATION)) //站台必须可用
                                                      .ToList();
 

+ 3 - 1
Projects/永冠OPP/WCS.Service/Works/Station/涂布出库.cs

@@ -139,10 +139,12 @@ namespace WCS.Service.Works.Station
                         //当前被锁定的不是当前设备
                         if (value != key1 && value != obj.Entity.CODE) return;
                         ProtocolProxy.YG150Redis.Set(key1, obj.Entity.CODE); //锁定当前设备,输送线是不是并行执行,所以不用增加redis事务锁
+                        var qty = ProtocolProxy.YGWMS150Redis.Get("TuBuRgvTaskCount").ToInt();
+                        qty = qty > 3 ? qty : 3;
 
                         #endregion 开始进行优先判断
                         //验证总数
-                        if (db.Default.Set<WCS_TASK>().Count(v => v.STATUS < TaskStatus.已完成 && v.ADDRNEXT == "G1") >= 3) throw new WarnException("总数已达3,流量管控");
+                        if (db.Default.Set<WCS_TASK>().Count(v => v.STATUS < TaskStatus.已完成 && v.ADDRNEXT == "G1") >= qty) throw new WarnException($"总数已达[{qty}],流量管控");