林豪 左 1 year ago
parent
commit
826182b872

+ 13 - 19
WCS.Core/Extentions.cs

@@ -42,11 +42,10 @@ namespace WCS.Core
                 objs = new ConcurrentDictionary<object, object>();
                 ExObjsOfWorld[world] = objs;
             }
-            if (!objs.TryGetValue(source, out var obj))
-            {
-                obj = Activator.CreateInstance(typeof(T), source, world);
-                objs[source] = obj;
-            }
+
+            if (objs.TryGetValue(source, out var obj)) return (T)obj;
+            obj = Activator.CreateInstance(typeof(T), source, world);
+            objs[source] = obj;
             return (T)obj;
         }
 
@@ -90,10 +89,7 @@ namespace WCS.Core
             var name = Enum.GetName<T>(source);
             var f = source.GetType().GetField(name);
             var attr = f.GetCustomAttribute<DescriptionAttribute>();
-            if (attr == null)
-                return source.ToString();
-            else
-                return attr.Description;
+            return attr == null ? source.ToString() : attr.Description;
         }
 
         public static object Copy(this object source, Type t, DateTime farme)
@@ -102,18 +98,16 @@ namespace WCS.Core
             foreach (var p in t.GetProperties())
             {
                 var p2 = source.GetType().GetProperty(p.Name);
-                if (p2 != null)
+                if (p2 == null) continue;
+                var value = p2.GetValue(source);
+                //判断一下P2的类型是否为字符串
+                if (p2.PropertyType == typeof(string))
                 {
-                    var value = p2.GetValue(source);
-                    //判断一下P2的类型是否为字符串
-                    if (p2.PropertyType == typeof(string))
-                    {
-                        var sValue = (string)value;
-                        value = sValue.Trim('\0', '\a', '\b', '\f', '\n', '\r', '\t', '\v').Trim();
-                    }
-
-                    p.SetValue(obj, value);
+                    var sValue = (string)value;
+                    value = sValue.Trim('\0', '\a', '\b', '\f', '\n', '\r', '\t', '\v').Trim();
                 }
+
+                p.SetValue(obj, value);
             }
             t.GetProperty("Frame").SetValue(obj, farme);
             return obj;

+ 1 - 1
业务工程/分拣库/WCS.Entity.Protocol/BCR/IBCR81.cs

@@ -10,7 +10,7 @@ namespace WCS.Entity.Protocol.BCR
         /// <summary>
         /// 内容
         /// </summary>
-        [StringLength(20)]
+        [StringLength(130)]
         string Content { get; set; }
     }
 }

+ 1 - 1
业务工程/分拣库/WCS.Entity.Protocol/Robot/RobotEnum.cs

@@ -260,7 +260,7 @@ namespace WCS.Entity.Protocol.Protocol.Robot
         ///  安全门急停报警(取反)
         /// </summary>
         [Description("安全门急停报警取反")]
-        安全门急停报警取反 = 1L << 12,
+        安全门急停报警 = 1L << 12,
 
         /// <summary>
         ///  检查机械臂A4轴报错

+ 0 - 1
业务工程/分拣库/WCS.Entity.Protocol/Robot/WCS_Robot522.cs

@@ -10,7 +10,6 @@ namespace WCS.Entity.Protocol.Robot
     public class WCS_Robot522 : IRobot522
     {
         [DataMember(Order = 0)]
-        [SugarColumn(ColumnDataType = "double")]
         public RobotAlarm Alarm { get; set; }
 
         [DataMember(Order = 1)]

+ 26 - 26
业务工程/分拣库/WCS.Entity.Protocol/Truss/TrussEnum.cs

@@ -171,9 +171,9 @@ namespace WCS.Entity.Protocol.Truss
         抓取和放置参数不符合运行条件 = 1L << 19,
 
         /// <summary>
-        ///  货叉变频器报警
+        ///  备用4
         /// </summary>
-        [Description("货叉变频器报警")]
+        [Description("备用4")]
         备用4 = 1L << 20,
 
         /// <summary>
@@ -213,75 +213,75 @@ namespace WCS.Entity.Protocol.Truss
         WCS回复任务超时 = 1L << 26,
 
         /// <summary>
-        ///  起升抱闸空开
+        ///  备用11
         /// </summary>
-        [Description("起升抱闸空开")]
+        [Description("备用11")]
         备用11 = 1L << 27,
 
         /// <summary>
-        ///  货叉马达保护器
+        ///  备用12
         /// </summary>
-        [Description("货叉马达保护器")]
+        [Description("备用12")]
         备用12 = 1L << 28,
 
         /// <summary>
-        ///  货叉抱闸空开
+        ///  备用13
         /// </summary>
-        [Description("货叉抱闸空开")]
+        [Description("备用13")]
         备用13 = 1L << 29,
 
         /// <summary>
-        ///  安全门打开
+        ///  备用14
         /// </summary>
-        [Description("安全门打开")]
+        [Description("备用14")]
         备用14 = 1L << 30,
 
         /// <summary>
-        ///  安全继电器报警
+        ///  备用15
         /// </summary>
-        [Description("安全继电器报警")]
+        [Description("备用15")]
         备用15 = 1L << 31,
 
         /// <summary>
-        ///  当前货位已禁用
+        ///  备用16
         /// </summary>
-        [Description("当前货位已禁用")]
+        [Description("备用16")]
         备用16 = 1L << 32,
 
         /// <summary>
-        ///  组态中断报警
+        ///  备用17
         /// </summary>
-        [Description("组态中断报警")]
+        [Description("备用17")]
         备用17 = 1L << 33,
 
         /// <summary>
-        ///  货物左前超出
+        ///  备用18
         /// </summary>
-        [Description("货物左前超出")]
+        [Description("备用18")]
         备用18 = 1L << 34,
 
         /// <summary>
-        ///  货物左后超出
+        ///  备用19
         /// </summary>
-        [Description("货物左后超出")]
+        [Description("备用19")]
         备用19 = 1L << 35,
 
         /// <summary>
-        ///  货物右前超出
+        ///  备用20
         /// </summary>
-        [Description("货物右前超出")]
+        [Description("备用20")]
         备用20 = 1L << 36,
 
         /// <summary>
-        ///  货物右后超出
+        ///  备用21
         /// </summary>
-        [Description("货物右后超出")]
+        [Description("备用21")]
         备用21 = 1L << 37,
 
         /// <summary>
-        ///  相序保护
+        ///  备用22
         /// </summary>
-        [Description("相序保护")]
+        [Description("备用22")]
         备用22 = 1L << 38,
 
         /// <summary>

+ 14 - 1
业务工程/分拣库/WCS.Entity.Protocol/Truss/WCS_Truss523.cs

@@ -9,7 +9,6 @@ namespace WCS.Entity.Protocol.Truss
     public class WCS_Truss523 : ITruss523
     {
         [DataMember(Order = 0)]
-        [SugarColumn(ColumnDataType = "double")]
         public TrussAlarm Alarm { get; set; }
 
         [DataMember(Order = 1)]
@@ -18,4 +17,18 @@ namespace WCS.Entity.Protocol.Truss
         [DataMember(Order = 2)]
         public new string Code { get; set; }
     }
+
+    [DataContract]
+    [SugarTable("FJ_Truss523")]
+    public class QuestDb_Truss523
+    {
+        [DataMember(Order = 0)]
+        public string Alarm { get; set; }
+
+        [DataMember(Order = 1)]
+        public new DateTime Frame { get; set; }
+
+        [DataMember(Order = 2)]
+        public new string Code { get; set; }
+    }
 }

+ 8 - 6
业务工程/分拣库/WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -19,14 +19,11 @@ namespace WCS.WorkEngineering.Systems
     /// </summary>
     [BelongTo(typeof(NoInteractionWorld))]
     [Description("无交互系统")]
-    public class NoInteractionSystems : SystemBase
+    public class NoInteractionSystems : DeviceSystem<Device<IStation520>>
     {
-        public override List<object> GetObjects()
-        {
-            throw new NotImplementedException();
-        }
+        protected override bool ParallelDo => true;
 
-        public override void Update(List<WorkTimes> list)
+        public override void Do(Device<IStation520> obj)
         {
             var taskInfos = new List<int>();
             var sqlSugar = new SqlSugarHelper();
@@ -226,5 +223,10 @@ namespace WCS.WorkEngineering.Systems
                 }
             }
         }
+
+        public override bool Select(Device dev)
+        {
+            return dev.Code == nameof(NoInteractionSystems);
+        }
     }
 }

+ 3 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/分拣支线/桁架分流点.cs

@@ -73,7 +73,9 @@ namespace WCS.WorkEngineering.Systems
             obj.Data.GoodsStart = obj.Entity.Code.ToShort();
             obj.Data.GoodsEnd = taskInfo.AddrNext.ToShort();
             obj.Data.GoodsEnd = taskInfo.AddrNext.ToShort();
-            obj.Data.VoucherNo++;
+            var voucherNo = (obj.Data.VoucherNo + 1).ToShort();
+            obj.Data.VoucherNo = voucherNo;
+            obj.Data.VoucherNo = voucherNo;
             World.Log($"执行记录:任务号[{obj.Data2.TaskNumber}][{obj.Data.VoucherNo}]");
         }
 

+ 3 - 2
业务工程/分拣库/WCS.WorkEngineering/Systems/分拣支线/环形库分流点.cs

@@ -202,8 +202,9 @@ namespace WCS.WorkEngineering.Systems
             obj.Data.GoodsStart = obj.Entity.Code.ToShort();
             obj.Data.GoodsEnd = nextAdd;
             obj.Data.GoodsEnd = nextAdd;
-
-            obj.Data.VoucherNo++;
+            var voucherNo = (obj.Data.VoucherNo + 1).ToShort();
+            obj.Data.VoucherNo = voucherNo;
+            obj.Data.VoucherNo = voucherNo;
             World.Log($"执行记录:任务号[{taskId}]-[{obj.Data.VoucherNo}]");
         }
 

+ 4 - 3
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架.cs

@@ -19,7 +19,7 @@ namespace WCS.WorkEngineering.Systems
     /// <summary>
     ///  桁架
     /// </summary>
-    [BelongTo(typeof(SortingPalletizingWorld))]
+    [BelongTo(typeof(TrussWorld))]
     [Description("桁架")]
     public class 桁架 : DeviceSystem<Truss>
     {
@@ -218,13 +218,14 @@ namespace WCS.WorkEngineering.Systems
                 var pickUpCode = _pickUpDevices.Select(x => x.Key.Entity.Code.ToShort());
                 World.Log($"可用取货线体1:{JsonConvert.SerializeObject(pickUpCode)}");
                 //从缓存线信息找到可以取货的缓存线
-                var cacheLines = db.Queryable<WCS_CacheLine>().Where(x => pickUpCode.Contains(x.LocationNo)).ToList().Where(
+                var cacheLines = db.Queryable<WCS_CacheLine>().Includes(x => x.Locations).Where(x => pickUpCode.Contains(x.LocationNo)).ToList().Where(
                     x =>
                     {
                         var isTime = x.AddTime < DateTime.Now.AddHours(-6);
                         var isPut = pickUpDevices.Any(p => p.key == x.LocationNo.ToString() && p.Count == x.Quantity);
+                        var count = x.Locations.Count(l => l.InStock);
                         //满足取货条件,或者是超六小时
-                        return isPut || (pickUpDevices.Any(p => p.key == x.LocationNo.ToString() && p.Count == x.Quantity) && isTime);
+                        return isPut || (pickUpDevices.Any(p => p.key == x.LocationNo.ToString() && p.Count == count) && isTime);
                     });
                 if (!cacheLines.Any())
                 {

+ 8 - 5
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架缓存放行点.cs

@@ -7,6 +7,7 @@ using WCS.Entity;
 using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.Worlds;
+using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace WCS.WorkEngineering.Systems
 {
@@ -133,16 +134,12 @@ namespace WCS.WorkEngineering.Systems
                     db.UpdateableRowLock(lineCache).UpdateColumns(x => new { x.Put }).ExecuteCommand();
 
                     //TODO:此处不绑定码垛信息的行
-                    //var pr = db.Queryable<WCS_PalletizingRow>().Single(x => x.Id == lineCache.PalletizingRowId);
-                    //pr.LineCode = lineCache.LocationNo.ToString();
-                    //db.Updateable(pr).ExecuteCommand();
                 }
 
                 var taskInfo = db.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskNumber && v.Status == Entity.TaskStatus.FinishOfShunt) ?? throw new KnownException("未找到对应的WCS任务", LogLevelEnum.Mid);
                 var location = lineCache.Locations.First(x => x.TaskId == taskInfo.ID);
                 isSideNum = location.SideNum;
                 taskInfo.Status = Entity.TaskStatus.ConveyorExecution;
-                //taskInfo.AddrNext = obj.Entity.Targets.FirstOrDefault().Code;
                 taskInfo.EditWho = "WCS";
                 taskInfo.EditTime = DateTime.Now;
                 db.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.EditWho, x.EditTime, x.Status }).ExecuteCommand();
@@ -154,12 +151,18 @@ namespace WCS.WorkEngineering.Systems
             obj.Data.TaskNumber = obj.Data2.TaskNumber;
             obj.Data.TaskNumber = obj.Data2.TaskNumber;
             obj.Data.GoodsStart = obj.Entity.Code.ToShort();
+            obj.Data.GoodsStart = obj.Entity.Code.ToShort();
+            obj.Data.GoodsEnd = nextAdd;
             obj.Data.GoodsEnd = nextAdd;
             if (isSideNum == 2)
             {
                 obj.Data.CmdType = StationCmd.Res6;
+                obj.Data.CmdType = StationCmd.Res6;
             }
-            obj.Data.VoucherNo++;
+
+            short voucherNo = (obj.Data.VoucherNo + 1).ToShort();
+            obj.Data.VoucherNo = voucherNo;
+            obj.Data.VoucherNo = voucherNo;
         }
 
         public override bool Select(Device dev)

+ 2 - 2
业务工程/分拣库/WCS.WorkEngineering/WorkStart.cs

@@ -279,7 +279,7 @@ namespace WCS.WorkEngineering
             {
                 new(new [] { "2532", "2732" }, "10.30.37.89"),
                 new(new [] { "2932", "3132" }, "10.30.37.97"),
-                //new(new [] { "2532", "2732" }, "10.30.37.105"),
+                new(new [] { "3332", "3532" }, "10.30.37.105"),
                 new(new [] {"RGV1"},"10.30.37.113"),
                 new(new [] {"RGV2"},"10.30.37.118"),
                 new(new [] {"RGV3"},"10.30.37.123"),
@@ -294,7 +294,7 @@ namespace WCS.WorkEngineering
                 {
                     var device = Device.All.FirstOrDefault(v => v.Code == item.DeviceNo[i]);
                     device.AddFlag(DeviceFlags.扫码);
-                    var pos = i * 20;
+                    var pos = i * 130;
                     device.AddProtocol<IBCR81>(pos, 81, item.Ip);
                 }
             }

+ 20 - 0
业务工程/分拣库/WCS.WorkEngineering/Worlds/TrussWorld.cs

@@ -0,0 +1,20 @@
+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 TrussWorld : MainWorld
+    {
+        public TrussWorld()
+        {
+        }
+    }
+}