xsd há 1 ano atrás
pai
commit
951a45cb99
100 ficheiros alterados com 11060 adições e 3 exclusões
  1. 3 3
      WCS.Core/ProtocolProxyBase.cs
  2. 497 0
      WCS.Core/World.cs
  3. 18 0
      WCS.DebugTool/App.config
  4. 72 0
      WCS.DebugTool/Program.cs
  5. 36 0
      WCS.DebugTool/Properties/AssemblyInfo.cs
  6. 35 0
      WCS.DebugTool/Properties/Settings.Designer.cs
  7. 9 0
      WCS.DebugTool/Properties/Settings.settings
  8. 66 0
      WCS.DebugTool/WCS.DebugTool.csproj
  9. 4 0
      WCS.DebugTool/packages.config
  10. 46 0
      WCS.Entity/BaseErrorinfoWcs.cs
  11. 76 0
      WCS.Entity/OBJ.cs
  12. 73 0
      WCS.Entity/Palletizing.cs
  13. 37 0
      WCS.Entity/TorschWbCount.cs
  14. 23 0
      WCS.Entity/V_RobotTask.cs
  15. 55 0
      WCS.Entity/V_TaskOut.cs
  16. 22 0
      WCS.Entity/WCS.Entity.csproj
  17. 255 0
      WCS.Entity/WCS_AgvTaskInfo.cs
  18. 91 0
      WCS.Entity/WCS_CacheLine.cs
  19. 78 0
      WCS.Entity/WCS_CacheLineLoc.cs
  20. 35 0
      WCS.Entity/WCS_DeviceGrp.cs
  21. 62 0
      WCS.Entity/WCS_DeviceInfo.cs
  22. 41 0
      WCS.Entity/WCS_DeviceProt.cs
  23. 115 0
      WCS.Entity/WCS_Palletizing.cs
  24. 60 0
      WCS.Entity/WCS_PalletizingLayer.cs
  25. 83 0
      WCS.Entity/WCS_PalletizingLoc.cs
  26. 97 0
      WCS.Entity/WCS_PalletizingRow.cs
  27. 41 0
      WCS.Entity/WCS_PathGrp.cs
  28. 71 0
      WCS.Entity/WCS_PathInfo.cs
  29. 45 0
      WCS.Entity/WCS_PlcData.cs
  30. 78 0
      WCS.Entity/WCS_PlcDataBlock.cs
  31. 147 0
      WCS.Entity/WCS_PlcSet.cs
  32. 35 0
      WCS.Entity/WCS_ROUTE.cs
  33. 71 0
      WCS.Entity/WCS_TaskDtl.cs
  34. 460 0
      WCS.Entity/WCS_TaskInfo.cs
  35. 349 0
      WCS.Entity/WCS_TaskOld.cs
  36. 20 0
      WCS.Entity/WCS_TaskOutSeq.cs
  37. 22 0
      WCS.Service/AppSettings.cs
  38. 29 0
      WCS.Service/PLCAccessors/PLCAccessorsCreater.cs
  39. 39 0
      WCS.Service/PLCAccessors/SiemensS7PLC.cs
  40. 72 0
      WCS.Service/Program.cs
  41. 11 0
      WCS.Service/Properties/launchSettings.json
  42. 44 0
      WCS.Service/WCS.Service.csproj
  43. 161 0
      WCS.Service/Worker.cs
  44. 29 0
      WCS.Service/Worlds/initWorld.cs
  45. 8 0
      WCS.Service/appsettings.Development.json
  46. 12 0
      WCS.Service/appsettings.json
  47. 100 0
      WcsFramework.sln
  48. 16 0
      业务工程/分拣库/WCS.Entity.Protocol/BCR/IBCR80.cs
  49. 16 0
      业务工程/分拣库/WCS.Entity.Protocol/BCR/IBCR81.cs
  50. 50 0
      业务工程/分拣库/WCS.Entity.Protocol/BCR/IBCR83.cs
  51. 17 0
      业务工程/分拣库/WCS.Entity.Protocol/BCR/WCS_BCR80.cs
  52. 17 0
      业务工程/分拣库/WCS.Entity.Protocol/BCR/WCS_BCR81.cs
  53. 66 0
      业务工程/分拣库/WCS.Entity.Protocol/BCR/WCS_BCR83.cs
  54. 18 0
      业务工程/分拣库/WCS.Entity.Protocol/DataStructure/BCRData.cs
  55. 30 0
      业务工程/分拣库/WCS.Entity.Protocol/DataStructure/DeviceData.cs
  56. 44 0
      业务工程/分拣库/WCS.Entity.Protocol/DataStructure/DeviceDataCollection.cs
  57. 67 0
      业务工程/分拣库/WCS.Entity.Protocol/DataStructure/DeviceDataPack.cs
  58. 17 0
      业务工程/分拣库/WCS.Entity.Protocol/DataStructure/ProdLineData.cs
  59. 22 0
      业务工程/分拣库/WCS.Entity.Protocol/DataStructure/RGVData.cs
  60. 18 0
      业务工程/分拣库/WCS.Entity.Protocol/DataStructure/RobotData.cs
  61. 30 0
      业务工程/分拣库/WCS.Entity.Protocol/DataStructure/SRMData.cs
  62. 58 0
      业务工程/分拣库/WCS.Entity.Protocol/DataStructure/StationData.cs
  63. 17 0
      业务工程/分拣库/WCS.Entity.Protocol/DataStructure/TrussData.cs
  64. 9 0
      业务工程/分拣库/WCS.Entity.Protocol/IProtocol.cs
  65. 23 0
      业务工程/分拣库/WCS.Entity.Protocol/IgnoreChangingAttribute.cs
  66. 53 0
      业务工程/分拣库/WCS.Entity.Protocol/RGV/IRGV520.cs
  67. 92 0
      业务工程/分拣库/WCS.Entity.Protocol/RGV/IRGV521.cs
  68. 270 0
      业务工程/分拣库/WCS.Entity.Protocol/RGV/RGVEnum.cs
  69. 32 0
      业务工程/分拣库/WCS.Entity.Protocol/RGV/WCS_RGV520.cs
  70. 47 0
      业务工程/分拣库/WCS.Entity.Protocol/RGV/WCS_RGV521.cs
  71. 212 0
      业务工程/分拣库/WCS.Entity.Protocol/Robot/IRobot520.cs
  72. 414 0
      业务工程/分拣库/WCS.Entity.Protocol/Robot/IRobot521.cs
  73. 17 0
      业务工程/分拣库/WCS.Entity.Protocol/Robot/IRobot522.cs
  74. 36 0
      业务工程/分拣库/WCS.Entity.Protocol/Robot/IRobot530.cs
  75. 226 0
      业务工程/分拣库/WCS.Entity.Protocol/Robot/IRobot531.cs
  76. 668 0
      业务工程/分拣库/WCS.Entity.Protocol/Robot/RobotEnum.cs
  77. 110 0
      业务工程/分拣库/WCS.Entity.Protocol/Robot/WCS_Robot520.cs
  78. 204 0
      业务工程/分拣库/WCS.Entity.Protocol/Robot/WCS_Robot521.cs
  79. 12 0
      业务工程/分拣库/WCS.Entity.Protocol/Robot/WCS_Robot522.cs
  80. 21 0
      业务工程/分拣库/WCS.Entity.Protocol/Robot/WCS_Robot530.cs
  81. 114 0
      业务工程/分拣库/WCS.Entity.Protocol/Robot/WCS_Robot531.cs
  82. 118 0
      业务工程/分拣库/WCS.Entity.Protocol/SRM/ISRM520.cs
  83. 184 0
      业务工程/分拣库/WCS.Entity.Protocol/SRM/ISRM521.cs
  84. 17 0
      业务工程/分拣库/WCS.Entity.Protocol/SRM/ISRM537.cs
  85. 675 0
      业务工程/分拣库/WCS.Entity.Protocol/SRM/SrmEnum.cs
  86. 83 0
      业务工程/分拣库/WCS.Entity.Protocol/SRM/WCS_SRM520.cs
  87. 127 0
      业务工程/分拣库/WCS.Entity.Protocol/SRM/WCS_SRM521.cs
  88. 15 0
      业务工程/分拣库/WCS.Entity.Protocol/SRM/WCS_SRM537.cs
  89. 46 0
      业务工程/分拣库/WCS.Entity.Protocol/Station/IStation520.cs
  90. 52 0
      业务工程/分拣库/WCS.Entity.Protocol/Station/IStation521.cs
  91. 41 0
      业务工程/分拣库/WCS.Entity.Protocol/Station/IStation523.cs
  92. 52 0
      业务工程/分拣库/WCS.Entity.Protocol/Station/IStation524.cs
  93. 2116 0
      业务工程/分拣库/WCS.Entity.Protocol/Station/IStation525.cs
  94. 6 0
      业务工程/分拣库/WCS.Entity.Protocol/Station/IStation90.cs
  95. 29 0
      业务工程/分拣库/WCS.Entity.Protocol/Station/IStation91.cs
  96. 469 0
      业务工程/分拣库/WCS.Entity.Protocol/Station/StationEnum.cs
  97. 35 0
      业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station520.cs
  98. 39 0
      业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station521.cs
  99. 31 0
      业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station523.cs
  100. 29 0
      业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station524.cs

+ 3 - 3
WCS.Core/ProtocolProxyBase.cs

@@ -131,9 +131,9 @@ namespace WCS.Core
         {
             var item = Items[propertyName] as PlcItem<T>;
             var res = item.Value;
-            var channel = Ltc.GetChannel();
-            if (channel != null)
-                this.World.OnInternalLog(channel, $"获取{Device.Code}.{ProtocolType.Name}.{propertyName} 值:{res}");
+            //var channel = Ltc.GetChannel();
+            //if (channel != null)
+            //    this.World.OnInternalLog(channel, $"获取{Device.Code}.{ProtocolType.Name}.{propertyName} 值:{res}");
             return res;
         }
 

+ 497 - 0
WCS.Core/World.cs

@@ -0,0 +1,497 @@
+using FreeRedis;
+using System.Collections.Concurrent;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Reflection;
+using System.Runtime.InteropServices;
+using System.Text.RegularExpressions;
+using static System.Formats.Asn1.AsnWriter;
+
+namespace WCS.Core
+{
+    /// <summary>
+    /// 世界用来管理下属System的执行周期,此为默认世界。也可以通过继承此类创建多个不同世界,不同世界的执行周期相互独立,不受其它世界延迟干扰。
+    /// </summary>
+    [Description("默认世界")]
+    public abstract class World : DescriptionClass
+    {
+        [DllImport("winmm.dll", EntryPoint = "timeBeginPeriod")]
+        public static extern uint MM_BeginPeriod(uint uMilliseconds);
+
+        [DllImport("winmm.dll", EntryPoint = "timeEndPeriod")]
+        public static extern uint MM_EndPeriod(uint uMilliseconds);
+
+        #region Static
+
+        /// <summary>
+        ///  世界是否启用成功
+        /// </summary>
+        public static bool IsStart = false;
+
+        private static List<World> _Worlds;
+
+        internal static List<World> Worlds
+        {
+            get
+            {
+                if (_Worlds == null)
+                {
+                    _Worlds = new List<World>();
+                    //_Worlds.Add(new World());//默认世界
+                    var arr = AppDomain.CurrentDomain.GetAssemblies().Select(v => v.GetTypes()).SelectMany(v => v).Where(v => typeof(World).IsAssignableFrom(v) && v != typeof(World)&&!v.IsAbstract).Select(v => Activator.CreateInstance(v)).OfType<World>().ToArray();//自定义世界
+                    _Worlds.AddRange(arr);
+                }
+                return _Worlds;
+            }
+        }
+
+        public static T GetWorldInstance<T>() where T : World
+        {
+            return (T)Worlds.First(v => v.GetType() == typeof(T));
+        }
+
+        public static T GetSystemInstance<T>() where T : SystemBase
+        {
+            try
+            {
+                return (T)Worlds.SelectMany(v => v.Systems).First(v => v.GetType() == typeof(T));
+            }
+            catch (Exception ex)
+            {
+                throw new Exception($"系统:{typeof(T).Name}未设置BelongToAttribute");
+            }
+        }
+
+        public static void StartAll()
+        { 
+            MM_BeginPeriod(1);
+            Worlds.ForEach(w => w.Init());
+            foreach (var w in Worlds)
+            {
+                if (w.SystemTypes.Length == 0) continue;
+                w.Start();
+            }
+            var arr = Worlds.SelectMany(v => v.SystemGroups).SelectMany(v => v.Value)
+                .SelectMany(v => v.GetObjects().OfType<EntityEx<Device>>().Select(d => new { Sys = v, Obj = d }))
+                .GroupBy(v => v.Obj.Entity.Code)
+                .Select(v => new { Code = v.Key, Systems = v.Select(d => d.Sys.GetType().Name).ToArray(), Worlds = v.Select(d => d.Sys.World.GetType().Name).Distinct().ToArray() })
+                .Where(v => v.Systems.Length > 1).ToArray();
+            if (arr.Length > 0)
+            {
+                var msgs = arr.Select(v => $"设备{v.Code}同时存在于{v.Systems.Length}个系统:({string.Join(',', v.Systems)}),{v.Worlds.Length}个世界:({string.Join(',', v.Worlds)})中").ToArray();
+                var str = string.Join('\n', msgs);
+                Console.ForegroundColor = ConsoleColor.DarkYellow;
+                Console.WriteLine(str);
+                Console.ResetColor();
+            }
+            IsStart = true;
+            Task.Run(() =>
+            {
+              
+                var i = 0;
+                while (IsStart)
+                {
+                    i++;
+                    if (i % 30 == 1)
+                    {
+                        Console.Clear();
+                    }
+                    Print();
+                    Task.Delay(100).Wait();
+                }
+            });
+        }
+         
+        public static void StopAll()
+        {
+            IsStart = false;
+            MM_EndPeriod(1);
+            foreach (World w in Worlds) w.Stop();
+        }
+
+        #endregion Static
+
+        #region Dynamic
+
+        public bool Stoped;
+        private Dictionary<Type, int> TypeOrder = new Dictionary<Type, int>();
+        private Dictionary<int, List<SystemBase>> SystemGroups = new Dictionary<int, List<SystemBase>>();
+        protected Type[] SystemTypes;
+
+        /// <summary>
+        /// 周期最小间隔时间(毫秒)
+        /// </summary>
+        protected abstract int Interval
+        {
+            get;
+        }
+
+        public DateTime Frame { get; private set; }
+
+        public World()
+        {
+            SystemTypes = GetSystemTypes();
+        }
+
+        protected virtual Type[] GetSystemTypes()
+        {
+            var sysTypes = AppDomain.CurrentDomain.GetAssemblies().Select(v => v.GetTypes()).SelectMany(v => v)
+                .Where(v => !v.IsAbstract)
+                .Where(v => typeof(SystemBase).IsAssignableFrom(v))
+                .Where(v =>
+                {
+                    var attr = v.GetCustomAttribute<BelongToAttribute>();
+                    if (attr == null) return GetType() == typeof(World);
+                    if (attr.WorldType == this.GetType()) return true;
+                    return false;
+                }).ToArray();
+            return sysTypes;
+        }
+
+        //public List<Device> Devices;
+
+        /// <summary>
+        /// 初始化,实例化世界下的所有系统
+        /// </summary>
+        public virtual void Init()
+        {
+            try
+            {
+                //Devices = Protocols.Generate(this);
+                foreach (var type in SystemTypes)
+                {
+                    var sysDesc = type.GetCustomAttribute<DescriptionAttribute>()?.Description;
+                    Ltc.SetChannel(new Channel { World = Description, Stage = "Init", System = sysDesc ?? type.Name, Item = "排序" });
+                    Set(type, 0);
+                }
+                var arr = TypeOrder.OrderBy(v => v.Value).Select(v => v.Key).ToArray();
+                var gs = TypeOrder.GroupBy(v => v.Value).OrderBy(v => v.Key).ToArray();
+                for (int i = 0; i < gs.Length; i++)
+                {
+                    var g = gs[i];
+                    var list = new List<SystemBase>();
+                    var sysArr = g.Select(v =>
+                    {
+                        var sysDesc = v.Key.GetCustomAttribute<DescriptionAttribute>()?.Description;
+                        Ltc.SetChannel(new Channel { World = Description, Stage = "Init", System = sysDesc ?? v.Key.Name, Item = "构造" });
+                        return Activator.CreateInstance(v.Key);
+                    }).OfType<SystemBase>().ToArray();
+                    list.AddRange(sysArr);
+                    SystemGroups.Add(i, list);
+                }
+            }
+            catch (Exception ex)
+            {
+                throw;
+            }
+            finally
+            {
+            }
+        }
+
+        private int Set(Type type, int level)
+        {
+            if (!SystemTypes.Contains(type))
+                throw new Exception($"OrderAttribute设置错误,与目标不属于同一世界。类型:{type}。");
+            if (level > 10)
+            {
+                throw new Exception($"OrderAttribute设置错误,导致死循环。类型:{type}。");
+            }
+            var attr = type.GetCustomAttribute<OrderAttribute>();
+            if (attr != null)
+            {
+                level++;
+                var num = Set(attr.SystemType, level);
+                TypeOrder[type] = num + (int)attr.Order;
+            }
+            else
+            {
+                TypeOrder[type] = 0;
+            }
+            return TypeOrder[type];
+        }
+
+        /// <summary>
+        /// 开启世界主循环
+        /// </summary>
+        public void Start()
+        {
+            Stoped = false;
+            Task.Run(Loop);//不要使用Thread,可以使用ThreadPool
+        }
+
+        private void Loop()
+        { 
+            var sw = new Stopwatch();
+            while (!Stoped)
+            {
+                this.Frame = DateTime.Now;
+                WorkTimes wt = new WorkTimes();
+                wt.Key = $"{this.Description} 周期:{Interval}";
+                sw.Restart();
+                BeforeUpdate(wt.Items);
+                Update(wt.Items);
+                AfterUpdate(wt.Items);
+                sw.Stop();
+                var workTimes = (int)sw.ElapsedMilliseconds;
+                var ms = Interval - workTimes;
+                //sw.Start();
+                if (ms > 0)
+                {
+                    Thread.Sleep(ms);//不要使用Task.Delay().Wait()
+                }
+                //sw.Stop();
+                //var total = sw.ElapsedMilliseconds;
+                wt.Total = workTimes;
+                FrameInfo(wt);
+            }
+        }
+
+        public void Stop()
+        {
+            Stoped = true;
+        }
+
+        private void Update(List<WorkTimes> list)
+        {
+            var wt = new WorkTimes();
+            wt.Key = "读取PLC数据";
+            var sw = new Stopwatch();
+            sw.Start();
+            LoadPlcData(wt.Items);
+            sw.Stop();
+            wt.Total = sw.ElapsedMilliseconds;
+            list.AddSafe(wt);
+
+            wt = new WorkTimes();
+            wt.Key = "系统业务";
+            sw.Restart();
+            DoLogics(wt.Items);
+            sw.Stop();
+            wt.Total = sw.ElapsedMilliseconds;
+            list.AddSafe(wt);
+        }
+
+        private void LoadPlcData(List<WorkTimes> list)
+        {
+            Parallel.ForEach(this.GetDataBlocks(), db =>
+            {
+                var channel = new Channel
+                {
+                    World = GetType().Name,
+                    Stage = "LoadPlcData",
+                    System = "",
+                    Item = $"{db.Entity.PLCInfo.IP}_{db.Entity.No}"
+                };
+                var sw = new Stopwatch();
+                sw.Start();
+                try
+                {
+                    db.RefreshData();
+                }
+                catch (Exception ex)
+                {
+                    this.Ex().Publish(channel, ex.GetBaseException().Message);
+                }
+                sw.Stop();
+                list.AddSafe(new WorkTimes { Key = $"{db.Entity.PLCInfo.IP}/{db.Entity.No}", Total = sw.ElapsedMilliseconds });
+            });
+        }
+
+        private void DoLogics(List<WorkTimes> list)
+        {
+            foreach (var group in SystemGroups)
+            {
+                var wt = new WorkTimes();
+                wt.Key = $"组{group.Key}";
+                var sw = new Stopwatch();
+                sw.Restart();
+                Parallel.ForEach(group.Value, sys =>
+                {
+                    var wt2 = new WorkTimes();
+                    wt2.Key = sys.Description;
+                    var sw2 = new Stopwatch();
+                    sw2.Start();
+                    try
+                    {
+                        sys.Update(wt2.Items);
+                    }
+                    catch (Exception ex)
+                    {
+                        Console.ForegroundColor = ConsoleColor.Red;
+                        Console.WriteLine(ex.GetBaseException().Message);
+                        Console.ResetColor();
+                    }
+                    sw2.Stop();
+                    wt2.Total = sw2.ElapsedMilliseconds;
+                    list.AddSafe(wt2);
+                });
+                sw.Stop();
+                wt.Total = sw.ElapsedMilliseconds;
+                //list.AddSafe(wt);
+            }
+        }
+
+        protected virtual void BeforeUpdate(List<WorkTimes> list)
+        {
+        }
+
+        protected virtual void AfterUpdate(List<WorkTimes> list)
+        {
+        }
+
+        #endregion Dynamic
+
+        public T GetSystem<T>() where T : SystemBase
+        {
+            var sys = Systems.FirstOrDefault(v => v.GetType() == typeof(T)) as T;
+            if (sys == null) throw new Exception($"世界{GetType().Name}中不存在系统{typeof(T).Name}");
+            return sys;
+        }
+
+        public SystemBase[] Systems
+        {
+            get
+            {
+                return SystemGroups.SelectMany(v => v.Value).ToArray();
+            }
+        }
+        static ConcurrentDictionary<World, WorkTimes> WorldsInfo = new ConcurrentDictionary<World, WorkTimes>();
+        protected virtual void FrameInfo(WorkTimes wt)
+        {
+            WorldsInfo[this] = wt;
+            //if (wt.Total > this.Interval)
+            //{
+            //    Console.ForegroundColor = ConsoleColor.Red;
+            //}
+            //Console.WriteLine(wt.GetInfo());
+            //Console.ResetColor();
+        }
+
+        static string lastInfo = "";
+        static void Print()
+        { 
+            var info = "\n" + string.Join("\n", WorldsInfo.Values.Select(v => v.GetInfo().PadRight(200))).PadRight(1000);
+             
+            if (info != lastInfo)
+            {
+                Console.CursorVisible = false;
+                Console.WriteLine(info);
+                Console.SetCursorPosition(0, 0);
+                lastInfo = info;
+            }
+            //foreach (var kv in WorldsInfo)
+            //{
+            //    if (kv.Value.Total > kv.Key.Interval)
+            //    {
+            //        Console.ForegroundColor = ConsoleColor.Red;
+            //    }
+            //    Console.WriteLine(kv.Value.GetInfo());
+            //    Console.ResetColor();
+            //}
+        }
+
+        public void Log<T>(T log) where T : ILog
+        {
+            var channel = Ltc.GetChannel();
+            if (channel != null)
+                OnLog(Ltc.GetChannel(), log);
+        }
+
+        protected internal abstract void OnError(Channel channel, Exception exception);
+
+        protected internal abstract void OnInternalLog(Channel channel, string msg);
+
+        protected abstract void OnLog(Channel channel, object logObj);
+
+        protected abstract IEnumerable<string> GetChannelMsg(Channel channel);
+
+        internal void Publish()
+        {
+            var channel = Ltc.GetChannel();
+            if (channel != null)
+            {
+                var msgs = GetChannelMsg(channel);
+                var msg = string.Join("\n", msgs);
+                this.Ex().Publish(channel, msg);
+            }
+        }
+    }
+
+    public interface ILog
+    {
+    }
+
+    public class WorldEx : EntityEx<World>
+    {
+        private RedisClient Redis = new RedisClient(Configs.DebugRedisUrl);
+        private ConcurrentQueue<string> ChannelList = new ConcurrentQueue<string>();
+
+        private DateTime SubTime = DateTime.Now;
+
+        public WorldEx(World ent) : base(ent)
+        {
+            Redis.Subscribe("Login", (channel, msg) =>
+            {
+                ChannelList.Clear();
+                foreach (var m in msg.ToString().Split(','))
+                {
+                    ChannelList.Enqueue(m);
+                }
+
+                SubTime = DateTime.Now;
+                Console.WriteLine($"调试工具正在使用中,已订阅:{msg}");
+            });
+        }
+
+        public void Publish(Channel channel, string msg)
+        {
+            if ((DateTime.Now - SubTime).TotalSeconds > 20)
+                return;
+            var flag = false;
+
+            flag = ChannelList.Any(v =>
+            {
+                var b = Regex.Match(channel.ToString(), $"^{v.Replace("*", ".*")}$");
+                return b.Success;
+            });
+
+            if (flag)
+                Redis.Publish(channel.ToString(), msg);
+        }
+    }
+
+    public class WorkTimes
+    {
+        public string Key { get; set; } = "";
+        public long Total { get; set; }
+        public List<WorkTimes> Items { get; set; } = new List<WorkTimes>();
+
+        public override string ToString()
+        {
+            return $"{Key},明细:{Items.Count},耗时:{Total.ToString().PadLeft(4)}";
+        }
+
+        public string GetInfo()
+        {
+            var str = $"[{ToString()}]";
+            if (Items.Count > 0) str += $" > {Items.MaxBy(v => v.Total)?.GetInfo()}";
+            return str;
+        }
+    }
+
+    public abstract class AttrClass<T> where T : Attribute
+    {
+        public T? Attr { get; private set; }
+
+        public AttrClass()
+        {
+            Attr = GetType().GetCustomAttribute<T>();
+        }
+    }
+
+    public abstract class DescriptionClass : AttrClass<DescriptionAttribute>
+    {
+        public string Description => Attr != null ? Attr.Description : GetType().Name;
+    }
+}

+ 18 - 0
WCS.DebugTool/App.config

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+            <section name="WCS.DebugTool.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+        </sectionGroup>
+    </configSections>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+    </startup>
+    <applicationSettings>
+        <WCS.DebugTool.Properties.Settings>
+            <setting name="Redis" serializeAs="String">
+                <value>10.30.39.1,database=15,prefix=ceshi</value>
+            </setting>
+        </WCS.DebugTool.Properties.Settings>
+    </applicationSettings>
+</configuration>

+ 72 - 0
WCS.DebugTool/Program.cs

@@ -0,0 +1,72 @@
+using FreeRedis;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace WCS.DebugTool
+{
+    class Program
+    {
+
+        static void Main(string[] args)
+        {
+            var key = "";
+            RedisClient redis = null;
+            var last = DateTime.MinValue;
+            Task.Run(() =>
+            {
+                SpinWait.SpinUntil(() => redis != null);
+                while (true)
+                {
+                    try
+                    {
+                        if ((DateTime.Now - last).TotalMilliseconds < 5000 || key == "")
+                        {
+                            Task.Delay(100).Wait();
+                        }
+                        else
+                        {
+                            last = DateTime.Now;
+                            redis.Publish("Login", key);
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        Task.Delay(100).Wait();
+                    }
+                }
+            });
+
+            while (true)
+            {
+                if (redis == null)
+                { 
+                    Console.WriteLine("请输入订阅关键字(逗号分隔):");
+                    redis = new RedisClient(Properties.Settings.Default.Redis);
+                    key = Console.ReadLine();
+                    last = DateTime.MinValue;
+
+                    var arr = key.Split(',');
+                    redis.PSubscribe(arr, (channel, msg) =>
+                    {
+                        Console.WriteLine($"----------对象:{channel}----------\n{msg}");
+                    });
+                }
+                else
+                {
+                    if (Console.ReadKey().Key == ConsoleKey.Escape)
+                    {
+                        Console.Clear();
+                        redis.Dispose();
+                        redis = null;
+                        key = "";
+                    }
+                }
+            } 
+        
+        }
+    }
+}

+ 36 - 0
WCS.DebugTool/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("WCS.DebugTool")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("WCS.DebugTool")]
+[assembly: AssemblyCopyright("Copyright ©  2021")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("6e83138e-f92b-40fb-beb4-f5e02383b823")]
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 35 - 0
WCS.DebugTool/Properties/Settings.Designer.cs

@@ -0,0 +1,35 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本:4.0.30319.42000
+//
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace WCS.DebugTool.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("127.0.0.1")]
+        public string Redis {
+            get {
+                return ((string)(this["Redis"]));
+            }
+        }
+    }
+}

+ 9 - 0
WCS.DebugTool/Properties/Settings.settings

@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="WCS.DebugTool.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="Redis" Type="System.String" Scope="Application">
+      <Value Profile="(Default)">127.0.0.1</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>

+ 66 - 0
WCS.DebugTool/WCS.DebugTool.csproj

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{6E83138E-F92B-40FB-BEB4-F5E02383B823}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <RootNamespace>WCS.DebugTool</RootNamespace>
+    <AssemblyName>WCS.DebugTool</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="FreeRedis, Version=1.1.10.0, Culture=neutral, PublicKeyToken=9aa6a3079358d437, processorArchitecture=MSIL">
+      <HintPath>..\packages\FreeRedis.1.1.10\lib\net451\FreeRedis.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 4 - 0
WCS.DebugTool/packages.config

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="FreeRedis" version="1.1.10" targetFramework="net472" />
+</packages>

+ 46 - 0
WCS.Entity/BaseErrorinfoWcs.cs

@@ -0,0 +1,46 @@
+using SqlSugar;
+using System;
+using System.Runtime.Serialization;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    ///  Wcs异常信息记录
+    /// </summary>
+    [Tenant("sx")]
+    [SugarTable("Base_ErrorInfo_Wcs")]
+    public partial class BaseErrorinfoWcs
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "ID")]
+        public int ID { get; set; }
+        /// <summary>
+        /// 工字轮条码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false)]
+        public string ContBarCode { get; set; }
+
+        /// <summary>
+        ///  异常描述信息
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", IsNullable = true)]
+        public string Message { get; set; }
+        /// <summary>
+        /// 次数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true)]
+        public int Count { get; set; }
+        /// <summary>
+        ///  memo
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", IsNullable = true)]
+        public string Memo { get; set; }
+        /// <summary>
+        /// AddTime
+        /// </summary>
+        [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
+        public DateTime AddTime { get; set; } = DateTime.Now;
+    }
+}

+ 76 - 0
WCS.Entity/OBJ.cs

@@ -0,0 +1,76 @@
+using SqlSugar;
+using System;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    /// 实体类通用基础类
+    /// </summary>
+    [Serializable]
+    public abstract class OBJ
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "ID")]
+        [Column(Order = 0)]
+        public virtual int ID { get; set; }
+
+        /// <summary>
+        /// 是否可用
+        /// </summary>
+        [SugarColumn(ColumnDescription = "是否可用")]
+        public bool Enabled { get; set; } = true;
+
+        /// <summary>
+        /// 创建用户
+        /// 仅记录用户ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建用户", Length = 50)]
+        public string AddWho { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// 新增数据时自动获取服务器时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建时间", InsertServerTime = true)]
+        public virtual DateTime AddTime { get; set; }
+
+        /// <summary>
+        /// 更新用户
+        /// 仅记录用户ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新用户", Length = 50, IsNullable = true)]
+        public string EditWho { get; set; }
+
+        /// <summary>
+        /// 更新时间
+        /// 更新数据时自动获取服务器时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新时间", UpdateServerTime = true, IsNullable = true)]
+        public DateTime EditTime { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "版本号", ColumnDataType = "timestamp", IsNullable = true, IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)]
+        public byte[] VER { get; set; }
+
+        /// <summary>
+        ///
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <returns></returns>
+        public T Copy<T>() where T : OBJ
+        {
+            var instance = Activator.CreateInstance<T>();
+            foreach (var property in GetType().GetProperties())
+            {
+                var obj = property.GetValue(this);
+                typeof(T).GetProperty(property.Name)!.SetValue(instance, obj);
+            }
+            return instance;
+        }
+    }
+}

+ 73 - 0
WCS.Entity/Palletizing.cs

@@ -0,0 +1,73 @@
+using SqlSugar;
+using System;
+using System.Runtime.Serialization;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    ///  码垛主表
+    /// </summary>
+    [Tenant("sx")]
+    [SugarTable("Palletizing")]
+    public partial class Palletizing
+    {    /// <summary>
+         /// ID
+         /// </summary>
+        [SugarColumn(IsPrimaryKey = true, ColumnDescription = "ID"), DataMember(Order = 0)]
+        public long ID { get; set; }
+
+        /// <summary>
+        /// 码垛工位
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = false)]
+        public string Equip { get; set; }
+
+        /// <summary>
+        /// 最大码垛数量
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
+        public int PalletMax { get; set; }
+
+        /// <summary>
+        /// 码垛状态(0:执行;1.结束码垛)
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
+        public int PalletizState { get; set; }
+
+        /// <summary>
+        /// 是否强制结盘
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
+        public int Finish { get; set; }
+
+        /// <summary>
+        /// 装箱规则(CP:层配;SPC:非空置盘)
+        /// </summary>
+        [SugarColumn]
+        public string BoxRule { get; set; }
+
+        /// <summary>
+        /// 装箱规则id
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
+        public long BoxRuleId { get; set; }
+
+        /// <summary>
+        /// 托盘输送任务
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
+        public int TaskNum { get; set; }
+
+        public int Count { get; set; }
+
+        public int GoodsType { get; set; }
+
+        public DateTime AddTime { get; set; }
+
+        /// <summary>
+        /// 所属机械臂
+        /// </summary>
+        [SugarColumn]
+        public string Robot { get; set; }
+    }
+}

+ 37 - 0
WCS.Entity/TorschWbCount.cs

@@ -0,0 +1,37 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.Text;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    /// 扭转分配机台数量表
+    /// </summary>
+    [Tenant("sx")] 
+    [SugarTable("TorschWbCount")]
+    public partial class TorschWbCount
+    {
+        /// <summary>
+        /// Id
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "Id")]
+        public long Id { get; set; }
+        /// <summary>
+        /// 扭转机台号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = false)]
+        public string Code { get; set; }
+        /// <summary>
+        /// 已分配的任务数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
+        public int WbCount { get; set; }
+        /// <summary>
+        /// 扫码设备号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string Memo { get; set; }
+    }
+}

+ 23 - 0
WCS.Entity/V_RobotTask.cs

@@ -0,0 +1,23 @@
+using SqlSugar;
+using System;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    /// 任务表
+    /// </summary>
+    [SugarTable(nameof(V_RobotTask))]
+    public class V_RobotTask
+    { 
+        public int PalletTask { get; set; }
+        public int MaxQty { get; set; }
+        public int GoodsType { get; set; }
+        public string Station { get; set; } 
+        public string Robot { get; set; }  
+        public int TaskID { get; set; }
+        public DateTime EditTime { get; set; }
+
+
+
+    }
+}

+ 55 - 0
WCS.Entity/V_TaskOut.cs

@@ -0,0 +1,55 @@
+using SqlSugar;
+using System;
+using System.Runtime.Serialization;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    /// 任务表
+    /// </summary>
+    [SugarTable(nameof(V_TaskOut), "出库视图")]
+    [DataContract]
+    public class V_TaskOut
+    {
+        [DataMember(Order =0)]
+        public int Task1 { get; set; }
+        [DataMember(Order =1)]
+        public int Type1 { get; set; }
+        [DataMember(Order = 2)]
+        public string BusType1 { get; set; }
+        [DataMember(Order = 3)]
+        public short Row1 { get; set; }
+        [DataMember(Order = 4)]
+        public short Col1 { get; set; }
+        [DataMember(Order = 5)]
+        public short Layer1 { get; set; }
+        [DataMember(Order = 6)]
+
+        public int Task2 { get; set; }
+        [DataMember(Order = 7)]
+        public int Type2 { get; set; }
+        [DataMember(Order = 8)]
+        public string BusType2 { get; set; }
+        [DataMember(Order = 9)]
+        public short Row2 { get; set; }
+        [DataMember(Order = 10)]
+        public short Col2 { get; set; }
+        [DataMember(Order = 11)]
+        public short Layer2 { get; set; }
+        [DataMember(Order = 12)]
+        public string SRM { get; set; }
+        [DataMember(Order = 13)]
+        public string AddrTo { get; set; }
+
+    }
+
+    public class LocInfo
+    {
+        public string Code { get; set; }
+        public int Row { get; set; }
+        public int Col { get; set; }
+        public int Layer { get; set; }
+        public int Depth { get; set; }
+    }
+
+}

+ 22 - 0
WCS.Entity/WCS.Entity.csproj

@@ -0,0 +1,22 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.1</TargetFramework>
+    <Nullable>enable</Nullable>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+  </PropertyGroup>
+  
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+    <NoWarn>1701;1702;8602;8616;8618;8625;8600;8603;8714;1591</NoWarn>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+    <NoWarn>1701;1702;8602;8616;8618;8625;8600;8603;8714;1591</NoWarn>
+  </PropertyGroup>
+  
+  <ItemGroup>
+    <PackageReference Include="SqlSugarCore" Version="5.1.4.94" />
+    <PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
+  </ItemGroup>
+
+</Project>

+ 255 - 0
WCS.Entity/WCS_AgvTaskInfo.cs

@@ -0,0 +1,255 @@
+using SqlSugar;
+using System;
+using System.ComponentModel;
+using System.Runtime.Serialization;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    /// AGV任务中间表
+    /// </summary>
+    [SugarTable(nameof(WCS_AgvTaskInfo) + "_{year}{month}{day}", "AGV任务中间表")]
+    [SplitTable(SplitType.Month)]//按年分表 (自带分表支持 年、季、月、周、日)
+    [DataContract]
+    public class WCS_AgvTaskInfo
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, ColumnDescription = "ID"), DataMember(Order = 0)]
+        public int ID { get; set; }
+
+        /// <summary>
+        /// AGVID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "AGVID", Length = 50, IsNullable = true), DataMember(Order = 1)]
+        public string AgvID { get; set; }
+
+        /// <summary>
+        ///  wcsTaskId
+        /// </summary>
+        [SugarColumn(ColumnDescription = "wcsTaskId", IsNullable = true), DataMember(Order = 2)]
+        public int TaskId { get; set; }
+
+        [Navigate(NavigateType.OneToOne, nameof(TaskId))]
+        public WCS_TaskInfo Task { get; set; }
+
+        /// <summary>
+        /// 任务类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "任务类型")]
+        [DataMember(Order = 2)]
+        public AGVTaskType TaskType { get; set; }
+
+        /// <summary>
+        /// WCS AGV任务状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "WCS AGV任务状态")]
+        [DataMember(Order = 3)]
+        public AGVTaskStatus Status { get; set; }
+
+        /// <summary>
+        /// AGV自身状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "AGV自身状态")]
+        [DataMember(Order = 4)]
+        public AGVTaskStatus AgvStatus { get; set; }
+
+        /// <summary>
+        /// 车间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "车间")]
+        [DataMember(Order = 5)]
+        public int WorkShop { get; set; }
+
+        /// <summary>
+        /// 站台
+        /// </summary>
+        [SugarColumn(ColumnDescription = "站台", Length = 20, IsNullable = true)]
+        [DataMember(Order = 6)]
+        public string Station { get; set; }
+
+        /// <summary>
+        /// 位置
+        /// </summary>
+        [SugarColumn(ColumnDescription = "位置", Length = 20, IsNullable = true)]
+        [DataMember(Order = 7)]
+        public string Position { get; set; }
+
+        /// <summary>
+        /// 货物数量(1.两个位置放1个货物,2.两个位置放2个货物)
+        /// </summary>
+
+        [SugarColumn(ColumnDescription = "货物数量(1.两个位置放1个货物,2.两个位置放2个货物)")]
+        [DataMember(Order = 11)]
+        public int GoodsSum { get; set; }
+
+        /// <summary>
+        /// 创建用户
+        /// 仅记录用户ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建用户", Length = 50)]
+        public string AddWho { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建时间", InsertServerTime = true)]
+        public DateTime AddTime { get; set; }
+
+        /// <summary>
+        /// AGV更新时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "AGV更新时间", UpdateServerTime = true, IsNullable = true)]
+        [DataMember(Order = 10)]
+        public DateTime AgvUpdateTime { get; set; }
+
+        /// <summary>
+        /// 更新用户
+        /// 仅记录用户ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新用户", Length = 50, IsNullable = true)]
+        public string EditWho { get; set; }
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新时间", IsNullable = true, UpdateServerTime = true)]
+        public DateTime EditTime { get; set; }
+    }
+
+    /// <summary>
+    /// AGV任务状态
+    /// </summary>
+    public enum AGVTaskStatus
+    {
+        /// <summary>
+        /// 新建
+        /// </summary>
+        [Description("新建")]
+        NewBuild = 0,
+
+        /// <summary>
+        /// 确认
+        /// </summary>
+        [Description("确认")]
+        Confirm = 5,
+
+        /// <summary>
+        /// 执行
+        /// </summary>
+        [Description("执行")]
+        Execution = 10,
+
+        /// <summary>
+        ///  走出储位
+        /// </summary>
+        ExitStorage = 11,
+
+        /// <summary>
+        ///  走入储位
+        /// </summary>
+        WalkIntoStorage = 12,
+
+        /// <summary>
+        ///  巷道/工位分配申请
+        /// </summary>
+        [Description("巷道/工位分配申请")]
+        RequestOrPermission1 = 20,
+
+        /// <summary>
+        /// 完成巷道/工位分配申请
+        /// </summary>
+        [Description("完成巷道/工位分配申请")]
+        Complete1 = 21,
+
+        #region 安全交互
+
+        /// <summary>
+        ///  取站台前安全交互申请
+        /// </summary>
+        [Description("取放站台前安全交互申请")]
+        RequestOrPermission2 = 30,
+
+        /// <summary>
+        ///  完成交互
+        ///  完成交互
+        /// </summary>
+        [Description("取放站台前安全交互申请")]
+        Complete = 31,
+
+        /// <summary>
+        ///  放站台前安全交互申请
+        /// </summary>
+        [Description("取放站台前安全交互申请")]
+        PutRequestOrPermission = 40,
+
+        #endregion 安全交互
+
+        /// <summary>
+        ///  小车离开取货位
+        /// </summary>
+        [Description("小车离开取货位")]
+        LeaveGet = 32,
+
+        /// <summary>
+        ///  小车离开放货位
+        /// </summary>
+        [Description("小车离开放货位")]
+        LeavePut = 33,
+
+        /// <summary>
+        /// 任务完成
+        /// </summary>
+        [Description("任务完成")]
+        MissionCompleted = 99,
+
+        /// <summary>
+        /// 完成扫码
+        /// </summary>
+        [Description("完成扫码")]
+        CompleteScanCode = 100,
+
+        /// <summary>
+        ///  取消
+        /// </summary>
+        [Description("取消")]
+        Cancel = 106
+    }
+
+    /// <summary>
+    /// AGV任务类型
+    /// </summary>
+    public enum AGVTaskType
+    {
+        /// <summary>
+        /// 入库
+        /// </summary>
+        [Description("入库")]
+        EnterDepot = 1,
+
+        /// <summary>
+        /// 背负式补空
+        /// </summary>
+        [Description("背负式补空")]
+        CallForMaterial = 2,
+
+        /// <summary>
+        ///  叉车机台补空任务
+        /// </summary>
+        [Description("叉车机台补空任务")]
+        ForkliftFilling = 3,
+
+        /// <summary>
+        /// 叫料
+        /// </summary>
+        [Description("叫料")]
+        CallMaterial = 4,
+
+        /// <summary>
+        ///  搬运/运输
+        /// </summary>
+        [Description("搬运/运输")]
+        Transport = 5,
+    }
+}

+ 91 - 0
WCS.Entity/WCS_CacheLine.cs

@@ -0,0 +1,91 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    ///  码垛缓存线主表
+    /// </summary>
+    [SugarTable(nameof(WCS_CacheLine), "码垛缓存线")]
+    public class WCS_CacheLine
+    {
+        /// <summary>
+        ///  ID
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "ID")]
+        public int Id { get; set; }
+
+        /// <summary>
+        ///  对应的设备号
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "对应的设备号")]
+        public short LocationNo { get; set; }
+
+        /// <summary>
+        ///  目标地址
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "对应的设备号")]
+        public short TargetAddress { get; set; }
+
+        /// <summary>
+        ///  位信息
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(WCS_CacheLineLoc.CacheLineId))]
+        public List<WCS_CacheLineLoc> Locations { get; set; }
+
+        /// <summary>
+        ///  要去的行信息对应的ID
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "要去的行信息对应的ID")]
+        public int PalletizingRowId { get; set; }
+
+        /// <summary>
+        ///  要去的行信息
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(PalletizingRowId))]
+        public WCS_PalletizingRow WCS_PalletizingRow { get; set; }
+
+        /// <summary>
+        ///  是否放行
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否放行")]
+        public bool Put { get; set; }
+
+        /// <summary>
+        ///  有货数量
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "有货数量")]
+        public int Quantity { get; set; }
+
+        /// <summary>
+        ///  当前线体对应的物料编码组
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "当前线体对应的物料编码组")]
+        public string MatCodeList { get; set; }
+
+        /// <summary>
+        ///  当前线体是否放满货物
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "当前线体是否放满货物")]
+        public bool InStock { get; set; }
+
+        /// <summary>
+        ///  桁架是否开始取货
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "桁架是否开始取货")]
+        public bool IsTruss { get; set; }
+
+        /// <summary>
+        ///  创建时间
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "创建时间")]
+        public DateTime AddTime { get; set; }
+
+        /// <summary>
+        ///  编辑时间
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "编辑时间")]
+        public DateTime EditTime { get; set; }
+    }
+}

+ 78 - 0
WCS.Entity/WCS_CacheLineLoc.cs

@@ -0,0 +1,78 @@
+using System;
+using SqlSugar;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    ///  码垛缓存线位信息
+    /// </summary>
+    [SugarTable(nameof(WCS_CacheLineLoc), "码垛缓存线位信息")]
+    public class WCS_CacheLineLoc
+    {
+        /// <summary>
+        ///  ID
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "ID")]
+        public int Id { get; set; }
+
+        /// <summary>
+        ///  对应的设备号
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "对应的设备号")]
+        public short LocationNo { get; set; }
+
+        /// <summary>
+        ///  坐标号
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "坐标号")]
+        public string XYNo { get; set; }
+
+        /// <summary>
+        /// 物料号
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "物料号")]
+        public string MatCode { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "任务号")]
+        public int TaskId { get; set; }
+
+        /// <summary>
+        ///  任务信息
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(TaskId))]
+        public WCS_TaskInfo Task { get; set; }
+
+        /// <summary>
+        ///  码垛缓存线主表ID
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "码垛缓存线主表ID")]
+        public int CacheLineId { get; set; }
+
+        /// <summary>
+        ///  是否有货
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否有货")]
+        public bool InStock { get; set; }
+
+        /// <summary>
+        ///  是否空置
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否有货")]
+        public bool IsEmpty { get; set; }
+
+        /// <summary>
+        ///  创建时间
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "创建时间")]
+        public DateTime AddTime { get; set; }
+
+        /// <summary>
+        ///  编辑时间
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "编辑时间")]
+        public DateTime EditTime { get; set; }
+    }
+}

+ 35 - 0
WCS.Entity/WCS_DeviceGrp.cs

@@ -0,0 +1,35 @@
+using SqlSugar;
+
+namespace WCS.Entity
+{
+    ///// <summary>
+    ///// 设备组
+    ///// </summary>
+    //[SugarTable(nameof(WCS_DeviceGrp), "设备组")]
+    //public class WCS_DeviceGrp : OBJ
+    //{
+    //    /// <summary>
+    //    /// 组设备编号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "组设备编号")]
+    //    public string GroupCode { get; set; }
+
+    //    /// <summary>
+    //    /// 组设备信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, nameof(GroupCode))]
+    //    public WCS_DeviceInfo Group { get; set; }
+
+    //    /// <summary>
+    //    /// 子设备编号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "子设备编号")]
+    //    public string MemberCode { get; set; }
+
+    //    /// <summary>
+    //    /// 子设备信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, nameof(MemberCode))]
+    //    public WCS_DeviceInfo Member { get; set; }
+    //}
+}

+ 62 - 0
WCS.Entity/WCS_DeviceInfo.cs

@@ -0,0 +1,62 @@
+using SqlSugar;
+using System.Collections.Generic;
+
+namespace WCS.Entity
+{
+    ///// <summary>
+    ///// 设备列表
+    ///// </summary>
+    //[SugarTable(nameof(WCS_DeviceInfo), "设备列表")]
+    //public class WCS_DeviceInfo : OBJ
+    //{
+    //    [SugarColumn(IsIgnore = true)]
+    //    public override int ID { get; set; }
+
+    //    /// <summary>
+    //    /// 设备编号
+    //    /// </summary>
+    //    [SugarColumn(IsPrimaryKey = true, ColumnDescription = "设备编号", Length = 50)]
+    //    public string Code { get; set; }
+
+    //    /// <summary>
+    //    /// 设备名称
+    //    /// </summary>
+    //    [SugarColumn(Length = 50, ColumnDescription = "设备名称")]
+    //    public string Name { get; set; }
+
+    //    /// <summary>
+    //    /// 设备可用协议集合
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToMany, nameof(WCS_DeviceProt.DeviceCode))]
+    //    public List<WCS_DeviceProt> DeviceProtocol { get; set; }
+
+    //    /// <summary>
+    //    /// 上一个设备集合
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToMany, nameof(WCS_Route.NextCode))]
+    //    public List<WCS_Route> FormerRoutes { get; set; }
+
+    //    /// <summary>
+    //    /// 下一个设备集合
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToMany, nameof(WCS_Route.DeviceCode))]
+    //    public List<WCS_Route> NextRoutes { get; set; }
+
+    //    /// <summary>
+    //    /// 设备可用路径集合
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToMany, nameof(WCS_PathGrp.StartCode))]
+    //    public List<WCS_PathGrp> Paths { get; set; }
+
+    //    /// <summary>
+    //    /// 设备对应设备组信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToMany, nameof(WCS_DeviceGrp.GroupCode))]
+    //    public List<WCS_DeviceGrp> DeviceGroup { get; set; }
+
+    //    public override string ToString()
+    //    {
+    //        return Code;
+    //    }
+    //}
+}

+ 41 - 0
WCS.Entity/WCS_DeviceProt.cs

@@ -0,0 +1,41 @@
+using SqlSugar;
+
+namespace WCS.Entity
+{
+    ///// <summary>
+    ///// DB块读写协议
+    ///// </summary>
+    //[SugarTable(nameof(WCS_DeviceProt), "DB块读写协议")]
+    //public class WCS_DeviceProt : OBJ
+    //{
+    //    /// <summary>
+    //    /// 设备编号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "设备")]
+    //    public string DeviceCode { get; set; }
+
+    //    /// <summary>
+    //    /// 设备信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, nameof(DeviceCode))]
+    //    public WCS_DeviceInfo Device { get; set; }
+
+    //    /// <summary>
+    //    /// DB编号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "DB编号")]
+    //    public string DataBlockCode { get; set; }
+
+    //    /// <summary>
+    //    /// DB信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, nameof(DataBlockCode))]
+    //    public WCS_PlcDataBlock DB { get; set; }
+
+    //    /// <summary>
+    //    /// 起始位置
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "起始位置")]
+    //    public short Position { get; set; }
+    //}
+}

+ 115 - 0
WCS.Entity/WCS_Palletizing.cs

@@ -0,0 +1,115 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    ///  码垛信息记录主表
+    /// </summary>
+    [SugarTable(nameof(WCS_Palletizing), "码垛信息主表")]
+    public class WCS_Palletizing
+    {
+        /// <summary>
+        ///  Id
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "ID")]
+        public int Id { get; set; }
+
+        /// <summary>
+        ///  任务Id
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "任务Id")]
+        public int TaskId { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(TaskId))]
+        public WCS_TaskInfo TaskInfo { get; set; }
+
+        /// <summary>
+        ///  托盘条码
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "任务Id")]
+        public string PalleCode { get; set; }
+
+        /// <summary>
+        ///  垛型编码
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "垛型编码")]
+        public string Code { get; set; }
+
+        /// <summary>
+        ///  短垛型编码
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "短垛型编码")]
+        public short ShortCode { get; set; }
+
+        /// <summary>
+        ///  帘线物料编码
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "帘线物料编码")]
+        public string ProMaterCode { get; set; }
+
+        /// <summary>
+        ///  绑定的码垛工位
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "码垛工位")]
+        public string? PalletizingStation { get; set; }
+
+        /// <summary>
+        ///  产品总数
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "产品总数")]
+        public int CountQty { get; set; }
+
+        /// <summary>
+        ///  托盘类型
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "托盘类型")]
+        public string TpTypeCode { get; set; }
+
+        /// <summary>
+        ///  层数
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "层数")]
+        public int LayerCountQty { get; set; }
+
+        /// <summary>
+        ///  层信息
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(WCS_PalletizingLayer.PalletizingId))]
+        public List<WCS_PalletizingLayer> Layers { get; set; }
+
+        /// <summary>
+        ///  位信息
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(WCS_PalletizingLoc.PalletizingId))]
+        public List<WCS_PalletizingLoc> Locs { get; set; }
+
+        /// <summary>
+        ///  垛型大类
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "垛型大类")]
+        public int StampType { get; set; }
+
+        /// <summary>
+        ///  是否结束
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否结束")]
+        public bool Finish { get; set; }
+
+        /// <summary>
+        ///  当前所有的物料号
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "当前所有的物料号")]
+        public string MatCodeList { get; set; }
+
+        /// <summary>
+        ///  创建时间
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "创建时间")]
+        public DateTime AddTime { get; set; }
+    }
+}

+ 60 - 0
WCS.Entity/WCS_PalletizingLayer.cs

@@ -0,0 +1,60 @@
+using SqlSugar;
+using System.Collections.Generic;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    ///  码垛层信息表
+    /// </summary>
+    [SugarTable(nameof(WCS_PalletizingLayer), "码垛层信息表")]
+    public class WCS_PalletizingLayer
+    {
+        /// <summary>
+        ///  Id
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "Id")]
+        public int Id { get; set; }
+
+        /// <summary>
+        ///  码垛主表Id
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "码垛主表Id")]
+        public int PalletizingId { get; set; }
+
+        /// <summary>
+        /// 是否空置
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否空置")]
+        public bool IsEmpty { get; set; }
+
+        /// <summary>
+        ///  层号
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "层号")]
+        public int LayerNo { get; set; }
+
+        /// <summary>
+        ///  行数
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "行数")]
+        public int RowCountQty { get; set; }
+
+        /// <summary>
+        ///  行信息
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(WCS_PalletizingRow.PalletizingLayerId))]
+        public List<WCS_PalletizingRow> Rows { get; set; }
+
+        /// <summary>
+        ///  当前所有的物料号
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "当前所有的物料号")]
+        public string MatCodeList { get; set; }
+
+        /// <summary>
+        ///  是否结束
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否结束")]
+        public bool Finish { get; set; }
+    }
+}

+ 83 - 0
WCS.Entity/WCS_PalletizingLoc.cs

@@ -0,0 +1,83 @@
+using SqlSugar;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    ///  码垛位信息表
+    /// </summary>
+    [SugarTable(nameof(WCS_PalletizingLoc), "码垛位信息表")]
+    public class WCS_PalletizingLoc
+    {
+        /// <summary>
+        ///  Id
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "Id")]
+        public int Id { get; set; }
+
+        /// <summary>
+        ///  码垛行信息表Id
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "码垛位信息表Id")]
+        public int PalletizingRowId { get; set; }
+
+        /// <summary>
+        ///  码垛信息表Id
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "码垛位信息表Id")]
+        public int PalletizingId { get; set; }
+
+        /// <summary>
+        ///  任务Id
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "任务Id")]
+        public int TaskId { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(TaskId))]
+        public WCS_TaskInfo TasLInfo { get; set; }
+
+        /// <summary>
+        ///  是否空置
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否空置")]
+        public bool IsEmpty { get; set; }
+
+        /// <summary>
+        ///  坐标号
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "坐标号")]
+        public string XYNo { get; set; }
+
+        /// <summary>
+        ///  所属设备号
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "所属设备号")]
+        public string DevCode { get; set; }
+
+        /// <summary>
+        ///  物料编码
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "物料编码")]
+        public string MatCode { get; set; }
+
+        /// <summary>
+        ///  正反面
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "正反面")]
+        public int SideNum { get; set; }
+
+        /// <summary>
+        ///  工字轮类型
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "工字轮类型")]
+        public string SpoolType { get; set; }
+
+        /// <summary>
+        ///  是否结束
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否结束")]
+        public bool Finish { get; set; }
+    }
+}

+ 97 - 0
WCS.Entity/WCS_PalletizingRow.cs

@@ -0,0 +1,97 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    ///  码垛行信息表
+    /// </summary>
+    [SugarTable(nameof(WCS_PalletizingRow), "码垛行信息表")]
+    public class WCS_PalletizingRow
+    {
+        /// <summary>
+        ///  Id
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "Id")]
+        public int Id { get; set; }
+
+        /// <summary>
+        ///  码垛层信息表Id
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "码垛层信息表Id")]
+        public int PalletizingLayerId { get; set; }
+
+        /// <summary>
+        ///  是否空置
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否空置")]
+        public bool IsEmpty { get; set; }
+
+        /// <summary>
+        /// 数量上限
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "数量上限")]
+        public int QtyMaxCount { get; set; }
+
+        /// <summary>
+        ///  行号
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "行号")]
+        public int RowNo { get; set; }
+
+        /// <summary>
+        ///  是否混合料行
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否混合料行")]
+        public bool IsMixRow { get; set; }
+
+        /// <summary>
+        ///  表示每一个具体位置的商品信息
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(WCS_PalletizingLoc.PalletizingRowId))]
+        public List<WCS_PalletizingLoc> Locs { get; set; }
+
+        /// <summary>
+        ///  行缓存Id
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "任务Id")]
+        public int CacheLineId { get; set; }
+
+        /// <summary>
+        ///  行缓存
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(CacheLineId))]
+        public WCS_CacheLine CacheLine { get; set; }
+
+        /// <summary>
+        ///  当前所有的物料号
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "当前所有的物料号")]
+        public string MatCodeList { get; set; }
+
+        /// <summary>
+        ///  是否结束
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否结束")]
+        public bool Finish { get; set; }
+
+        /// <summary>
+        ///  取货线体号
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "取货线体号")]
+        public string? LineCode { get; set; }
+
+        /// <summary>
+        ///  创建时间
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "创建时间")]
+        public DateTime AddTime { get; set; }
+
+        /// <summary>
+        ///  编辑时间
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "编辑时间")]
+        public DateTime EditTime { get; set; }
+    }
+}

+ 41 - 0
WCS.Entity/WCS_PathGrp.cs

@@ -0,0 +1,41 @@
+using SqlSugar;
+
+namespace WCS.Entity
+{
+    ///// <summary>
+    ///// 设备路径头表
+    ///// </summary>
+    //[SugarTable(nameof(WCS_PathGrp), "设备路径头表")]
+    //public class WCS_PathGrp : OBJ
+    //{
+    //    /// <summary>
+    //    /// 起点地址编号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "起点")]
+    //    public string? StartCode { get; set; }
+
+    //    /// <summary>
+    //    /// 起始点设备信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, "STARTCODE")]
+    //    public WCS_DeviceInfo? Start { get; set; }
+
+    //    /// <summary>
+    //    /// 终点设备编号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "终点")]
+    //    public string? EndCode { get; set; }
+
+    //    /// <summary>
+    //    /// 终点设备信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, "ENDCODE")]
+    //    public WCS_DeviceInfo? End { get; set; }
+
+    //    /// <summary>
+    //    /// 路径
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "路径")]
+    //    public string? Path { get; set; }
+    //}
+}

+ 71 - 0
WCS.Entity/WCS_PathInfo.cs

@@ -0,0 +1,71 @@
+using SqlSugar;
+
+namespace WCS.Entity
+{
+    ///// <summary>
+    ///// 设备路径明细表
+    ///// </summary>
+    //[SugarTable(nameof(WCS_PathInfo), "设备路径明细表")]
+    //public class WCS_PathInfo
+    //{
+    //    /// <summary>
+    //    /// 起始地址设备号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "起始地址设备号")]
+    //    public string? StartCode { get; set; }
+
+    //    /// <summary>
+    //    /// 起点设备详细信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, nameof(StartCode))]
+    //    public WCS_DeviceInfo? Start { get; set; }
+
+    //    /// <summary>
+    //    /// 终点地址设备号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "终点地址设备号")]
+    //    public string? EndCode { get; set; }
+
+    //    /// <summary>
+    //    /// 终点设备详细信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, nameof(EndCode))]
+    //    public WCS_DeviceInfo? End { get; set; }
+
+    //    /// <summary>
+    //    /// 路径点设备号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "路径点设备号", IsNullable = true)]
+    //    public string? DeviceCode { get; set; }
+
+    //    /// <summary>
+    //    /// 路径点详细信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, nameof(DeviceCode))]
+    //    public WCS_DeviceInfo? Device { get; set; }
+
+    //    /// <summary>
+    //    /// 前路径点设备号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "前路径点设备号")]
+    //    public string? PREVCODE { get; set; }
+
+    //    /// <summary>
+    //    /// 前路径点详细信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, nameof(PREVCODE))]
+    //    public WCS_DeviceInfo? PREV { get; set; }
+
+    //    /// <summary>
+    //    /// 后路径点设备号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "后路径点设备号", IsNullable = true)]
+    //    public string? NEXTCODE { get; set; }
+
+    //    /// <summary>
+    //    /// 后路径点详细信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, nameof(NEXTCODE))]
+    //    public WCS_DeviceInfo? NEXT { get; set; }
+    //}
+}

+ 45 - 0
WCS.Entity/WCS_PlcData.cs

@@ -0,0 +1,45 @@
+using SqlSugar;
+using System;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    /// 设备信息表
+    /// </summary>
+    [SugarTable(nameof(WCS_PlcData), "设备信息表")]
+    public class WCS_PlcData
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "ID")]
+        [Column(Order = 0)]
+        public virtual int ID { get; set; }
+
+        /// <summary>
+        /// 仓库
+        /// </summary>
+        [SugarColumn(ColumnDescription = "仓库")]
+        public string WAREHOUSE { get; set; }
+
+        /// <summary>
+        /// 内容
+        /// </summary>
+        [SugarColumn(ColumnDescription = "内容", ColumnDataType = "text")]
+        public string CONTENT { get; set; }
+
+        /// <summary>
+        /// 创建用户
+        /// 仅记录用户ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建用户", Length = 50)]
+        public string AddWho { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建时间", InsertServerTime = true)]
+        public DateTime AddTime { get; set; }
+    }
+}

+ 78 - 0
WCS.Entity/WCS_PlcDataBlock.cs

@@ -0,0 +1,78 @@
+using SqlSugar;
+using System;
+
+namespace WCS.Entity
+{
+    ///// <summary>
+    ///// PLC DB块配置表
+    ///// </summary>
+    //[SugarTable(nameof(WCS_PlcDataBlock), "PLC DB块配置表")]
+    //public class WCS_PlcDataBlock : OBJ
+    //{
+    //    /// <summary>
+    //    /// ID
+    //    /// </summary>
+    //    [SugarColumn(IsIgnore = true)]
+    //    [Obsolete]
+    //    public override int ID { get; set; }
+
+    //    /// <summary>
+    //    /// 编号
+    //    /// </summary>
+    //    [SugarColumn(IsPrimaryKey = true, Length = 20, ColumnDescription = "编号")]
+    //    public string Code { get; set; }
+
+    //    /// <summary>
+    //    /// 名称
+    //    /// </summary>
+    //    [SugarColumn(Length = 20, ColumnDescription = "名称")]
+    //    public string Name { get; set; }
+
+    //    /// <summary>
+    //    /// 关联PLC信息编号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "关联PLC信息编号")]
+    //    public string PlcCode { get; set; }
+
+    //    /// <summary>
+    //    /// 关联PLC信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, nameof(PlcCode))]
+    //    public WCS_PlcSet PLC { get; set; }
+
+    //    /// <summary>
+    //    /// 西门子:DB520,其它:D0
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "编号")]
+    //    public int NO { get; set; }
+
+    //    /// <summary>
+    //    /// 总长度
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "总长度")]
+    //    public int Length { get; set; }
+
+    //    /// <summary>
+    //    /// 结构体长度
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "结构体长度")]
+    //    public int DataLength { get; set; }
+
+    //    /// <summary>
+    //    /// 协议类型
+    //    /// </summary>
+    //    [SugarColumn(Length = 200, ColumnDescription = "协议类型")]
+    //    public string Protocol { get; set; }
+
+    //    /// <summary>
+    //    /// 无更新
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "无更新")]
+    //    public bool NoUpDate { get; set; }
+
+    //    public Type GetProtocolType()
+    //    {
+    //        return Type.GetType(Protocol);
+    //    }
+    //}
+}

+ 147 - 0
WCS.Entity/WCS_PlcSet.cs

@@ -0,0 +1,147 @@
+using SqlSugar;
+using System;
+using System.ComponentModel;
+
+namespace WCS.Entity
+{
+    ///// <summary>
+    ///// WCS_PLC
+    ///// </summary>
+    //[SugarTable(nameof(WCS_PlcSet), "PLC信息")]
+    //public class WCS_PlcSet : OBJ
+    //{
+    //    [SugarColumn(IsIgnore = true)]
+    //    [Obsolete]
+    //    public override int ID { get; set; }
+
+    //    /// <summary>
+    //    /// 编号
+    //    /// </summary>
+    //    [SugarColumn(IsPrimaryKey = true, ColumnDescription = "编号", Length = 20)]
+    //    public string Code { get; set; }
+
+    //    /// <summary>
+    //    /// 名称
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "名称", Length = 20)]
+    //    public string Name { get; set; }
+
+    //    /// <summary>
+    //    /// IP
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "IP", Length = 20)]
+    //    public string IP { get; set; }
+
+    //    /// <summary>
+    //    /// 端口
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "端口")]
+    //    public int Port { get; set; } = 102;
+
+    //    /// <summary>
+    //    /// 插槽号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "插槽号")]
+    //    public int Slot { get; set; }
+
+    //    /// <summary>
+    //    /// 机架号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "机架号")]
+    //    public int Rack { get; set; }
+
+    //    /// <summary>
+    //    /// 厂商
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "厂商")]
+    //    public PLCType Type { get; set; }
+
+    //    /// <summary>
+    //    /// 型号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "型号")]
+    //    public PLCMODEL Model { get; set; }
+    //}
+
+    ///// <summary>
+    ///// 设备厂商
+    ///// </summary>
+    //public enum PLCType
+    //{
+    //    /// <summary>
+    //    /// 西门子
+    //    /// </summary>
+    //    [Description("西门子")]
+    //    Siemens = 1,
+
+    //    /// <summary>
+    //    /// 三菱
+    //    /// </summary>
+    //    [Description("三菱")]
+    //    Mitsubishi = 2,
+
+    //    /// <summary>
+    //    /// AB
+    //    /// </summary>
+    //    [Description("AB")]
+    //    AB = 3,
+
+    //    /// <summary>
+    //    /// 欧姆龙
+    //    /// </summary>
+    //    [Description("欧姆龙")]
+    //    OMRON = 4,
+
+    //    /// <summary>
+    //    /// 汇川
+    //    /// </summary>
+    //    [Description("汇川")]
+    //    INOVANCE = 5,
+    //}
+
+    ///// <summary>
+    ///// PLC型号
+    ///// </summary>
+    //public enum PLCMODEL
+    //{
+    //    #region 西门子
+
+    //    /// <summary>
+    //    /// 1200系列
+    //    /// </summary>
+    //    [Description("1200系列")]
+    //    S1200 = 1,
+
+    //    /// <summary>
+    //    /// 300系列
+    //    /// </summary>
+    //    [Description("300系列")]
+    //    S300 = 2,
+
+    //    /// <summary>
+    //    /// 400系列
+    //    /// </summary>
+    //    [Description("400系列")]
+    //    S400 = 3,
+
+    //    /// <summary>
+    //    /// 1500系列PLC
+    //    /// </summary>
+    //    [Description("1500系列PLC")]
+    //    S1500 = 4,
+
+    //    /// <summary>
+    //    /// 200的smart系列
+    //    /// </summary>
+    //    [Description("200的smart系列")]
+    //    S200Smart = 5,
+
+    //    /// <summary>
+    //    /// 200系统,需要额外配置以太网模块
+    //    /// </summary>
+    //    [Description("200系统")]
+    //    S200 = 6
+
+    //    #endregion 西门子
+    //}
+}

+ 35 - 0
WCS.Entity/WCS_ROUTE.cs

@@ -0,0 +1,35 @@
+using SqlSugar;
+
+namespace WCS.Entity
+{
+    ///// <summary>
+    ///// 设备路由表
+    ///// </summary>
+    //[SugarTable(nameof(WCS_Route), "设备路由表")]
+    //public class WCS_Route : OBJ
+    //{
+    //    /// <summary>
+    //    /// 设备编号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "设备编号")]
+    //    public string DeviceCode { get; set; }
+
+    //    /// <summary>
+    //    /// 所属设备信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, nameof(DeviceCode))]
+    //    public WCS_DeviceInfo Device { get; set; }
+
+    //    /// <summary>
+    //    /// 下一个设备的编号
+    //    /// </summary>
+    //    [SugarColumn(ColumnDescription = "下一个设备的编号")]
+    //    public string NextCode { get; set; }
+
+    //    /// <summary>
+    //    /// 下一个设备的信息
+    //    /// </summary>
+    //    [Navigate(NavigateType.OneToOne, "NEXTCODE")]
+    //    public WCS_DeviceInfo Next { get; set; }
+    //}
+}

+ 71 - 0
WCS.Entity/WCS_TaskDtl.cs

@@ -0,0 +1,71 @@
+using SqlSugar;
+using System;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    /// 任务流转表
+    /// </summary>
+    [SugarTable(nameof(WCS_TaskDtl) + "_{year}{month}{day}", "任务流转表")]
+    [SplitTable(SplitType.Month)]//按年分表 (自带分表支持 年、季、月、周、日)
+    public class WCS_TaskDtl
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, ColumnDescription = "ID")]
+        [Column(Order = 0)]
+        public Guid ID { get; set; }
+
+        /// <summary>
+        /// 父级任务号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "父级任务号")]
+        public int ParentTaskCode { get; set; }
+
+        /// <summary>
+        /// 当前位置
+        /// </summary>
+        [SugarColumn(ColumnDescription = "当前位置")]
+        public string CurPoint { get; set; }
+
+        /// <summary>
+        /// 下一个地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "下一个地址", IsNullable = true)]
+        public string NextPoint { get; set; }
+
+        /// <summary>
+        /// 描述
+        /// </summary>
+        [SugarColumn(ColumnDescription = "描述")]
+        public string Desc { get; set; }
+
+        /// <summary>
+        /// 是否可用
+        /// </summary>
+        [SugarColumn(ColumnDescription = "是否可用")]
+        public bool Enabled { get; set; } = true;
+
+        /// <summary>
+        /// 创建用户
+        /// 仅记录用户ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建用户", Length = 50)]
+        public string AddWho { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// 新增数据时自动获取服务器时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建时间", InsertServerTime = true)]
+        public DateTime AddTime { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "版本号", ColumnDataType = "timestamp", IsNullable = true, IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)]
+        public byte[] VER { get; set; }
+    }
+}

+ 460 - 0
WCS.Entity/WCS_TaskInfo.cs

@@ -0,0 +1,460 @@
+using SqlSugar;
+using System;
+using System.ComponentModel;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    /// 任务表
+    /// </summary>
+    [SugarTable(nameof(WCS_TaskInfo), "任务表")]
+    public class WCS_TaskInfo
+    {
+        #region 任务基本信息
+
+        /// <summary>
+        /// ID
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "ID")]
+        public int ID { get; set; }
+
+        /// <summary>
+        /// 生产编码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "生产编码", Length = 50)]
+        public string BarCode { get; set; }
+
+        /// <summary>
+        /// 任务类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "任务类型")]
+        public TaskType Type { get; set; }
+
+        /// <summary>
+        /// 任务状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "任务状态")]
+        public TaskStatus Status { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "起始地址", Length = 20)]
+        public string AddrFrom { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "目标地址", Length = 20)]
+        public string AddrTo { get; set; }
+
+        /// <summary>
+        /// 下一个地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "下一个地址", Length = 20, IsNullable = true)]
+        public string AddrNext { get; set; }
+
+        /// <summary>
+        /// 巷道
+        /// </summary>
+        [SugarColumn(ColumnDescription = "巷道", Length = 10, IsNullable = true)]
+        public string Tunnel { get; set; }
+
+        /// <summary>
+        /// 楼层
+        /// </summary>
+        [SugarColumn(ColumnDescription = "楼层", IsNullable = true)]
+        public int Floor { get; set; }
+
+        /// <summary>
+        /// 设备
+        /// </summary>
+        [SugarColumn(ColumnDescription = "设备", Length = 20, IsNullable = true)]
+        public string Device { get; set; }
+
+        /// <summary>
+        /// 最后一个交互点
+        /// </summary>
+        [SugarColumn(ColumnDescription = "最后一个交互点", Length = 20, IsNullable = true)]
+        public string LastInteractionPoint { get; set; }
+
+        /// <summary>
+        /// 堆垛机放货站台
+        /// </summary>
+        [SugarColumn(ColumnDescription = "堆垛机放货站台", Length = 20, IsNullable = true)]
+        public string SrmStation { get; set; }
+
+        /// <summary>
+        ///  客户现场的机台/产线编号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "客户现场的机台/产线编号", IsNullable = true)]
+        public string WorkBench { get; set; }
+
+        /// <summary>
+        ///  仓库编号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "仓库编号", IsNullable = true)]
+        public string WarehouseCode { get; set; }
+
+        /// <summary>
+        /// WMS任务号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "WMS任务号")]
+        public int WmsTask { get; set; }
+
+        /// <summary>
+        /// 任务组ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "任务组ID", IsNullable = true)]
+        public string TaskGroupKey { get; set; }
+
+        #endregion 任务基本信息
+
+        #region 码垛信息
+
+        /// <summary>
+        ///  码垛单号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "单号", IsNullable = true)]
+        public int DocID { get; set; }
+
+        /// <summary>
+        ///  生产单号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "生产单号", IsNullable = true)]
+        public string WorkOrder { get; set; }
+
+        /// <summary>
+        ///  码垛托盘类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "托盘类型", IsNullable = true)]
+        public short PalletType { get; set; }
+
+        /// <summary>
+        ///  码垛工位
+        /// </summary>
+        [SugarColumn(ColumnDescription = "码垛工位", IsNullable = true)]
+        public short ProdLine { get; set; }
+
+        /// <summary>
+        /// 满盘数量
+        /// </summary>
+        [SugarColumn(ColumnDescription = "满盘数量", IsNullable = true)]
+        public short FullQty { get; set; }
+
+        #endregion 码垛信息
+
+        #region 外形信息
+
+        /// <summary>
+        /// 高度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "高度", IsNullable = true)]
+        public short Height { get; set; }
+
+        /// <summary>
+        ///  重量
+        /// </summary>
+        [SugarColumn(ColumnDescription = "重量", IsNullable = true)]
+        public float Weight { get; set; }
+
+        /// <summary>
+        ///  长度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "产品长度", IsNullable = true)]
+        public decimal Length { get; set; }
+
+        #endregion 外形信息
+
+        #region 操作时间与用户
+
+        /// <summary>
+        /// 创建时间
+        /// 新增数据时自动获取服务器时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建时间", InsertServerTime = true)]
+        public DateTime AddTime { get; set; }
+
+        /// <summary>
+        /// 创建用户
+        /// 仅记录用户ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建用户", Length = 50)]
+        public string AddWho { get; set; }
+
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "开始时间", IsNullable = true)]
+        public DateTime? StartTime { get; set; }
+
+        /// <summary>
+        /// 更新用户
+        /// 仅记录用户ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新用户", Length = 50, IsNullable = true)]
+        public string EditWho { get; set; }
+
+        /// <summary>
+        /// 更新时间
+        /// 更新数据时自动获取服务器时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新时间", UpdateServerTime = true, IsNullable = true)]
+        public DateTime EditTime { get; set; }
+
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "结束时间", IsNullable = true)]
+        public DateTime? EedTime { get; set; }
+
+        #endregion 操作时间与用户
+
+        #region 条码物料相关信息
+
+        /// <summary>
+        ///  物料编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string MatCode { get; set; }
+
+        /// <summary>
+        /// 材料号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string InvBarCode { get; set; }
+
+        /// <summary>
+        ///  是否快投
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = true)]
+        public bool IsFast { get; set; }
+
+        /// <summary>
+        ///  等级
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string Grade { get; set; }
+
+        /// <summary>
+        ///  是否改手盘
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = true)]
+        public bool IsSurplus { get; set; }
+
+        /// <summary>
+        ///  是否返空
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = true)]
+        public bool IsRework { get; set; }
+
+        #endregion 条码物料相关信息
+
+        /// <summary>
+        /// 更新状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新状态")]
+        public TaskStatus Uploaded { get; set; }
+
+        /// <summary>
+        /// AGV任务号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "AGV任务号", IsNullable = true)]
+        public int AgvTaskID { get; set; }
+
+        /// <summary>
+        ///  Agv任务信息
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(AgvTaskID))]
+        public WCS_AgvTaskInfo AgvTask { get; set; }
+
+        /// <summary>
+        /// 优先级
+        /// </summary>
+        [SugarColumn(ColumnDescription = "优先级")]
+        public int Priority { get; set; }
+
+        /// <summary>
+        /// 手动处理备注
+        /// </summary>
+        [SugarColumn(ColumnDescription = "手动处理备注", IsNullable = true)]
+        public string ManualRemarks { get; set; }
+
+        /// <summary>
+        ///  出库任务类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "出库任务类型", IsNullable = true)]
+        public OutTypeEnum OutType { get; set; }
+
+        /// <summary>
+        /// 产品编码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "产品编码", IsNullable = true)]
+        public string MaterialCode { get; set; }
+
+        /// <summary>
+        /// 是否可用
+        /// </summary>
+        [SugarColumn(ColumnDescription = "是否可用")]
+        public bool Enabled { get; set; } = true;
+
+        /// <summary>
+        /// 业务类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "业务类型", IsNullable = true)]
+        public string BusType { get; set; }
+
+        /// <summary>
+        ///  货位类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "货位类型", IsNullable = true)]
+        public int GoodsType { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "版本号", ColumnDataType = "timestamp", IsNullable = true, IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)]
+        public byte[] VER { get; set; }
+
+        /// <summary>
+        ///  行
+        /// </summary>
+        [SugarColumn(ColumnDescription = "行", IsNullable = true)]
+        public int Line { get; set; }
+
+        /// <summary>
+        /// 列
+        /// </summary>
+        [SugarColumn(ColumnDescription = "列", IsNullable = true)]
+        public int Col { get; set; }
+
+        /// <summary>
+        /// 层
+        /// </summary>
+        [SugarColumn(ColumnDescription = "层", IsNullable = true)]
+        public int Layer { get; set; }
+
+        /// <summary>
+        ///  深度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "深度", IsNullable = true)]
+        public int Depth { get; set; }
+
+        /// <summary>
+        ///  货叉
+        /// </summary>
+        [SugarColumn(ColumnDescription = "货叉", IsNullable = true)]
+        public int Fork { get; set; }
+
+        public long PalletizingID { get; set; }
+
+        [SugarColumn(IsNullable = true)]
+        public string Robot { get; set; }
+    }
+
+    /// <summary>
+    /// 任务类型
+    /// </summary>
+    public enum TaskType
+    {
+        /// <summary>
+        /// 组盘
+        /// </summary>
+        [Description("组盘")]
+        SetPlate = 0,
+
+        /// <summary>
+        /// 入库
+        /// </summary>
+        [Description("入库")]
+        EnterDepot = 1,
+
+        /// <summary>
+        /// 出库
+        /// </summary>
+        [Description("出库")]
+        OutDepot = 2,
+
+        /// <summary>
+        /// 移库
+        /// </summary>
+        [Description("移库")]
+        TransferDepot = 3,
+
+        /// <summary>
+        ///  搬运
+        /// </summary>
+        [Description("搬运")]
+        Delivery = 5,
+
+        /// <summary>
+        ///  空轮初始化
+        /// </summary>
+        [Description("空轮初始化")]
+        EmptyInit = 6,
+    }
+
+    /// <summary>
+    /// 任务状态
+    /// </summary>
+    public enum TaskStatus
+    {
+        NewBuild = 0,
+
+        WaitingToExecute = 1,
+
+        帘线扫码 = 9,
+        巷道分配 = 10,
+        堆垛机执行 = 20,
+
+        堆垛机完成 = 30,
+        巷道口放行 = 31,
+        出库扫码 = 40,
+
+        码垛合流 = 50,
+        码垛缓存扫码 = 51,
+        码垛缓存放行 = 52,
+        码垛抓取扫码 = 53,
+        码垛抓取中 = 54,
+        码垛抓取完成 = 55,
+
+        /// <summary>
+        /// 已完成
+        /// </summary>
+        [Description("已完成")]
+        Finish = 99,
+
+        /// <summary>
+        /// 异常
+        /// </summary>
+        [Description("异常")]
+        Error = 100,
+
+        /// <summary>
+        /// 已取消
+        /// </summary>
+        [Description("已取消")]
+        Cancel = 106
+    }
+
+    /// <summary>
+    ///  出库任务类型
+    /// </summary>
+    public enum OutTypeEnum
+    {
+        /// <summary>
+        ///  自动出库任务
+        /// </summary>
+        自动出库任务 = 0,
+
+        /// <summary>
+        ///  全自动手动出库任务
+        /// </summary>
+        全自动手动出库任务 = 1,
+
+        /// <summary>
+        ///  半自动手动出库任务
+        /// </summary>
+        半自动手动出库任务 = 2
+    }
+}

+ 349 - 0
WCS.Entity/WCS_TaskOld.cs

@@ -0,0 +1,349 @@
+using SqlSugar;
+using System;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    /// 任务表
+    /// </summary>
+    [SugarTable(nameof(WCS_TaskOld) + "_{year}{month}{day}", "任务表")]
+    [SplitTable(SplitType.Month)]//按年分表 (自带分表支持 年、季、月、周、日)
+    public class WCS_TaskOld
+    {
+        #region 任务基本信息
+
+        /// <summary>
+        /// ID
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, ColumnDescription = "ID")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 生产编码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "生产编码", Length = 50)]
+        public string BarCode { get; set; }
+
+        /// <summary>
+        /// 任务类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "任务类型")]
+        public TaskType Type { get; set; }
+
+        /// <summary>
+        /// 任务状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "任务状态")]
+        public TaskStatus Status { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "起始地址", Length = 20)]
+        public string AddrFrom { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "目标地址", Length = 20)]
+        public string AddrTo { get; set; }
+
+        /// <summary>
+        /// 下一个地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "下一个地址", Length = 20, IsNullable = true)]
+        public string AddrNext { get; set; }
+
+        /// <summary>
+        /// 巷道
+        /// </summary>
+        [SugarColumn(ColumnDescription = "巷道", Length = 10, IsNullable = true)]
+        public string Tunnel { get; set; }
+
+        /// <summary>
+        /// 楼层
+        /// </summary>
+        [SugarColumn(ColumnDescription = "楼层", IsNullable = true)]
+        public int Floor { get; set; }
+
+        /// <summary>
+        /// 设备
+        /// </summary>
+        [SugarColumn(ColumnDescription = "设备", Length = 20, IsNullable = true)]
+        public string Device { get; set; }
+
+        /// <summary>
+        /// 最后一个交互点
+        /// </summary>
+        [SugarColumn(ColumnDescription = "最后一个交互点", Length = 20, IsNullable = true)]
+        public string LastInteractionPoint { get; set; }
+
+        /// <summary>
+        /// 堆垛机放货站台
+        /// </summary>
+        [SugarColumn(ColumnDescription = "堆垛机放货站台", Length = 20, IsNullable = true)]
+        public string SrmStation { get; set; }
+
+        /// <summary>
+        ///  客户现场的机台/产线编号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "客户现场的机台/产线编号", IsNullable = true)]
+        public string WorkBench { get; set; }
+
+        /// <summary>
+        ///  仓库编号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "仓库编号", IsNullable = true)]
+        public string WarehouseCode { get; set; }
+
+        /// <summary>
+        /// WMS任务号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "WMS任务号")]
+        public int WmsTask { get; set; }
+
+        /// <summary>
+        /// 任务组ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "任务组ID", IsNullable = true)]
+        public string TaskGroupKey { get; set; }
+
+        #endregion 任务基本信息
+
+        #region 码垛信息
+
+        /// <summary>
+        ///  码垛单号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "单号", IsNullable = true)]
+        public int DocId { get; set; }
+
+        /// <summary>
+        ///  生产单号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "生产单号", IsNullable = true)]
+        public string WorkOrder { get; set; }
+
+        /// <summary>
+        ///  码垛托盘类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "托盘类型", IsNullable = true)]
+        public short PalletType { get; set; }
+
+        /// <summary>
+        ///  码垛工位
+        /// </summary>
+        [SugarColumn(ColumnDescription = "码垛工位", IsNullable = true)]
+        public short ProdLine { get; set; }
+
+        /// <summary>
+        /// 满盘数量
+        /// </summary>
+        [SugarColumn(ColumnDescription = "满盘数量", IsNullable = true)]
+        public short FullQty { get; set; }
+
+        #endregion 码垛信息
+
+        #region 外形信息
+
+        /// <summary>
+        /// 高度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "高度", IsNullable = true)]
+        public short Height { get; set; }
+
+        /// <summary>
+        ///  重量
+        /// </summary>
+        [SugarColumn(ColumnDescription = "重量", IsNullable = true)]
+        public float Weight { get; set; }
+
+        /// <summary>
+        ///  长度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "产品长度", IsNullable = true)]
+        public decimal Length { get; set; }
+
+        #endregion 外形信息
+
+        #region 操作时间与用户
+
+        /// <summary>
+        /// 创建时间
+        /// 新增数据时自动获取服务器时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建时间", InsertServerTime = true)]
+        public DateTime AddTime { get; set; }
+
+        /// <summary>
+        /// 创建用户
+        /// 仅记录用户ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建用户", Length = 50)]
+        public string AddWho { get; set; }
+
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "开始时间", IsNullable = true)]
+        public DateTime? StartTime { get; set; }
+
+        /// <summary>
+        /// 更新用户
+        /// 仅记录用户ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新用户", Length = 50, IsNullable = true)]
+        public string EditWho { get; set; }
+
+        /// <summary>
+        /// 更新时间
+        /// 更新数据时自动获取服务器时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新时间", UpdateServerTime = true, IsNullable = true)]
+        public DateTime EditTime { get; set; }
+
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "结束时间", IsNullable = true)]
+        public DateTime? EndTime { get; set; }
+
+        #endregion 操作时间与用户
+
+        #region 条码物料相关信息
+
+        /// <summary>
+        ///  物料编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string MatCode { get; set; }
+
+        /// <summary>
+        /// 材料号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string InvBarCode { get; set; }
+
+        /// <summary>
+        ///  是否快投
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = true)]
+        public bool IsFast { get; set; }
+
+        /// <summary>
+        ///  等级
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string Grade { get; set; }
+
+        /// <summary>
+        ///  是否改手盘
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = true)]
+        public bool IsSurplus { get; set; }
+
+        /// <summary>
+        ///  是否返空
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = true)]
+        public bool IsRework { get; set; }
+
+        #endregion 条码物料相关信息
+
+        /// <summary>
+        /// 更新状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新状态")]
+        public TaskStatus Uploaded { get; set; }
+
+        /// <summary>
+        /// AGV任务号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "AGV任务号", IsNullable = true)]
+        public int AgvTaskID { get; set; }
+
+        /// <summary>
+        ///  Agv任务信息
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(AgvTaskID))]
+        public WCS_AgvTaskInfo AgvTask { get; set; }
+
+        /// <summary>
+        /// 优先级
+        /// </summary>
+        [SugarColumn(ColumnDescription = "优先级")]
+        public int Priority { get; set; }
+
+        /// <summary>
+        /// 手动处理备注
+        /// </summary>
+        [SugarColumn(ColumnDescription = "手动处理备注", IsNullable = true)]
+        public string ManualRemarks { get; set; }
+
+        /// <summary>
+        ///  出库任务类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "出库任务类型", IsNullable = true)]
+        public OutTypeEnum OutType { get; set; }
+
+        /// <summary>
+        /// 产品编码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "产品编码", IsNullable = true)]
+        public string MaterialCode { get; set; }
+
+        /// <summary>
+        /// 是否可用
+        /// </summary>
+        [SugarColumn(ColumnDescription = "是否可用")]
+        public bool Enabled { get; set; } = true;
+
+        /// <summary>
+        /// 业务类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "业务类型", IsNullable = true)]
+        public string BusType { get; set; }
+
+        /// <summary>
+        ///  货位类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "货位类型", IsNullable = true)]
+        public int GoodsType { get; set; }
+
+        /// <summary>
+        ///  行
+        /// </summary>
+        [SugarColumn(ColumnDescription = "行", IsNullable = true)]
+        public int Line { get; set; }
+
+        /// <summary>
+        /// 列
+        /// </summary>
+        [SugarColumn(ColumnDescription = "列", IsNullable = true)]
+        public int Col { get; set; }
+
+        /// <summary>
+        /// 层
+        /// </summary>
+        [SugarColumn(ColumnDescription = "层", IsNullable = true)]
+        public int Layer { get; set; }
+
+        /// <summary>
+        ///  深度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "深度", IsNullable = true)]
+        public int Depth { get; set; }
+
+        /// <summary>
+        ///  货叉
+        /// </summary>
+        [SugarColumn(ColumnDescription = "货叉", IsNullable = true)]
+        public int Fork { get; set; }
+
+        [SugarColumn(IsNullable = true)]
+        public long PalletizingID { get; set; }
+
+        [SugarColumn(IsNullable = true)]
+        public string Robot { get; set; }
+    }
+}

+ 20 - 0
WCS.Entity/WCS_TaskOutSeq.cs

@@ -0,0 +1,20 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WCS.Entity
+{
+    [SugarTable()]
+    public class WCS_TaskOutSeq
+    {
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "ID")]
+        public int ID { get; set; }
+
+        public int TaskID { get; set; }
+         
+
+
+    }
+     
+}

+ 22 - 0
WCS.Service/AppSettings.cs

@@ -0,0 +1,22 @@
+namespace WCS.Service
+{
+    /// <summary>
+    /// 程序设置
+    /// </summary>
+    public class AppSettings
+    {
+        /// <summary>
+        /// 配置信息
+        /// </summary>
+        public static IConfiguration Config { get; private set; }
+
+
+    /// <summary>
+    /// 静态构造函数
+    /// </summary>
+    static AppSettings()
+    {
+        Config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();
+    }
+}
+}

+ 29 - 0
WCS.Service/PLCAccessors/PLCAccessorsCreater.cs

@@ -0,0 +1,29 @@
+using WCS.Core;
+using PLCType = WCS.Core.PLCType;
+
+namespace WCS.Service.PLCAccessors
+{
+    /// <summary>
+    ///  PLC访问器创建者
+    /// </summary>
+    public class PLCAccessorsCreater : IPLCAccessorCreater
+    {
+        /// <summary>
+        ///  创建PLC访问器
+        /// </summary>
+        /// <param name="data">PLC信息</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"> </exception>
+        public IPLCAccessor Create(PLCInfo data)
+        {
+            switch (data.Type)
+            {
+                case PLCType.Siemens:
+                    return new SiemensS7PLC(data.IP, data.Port, data.Rack, data.Slot);
+
+                default:
+                    return new VitrualRedisPLC(data, "127.0.0.1,database=1,prefix=Sorting:");
+            }
+        }
+    }
+}

+ 39 - 0
WCS.Service/PLCAccessors/SiemensS7PLC.cs

@@ -0,0 +1,39 @@
+using PlcSiemens.O;
+using PlcSiemens.Protocol.Common;
+using ServiceCenter;
+using ServiceCenter.Virtual_PLC;
+using WCS.Core;
+
+namespace WCS.Service.PLCAccessors
+{
+    public class SiemensS7PLC : IPLCAccessor
+    {
+        private SimenssPlc plc;
+
+        public SiemensS7PLC(string ip, int port, int rack, int slot)
+        {
+            plc = new SimenssPlc(ip, rack, slot);
+            plc.Connect(); 
+        }
+
+        public byte[] ReadBytes(ushort db, ushort address, ushort length)
+        { 
+            if (!plc.Connected)
+                plc.Connect();           
+            var res = plc.ReadArea(AreaType.DB, db, address, length, DataType.Byte);
+            if (res == null)
+                throw new Exception("读取DB块数据失败");
+            return res.Data;
+        }
+
+        public void WriteBytes(ushort db, ushort address, byte[] data)
+        {
+            if (!plc.Connected)
+                plc.Connect();
+            var res = plc.WriteArea(AreaType.DB, db, address, (ushort)data.Length, DataType.Byte, data);
+            if (!res)
+                throw new Exception("写入DB块数据失败");
+
+        }
+    }
+}

+ 72 - 0
WCS.Service/Program.cs

@@ -0,0 +1,72 @@
+using Microsoft.AspNetCore.Hosting;
+using ServiceCenter.Redis;
+using ServiceCenter.WebApi;
+using System.Runtime.InteropServices;
+using ServiceCenter.Extensions;
+using WCS.WorkEngineering;
+
+namespace WCS.Service
+{
+    public class Program
+    {
+        public static void Main(string[] args)
+        {
+            #region 接入Redis
+
+            RedisHub.CreateContext(AppSettings.Config.GetConnectionString("Redis"), "default", true);
+
+            #endregion 接入Redis
+
+            //互斥锁检测
+            var mutexName = RedisHub.Default.Check("Mutex") ?? throw new Exception("请在Redis中配置互斥量值");
+
+            using var mt = new Mutex(true, mutexName);
+            if (mt.WaitOne())
+            {
+                CreateHostBuilder(args).Build().Run(); mt.ReleaseMutex();
+            }
+            else
+            {
+                Console.WriteLine("请勿重复运行");
+                //InfoLog.INFO_INIT("请勿重复运行");
+                Task.Delay(2000).Wait();
+            }
+        }
+
+        /// <summary>
+        /// 创建一个主机构建器
+        /// </summary>
+        /// <param name="args"></param>
+        /// <returns></returns>
+        public static IHostBuilder CreateHostBuilder(string[] args)
+        {
+            //是否是win平台
+            var isWin = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
+            Console.WriteLine($"win:{isWin}");
+            if (isWin)
+            {
+                var useUrls = RedisHub.Default.Check("UseUrls") ?? throw new Exception("请在Redis中配置网络访问端口");
+                if (string.IsNullOrWhiteSpace(useUrls)) 
+                    useUrls ="http://*:8080";
+                return Host.CreateDefaultBuilder(args)
+                    .UseWindowsService()//win
+                    .ConfigureWebHostDefaults(web => //网络访问配置
+                    {
+                        web.UseUrls(useUrls); //设备访问端口
+                        web.UseStartup<Startup>(); //调用启动服务
+                    })
+                    .ConfigureServices((_, services) =>
+                    {
+                        services.AddHostedService<Worker>();
+                        services.AddHttpClient();
+                    });
+            }
+            return Host.CreateDefaultBuilder(args)
+                .UseSystemd()//linux
+                .ConfigureServices((_, services) =>
+                {
+                    services.AddHostedService<Worker>();
+                });
+        }
+    }
+}

+ 11 - 0
WCS.Service/Properties/launchSettings.json

@@ -0,0 +1,11 @@
+{
+  "profiles": {
+    "WCS.Service": {
+      "commandName": "Project",
+      "dotnetRunMessages": true,
+      "environmentVariables": {
+        "DOTNET_ENVIRONMENT": "Development"
+      }
+    }
+  }
+}

+ 44 - 0
WCS.Service/WCS.Service.csproj

@@ -0,0 +1,44 @@
+<Project Sdk="Microsoft.NET.Sdk.Worker">
+
+  <PropertyGroup>
+    <TargetFramework>net7.0</TargetFramework>
+    <Nullable>enable</Nullable>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <UserSecretsId>dotnet-WCS.Service-ee485c84-3250-46d0-8109-1d37d3b27230</UserSecretsId>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+    <NoWarn>1701;1702;8602;8616;8618;8625;8600;8603;8714;1591</NoWarn>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+    <NoWarn>1701;1702;8602;8616;8618;8625;8600;8603;8714;1591</NoWarn>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Compile Remove="Logs\**" />
+    <Content Remove="Logs\**" />
+    <EmbeddedResource Remove="Logs\**" />
+    <None Remove="Logs\**" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Compile Remove="Worlds\initWorld.cs" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="MessagePack" Version="2.5.108" />
+    <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.5" />
+    <PackageReference Include="Microsoft.Extensions.Hosting.Systemd" Version="7.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.0" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\业务工程\时效库\WCS.WorkEngineering\WCS.WorkEngineering.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Folder Include="Worlds\" />
+  </ItemGroup>
+</Project>

+ 161 - 0
WCS.Service/Worker.cs

@@ -0,0 +1,161 @@
+using FreeRedis;
+using MessagePack;
+using Newtonsoft.Json;
+using ServiceCenter;
+using ServiceCenter.Extensions;
+using ServiceCenter.Logs;
+using ServiceCenter.Redis;
+using ServiceCenter.SqlSugars;
+using SqlSugar;
+using System.Text;
+using WCS.Core;
+using WCS.Entity.Protocol.DataStructure;
+using WCS.Entity.Protocol.Robot;
+using WCS.Entity.Protocol.Station;
+using WCS.WorkEngineering;
+
+namespace WCS.Service
+{
+    /// <summary>
+    /// 工作服务
+    /// </summary>
+    public class Worker : BackgroundService
+    {
+        /// <summary>
+        /// 记录器
+        /// </summary>
+        private readonly ILogger<Worker> _logger;
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        /// <param name="logger">记录器</param>
+        public Worker(ILogger<Worker> logger)
+        {
+            _logger = logger;
+        }
+
+        public static readonly string WcsDlog = "WCSDlog";
+        public static readonly string Wcsdb = "WCSDB";
+
+        /// <summary>
+        ///  执行
+        /// </summary>
+        /// <param name="stoppingToken">停止令牌</param>
+        /// <returns></returns>
+        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
+        {
+            if (stoppingToken.IsCancellationRequested)
+                return;
+             
+
+            #region 初始化Redis连接
+              
+            Configs.DebugRedisUrl = "";
+
+            #endregion 初始化Redis连接
+
+            #region 启用日志
+
+            //var logConfigText = RedisHub.Default.Check("LogConfigText") ?? throw new Exception("请在Redis中配置log4net相关内容");
+            //var logConfig = JsonConvert.DeserializeObject<LogConfig>(logConfigText);
+            //LogHub.SetConfigInfo(logConfig!);
+
+            #endregion 启用日志
+
+            _logger.LogInformation("WCS开始启动");
+            Configs.ProtocolProxyBaseType = typeof(ProtocolProxy);
+            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+            Configs.StringEncoding = Encoding.UTF8;
+            //var warehouseName = RedisHub.Default.Check("WarehouseName") ?? throw new Exception("请在Redis中配置仓库名称");
+            //if (string.IsNullOrEmpty(warehouseName)) throw new Exception("请在Redis中配置仓库名称");
+            //ServiceHub.SetWarehouseName(warehouseName);
+
+            #region 初始化数据库连接
+            /*
+           var dbConnectionStrings = RedisHub.Default.Check("DbConnectionStrings") ?? throw new Exception("请在Redis中配置数据库连接相关内容");
+           ServiceHub.DbConnectionStrings = JsonConvert.DeserializeObject<List<DataBaseConnectionString>>(dbConnectionStrings);
+
+           if (ServiceHub.DbConnectionStrings != null)
+           {
+               if (ServiceHub.DbConnectionStrings.All(v => v.Key != Wcsdb)) throw new Exception("请在DbConnectionStrings中配置WCS基础数据库连接字符串");
+               if (ServiceHub.DbConnectionStrings.All(v => v.Key == Wcsdb && !v.IsDefault)) throw new Exception("请在DbConnectionStrings中配置WCS基础数据库为默认数据库");
+               // if (ServiceHub.DbConnectionStrings.All(v => v.Key != WcsDlog)) throw new Exception("请在DbConnectionStrings中配置WCS日志数据库连接字符串");
+           }
+
+           //设置连接信息
+           List<ConnectionConfig> connectionConfigs = new List<ConnectionConfig>();
+           foreach (var connectionString in ServiceHub.DbConnectionStrings!)
+           {
+               connectionConfigs.Add(new ConnectionConfig()
+               {
+                   ConfigId = connectionString.Key,
+                   ConnectionString = connectionString.ConnectionString,//连接符字串
+                   DbType = connectionString.DbType,//数据库类型
+                   IsAutoCloseConnection = true,//不设成true要手动close
+               });
+           };
+
+           */
+            List<ConnectionConfig> connectionConfigs = new List<ConnectionConfig>();
+            connectionConfigs.Add(new ConnectionConfig
+            {
+                ConfigId = "WCSDB",
+                ConnectionString = "Data Source=10.30.44.50;User ID=sa;Password=P@ssw0rd;Initial Catalog=WMS_ZT_01SX;Integrated Security=False;",
+                DbType = DbType.SqlServer,
+                IsAutoCloseConnection = true,
+            });
+            connectionConfigs.Add(new ConnectionConfig
+            {
+                ConfigId = "WCSDlog",
+                ConnectionString = "Data Source=10.30.39.1;User ID=sa;Password=123456;Initial Catalog=WCS_ZT_SX_LOG;Integrated Security=False;",
+                DbType = DbType.SqlServer,
+                IsAutoCloseConnection = true,
+            });
+
+            SqlSugarHelper.SetDb(new SqlSugarScope(connectionConfigs));
+
+            SqlSugarHelper.SetDefault("WCSDB");
+            SqlSugarHelper.SetDlog("WCSDlog");
+             
+            SqlSugarHelper.Do(db =>
+            {
+                var dblog = db.Connect.GetConnectionScope("WCSDlog");
+                dblog.CodeFirst.InitTables<WCS_Station23>();
+            });
+
+
+            #endregion
+
+            #region 初始化设备信息
+
+            WorkStart.InitializeDeviceInfo();
+
+            #endregion 初始化设备信息
+
+            #region 初始化PLC访问器及PLC读取协议
+
+            //创建PLC访问器
+            Configs.PLCAccessorCreater = new PLCAccessors.PLCAccessorsCreater();
+
+            try
+            {
+                #region 唤醒所有的世界
+
+                World.StartAll();
+
+                #endregion 唤醒所有的世界
+
+                _logger.LogInformation("WCS启动成功");
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError("WCS启动失败{0}", ex.Message);
+            }
+
+            #endregion 初始化PLC访问器及PLC读取协议
+
+            //LogHub.init();
+        }
+    }
+}

+ 29 - 0
WCS.Service/Worlds/initWorld.cs

@@ -0,0 +1,29 @@
+using WCS.Core;
+
+namespace WCS.Service.Worlds
+{
+    public class initWorld : World
+    {
+        protected override int Interval => 300;
+
+        protected override IEnumerable<string> GetChannelMsg(Channel channel)
+        {
+            throw new NotImplementedException();
+        }
+
+        protected override void OnError(Channel channel, Exception exception)
+        {
+            throw new NotImplementedException();
+        }
+
+        protected override void OnInternalLog(Channel channel, string msg)
+        {
+            throw new NotImplementedException();
+        }
+
+        protected override void OnLog(Channel channel, object logObj)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

+ 8 - 0
WCS.Service/appsettings.Development.json

@@ -0,0 +1,8 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.Hosting.Lifetime": "Information"
+    }
+  }
+}

+ 12 - 0
WCS.Service/appsettings.json

@@ -0,0 +1,12 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft": "Warning",
+      "Microsoft.Hosting.Lifetime": "Information"
+    }
+  },
+  "ConnectionStrings": {
+    "Redis": "10.30.39.1,database=0,prefix=SX:"
+  }
+}

+ 100 - 0
WcsFramework.sln

@@ -0,0 +1,100 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.4.33205.214
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WCS.Service", "WCS.Service\WCS.Service.csproj", "{F942507C-3DB2-47BC-B4DF-496E52E3C908}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "框架", "框架", "{C783651F-7EB6-40BA-8E68-525F93B8FCED}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "主工程", "主工程", "{1A069C59-845C-492A-A939-95741CB8DC12}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WCS.Core", "WCS.Core\WCS.Core.csproj", "{A869A35B-8811-4660-90E8-A143D168D894}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "业务工程", "业务工程", "{FD3B782A-4A24-458C-B77F-6F46106AE2B4}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WCS.Entity", "WCS.Entity\WCS.Entity.csproj", "{99AB1CD4-1242-4A1B-AE90-ADD7674848B2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LogHelper", "LogHelper\LogHelper.csproj", "{977B3F9A-1CB4-4CF2-A0A2-B95A6011933A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlcSiemens", "PLC.Siemens\PlcSiemens.csproj", "{DB454F36-DE7B-4A9B-9A8B-8E2C3C4F81B7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServiceCenter", "ServiceCenter\ServiceCenter.csproj", "{584F95DC-6D93-440A-AD69-F88F90A53DB4}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "时效库", "时效库", "{5C319C8D-9EC2-4C1E-9924-437DB3239AE1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WCS.Entity.Protocol", "业务工程\时效库\WCS.Entity.Protocol\WCS.Entity.Protocol.csproj", "{A492ECC8-9874-4D75-A279-79F908803B25}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WCS.WorkEngineering", "业务工程\时效库\WCS.WorkEngineering\WCS.WorkEngineering.csproj", "{CD308645-A4F6-4AC4-891B-B7AE0547EA08}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WCS.DebugTool", "WCS.DebugTool\WCS.DebugTool.csproj", "{6E83138E-F92B-40FB-BEB4-F5E02383B823}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SourceGen", "..\test\WCS\WCS\SourceGen\SourceGen.csproj", "{24DFD839-45C9-4CA1-ABF1-3580B3677A26}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{F942507C-3DB2-47BC-B4DF-496E52E3C908}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F942507C-3DB2-47BC-B4DF-496E52E3C908}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F942507C-3DB2-47BC-B4DF-496E52E3C908}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F942507C-3DB2-47BC-B4DF-496E52E3C908}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A869A35B-8811-4660-90E8-A143D168D894}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A869A35B-8811-4660-90E8-A143D168D894}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A869A35B-8811-4660-90E8-A143D168D894}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A869A35B-8811-4660-90E8-A143D168D894}.Release|Any CPU.Build.0 = Release|Any CPU
+		{99AB1CD4-1242-4A1B-AE90-ADD7674848B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{99AB1CD4-1242-4A1B-AE90-ADD7674848B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{99AB1CD4-1242-4A1B-AE90-ADD7674848B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{99AB1CD4-1242-4A1B-AE90-ADD7674848B2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{977B3F9A-1CB4-4CF2-A0A2-B95A6011933A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{977B3F9A-1CB4-4CF2-A0A2-B95A6011933A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{977B3F9A-1CB4-4CF2-A0A2-B95A6011933A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{977B3F9A-1CB4-4CF2-A0A2-B95A6011933A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DB454F36-DE7B-4A9B-9A8B-8E2C3C4F81B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DB454F36-DE7B-4A9B-9A8B-8E2C3C4F81B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DB454F36-DE7B-4A9B-9A8B-8E2C3C4F81B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DB454F36-DE7B-4A9B-9A8B-8E2C3C4F81B7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{584F95DC-6D93-440A-AD69-F88F90A53DB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{584F95DC-6D93-440A-AD69-F88F90A53DB4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{584F95DC-6D93-440A-AD69-F88F90A53DB4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{584F95DC-6D93-440A-AD69-F88F90A53DB4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A492ECC8-9874-4D75-A279-79F908803B25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A492ECC8-9874-4D75-A279-79F908803B25}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A492ECC8-9874-4D75-A279-79F908803B25}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A492ECC8-9874-4D75-A279-79F908803B25}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CD308645-A4F6-4AC4-891B-B7AE0547EA08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CD308645-A4F6-4AC4-891B-B7AE0547EA08}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CD308645-A4F6-4AC4-891B-B7AE0547EA08}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CD308645-A4F6-4AC4-891B-B7AE0547EA08}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6E83138E-F92B-40FB-BEB4-F5E02383B823}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6E83138E-F92B-40FB-BEB4-F5E02383B823}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6E83138E-F92B-40FB-BEB4-F5E02383B823}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6E83138E-F92B-40FB-BEB4-F5E02383B823}.Release|Any CPU.Build.0 = Release|Any CPU
+		{24DFD839-45C9-4CA1-ABF1-3580B3677A26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{24DFD839-45C9-4CA1-ABF1-3580B3677A26}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{24DFD839-45C9-4CA1-ABF1-3580B3677A26}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{24DFD839-45C9-4CA1-ABF1-3580B3677A26}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{F942507C-3DB2-47BC-B4DF-496E52E3C908} = {1A069C59-845C-492A-A939-95741CB8DC12}
+		{A869A35B-8811-4660-90E8-A143D168D894} = {C783651F-7EB6-40BA-8E68-525F93B8FCED}
+		{99AB1CD4-1242-4A1B-AE90-ADD7674848B2} = {C783651F-7EB6-40BA-8E68-525F93B8FCED}
+		{977B3F9A-1CB4-4CF2-A0A2-B95A6011933A} = {C783651F-7EB6-40BA-8E68-525F93B8FCED}
+		{DB454F36-DE7B-4A9B-9A8B-8E2C3C4F81B7} = {C783651F-7EB6-40BA-8E68-525F93B8FCED}
+		{584F95DC-6D93-440A-AD69-F88F90A53DB4} = {C783651F-7EB6-40BA-8E68-525F93B8FCED}
+		{5C319C8D-9EC2-4C1E-9924-437DB3239AE1} = {FD3B782A-4A24-458C-B77F-6F46106AE2B4}
+		{A492ECC8-9874-4D75-A279-79F908803B25} = {5C319C8D-9EC2-4C1E-9924-437DB3239AE1}
+		{CD308645-A4F6-4AC4-891B-B7AE0547EA08} = {5C319C8D-9EC2-4C1E-9924-437DB3239AE1}
+		{6E83138E-F92B-40FB-BEB4-F5E02383B823} = {C783651F-7EB6-40BA-8E68-525F93B8FCED}
+		{24DFD839-45C9-4CA1-ABF1-3580B3677A26} = {C783651F-7EB6-40BA-8E68-525F93B8FCED}
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {2C009DED-1CDE-4D15-A895-5013ED32E8FC}
+	EndGlobalSection
+EndGlobal

+ 16 - 0
业务工程/分拣库/WCS.Entity.Protocol/BCR/IBCR80.cs

@@ -0,0 +1,16 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.Entity.Protocol.BCR
+{
+    /// <summary>
+    /// 扫码头协议80
+    /// </summary>
+    public interface IBCR80 : IProtocol
+    {
+        /// <summary>
+        /// 内容
+        /// </summary>
+        [StringLength(130)]
+        string Content { get; set; }
+    }
+}

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

@@ -0,0 +1,16 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.Entity.Protocol.BCR
+{
+    /// <summary>
+    /// 扫码头协议81
+    /// </summary>
+    public interface IBCR81 : IProtocol
+    {
+        /// <summary>
+        /// 内容
+        /// </summary>
+        [StringLength(20)]
+        string Content { get; set; }
+    }
+}

+ 50 - 0
业务工程/分拣库/WCS.Entity.Protocol/BCR/IBCR83.cs

@@ -0,0 +1,50 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.Entity.Protocol.BCR
+{
+    /// <summary>
+    ///  满轮主线读取
+    /// </summary>
+    public interface IBCR83 : IProtocol
+    {
+        public short Index { get; set; }
+
+        public short LastIndex { get; set; }
+
+        [StringLength(50)]
+        public string BcrCode { get; set; }
+
+        [StringLength(50)]
+        public string BcrCode1 { get; set; }
+
+        [StringLength(50)]
+        public string BcrCode2 { get; set; }
+
+        [StringLength(50)]
+        public string BcrCode3 { get; set; }
+
+        [StringLength(50)]
+        public string BcrCode4 { get; set; }
+
+        [StringLength(50)]
+        public string BcrCode5 { get; set; }
+
+        [StringLength(50)]
+        public string BcrCode6 { get; set; }
+
+        [StringLength(50)]
+        public string BcrCode7 { get; set; }
+
+        [StringLength(50)]
+        public string BcrCode8 { get; set; }
+
+        [StringLength(50)]
+        public string BcrCode9 { get; set; }
+
+        [StringLength(50)]
+        public string BcrCode10 { get; set; }
+
+        [StringLength(50)]
+        public string BcrCode11 { get; set; }
+    }
+}

+ 17 - 0
业务工程/分拣库/WCS.Entity.Protocol/BCR/WCS_BCR80.cs

@@ -0,0 +1,17 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.BCR
+{
+    /// <summary>
+    /// 读码器读取协议
+    /// </summary>
+    [DataContract]
+    public class WCS_BCR80 : IBCR80
+    {
+        /// <summary>
+        /// 内容
+        /// </summary>
+        [DataMember(Order = 0)]
+        public string Content { get; set; }
+    }
+}

+ 17 - 0
业务工程/分拣库/WCS.Entity.Protocol/BCR/WCS_BCR81.cs

@@ -0,0 +1,17 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.BCR
+{
+    /// <summary>
+    /// 读码器写入协议81
+    /// </summary>
+    [DataContract]
+    public class WCS_BCR81 : IBCR81
+    {
+        /// <summary>
+        /// 内容
+        /// </summary>
+        [DataMember(Order = 0)]
+        public string Content { get; set; }
+    }
+}

+ 66 - 0
业务工程/分拣库/WCS.Entity.Protocol/BCR/WCS_BCR83.cs

@@ -0,0 +1,66 @@
+using System.ComponentModel.DataAnnotations;
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.BCR
+{
+    /// <summary>
+    /// 读码器写入协议81
+    /// </summary>
+    [DataContract]
+    public class WCS_BCR83 : IBCR83
+    {
+        [DataMember(Order = 0)]
+        public short Index { get; set; }
+
+        [DataMember(Order = 1)]
+        public short LastIndex { get; set; }
+
+        [DataMember(Order = 2)]
+        [StringLength(50)]
+        public string BcrCode { get; set; }
+
+        [DataMember(Order = 3)]
+        [StringLength(50)]
+        public string BcrCode1 { get; set; }
+
+        [DataMember(Order = 4)]
+        [StringLength(50)]
+        public string BcrCode2 { get; set; }
+
+        [DataMember(Order = 5)]
+        [StringLength(50)]
+        public string BcrCode3 { get; set; }
+
+        [DataMember(Order = 6)]
+        [StringLength(50)]
+        public string BcrCode4 { get; set; }
+
+        [DataMember(Order = 7)]
+        [StringLength(50)]
+        public string BcrCode5 { get; set; }
+
+        [DataMember(Order = 8)]
+        [StringLength(50)]
+        public string BcrCode6 { get; set; }
+
+        [DataMember(Order = 9)]
+        [StringLength(50)]
+        public string BcrCode7 { get; set; }
+
+        [DataMember(Order = 10)]
+        [StringLength(50)]
+        public string BcrCode8 { get; set; }
+
+        [DataMember(Order = 11)]
+        [StringLength(50)]
+        public string BcrCode9 { get; set; }
+
+        [DataMember(Order = 12)]
+        [StringLength(50)]
+        public string BcrCode10 { get; set; }
+
+        [DataMember(Order = 13)]
+        [StringLength(50)]
+        public string BcrCode11 { get; set; }
+    }
+}

+ 18 - 0
业务工程/分拣库/WCS.Entity.Protocol/DataStructure/BCRData.cs

@@ -0,0 +1,18 @@
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.BCR;
+using WCS.Entity.Protocol.Protocol.DataStructure;
+
+namespace WCS.Entity.Protocol.DataStructure
+{
+    /// <summary>
+    ///  扫码器
+    /// </summary>
+    [DataContract]
+    public class BCRData : DeviceData
+    {
+        /// <summary>
+        ///  扫码结果
+        /// </summary>
+        public WCS_BCR81 D81 { get; set; }
+    }
+}

+ 30 - 0
业务工程/分拣库/WCS.Entity.Protocol/DataStructure/DeviceData.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.DataStructure
+{
+    /// <summary>
+    /// 设备数据基类
+    /// </summary>
+    [DataContract]
+    public class DeviceData
+    {
+        /// <summary>
+        /// 设备号
+        /// </summary>
+        [DataMember(Order = 0)]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 时间
+        /// </summary>
+        [DataMember(Order = 1)]
+        public DateTime Frame { get; set; }
+
+        /// <summary>
+        /// 信息
+        /// </summary>
+        [DataMember(Order = 2)]
+        public string Info { get; set; } = "";
+    }
+}

+ 44 - 0
业务工程/分拣库/WCS.Entity.Protocol/DataStructure/DeviceDataCollection.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Linq;
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.DataStructure
+{
+    /// <summary>
+    /// 设备数据
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    [DataContract]
+    public class DeviceDataCollection<T> where T : DeviceData
+    {
+        /// <summary>
+        /// 确认时间
+        /// </summary>
+        [DataMember(Order = 3)]
+        public DateTime Frame { get; set; }
+
+        /// <summary>
+        /// 数据集
+        /// </summary>
+        [DataMember(Order = 4)]
+        public T[] Datas { get; set; }
+
+        /// <summary>
+        ///  默认构造函数
+        /// </summary>
+        public DeviceDataCollection()
+        {
+        }
+
+        /// <summary>
+        ///  构造函数
+        /// </summary>
+        /// <param name="frame"></param>
+        /// <param name="datas"></param>
+        public DeviceDataCollection(DateTime frame, object[] datas)
+        {
+            this.Frame = frame;
+            this.Datas = datas.OfType<T>().ToArray();
+        }
+    }
+}

+ 67 - 0
业务工程/分拣库/WCS.Entity.Protocol/DataStructure/DeviceDataPack.cs

@@ -0,0 +1,67 @@
+using System;
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.Protocol.DataStructure;
+
+namespace WCS.Entity.Protocol.DataStructure
+{
+    /// <summary>
+    ///  设备数据包
+    /// </summary>
+    [DataContract]
+    public class DeviceDataPack
+    {
+        /// <summary>
+        ///  堆垛机数据集
+        /// </summary>
+        [DataMember(Order = 0)]
+        public DeviceDataCollection<SRMData> SRMDatas { get; set; }
+
+        /// <summary>
+        ///  穿梭车数据集
+        /// </summary>
+        [DataMember(Order = 1)]
+        public DeviceDataCollection<RGVData> RGVDatas { get; set; }
+
+        /// <summary>
+        ///  站台数据集
+        /// </summary>
+        [DataMember(Order = 2)]
+        public DeviceDataCollection<StationData> StationDatas { get; set; }
+
+        ///// <summary>
+        /////  扫码器数据
+        ///// </summary>
+        //[DataMember(Order = 3)]
+        //public DeviceDataCollection<BCRData> BcrDatas { get; set; }
+
+        /// <summary>
+        ///  机器人数据集
+        /// </summary>
+        [DataMember(Order = 3)]
+        public DeviceDataCollection<RobotData> RobotData { get; set; }
+
+        /// <summary>
+        ///  机器人数据集
+        /// </summary>
+        [DataMember(Order = 4)]
+        public DeviceDataCollection<TrussData> TrussData { get; set; }
+
+        ///// <summary>
+        /////  产线数据集
+        ///// </summary>
+        //[DataMember(Order = 5)]
+        //public DeviceDataCollection<ProdLineData> ProdLineData { get; set; }
+
+        /// <summary>
+        ///  时间
+        /// </summary>
+        [DataMember(Order = 5)]
+        public DateTime Frame { get; set; }
+
+        /// <summary>
+        /// 回放最早时间
+        /// </summary>
+        [DataMember(Order = 6)]
+        public int PlaybackSeconds { get; set; }
+    }
+}

+ 17 - 0
业务工程/分拣库/WCS.Entity.Protocol/DataStructure/ProdLineData.cs

@@ -0,0 +1,17 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.DataStructure
+{
+    /// <summary>
+    /// 产线信息
+    /// </summary>
+    [DataContract]
+    public class ProdLineData : DeviceData
+    {
+        /// <summary>
+        ///  产线任务信息
+        /// </summary>
+        //[DataMember(Order = 3)]
+        //public List<WCS_AgvTaskInfo> TaskList { get; set; } = new List<WCS_AgvTaskInfo>();
+    }
+}

+ 22 - 0
业务工程/分拣库/WCS.Entity.Protocol/DataStructure/RGVData.cs

@@ -0,0 +1,22 @@
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.BCR;
+using WCS.Entity.Protocol.RGV;
+
+namespace WCS.Entity.Protocol.DataStructure
+{
+    [DataContract]
+    public class RGVData : DeviceData
+    {
+        [DataMember(Order = 3)]
+        public WCS_RGV520 D520 { get; set; }
+
+        [DataMember(Order = 4)]
+        public WCS_RGV521 D521 { get; set; }
+
+        [DataMember(Order = 5)]
+        public WCS_BCR81 D81 { get; set; }
+
+        //[DataMember(Order = 5)]
+        //public WCS_RGV523 D523 { get; set; }
+    }
+}

+ 18 - 0
业务工程/分拣库/WCS.Entity.Protocol/DataStructure/RobotData.cs

@@ -0,0 +1,18 @@
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.Robot;
+
+namespace WCS.Entity.Protocol.DataStructure
+{
+    [DataContract]
+    public class RobotData : DeviceData
+    {
+        [DataMember(Order = 3)]
+        public WCS_Robot520 D520 { get; set; }
+
+        [DataMember(Order = 4)]
+        public WCS_Robot521 D521 { get; set; }
+
+        [DataMember(Order = 5)]
+        public WCS_Robot522 D522 { get; set; }
+    }
+}

+ 30 - 0
业务工程/分拣库/WCS.Entity.Protocol/DataStructure/SRMData.cs

@@ -0,0 +1,30 @@
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.SRM;
+
+namespace WCS.Entity.Protocol.DataStructure
+{
+    /// <summary>
+    ///  堆垛机数据
+    /// </summary>
+    [DataContract]
+    public class SRMData : DeviceData
+    {
+        /// <summary>
+        ///  DB520
+        /// </summary>
+        [DataMember(Order = 3)]
+        public WCS_SRM520 D520 { get; set; } = null!;
+
+        /// <summary>
+        ///  DB521
+        /// </summary>
+        [DataMember(Order = 4)]
+        public WCS_SRM521 D521 { get; set; } = null!;
+
+        /// <summary>
+        ///  DB523
+        /// </summary>
+        [DataMember(Order = 5)]
+        public WCS_SRM537 D537 { get; set; } = null!;
+    }
+}

+ 58 - 0
业务工程/分拣库/WCS.Entity.Protocol/DataStructure/StationData.cs

@@ -0,0 +1,58 @@
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.BCR;
+using WCS.Entity.Protocol.DataStructure;
+using WCS.Entity.Protocol.Robot;
+using WCS.Entity.Protocol.Station;
+using WCS.Entity.Protocol.Truss;
+
+namespace WCS.Entity.Protocol.Protocol.DataStructure
+{
+    /// <summary>
+    ///  输送线数据
+    /// </summary>
+    [DataContract]
+    public class StationData : DeviceData
+    {
+        [DataMember(Order = 3)]
+        public WCS_Station520 D520 { get; set; }
+
+        [DataMember(Order = 4)]
+        public WCS_Station521 D521 { get; set; }
+
+        [DataMember(Order = 5)]
+        public WCS_Station523 D523 { get; set; }
+
+        [DataMember(Order = 6)]
+        public WCS_Station90 D90 { get; set; }
+
+        [DataMember(Order = 7)]
+        public WCS_Station91 D91 { get; set; }
+
+        [DataMember(Order = 8)]
+        public WCS_BCR80 D80 { get; set; }
+
+        [DataMember(Order = 9)]
+        public WCS_BCR81 D81 { get; set; }
+
+        [DataMember(Order = 10)]
+        public WCS_BCR83 D83 { get; set; }
+
+        [DataMember(Order = 11)]
+        public WCS_Station524 D524 { get; set; }
+
+        [DataMember(Order = 12)]
+        public WCS_Station525 D525 { get; set; }
+
+        [DataMember(Order = 13)]
+        public WCS_Truss530 D530 { get; set; }
+
+        [DataMember(Order = 14)]
+        public WCS_Truss531 D5531 { get; set; }
+
+        [DataMember(Order = 15)]
+        public WCS_Robot530 DR530 { get; set; }
+
+        [DataMember(Order = 16)]
+        public WCS_Robot531 DR531 { get; set; }
+    }
+}

+ 17 - 0
业务工程/分拣库/WCS.Entity.Protocol/DataStructure/TrussData.cs

@@ -0,0 +1,17 @@
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.Truss;
+
+namespace WCS.Entity.Protocol.DataStructure
+{
+    public class TrussData : DeviceData
+    {
+        [DataMember(Order = 3)]
+        public WCS_Truss520 D520 { get; set; }
+
+        [DataMember(Order = 4)]
+        public WCS_Truss521 D521 { get; set; }
+
+        [DataMember(Order = 5)]
+        public WCS_Truss523 D523 { get; set; }
+    }
+}

+ 9 - 0
业务工程/分拣库/WCS.Entity.Protocol/IProtocol.cs

@@ -0,0 +1,9 @@
+namespace WCS.Entity
+{
+    /// <summary>
+    /// 协议
+    /// </summary>
+    public interface IProtocol
+    {
+    }
+}

+ 23 - 0
业务工程/分拣库/WCS.Entity.Protocol/IgnoreChangingAttribute.cs

@@ -0,0 +1,23 @@
+using System;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    /// 忽略变更
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Property)]
+    public class IgnoreChangingAttribute : Attribute
+    {
+        /// <summary>
+        /// 忽略变更
+        /// </summary>
+        public IgnoreChangingAttribute()
+        {
+        }
+
+        /// <summary>
+        /// 忽略变更的值范围
+        /// </summary>
+        public long IgnoreValueRange { get; set; }
+    }
+}

+ 53 - 0
业务工程/分拣库/WCS.Entity.Protocol/RGV/IRGV520.cs

@@ -0,0 +1,53 @@
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.RGV
+{
+    /// <summary>
+    ///  RGV520
+    /// </summary>
+    /// <typeparam name="cmdType">任务类型</typeparam>
+    public interface IRGV520 : IProtocol
+    {
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber { get; set; }
+
+        /// <summary>
+        /// 任务类型
+        /// </summary>
+        [Description("任务类型")]
+        RGVCmdType CmdType { get; set; }
+
+        /// <summary>
+        /// 起始地址 环穿RGV无起始地址,只有目标地址
+        /// </summary>
+        [Description("起始地址 环穿RGV无起始地址,只有目标地址")]
+        short StartPosition { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short DestPosition { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        short RES1 { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        short RES2 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo { get; set; }
+    }
+}

+ 92 - 0
业务工程/分拣库/WCS.Entity.Protocol/RGV/IRGV521.cs

@@ -0,0 +1,92 @@
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.RGV
+{
+    /// <summary>
+    ///  RGV521
+    /// </summary>
+    /// <typeparam name="cmdType">任务类型</typeparam>
+    /// <typeparam name="systemStatus">RGV运行状态</typeparam>
+    /// <typeparam name="workMode">RGV运行模式</typeparam>
+    /// <typeparam name="status">RGV状态</typeparam>
+    public interface IRGV521 : IProtocol
+    {
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber { get; set; }
+
+        /// <summary>
+        /// 任务类型
+        /// </summary>
+        [Description("任务类型 ")]
+        RGVCmdType CmdType { get; set; }
+
+        /// <summary>
+        /// 起始地址 环穿RGV无起始地址,只有目标地址
+        /// </summary>
+        [Description("起始地址 环穿RGV无起始地址,只有目标地址")]
+        short StartPosition { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short DestPosition { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        short RES1 { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        short RES2 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo { get; set; }
+
+        /// <summary>
+        /// RGV运行状态
+        /// </summary>
+        [Description("RGV运行状态")]
+        RGVSystemStatus SystemStatus { get; set; }
+
+        /// <summary>
+        /// RGV运行模式
+        /// </summary>
+        [Description("RGV运行模式 ")]
+        RGVWorkMode WorkMode { get; set; }
+
+        /// <summary>
+        ///  位置
+        /// </summary>
+        [Description("位置")]
+        float Position { get; set; }
+
+        /// <summary>
+        ///  里程
+        /// </summary>
+        [Description("里程")]
+        float Mileage { get; set; }
+
+        /// <summary>
+        ///  运行总时长
+        /// </summary>
+        [Description("运行总时长")]
+        float RunTime { get; set; }
+
+        /// <summary>
+        /// RGV状态
+        /// </summary>
+        [Description("RGV状态")]
+        RGVStatus Status { get; set; }
+    }
+}

+ 270 - 0
业务工程/分拣库/WCS.Entity.Protocol/RGV/RGVEnum.cs

@@ -0,0 +1,270 @@
+using System;
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.RGV
+{
+    /// <summary>
+    ///  RGV指令类型
+    /// </summary>
+    public enum RGVCmdType : short
+    {
+        /// <summary>
+        /// 取货
+        /// </summary>
+        [Description("取货")]
+        PickGoods = 1,
+
+        /// <summary>
+        /// 放货
+        /// </summary>
+        [Description("放货")]
+        PutGoods = 2,
+
+        /// <summary>
+        /// 移动
+        /// </summary>
+        [Description("移动")]
+        Move = 3,
+
+        /// <summary>
+        ///  变更放货点
+        /// </summary>
+        [Description("变更放货点")]
+        ChangePutGoods = 4,
+
+        /// <summary>
+        ///  变更取货点
+        /// </summary>
+        [Description("变更取货点")]
+        ChangePickGoods = 5,
+
+        /// <summary>
+        ///  取放货
+        /// </summary>
+        [Description("取放货")]
+        PickPutGoods = 6
+    }
+
+    /// <summary>
+    ///  货叉式RGV状态
+    /// </summary>
+    public enum RGVSystemStatus : short
+    {
+        /// <summary>
+        /// 空闲
+        /// </summary>
+        [Description("空闲")]
+        空闲 = 0,
+
+        /// <summary>
+        /// 获取取货位
+        /// </summary>
+        [Description("获取取货位")]
+        获取取货位 = 1,
+
+        /// <summary>
+        /// 取货移动
+        /// </summary>
+        [Description("取货移动")]
+        取货移动 = 2,
+
+        /// <summary>
+        /// 到达取货位
+        /// </summary>
+        [Description("到达取货位")]
+        到达取货位 = 4,
+
+        /// <summary>
+        /// 取货伸叉
+        /// </summary>
+        [Description("取货伸叉")]
+        取货伸叉 = 5,
+
+        /// <summary>
+        /// 取货抬叉
+        /// </summary>
+        [Description("取货抬叉")]
+        取货抬叉 = 6,
+
+        /// <summary>
+        /// 取货收叉
+        /// </summary>
+        [Description("取货收叉")]
+        取货收叉 = 7,
+
+        /// <summary>
+        /// 取货完成
+        /// </summary>
+        [Description("取货完成")]
+        取货完成 = 8,
+
+        /// <summary>
+        /// 获取放货位
+        /// </summary>
+        [Description("获取放货位")]
+        获取放货位 = 9,
+
+        /// <summary>
+        /// 放货移动
+        /// </summary>
+        [Description("放货移动")]
+        放货移动 = 10,
+
+        /// <summary>
+        /// 放货收叉
+        /// </summary>
+        [Description("放货收叉")]
+        放货伸叉 = 11,
+
+        /// <summary>
+        /// 放货下降
+        /// </summary>
+        [Description("放货下降")]
+        放货下降 = 12,
+
+        /// <summary>
+        /// 放货收叉
+        /// </summary>
+        [Description("取货抬叉")]
+        放货收叉 = 13,
+
+        /// <summary>
+        /// 放货完成
+        /// </summary>
+        [Description("放货完成")]
+        放货完成 = 14,
+    }
+
+    /// <summary>
+    ///  RGV模式
+    /// </summary>
+    public enum RGVWorkMode : short
+    {
+        /// <summary>
+        ///  自动
+        /// </summary>
+        [Description("自动")]
+        Automatic = 1,
+
+        /// <summary>
+        ///  半自动
+        /// </summary>
+        [Description("半自动")]
+        SemiAutomatic = 2,
+
+        /// <summary>
+        ///  手动
+        /// </summary>
+        [Description("手动")]
+        Manual = 3,
+
+        /// <summary>
+        ///  保持维修
+        /// </summary>
+        [Description("保持维修")]
+        KeepInRepair = 4
+    }
+
+    /// <summary>
+    ///  RGV状态
+    /// </summary>
+    [Flags]
+    public enum RGVStatus : ushort
+    {
+        /// <summary>
+        ///  光电
+        /// </summary>
+        [Description("光电")]
+        PH_Status = 1 << 0,
+
+        /// <summary>
+        ///  RGV到站
+        /// </summary>
+        [Description("RGV到站")]
+        Arrival = 1 << 1,
+
+        /// <summary>
+        ///  任务完成
+        /// </summary>
+        [Description("任务完成")]
+        Taskfinishi = 1 << 2,
+
+        /// <summary>
+        ///  载货
+        /// </summary>
+        [Description("载货")]
+        Cargo = 1 << 3,
+
+        /// <summary>
+        ///  RGV输送线正转
+        /// </summary>
+        [Description("RGV输送线正转")]
+        Forward = 1 << 4,
+
+        /// <summary>
+        ///  RGV输送线反转
+        /// </summary>
+        [Description("RGV输送线反转")]
+        Reverse = 1 << 5,
+
+        /// <summary>
+        ///  在非安全区
+        /// </summary>
+        [Description("在非安全区")]
+        RES1 = 1 << 6,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        RES2 = 1 << 7,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        RES3 = 1 << 8,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        RES4 = 1 << 9,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        RES5 = 1 << 10,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        RES6 = 1 << 11,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        RES7 = 1 << 12,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        RES9 = 1 << 13,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        RES10 = 1 << 14,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        RES11 = 1 << 15,
+    }
+}

+ 32 - 0
业务工程/分拣库/WCS.Entity.Protocol/RGV/WCS_RGV520.cs

@@ -0,0 +1,32 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.RGV
+{
+    /// <summary>
+    ///  RGV
+    /// </summary>
+    [DataContract]
+    public class WCS_RGV520 : IRGV520
+    {
+        [DataMember(Order = 0)]
+        public int TaskNumber { get; set; }
+
+        [DataMember(Order = 1)]
+        public RGVCmdType CmdType { get; set; }
+
+        [DataMember(Order = 2)]
+        public short StartPosition { get; set; }
+
+        [DataMember(Order = 3)]
+        public short DestPosition { get; set; }
+
+        [DataMember(Order = 4)]
+        public short RES1 { get; set; }
+
+        [DataMember(Order = 5)]
+        public short RES2 { get; set; }
+
+        [DataMember(Order = 6)]
+        public short VoucherNo { get; set; }
+    }
+}

+ 47 - 0
业务工程/分拣库/WCS.Entity.Protocol/RGV/WCS_RGV521.cs

@@ -0,0 +1,47 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.RGV
+{
+    [DataContract]
+    public class WCS_RGV521 : IRGV521
+    {
+        [DataMember(Order = 0)]
+        public int TaskNumber { get; set; }
+
+        [DataMember(Order = 1)]
+        public RGVCmdType CmdType { get; set; }
+
+        [DataMember(Order = 2)]
+        public short StartPosition { get; set; }
+
+        [DataMember(Order = 3)]
+        public short DestPosition { get; set; }
+
+        [DataMember(Order = 4)]
+        public short RES1 { get; set; }
+
+        [DataMember(Order = 5)]
+        public short RES2 { get; set; }
+
+        [DataMember(Order = 6)]
+        public short VoucherNo { get; set; }
+
+        [DataMember(Order = 7)]
+        public RGVSystemStatus SystemStatus { get; set; }
+
+        [DataMember(Order = 8)]
+        public RGVWorkMode WorkMode { get; set; }
+
+        [DataMember(Order = 9)]
+        public float Position { get; set; }
+
+        [DataMember(Order = 10)]
+        public float Mileage { get; set; }
+
+        [DataMember(Order = 11)]
+        public float RunTime { get; set; }
+
+        [DataMember(Order = 12)]
+        public RGVStatus Status { get; set; }
+    }
+}

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

@@ -0,0 +1,212 @@
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.Robot
+{
+    /// <summary>
+    ///  机械臂520
+    /// </summary>
+    [Description("机械臂520")]
+    public interface IRobot520 : IProtocol
+    {
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        public int TaskNumber1 { get; set; }
+
+        /// <summary>
+        ///  任务起始行
+        /// </summary>
+        [Description("任务起始行")]
+        public short SLine1 { get; set; }
+
+        /// <summary>
+        ///  任务起始列
+        /// </summary>
+        [Description("任务起始列")]
+        public short SCol1 { get; set; }
+
+        /// <summary>
+        ///  任务起始层
+        /// </summary>
+        [Description("任务起始层")]
+        public short SLayer1 { get; set; }
+
+        /// <summary>
+        ///  任务起始深度
+        /// </summary>
+        [Description("任务起始深度")]
+        public short SDepth1 { get; set; }
+
+        /// <summary>
+        ///  任务目标行
+        /// </summary>
+        [Description("任务目标行")]
+        public short ELine1 { get; set; }
+
+        /// <summary>
+        ///  任务目标列
+        /// </summary>
+        [Description("任务目标列")]
+        public short ECol1 { get; set; }
+
+        /// <summary>
+        ///  任务目标层
+        /// </summary>
+        [Description("任务目标层")]
+        public short ELayer1 { get; set; }
+
+        /// <summary>
+        ///  任务目标深度
+        /// </summary>
+        [Description("任务目标深度")]
+        public short EDepth1 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res1 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res2 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res3 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res4 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res5 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res6 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res7 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res8 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        public int TaskNumber2 { get; set; }
+
+        /// <summary>
+        ///  任务起始行
+        /// </summary>
+        [Description("任务起始行")]
+        public short SLine2 { get; set; }
+
+        /// <summary>
+        ///  任务起始列
+        /// </summary>
+        [Description("任务起始列")]
+        public short SCol2 { get; set; }
+
+        /// <summary>
+        ///  任务起始层
+        /// </summary>
+        [Description("任务起始层")]
+        public short SLayer2 { get; set; }
+
+        /// <summary>
+        ///  任务起始深度
+        /// </summary>
+        [Description("任务起始深度")]
+        public short SDepth2 { get; set; }
+
+        /// <summary>
+        ///  任务目标行
+        /// </summary>
+        [Description("任务目标行")]
+        public short ELine2 { get; set; }
+
+        /// <summary>
+        ///  任务目标列
+        /// </summary>
+        [Description("任务目标列")]
+        public short ECol2 { get; set; }
+
+        /// <summary>
+        ///  任务目标层
+        /// </summary>
+        [Description("任务目标层")]
+        public short ELayer2 { get; set; }
+
+        /// <summary>
+        ///  任务目标深度
+        /// </summary>
+        [Description("任务目标深度")]
+        public short EDepth2 { get; set; }
+
+        [Description("货物类型")]
+        public short GoodsType { get; set; }
+
+        /// <summary>
+        ///  任务类型
+        /// </summary>
+        [Description("任务类型")]
+        public short TaskType { get; set; }
+
+        /// <summary>
+        ///  完成任务确认清除信号
+        /// </summary>
+        [Description("完成任务确认清除信号")]
+        public short OkAck { get; set; }
+
+        /// <summary>
+        ///  任务数量
+        /// </summary>
+        [Description("任务数量")]
+        public short TaskSum { get; set; }
+
+        /// <summary>
+        ///  凭证号
+        /// </summary>
+        [Description("凭证号")]
+        public int VoucherNo { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res9 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res10 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res11 { get; set; }
+    }
+}

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

@@ -0,0 +1,414 @@
+using System.ComponentModel;
+using WCS.Entity.Protocol.Protocol.Robot;
+
+namespace WCS.Entity.Protocol.Robot
+{
+    /// <summary>
+    ///  机械臂521
+    /// </summary>
+    [Description("机械臂521")]
+    public interface IRobot521 : IProtocol
+    {
+        #region 工位一
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        public int TaskNumber1 { get; set; }
+
+        /// <summary>
+        ///  任务起始行
+        /// </summary>
+        [Description("任务起始行")]
+        public short SLine1 { get; set; }
+
+        /// <summary>
+        ///  任务起始列
+        /// </summary>
+        [Description("任务起始列")]
+        public short SCol1 { get; set; }
+
+        /// <summary>
+        ///  任务起始层
+        /// </summary>
+        [Description("任务起始层")]
+        public short SLayer1 { get; set; }
+
+        /// <summary>
+        ///  任务起始深度
+        /// </summary>
+        [Description("任务起始深度")]
+        public short SDepth1 { get; set; }
+
+        /// <summary>
+        ///  任务目标行
+        /// </summary>
+        [Description("任务目标行")]
+        public short ELine1 { get; set; }
+
+        /// <summary>
+        ///  任务目标列
+        /// </summary>
+        [Description("任务目标列")]
+        public short ECol1 { get; set; }
+
+        /// <summary>
+        ///  任务目标层
+        /// </summary>
+        [Description("任务目标层")]
+        public short ELayer1 { get; set; }
+
+        /// <summary>
+        ///  任务目标深度
+        /// </summary>
+        [Description("任务目标深度")]
+        public short EDepth1 { get; set; }
+
+        /// <summary>
+        ///  完成任务号
+        /// </summary>
+        [Description("完成任务号")]
+        public int TaskFinishId1 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res1 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res2 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res3 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res4 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res5 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res6 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res7 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res8 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res9 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res10 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res11 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res12 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res13 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res14 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res15 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res16 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res17 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public RobotState State1 { get; set; }
+
+        #endregion 工位一
+
+        #region 工位二
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        public int TaskNumber2 { get; set; }
+
+        /// <summary>
+        ///  任务起始行
+        /// </summary>
+        [Description("任务起始行")]
+        public short SLine2 { get; set; }
+
+        /// <summary>
+        ///  任务起始列
+        /// </summary>
+        [Description("任务起始列")]
+        public short SCol2 { get; set; }
+
+        /// <summary>
+        ///  任务起始层
+        /// </summary>
+        [Description("任务起始层")]
+        public short SLayer2 { get; set; }
+
+        /// <summary>
+        ///  任务起始深度
+        /// </summary>
+        [Description("任务起始深度")]
+        public short SDepth2 { get; set; }
+
+        /// <summary>
+        ///  任务目标行
+        /// </summary>
+        [Description("任务目标行")]
+        public short ELine2 { get; set; }
+
+        /// <summary>
+        ///  任务目标列
+        /// </summary>
+        [Description("任务目标列")]
+        public short ECol2 { get; set; }
+
+        /// <summary>
+        ///  任务目标层
+        /// </summary>
+        [Description("任务目标层")]
+        public short ELayer2 { get; set; }
+
+        /// <summary>
+        ///  任务目标深度
+        /// </summary>
+        [Description("任务目标深度")]
+        public short EDepth2 { get; set; }
+
+        /// <summary>
+        ///  完成任务号
+        /// </summary>
+        [Description("完成任务号")]
+        public int TaskFinishId2 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res18 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res19 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res20 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res21 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res22 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res23 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res24 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res25 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res26 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res27 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res28 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res29 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public int Res30 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res31 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res32 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res33 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public RobotState State2 { get; set; }
+
+        #endregion 工位二
+
+        #region 公共
+
+        /// <summary>
+        ///  堆垛机模式
+        /// </summary>
+        [Description("堆垛机模式")]
+        public RobotMode RobotMode { get; set; }
+
+        /// <summary>
+        ///  运行状态
+        /// </summary>
+        [Description("运行状态")]
+        public RobotRunStatus RunStatus { get; set; }
+
+        /// <summary>
+        ///  总共里数
+        /// </summary>
+        [Description("总共里数")]
+        public float TotalKm { get; set; }
+
+        /// <summary>
+        ///  运行时间(Real)(单位:小时,带小数)
+        /// </summary>
+        [Description("运行时间(Real)(单位:小时,带小数)")]
+        public float Runtime { get; set; }
+
+        /// <summary>
+        ///  堆垛机是否报警 1:报警中;0:默认;
+        /// </summary>
+        [Description("堆垛机是否报警 1:报警中;0:默认;")]
+        public short Alarm { get; set; }
+
+        /// <summary>
+        ///  凭证号
+        /// </summary>
+        [Description("凭证号")]
+        public int VoucherNo { get; set; }
+
+        /// <summary>
+        ///  货物类型
+        /// </summary>
+        [Description("货物类型")]
+        public short GoodsType { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res34 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res35 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        public short Res36 { get; set; }
+
+        #endregion 公共
+    }
+}

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

@@ -0,0 +1,17 @@
+using System.ComponentModel;
+using WCS.Entity.Protocol.Protocol.Robot;
+
+namespace WCS.Entity.Protocol.Robot
+{
+    /// <summary>
+    ///  机械臂DB522
+    /// </summary>
+    [Description("机械臂DB522")]
+    public interface IRobot522 : IProtocol
+    {
+        /// <summary>
+        ///  报警
+        /// </summary>
+        public RobotAlarm Alarm { get; set; }
+    }
+}

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

@@ -0,0 +1,36 @@
+using System.ComponentModel;
+using WCS.Entity.Protocol.Protocol.Robot;
+
+namespace WCS.Entity.Protocol.Robot
+{
+    /// <summary>
+    ///  机械臂码垛工位DB530
+    /// </summary>
+    [Description("机械臂码垛工位DB531")]
+    public interface IRobot530 : IProtocol
+    {
+        /// <summary>
+        ///  垛形
+        /// </summary>
+        [Description("垛形")]
+        public short Type { get; set; }
+
+        /// <summary>
+        ///  最大码垛数量
+        /// </summary>
+        [Description("最大码垛数量")]
+        public short MaxQuantity { get; set; }
+
+        /// <summary>
+        ///  码垛结束
+        /// </summary>
+        [Description("码垛结束")]
+        public RobotCmdType CmdType { get; set; }
+
+        /// <summary>
+        ///  凭证号,触发信号
+        /// </summary>
+        [Description("凭证号,触发信号")]
+        public short VoucherNo { get; set; }
+    }
+}

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

@@ -0,0 +1,226 @@
+using System.ComponentModel;
+using WCS.Entity.Protocol.Protocol.Robot;
+
+namespace WCS.Entity.Protocol.Robot
+{
+    /// <summary>
+    ///   机械臂码垛工位DB531
+    /// </summary>
+    [Description("机械臂码垛工位DB531")]
+    public interface IRobot531 : IProtocol
+    {
+        #region 任务集
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo1 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo2 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo3 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo4 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo5 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo6 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo7 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo8 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo9 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo10 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo11 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo12 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo13 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo14 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo15 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo16 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo17 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo18 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo19 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo20 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo21 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo22 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo23 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo24 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo25 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo26 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo27 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo28 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo29 { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Description("任务")]
+        public int TaskNo30 { get; set; }
+
+        #endregion 任务集
+
+        /// <summary>
+        ///  垛形
+        /// </summary>
+        [Description("垛形")]
+        public short Type { get; set; }
+
+        /// <summary>
+        ///  最大码垛数量
+        /// </summary>
+        [Description("最大码垛数量")]
+        public short MaxQuantity { get; set; }
+
+        /// <summary>
+        ///  最大码垛数量
+        /// </summary>
+        [Description("最大码垛数量")]
+        public short Quantity { get; set; }
+
+        /// <summary>
+        ///  码垛结束
+        /// </summary>
+        [Description("码垛结束")]
+        public RobotCmdType CmdType { get; set; }
+
+        /// <summary>
+        ///  凭证号,触发信号
+        /// </summary>
+        [Description("凭证号,触发信号")]
+        public short VoucherNo { get; set; }
+    }
+}

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

@@ -0,0 +1,668 @@
+using System;
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.Protocol.Robot
+{
+    /// <summary>
+    ///  机械手工位状态
+    /// </summary>
+    [Flags]
+    public enum RobotState : ushort
+    {
+        /// <summary>
+        ///  完成取货信号
+        /// </summary>
+        [Description("完成取货信号")]
+        GetFinish = 1 << 0,
+
+        /// <summary>
+        ///  完成放货信号
+        /// </summary>
+        [Description("完成放货信号")]
+        PutFinish = 1 << 1,
+
+        /// <summary>
+        ///  设备故障状态
+        /// </summary>
+        [Description("设备故障状态")]
+        Alarm = 1 << 2,
+
+        /// <summary>
+        ///  当前任务完成
+        /// </summary>
+        [Description("当前任务完成")]
+        TaskFinish = 1 << 3,
+
+        /// <summary>
+        ///  设备上有货
+        /// </summary>
+        [Description("设备上有货")]
+        Loaded = 1 << 4,
+
+        /// <summary>
+        ///  机器人在原位
+        /// </summary>
+        [Description("机器人在原位")]
+        ForkCenter = 1 << 5,
+
+        /// <summary>
+        ///  反馈WCS能否发任务,1:可以发任务 0:不能发任务
+        /// </summary>
+        [Description("反馈WCS能否发任务,1:可以发任务 0:不能发任务")]
+        IssueTask = 1 << 6,
+
+        /// <summary>
+        ///  备用s
+        /// </summary>
+        [Description("备用")]
+        Res = 1 << 7,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        Res1 = 1 << 8,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        Res2 = 1 << 9,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        Res3 = 1 << 10,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        Res4 = 1 << 11,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        Res5 = 1 << 12,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        Res6 = 1 << 13,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        Res7 = 1 << 14,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        Res8 = 1 << 15,
+    }
+
+    /// <summary>
+    ///  机械臂模式
+    /// </summary>
+    public enum RobotMode : short
+    {
+        /// <summary>
+        ///  自动
+        /// </summary>
+        [Description("自动")]
+        Automatic = 1,
+
+        /// <summary>
+        ///  手动
+        /// </summary>
+        [Description("手动")]
+        Manua = 2,
+
+        /// <summary>
+        ///  报警
+        /// </summary>
+        [Description("报警")]
+        Alarm = 3
+    }
+
+    /// <summary>
+    ///  机械臂运行状态
+    /// </summary>
+    public enum RobotRunStatus : short
+    {
+        /// <summary>
+        ///  空闲
+        /// </summary>
+        [Description("空闲")]
+        Idle = 1,
+
+        /// <summary>
+        ///  入库抓取中
+        /// </summary>
+        [Description("入库抓取中")]
+        InboundCrawling = 2,
+
+        /// <summary>
+        ///  入库放置中
+        /// </summary>
+        [Description("入库放置中")]
+        InStorage = 3,
+
+        /// <summary>
+        ///  出库抓取中
+        /// </summary>
+        [Description("出库抓取中")]
+        OutBoundCrawling = 4,
+
+        /// <summary>
+        ///  出库放置中
+        /// </summary>
+        [Description("出库放置中")]
+        OutStorage = 5,
+
+        /// <summary>
+        ///  维护
+        /// </summary>
+        [Description("维护")]
+        Maintain = 99
+    }
+
+    /// <summary>
+    ///  机械臂报警
+    /// </summary>
+    [Flags]
+    public enum RobotAlarm : ulong
+    {
+        /// <summary>
+        ///  入库货位有货
+        /// </summary>
+        [Description("入库货位有货")]
+        入库货位有货 = 0,
+
+        /// <summary>
+        ///  出库货位无货
+        /// </summary>
+        [Description("出库货位无货")]
+        出库货位无货 = 1L << 0,
+
+        /// <summary>
+        ///  库位任务超出范围报错
+        /// </summary>
+        [Description("库位任务超出范围报错")]
+        库位任务超出范围报错 = 1L << 1,
+
+        /// <summary>
+        ///  码垛任务超出范围报错
+        /// </summary>
+        [Description("码垛任务超出范围报错")]
+        码垛任务超出范围报错 = 1L << 2,
+
+        /// <summary>
+        ///  夹具1抓取货物报错
+        /// </summary>
+        [Description("夹具1抓取货物报错")]
+        夹具1抓取货物报错 = 1L << 3,
+
+        /// <summary>
+        ///  夹具2抓取货物报错
+        /// </summary>
+        [Description("夹具2抓取货物报错")]
+        夹具2抓取货物报错 = 1L << 4,
+
+        /// <summary>
+        ///  夹具1压货报警
+        /// </summary>
+        [Description("夹具1压货报警")]
+        夹具1压货报警 = 1L << 5,
+
+        /// <summary>
+        /// 夹具2压货报警
+        /// </summary>
+        [Description("夹具2压货报警")]
+        夹具2压货报警 = 1L << 6,
+
+        /// <summary>
+        ///  夹具1掉料报警
+        /// </summary>
+        [Description("夹具1掉料报警")]
+        夹具1掉料报警 = 1L << 7,
+
+        /// <summary>
+        ///  夹具2掉料报警
+        /// </summary>
+        [Description("夹具2掉料报警")]
+        夹具2掉料报警 = 1L << 8,
+
+        /// <summary>
+        ///  机器人限位报警
+        /// </summary>
+        [Description("机器人限位报警")]
+        机器人限位报警 = 1L << 9,
+
+        /// <summary>
+        ///  机器人充磁失败报警
+        /// </summary>
+        [Description("机器人充磁失败报警")]
+        机器人充磁失败报警 = 1L << 10,
+
+        /// <summary>
+        ///  安全门急停报警
+        /// </summary>
+        [Description("安全门急停报警")]
+        安全门急停报警 = 1L << 11,
+
+        /// <summary>
+        ///  光栅报警
+        /// </summary>
+        [Description("光栅报警")]
+        光栅报警 = 1L << 12,
+
+        /// <summary>
+        ///  光栅误触报警
+        /// </summary>
+        [Description("光栅误触报警")]
+        光栅误触报警 = 1L << 13,
+
+        /// <summary>
+        ///  托盘任务出错
+        /// </summary>
+        [Description("托盘任务出错")]
+        托盘任务出错 = 1L << 14,
+
+        /// <summary>
+        ///  抓深度2在深度1有货
+        /// </summary>
+        [Description("抓深度2在深度1有货")]
+        抓深度2在深度1有货 = 1L << 15,
+
+        /// <summary>
+        ///  抓深度3在深度1或者2有货
+        /// </summary>
+        [Description("抓深度3在深度1或者2有货")]
+        抓深度3在深度1或者2有货 = 1L << 16,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用1 = 1L << 17,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用2 = 1L << 18,
+
+        /// <summary>
+        ///  提升变频器报警
+        /// </summary>
+        [Description("提升变频器报警")]
+        备用3 = 1L << 19,
+
+        /// <summary>
+        ///  货叉变频器报警
+        /// </summary>
+        [Description("货叉变频器报警")]
+        备用4 = 1L << 20,
+
+        /// <summary>
+        ///  提升超速报警
+        /// </summary>
+        [Description("提升超速报警")]
+        备用5 = 1L << 21,
+
+        /// <summary>
+        ///  风扇灯插座空开
+        /// </summary>
+        [Description("风扇灯插座空开")]
+        备用6 = 1L << 22,
+
+        /// <summary>
+        ///  触摸屏光通讯激光测距空开
+        /// </summary>
+        [Description("触摸屏光通讯激光测距空开")]
+        备用7 = 1L << 23,
+
+        /// <summary>
+        ///  行走马达保护器
+        /// </summary>
+        [Description("行走马达保护器")]
+        备用8 = 1L << 24,
+
+        /// <summary>
+        ///  行走抱闸空开
+        /// </summary>
+        [Description("行走抱闸空开")]
+        备用9 = 1L << 25,
+
+        /// <summary>
+        ///  起升马达保护器
+        /// </summary>
+        [Description("起升马达保护器")]
+        备用10 = 1L << 26,
+
+        /// <summary>
+        ///  起升抱闸空开
+        /// </summary>
+        [Description("起升抱闸空开")]
+        备用11 = 1L << 27,
+
+        /// <summary>
+        ///  货叉马达保护器
+        /// </summary>
+        [Description("货叉马达保护器")]
+        备用12 = 1L << 28,
+
+        /// <summary>
+        ///  货叉抱闸空开
+        /// </summary>
+        [Description("货叉抱闸空开")]
+        备用13 = 1L << 29,
+
+        /// <summary>
+        ///  安全门打开
+        /// </summary>
+        [Description("安全门打开")]
+        备用14 = 1L << 30,
+
+        /// <summary>
+        ///  安全继电器报警
+        /// </summary>
+        [Description("安全继电器报警")]
+        备用15 = 1L << 31,
+
+        /// <summary>
+        ///  当前货位已禁用
+        /// </summary>
+        [Description("当前货位已禁用")]
+        备用16 = 1L << 32,
+
+        /// <summary>
+        ///  组态中断报警
+        /// </summary>
+        [Description("组态中断报警")]
+        备用17 = 1L << 33,
+
+        /// <summary>
+        ///  货物左前超出
+        /// </summary>
+        [Description("货物左前超出")]
+        备用18 = 1L << 34,
+
+        /// <summary>
+        ///  货物左后超出
+        /// </summary>
+        [Description("货物左后超出")]
+        备用19 = 1L << 35,
+
+        /// <summary>
+        ///  货物右前超出
+        /// </summary>
+        [Description("货物右前超出")]
+        备用20 = 1L << 36,
+
+        /// <summary>
+        ///  货物右后超出
+        /// </summary>
+        [Description("货物右后超出")]
+        备用21 = 1L << 37,
+
+        /// <summary>
+        ///  相序保护
+        /// </summary>
+        [Description("相序保护")]
+        备用22 = 1L << 38,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用23 = 1L << 39,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用24 = 1L << 40,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用25 = 1L << 41,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用26 = 1L << 42,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用27 = 1L << 43,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用28 = 1L << 44,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用29 = 1L << 45,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用30 = 1L << 46,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用31 = 1L << 47,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用32 = 1L << 48,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用33 = 1L << 49,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用34 = 1L << 50,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用35 = 1L << 51,
+
+        /// <summary>
+        ///  载货台电源空开
+        /// </summary>
+        [Description("备用")]
+        备用36 = 1L << 52,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用37 = 1L << 53,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用38 = 1L << 54,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用39 = 1L << 55,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用40 = 1L << 56,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用41 = 1L << 57,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用42 = 1L << 58,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用43 = 1L << 59,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用44 = 1L << 60,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用45 = 1L << 61,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用46 = 1L << 62,
+    }
+
+    /// <summary>
+    ///  机械臂指令
+    /// </summary>
+    [Flags]
+    public enum RobotCmdType : ushort
+    {
+        /// <summary>
+        /// 码垛结束
+        /// </summary>
+        [Description("码垛结束")]
+        End = 1 >> 0,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res7 = 1 >> 1,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res8 = 1 >> 2,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res9 = 1 >> 3,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res10 = 1 >> 4,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res11 = 1 >> 5,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res12 = 1 >> 6,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res13 = 1 >> 7,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res14 = 1 >> 8,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res = 1 >> 9,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res1 = 1 >> 10,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res2 = 1 >> 11,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res3 = 1 >> 12,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res4 = 1 >> 13,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res5 = 1 >> 14,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res6 = 1 >> 15,
+    }
+}

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

@@ -0,0 +1,110 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.Robot
+{
+    [DataContract]
+    public class WCS_Robot520 : IRobot520
+    {
+        [DataMember(Order = 0)]
+        public int TaskNumber1 { get; set; }
+
+        [DataMember(Order = 1)]
+        public short SLine1 { get; set; }
+
+        [DataMember(Order = 2)]
+        public short SCol1 { get; set; }
+
+        [DataMember(Order = 3)]
+        public short SLayer1 { get; set; }
+
+        [DataMember(Order = 4)]
+        public short SDepth1 { get; set; }
+
+        [DataMember(Order = 5)]
+        public short ELine1 { get; set; }
+
+        [DataMember(Order = 6)]
+        public short ECol1 { get; set; }
+
+        [DataMember(Order = 7)]
+        public short ELayer1 { get; set; }
+
+        [DataMember(Order = 8)]
+        public short EDepth1 { get; set; }
+
+        [DataMember(Order = 9)]
+        public short Res1 { get; set; }
+
+        [DataMember(Order = 10)]
+        public short Res2 { get; set; }
+
+        [DataMember(Order = 11)]
+        public short Res3 { get; set; }
+
+        [DataMember(Order = 12)]
+        public int Res4 { get; set; }
+
+        [DataMember(Order = 13)]
+        public short Res5 { get; set; }
+
+        [DataMember(Order = 14)]
+        public short Res6 { get; set; }
+
+        [DataMember(Order = 15)]
+        public short Res7 { get; set; }
+
+        [DataMember(Order = 16)]
+        public short Res8 { get; set; }
+
+        [DataMember(Order = 17)]
+        public int TaskNumber2 { get; set; }
+
+        [DataMember(Order = 18)]
+        public short SLine2 { get; set; }
+
+        [DataMember(Order = 19)]
+        public short SCol2 { get; set; }
+
+        [DataMember(Order = 20)]
+        public short SLayer2 { get; set; }
+
+        [DataMember(Order = 21)]
+        public short SDepth2 { get; set; }
+
+        [DataMember(Order = 22)]
+        public short ELine2 { get; set; }
+
+        [DataMember(Order = 23)]
+        public short ECol2 { get; set; }
+
+        [DataMember(Order = 24)]
+        public short ELayer2 { get; set; }
+
+        [DataMember(Order = 25)]
+        public short EDepth2 { get; set; }
+
+        [DataMember(Order = 26)]
+        public short GoodsType { get; set; }
+
+        [DataMember(Order = 27)]
+        public short TaskType { get; set; }
+
+        [DataMember(Order = 28)]
+        public short OkAck { get; set; }
+
+        [DataMember(Order = 29)]
+        public short TaskSum { get; set; }
+
+        [DataMember(Order = 30)]
+        public int VoucherNo { get; set; }
+
+        [DataMember(Order = 31)]
+        public short Res9 { get; set; }
+
+        [DataMember(Order = 32)]
+        public short Res10 { get; set; }
+
+        [DataMember(Order = 33)]
+        public short Res11 { get; set; }
+    }
+}

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

@@ -0,0 +1,204 @@
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.Protocol.Robot;
+
+namespace WCS.Entity.Protocol.Robot
+{
+    [DataContract]
+    public class WCS_Robot521 : IRobot521
+    {
+        [DataMember(Order = 0)]
+        public int TaskNumber1 { get; set; }
+
+        [DataMember(Order = 1)]
+        public short SLine1 { get; set; }
+
+        [DataMember(Order = 2)]
+        public short SCol1 { get; set; }
+
+        [DataMember(Order = 3)]
+        public short SLayer1 { get; set; }
+
+        [DataMember(Order = 4)]
+        public short SDepth1 { get; set; }
+
+        [DataMember(Order = 5)]
+        public short ELine1 { get; set; }
+
+        [DataMember(Order = 6)]
+        public short ECol1 { get; set; }
+
+        [DataMember(Order = 7)]
+        public short ELayer1 { get; set; }
+
+        [DataMember(Order = 8)]
+        public short EDepth1 { get; set; }
+
+        [DataMember(Order = 9)]
+        public int TaskFinishId1 { get; set; }
+
+        [DataMember(Order = 10)]
+        public short Res1 { get; set; }
+
+        [DataMember(Order = 11)]
+        public short Res2 { get; set; }
+
+        [DataMember(Order = 12)]
+        public short Res3 { get; set; }
+
+        [DataMember(Order = 13)]
+        public short Res4 { get; set; }
+
+        [DataMember(Order = 14)]
+        public short Res5 { get; set; }
+
+        [DataMember(Order = 15)]
+        public int Res6 { get; set; }
+
+        [DataMember(Order = 16)]
+        public int Res7 { get; set; }
+
+        [DataMember(Order = 17)]
+        public int Res8 { get; set; }
+
+        [DataMember(Order = 18)]
+        public int Res9 { get; set; }
+
+        [DataMember(Order = 19)]
+        public short Res10 { get; set; }
+
+        [DataMember(Order = 20)]
+        public int Res11 { get; set; }
+
+        [DataMember(Order = 21)]
+        public int Res12 { get; set; }
+
+        [DataMember(Order = 22)]
+        public short Res13 { get; set; }
+
+        [DataMember(Order = 23)]
+        public short Res14 { get; set; }
+
+        [DataMember(Order = 24)]
+        public short Res15 { get; set; }
+
+        [DataMember(Order = 25)]
+        public short Res16 { get; set; }
+
+        [DataMember(Order = 26)]
+        public short Res17 { get; set; }
+
+        [DataMember(Order = 27)]
+        public RobotState State1 { get; set; }
+
+        [DataMember(Order = 28)]
+        public int TaskNumber2 { get; set; }
+
+        [DataMember(Order = 29)]
+        public short SLine2 { get; set; }
+
+        [DataMember(Order = 30)]
+        public short SCol2 { get; set; }
+
+        [DataMember(Order = 31)]
+        public short SLayer2 { get; set; }
+
+        [DataMember(Order = 32)]
+        public short SDepth2 { get; set; }
+
+        [DataMember(Order = 33)]
+        public short ELine2 { get; set; }
+
+        [DataMember(Order = 34)]
+        public short ECol2 { get; set; }
+
+        [DataMember(Order = 35)]
+        public short ELayer2 { get; set; }
+
+        [DataMember(Order = 36)]
+        public short EDepth2 { get; set; }
+
+        [DataMember(Order = 37)]
+        public int TaskFinishId2 { get; set; }
+
+        [DataMember(Order = 38)]
+        public short Res18 { get; set; }
+
+        [DataMember(Order = 39)]
+        public short Res19 { get; set; }
+
+        [DataMember(Order = 40)]
+        public short Res20 { get; set; }
+
+        [DataMember(Order = 41)]
+        public short Res21 { get; set; }
+
+        [DataMember(Order = 42)]
+        public short Res22 { get; set; }
+
+        [DataMember(Order = 43)]
+        public int Res23 { get; set; }
+
+        [DataMember(Order = 44)]
+        public int Res24 { get; set; }
+
+        [DataMember(Order = 45)]
+        public int Res25 { get; set; }
+
+        [DataMember(Order = 46)]
+        public int Res26 { get; set; }
+
+        [DataMember(Order = 47)]
+        public short Res27 { get; set; }
+
+        [DataMember(Order = 48)]
+        public int Res28 { get; set; }
+
+        [DataMember(Order = 49)]
+        public int Res29 { get; set; }
+
+        [DataMember(Order = 50)]
+        public int Res30 { get; set; }
+
+        [DataMember(Order = 51)]
+        public short Res31 { get; set; }
+
+        [DataMember(Order = 52)]
+        public short Res32 { get; set; }
+
+        [DataMember(Order = 53)]
+        public short Res33 { get; set; }
+
+        [DataMember(Order = 54)]
+        public RobotState State2 { get; set; }
+
+        [DataMember(Order = 55)]
+        public RobotMode RobotMode { get; set; }
+
+        [DataMember(Order = 56)]
+        public RobotRunStatus RunStatus { get; set; }
+
+        [DataMember(Order = 57)]
+        public float TotalKm { get; set; }
+
+        [DataMember(Order = 58)]
+        public float Runtime { get; set; }
+
+        [DataMember(Order = 59)]
+        public short Alarm { get; set; }
+
+        [DataMember(Order = 60)]
+        public int VoucherNo { get; set; }
+
+        [DataMember(Order = 61)]
+        public short GoodsType { get; set; }
+
+        [DataMember(Order = 62)]
+        public short Res34 { get; set; }
+
+        [DataMember(Order = 63)]
+        public short Res35 { get; set; }
+
+        [DataMember(Order = 64)]
+        public short Res36 { get; set; }
+    }
+}

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

@@ -0,0 +1,12 @@
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.Protocol.Robot;
+
+namespace WCS.Entity.Protocol.Robot
+{
+    [DataContract]
+    public class WCS_Robot522 : IRobot522
+    {
+        [DataMember(Order = 0)]
+        public RobotAlarm Alarm { get; set; }
+    }
+}

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

@@ -0,0 +1,21 @@
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.Protocol.Robot;
+
+namespace WCS.Entity.Protocol.Robot
+{
+    [DataContract]
+    public class WCS_Robot530 : IRobot530
+    {
+        [DataMember(Order = 0)]
+        public short Type { get; set; }
+
+        [DataMember(Order = 1)]
+        public short MaxQuantity { get; set; }
+
+        [DataMember(Order = 2)]
+        public RobotCmdType CmdType { get; set; }
+
+        [DataMember(Order = 3)]
+        public short VoucherNo { get; set; }
+    }
+}

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

@@ -0,0 +1,114 @@
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.Protocol.Robot;
+
+namespace WCS.Entity.Protocol.Robot
+{
+    [DataContract]
+    public class WCS_Robot531 : IRobot531
+    {
+        [DataMember(Order = 0)]
+        public int TaskNo1 { get; set; }
+
+        [DataMember(Order = 1)]
+        public int TaskNo2 { get; set; }
+
+        [DataMember(Order = 2)]
+        public int TaskNo3 { get; set; }
+
+        [DataMember(Order = 3)]
+        public int TaskNo4 { get; set; }
+
+        [DataMember(Order = 4)]
+        public int TaskNo5 { get; set; }
+
+        [DataMember(Order = 5)]
+        public int TaskNo6 { get; set; }
+
+        [DataMember(Order = 6)]
+        public int TaskNo7 { get; set; }
+
+        [DataMember(Order = 7)]
+        public int TaskNo8 { get; set; }
+
+        [DataMember(Order = 8)]
+        public int TaskNo9 { get; set; }
+
+        [DataMember(Order = 9)]
+        public int TaskNo10 { get; set; }
+
+        [DataMember(Order = 10)]
+        public int TaskNo11 { get; set; }
+
+        [DataMember(Order = 11)]
+        public int TaskNo12 { get; set; }
+
+        [DataMember(Order = 12)]
+        public int TaskNo13 { get; set; }
+
+        [DataMember(Order = 13)]
+        public int TaskNo14 { get; set; }
+
+        [DataMember(Order = 14)]
+        public int TaskNo15 { get; set; }
+
+        [DataMember(Order = 15)]
+        public int TaskNo16 { get; set; }
+
+        [DataMember(Order = 16)]
+        public int TaskNo17 { get; set; }
+
+        [DataMember(Order = 17)]
+        public int TaskNo18 { get; set; }
+
+        [DataMember(Order = 18)]
+        public int TaskNo19 { get; set; }
+
+        [DataMember(Order = 19)]
+        public int TaskNo20 { get; set; }
+
+        [DataMember(Order = 20)]
+        public int TaskNo21 { get; set; }
+
+        [DataMember(Order = 21)]
+        public int TaskNo22 { get; set; }
+
+        [DataMember(Order = 22)]
+        public int TaskNo23 { get; set; }
+
+        [DataMember(Order = 23)]
+        public int TaskNo24 { get; set; }
+
+        [DataMember(Order = 24)]
+        public int TaskNo25 { get; set; }
+
+        [DataMember(Order = 25)]
+        public int TaskNo26 { get; set; }
+
+        [DataMember(Order = 26)]
+        public int TaskNo27 { get; set; }
+
+        [DataMember(Order = 27)]
+        public int TaskNo28 { get; set; }
+
+        [DataMember(Order = 28)]
+        public int TaskNo29 { get; set; }
+
+        [DataMember(Order = 29)]
+        public int TaskNo30 { get; set; }
+
+        [DataMember(Order = 30)]
+        public short Type { get; set; }
+
+        [DataMember(Order = 31)]
+        public short MaxQuantity { get; set; }
+
+        [DataMember(Order = 32)]
+        public short Quantity { get; set; }
+
+        [DataMember(Order = 33)]
+        public RobotCmdType CmdType { get; set; }
+
+        [DataMember(Order = 34)]
+        public short VoucherNo { get; set; }
+    }
+}

+ 118 - 0
业务工程/分拣库/WCS.Entity.Protocol/SRM/ISRM520.cs

@@ -0,0 +1,118 @@
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.SRM
+{
+    /// <summary>
+    /// 堆垛机DB520
+    /// </summary>
+    public interface ISRM520 : IProtocol
+    {
+        /// <summary>
+        ///  单堆垛机是否可以跑全程 ,0正常 1单机全程
+        /// </summary>
+        [Description("单堆垛机是否可以跑全程")]
+        short Res1 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        short Res2 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        short Res3 { get; set; }
+
+        /// <summary>
+        ///  货物类型
+        /// </summary>
+        [Description("货物类型")]
+        short GoodsType { get; set; }
+
+        /// <summary>
+        ///  运行速度
+        /// </summary>
+        [Description("运行速度")]
+        SrmRunSpeed RunSpeed { get; set; }
+
+        /// <summary>
+        ///  任务起始行
+        /// </summary>
+        [Description("任务起始行")]
+        short SLine { get; set; }
+
+        /// <summary>
+        ///  任务起始列
+        /// </summary>
+        [Description("任务起始列")]
+        short SCol { get; set; }
+
+        /// <summary>
+        ///  任务起始层
+        /// </summary>
+        [Description("任务起始层")]
+        short SLayer { get; set; }
+
+        /// <summary>
+        ///  任务起始深度
+        /// </summary>
+        [Description("任务起始深度")]
+        SrmForkPosition SDepth { get; set; }
+
+        /// <summary>
+        ///  任务目标行
+        /// </summary>
+        [Description("任务目标行")]
+        short ELine { get; set; }
+
+        /// <summary>
+        ///  任务目标列
+        /// </summary>
+        [Description("任务目标列")]
+        short ECol { get; set; }
+
+        /// <summary>
+        ///  任务目标层
+        /// </summary>
+        [Description("任务目标层")]
+        short ELayer { get; set; }
+
+        /// <summary>
+        ///  任务目标深度
+        /// </summary>
+        [Description("任务目标深度")]
+        SrmForkPosition EDepth { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber { get; set; }
+
+        /// <summary>
+        ///  凭证号
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo { get; set; }
+
+        /// <summary>
+        ///  完成任务确认清除信号
+        /// </summary>
+        [Description("完成任务确认清除信号")]
+        short OkAck { get; set; }
+
+        /// <summary>
+        ///  任务类型
+        /// </summary>
+        [Description("任务类型")]
+        SrmTaskType TaskType { get; set; }
+
+        /// <summary>
+        ///  指令类型
+        /// </summary>
+        [Description("指令类型")]
+        short Cmd { get; set; }
+    }
+}

+ 184 - 0
业务工程/分拣库/WCS.Entity.Protocol/SRM/ISRM521.cs

@@ -0,0 +1,184 @@
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.SRM
+{
+    /// <summary>
+    /// 堆垛机DB521
+    /// </summary>
+    public interface ISRM521 : IProtocol
+    {
+        /// <summary>
+        ///  状态
+        /// </summary>
+        [Description("状态")]
+        SrmStatus Status { get; set; }
+
+        /// <summary>
+        ///  自动状态
+        /// </summary>
+        [Description("自动状态")]
+        SrmAutoStatus AutoStatus { get; set; }
+
+        /// <summary>
+        ///  运行状态
+        /// </summary>
+        [Description("运行状态")]
+        SrmRunStatus RunStatus { get; set; }
+
+        /// <summary>
+        ///  任务起始行
+        /// </summary>
+        [Description("任务起始行")]
+        short SLine { get; set; }
+
+        /// <summary>
+        ///  任务起始列
+        /// </summary>
+        [Description("任务起始列")]
+        short SCol { get; set; }
+
+        /// <summary>
+        ///  任务起始层
+        /// </summary>
+        [Description("任务起始层")]
+        short SLayer { get; set; }
+
+        /// <summary>
+        ///  任务起始深度
+        /// </summary>
+        [Description("任务起始深度")]
+        SrmForkPosition SDepth { get; set; }
+
+        /// <summary>
+        ///  任务目标行
+        /// </summary>
+        [Description("任务目标行")]
+        short ELine { get; set; }
+
+        /// <summary>
+        ///  任务目标列
+        /// </summary>
+        [Description("任务目标列")]
+        short ECol { get; set; }
+
+        /// <summary>
+        ///  任务目标层
+        /// </summary>
+        [Description("任务目标层")]
+        short ELayer { get; set; }
+
+        /// <summary>
+        ///  任务目标深度
+        /// </summary>
+        [Description("任务目标深度")]
+        SrmForkPosition EDepth { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber { get; set; }
+
+        /// <summary>
+        ///  凭证号
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo { get; set; }
+
+        /// <summary>
+        ///  当前行
+        /// </summary>
+        [Description("当前行")]
+        short Line { get; set; }
+
+        /// <summary>
+        ///  当前列
+        /// </summary>
+        [Description("当前列")]
+        short Col { get; set; }
+
+        /// <summary>
+        ///  当前层
+        /// </summary>
+        [Description("当前层")]
+        short Layer { get; set; }
+
+        /// <summary>
+        ///  完成任务号
+        /// </summary>
+        [Description("完成任务号")]
+        int TaskFinishiId { get; set; }
+
+        /// <summary>
+        ///  行走当前位置 MM
+        /// </summary>
+        [Description("行走当前位置 MM")]
+        int TravelPos { get; set; }
+
+        /// <summary>
+        ///  提升当前位置 MM
+        /// </summary>
+        [Description("提升当前位置 MM")]
+        int LiftPos { get; set; }
+
+        /// <summary>
+        ///  货叉当前位置 MM
+        /// </summary>
+        [Description("货叉当前位置 MM")]
+        int ForkPos { get; set; }
+
+        /// <summary>
+        ///  运行速度
+        /// </summary>
+        [Description("运行速度")]
+        SrmRunSpeed RunSpeed { get; set; }
+
+        /// <summary>
+        ///  任务类型
+        /// </summary>
+        [Description("任务类型")]
+        SrmTaskType TaskType { get; set; }
+
+        /// <summary>
+        ///  运行总里程
+        /// </summary>
+        [Description("运行总里程")]
+        float TotalKm { get; set; }
+
+        /// <summary>
+        ///  货物类型
+        /// </summary>
+        [Description("货物类型")]
+        short GoodsType { get; set; }
+
+        /// <summary>
+        ///  运行总时长
+        /// </summary>
+        [Description("运行总时长")]
+        float RunTime { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        int Res3 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        int Res4 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        int Res5 { get; set; }
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        int Res6 { get; set; }
+    }
+}

+ 17 - 0
业务工程/分拣库/WCS.Entity.Protocol/SRM/ISRM537.cs

@@ -0,0 +1,17 @@
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.SRM
+{
+    /// <summary>
+    /// 堆垛机DB523
+    /// </summary>
+    /// <typeparam name="alarm">报警</typeparam>
+    public interface ISRM537 : IProtocol
+    {
+        /// <summary>
+        ///  报警内容
+        /// </summary>
+        [Description("报警内容")]
+        SrmAlarm Alarm { get; set; }
+    }
+}

+ 675 - 0
业务工程/分拣库/WCS.Entity.Protocol/SRM/SrmEnum.cs

@@ -0,0 +1,675 @@
+using System;
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.SRM
+{
+    /// <summary>
+    /// 运行模式
+    /// </summary>
+    [Description("运行模式")]
+    public enum SrmRunSpeed : short
+    {
+        /// <summary>
+        ///  默认
+        /// </summary>
+        [Description("默认")]
+        Default = 0,
+
+        /// <summary>
+        ///  低速
+        /// </summary>
+        [Description("低速")]
+        LowSpeed = 1,
+    }
+
+    /// <summary>
+    /// 任务类型
+    /// </summary>
+    [Description("任务类型")]
+    public enum SrmTaskType : short
+    {
+        /// <summary>
+        ///  默认 出入库使用该任务类型
+        /// </summary>
+        [Description("默认,出入库使用该任务类型")]
+        Default = 0,
+
+        /// <summary>
+        ///  完成任务
+        /// </summary>
+        [Description("完成任务")]
+        FinishTask = 1,
+
+        /// <summary>
+        ///  删除任务
+        /// </summary>
+        [Description("删除任务")]
+        DeleteTask = 2,
+
+        /// <summary>
+        ///  移动任务
+        /// </summary>
+        [Description("移动任务")]
+        MoveTask = 3,
+
+        /// <summary>
+        ///  移库任务
+        /// </summary>
+        [Description("移库任务")]
+        MoveGoods = 4
+    }
+
+    /// <summary>
+    ///  货叉位置
+    /// </summary>
+    [Description("货叉位置")]
+    public enum SrmForkPosition : short
+    {
+        /// <summary>
+        ///  中位
+        /// </summary>
+        [Description("中位")]
+        Centr = 0,
+
+        /// <summary>
+        ///  一深度
+        /// </summary>
+        [Description("一深度")]
+        OneDepth = 1,
+
+        /// <summary>
+        /// 二深度
+        /// </summary>
+        [Description("二深度")]
+        TwoDepth = 2
+    }
+
+    /// <summary>
+    ///  运行模式
+    /// </summary>
+    [Description("运行模式")]
+    public enum SrmAutoStatus : short
+    {
+        /// <summary>
+        ///  自动
+        /// </summary>
+        [Description("自动")]
+        Automatic = 1,
+
+        /// <summary>
+        ///  半自动
+        /// </summary>
+        [Description("半自动")]
+        SemiAutomatic = 2,
+
+        /// <summary>
+        ///  手动
+        /// </summary>
+        [Description("手动")]
+        Manual = 3,
+
+        /// <summary>
+        ///  保持维修
+        /// </summary>
+        [Description("保持维修")]
+        KeepInRepair = 4
+    }
+
+    /// <summary>
+    ///  运行状态
+    /// </summary>
+    [Description("运行状态")]
+    public enum SrmRunStatus : short
+    {
+        /// <summary>
+        ///  空闲
+        /// </summary>
+        [Description("空闲")]
+        Idle = 1,
+
+        /// <summary>
+        ///  取货行走
+        /// </summary>
+        [Description("取货行走")]
+        GetGoodsWalk = 2,
+
+        /// <summary>
+        ///  取货伸叉
+        /// </summary>
+        [Description("取货伸叉")]
+        GetGoodsOutstretchFork = 3,
+
+        /// <summary>
+        ///  取货抬叉
+        /// </summary>
+        [Description("取货抬叉")]
+        GetGoodsLiftFork = 4,
+
+        /// <summary>
+        ///  取货收叉
+        /// </summary>
+        [Description("取货收叉")]
+        GetGoodsRetractFork = 5,
+
+        /// <summary>
+        ///  放货行走
+        /// </summary>
+        [Description("放货行走")]
+        PutGoodsWalk = 6,
+
+        /// <summary>
+        ///  放货伸叉
+        /// </summary>
+        [Description("放货伸叉")]
+        PutGoodsOutstretchFork = 7,
+
+        /// <summary>
+        ///  放货降叉
+        /// </summary>
+        [Description("放货降叉")]
+        PutGoodsDropFork = 8,
+
+        /// <summary>
+        ///  放货收叉
+        /// </summary>
+        [Description("放货收叉")]
+        PutGoodsRetractFork = 9,
+    }
+
+    /// <summary>
+    ///  堆垛机状态
+    /// </summary>
+    [Description("堆垛机状态")]
+    [Flags]
+    public enum SrmStatus : ushort
+    {
+        /// <summary>
+        ///  PLC的握手信号
+        /// </summary>
+        [Description("PLC的握手信号")]
+        HandshakeTowcs = 1 << 0,
+
+        /// <summary>
+        ///  完成取货信号
+        /// </summary>
+        [Description("完成取货信号")]
+        GetFinishi = 1 << 1,
+
+        /// <summary>
+        ///  完成放货信号
+        /// </summary>
+        [Description("完成放货信号")]
+        PutFinishi = 1 << 2,
+
+        /// <summary>
+        ///  报警信号
+        /// </summary>
+        [Description("报警信号")]
+        Alarm = 1 << 3,
+
+        /// <summary>
+        ///  任务完成信号
+        /// </summary>
+        [Description("任务完成信号")]
+        TaskFinish = 1 << 4,
+
+        /// <summary>
+        ///  设备有货
+        /// </summary>
+        [Description("设备有货")]
+        Loaded = 1 << 5,
+
+        /// <summary>
+        ///  货叉在原位
+        /// </summary>
+        [Description("货叉在原位")]
+        ForkCenter = 1 << 6,
+
+        /// <summary>
+        ///  可以下发任务
+        /// </summary>
+        [Description("可以下发任务")]
+        CanTaskIssued = 1 << 7,
+
+        /// <summary>
+        ///  单堆垛机是否可以跑全程
+        /// </summary>
+        [Description("单堆垛机是否可以跑全程")]
+        Stopper_Mark = 1 << 8,
+
+        /// <summary>
+        ///  保留
+        /// </summary>
+        [Description("保留")]
+        RES2 = 1 << 9,
+
+        /// <summary>
+        ///  保留
+        /// </summary>
+        [Description("保留")]
+        RES3 = 1 << 10,
+
+        /// <summary>
+        ///  保留
+        /// </summary>
+        [Description("保留")]
+        RES4 = 1 << 11,
+
+        /// <summary>
+        ///  保留
+        /// </summary>
+        [Description("保留")]
+        RES5 = 1 << 12,
+
+        /// <summary>
+        ///  保留
+        /// </summary>
+        [Description("保留")]
+        RES6 = 1 << 13,
+
+        /// <summary>
+        ///  保留
+        /// </summary>
+
+        [Description("保留")]
+        RES7 = 1 << 14,
+
+        /// <summary>
+        ///  保留
+        /// </summary>
+        [Description("保留")]
+        RES8 = 1 << 15,
+    }
+
+    /// <summary>
+    /// 堆垛机报警项
+    /// </summary>
+    [Description("堆垛机报警项")]
+    [Flags]
+    public enum SrmAlarm : ulong
+    {
+        /// <summary>
+        ///  无
+        /// </summary>
+        [Description("无")]
+        无 = 0,
+
+        /// <summary>
+        ///  主柜急停
+        /// </summary>
+        [Description("主柜急停")]
+        主柜急停 = 1L << 0,
+
+        /// <summary>
+        ///  分柜急停
+        /// </summary>
+        [Description("分柜急停")]
+        分柜急停 = 1L << 1,
+
+        /// <summary>
+        ///  取货点异常双深位
+        /// </summary>
+        [Description("取货点异常双深位")]
+        取货点异常双深位 = 1L << 2,
+
+        /// <summary>
+        ///  放货点有货
+        /// </summary>
+        [Description("放货点有货")]
+        放货点有货 = 1L << 3,
+
+        /// <summary>
+        ///  货叉取货完成后无货
+        /// </summary>
+        [Description("货叉取货完成后无货")]
+        货叉取货完成后无货 = 1L << 4,
+
+        /// <summary>
+        ///  货叉无任务有货异常
+        /// </summary>
+        [Description("货叉无任务有货异常")]
+        货叉无任务有货异常 = 1L << 5,
+
+        /// <summary>
+        /// 货叉运行超时
+        /// </summary>
+        [Description("货叉运行超时")]
+        货叉运行超时 = 1L << 6,
+
+        /// <summary>
+        ///  货叉左侧超行程
+        /// </summary>
+        [Description("货叉左侧超行程")]
+        货叉左侧超行程 = 1L << 7,
+
+        /// <summary>
+        ///  货物左前坍塌
+        /// </summary>
+        [Description("货物左前坍塌")]
+        货物左前坍塌 = 1L << 8,
+
+        /// <summary>
+        ///  货物右前坍塌
+        /// </summary>
+        [Description("货物右前坍塌")]
+        货物右前坍塌 = 1L << 9,
+
+        /// <summary>
+        ///  前限位触发
+        /// </summary>
+        [Description("前限位触发")]
+        前限位触发 = 1L << 10,
+
+        /// <summary>
+        ///  后限位触发
+        /// </summary>
+        [Description("后限位触发")]
+        后限位触发 = 1L << 11,
+
+        /// <summary>
+        ///  上限位触发
+        /// </summary>
+        [Description("上限位触发")]
+        上限位触发 = 1L << 12,
+
+        /// <summary>
+        ///  下限位触发
+        /// </summary>
+        [Description("下限位触发")]
+        下限位触发 = 1L << 13,
+
+        /// <summary>
+        ///  超载限位触发
+        /// </summary>
+        [Description("超载限位触发")]
+        超载限位触发 = 1L << 14,
+
+        /// <summary>
+        ///  松绳限位触发1
+        /// </summary>
+        [Description("松绳限位触发1")]
+        松绳限位触发1 = 1L << 15,
+
+        /// <summary>
+        ///  行走运动超行程
+        /// </summary>
+        [Description("行走运动超行程")]
+        行走运动超行程 = 1L << 16,
+
+        /// <summary>
+        ///  起升运动超行程
+        /// </summary>
+        [Description("起升运动超行程")]
+        起升运动超行程 = 1L << 17,
+
+        /// <summary>
+        ///  行走变频器报警
+        /// </summary>
+        [Description("行走变频器报警")]
+        行走变频器报警 = 1L << 18,
+
+        /// <summary>
+        ///  提升变频器报警
+        /// </summary>
+        [Description("提升变频器报警")]
+        提升变频器报警 = 1L << 19,
+
+        /// <summary>
+        ///  货叉变频器报警
+        /// </summary>
+        [Description("货叉变频器报警")]
+        货叉变频器报警 = 1L << 20,
+
+        /// <summary>
+        ///  提升超速报警
+        /// </summary>
+        [Description("提升超速报警")]
+        提升超速报警 = 1L << 21,
+
+        /// <summary>
+        ///  风扇灯插座空开
+        /// </summary>
+        [Description("风扇灯插座空开")]
+        风扇灯插座空开 = 1L << 22,
+
+        /// <summary>
+        ///  触摸屏光通讯激光测距空开
+        /// </summary>
+        [Description("触摸屏光通讯激光测距空开")]
+        触摸屏光通讯激光测距空开 = 1L << 23,
+
+        /// <summary>
+        ///  行走马达保护器
+        /// </summary>
+        [Description("行走马达保护器")]
+        行走马达保护器 = 1L << 24,
+
+        /// <summary>
+        ///  行走抱闸空开
+        /// </summary>
+        [Description("行走抱闸空开")]
+        行走抱闸空开 = 1L << 25,
+
+        /// <summary>
+        ///  起升马达保护器
+        /// </summary>
+        [Description("起升马达保护器")]
+        起升马达保护器 = 1L << 26,
+
+        /// <summary>
+        ///  起升抱闸空开
+        /// </summary>
+        [Description("起升抱闸空开")]
+        起升抱闸空开 = 1L << 27,
+
+        /// <summary>
+        ///  货叉马达保护器
+        /// </summary>
+        [Description("货叉马达保护器")]
+        货叉马达保护器 = 1L << 28,
+
+        /// <summary>
+        ///  货叉抱闸空开
+        /// </summary>
+        [Description("货叉抱闸空开")]
+        货叉抱闸空开 = 1L << 29,
+
+        /// <summary>
+        ///  安全门打开
+        /// </summary>
+        [Description("安全门打开")]
+        安全门打开 = 1L << 30,
+
+        /// <summary>
+        ///  安全继电器报警
+        /// </summary>
+        [Description("安全继电器报警")]
+        安全继电器报警 = 1L << 31,
+
+        /// <summary>
+        ///  当前货位已禁用
+        /// </summary>
+        [Description("当前货位已禁用")]
+        当前货位已禁用 = 1L << 32,
+
+        /// <summary>
+        ///  组态中断报警
+        /// </summary>
+        [Description("组态中断报警")]
+        组态中断报警 = 1L << 33,
+
+        /// <summary>
+        ///  货物左前超出
+        /// </summary>
+        [Description("货物左前超出")]
+        货物左前超出 = 1L << 34,
+
+        /// <summary>
+        ///  货物左后超出
+        /// </summary>
+        [Description("货物左后超出")]
+        货物左后超出 = 1L << 35,
+
+        /// <summary>
+        ///  货物右前超出
+        /// </summary>
+        [Description("货物右前超出")]
+        货物右前超出 = 1L << 36,
+
+        /// <summary>
+        ///  货物右后超出
+        /// </summary>
+        [Description("货物右后超出")]
+        货物右后超出 = 1L << 37,
+
+        /// <summary>
+        ///  相序保护
+        /// </summary>
+        [Description("相序保护")]
+        相序保护 = 1L << 38,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        备用 = 1L << 39,
+
+        /// <summary>
+        ///  安全门1报警
+        /// </summary>
+        [Description("安全门1报警")]
+        安全门1报警 = 1L << 40,
+
+        /// <summary>
+        ///  安全门2报警
+        /// </summary>
+        [Description("安全门2报警")]
+        安全门2报警 = 1L << 41,
+
+        /// <summary>
+        ///  行走测距信号丢失报警
+        /// </summary>
+        [Description("行走测距信号丢失报警")]
+        行走测距信号丢失报警 = 1L << 42,
+
+        /// <summary>
+        ///  提升测距信号丢失报警
+        /// </summary>
+        [Description("提升测距信号丢失报警")]
+        提升测距信号丢失报警 = 1L << 43,
+
+        /// <summary>
+        ///  行走定位失败
+        /// </summary>
+        [Description("行走定位失败")]
+        行走定位失败 = 1L << 44,
+
+        /// <summary>
+        ///  提升定位失败
+        /// </summary>
+        [Description("提升定位失败")]
+        提升定位失败 = 1L << 45,
+
+        /// <summary>
+        ///  回中定位失败
+        /// </summary>
+        [Description("回中定位失败")]
+        回中定位失败 = 1L << 46,
+
+        /// <summary>
+        ///  堆垛机巷道有人进入光通讯中断
+        /// </summary>
+        [Description("堆垛机巷道有人进入光通讯中断")]
+        堆垛机巷道有人进入光通讯中断 = 1L << 47,
+
+        /// <summary>
+        ///  货叉位置错误
+        /// </summary>
+        [Description("货叉位置错误")]
+        货叉位置错误 = 1L << 48,
+
+        /// <summary>
+        ///  货叉编码器报警
+        /// </summary>
+        [Description("货叉编码器报警")]
+        货叉编码器报警 = 1L << 49,
+
+        /// <summary>
+        ///  货叉编码器报警中间位
+        /// </summary>
+        [Description("货叉编码器报警中间位")]
+        货叉编码器报警中间位 = 1L << 50,
+
+        /// <summary>
+        ///  货叉中位光电异常
+        /// </summary>
+        [Description("货叉中位光电异常")]
+        货叉中位光电异常 = 1L << 51,
+
+        /// <summary>
+        ///  载货台电源空开
+        /// </summary>
+        [Description("载货台电源空开")]
+        载货台电源空开 = 1L << 52,
+
+        /// <summary>
+        ///  按钮, 安全回路空开
+        /// </summary>
+        [Description("按钮安全回路空开")]
+        按钮安全回路空开 = 1L << 53,
+
+        /// <summary>
+        ///  货物左前坍塌
+        /// </summary>
+        [Description("货物左后坍塌")]
+        货物左后坍塌 = 1L << 54,
+
+        /// <summary>
+        ///  货物右前坍塌
+        /// </summary>
+        [Description("货物右后坍塌")]
+        货物右后坍塌 = 1L << 55,
+
+        /// <summary>
+        ///  登梯口急停
+        /// </summary>
+        [Description("登梯口急停")]
+        登梯口急停 = 1L << 56,
+
+        /// <summary>
+        ///  货物左超高19M
+        /// </summary>
+        [Description("货物左超高19M")]
+        货物左超高19M = 1L << 57,
+
+        /// <summary>
+        ///  货物右超高19M
+        /// </summary>
+        [Description("货物右超高19M")]
+        货物右超高19M = 1L << 58,
+
+        /// <summary>
+        ///  松绳限位触发2
+        /// </summary>
+        [Description("松绳限位触发2")]
+        松绳限位触发2 = 1L << 59,
+
+        /// <summary>
+        ///  货叉右侧超行程
+        /// </summary>
+        [Description("货叉右侧超行程")]
+        货叉右侧超行程 = 1L << 60,
+
+        /// <summary>
+        ///  取放货托盘总数超出限制
+        /// </summary>
+        [Description("取放货托盘总数超出限制")]
+        取放货托盘总数超出限制 = 1L << 61,
+
+        /// <summary>
+        ///  安全门急停
+        /// </summary>
+        [Description("安全门急停")]
+        安全门急停 = 1L << 62,
+    }
+}

+ 83 - 0
业务工程/分拣库/WCS.Entity.Protocol/SRM/WCS_SRM520.cs

@@ -0,0 +1,83 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.SRM
+{
+    /// <summary>
+    ///  SRM520
+    /// </summary>
+    [DataContract]
+    public class WCS_SRM520 : ISRM520
+    {
+        /// <inheritdoc/>
+        [DataMember(Order = 0)]
+        public short Res1 { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 1)]
+        public short Res2 { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 2)]
+        public short Res3 { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 3)]
+        public short GoodsType { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 4)]
+        public SrmRunSpeed RunSpeed { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 5)]
+        public short SLine { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 6)]
+        public short SCol { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 7)]
+        public short SLayer { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 8)]
+        public SrmForkPosition SDepth { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 9)]
+        public short ELine { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 10)]
+        public short ECol { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 11)]
+        public short ELayer { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 12)]
+        public SrmForkPosition EDepth { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 13)]
+        public int TaskNumber { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 14)]
+        public short VoucherNo { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 15)]
+        public short OkAck { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 16)]
+        public SrmTaskType TaskType { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 17)]
+        public short Cmd { get; set; }
+    }
+}

+ 127 - 0
业务工程/分拣库/WCS.Entity.Protocol/SRM/WCS_SRM521.cs

@@ -0,0 +1,127 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.SRM
+{
+    /// <summary>
+    ///  SRM521
+    /// </summary>
+    [DataContract]
+    public class WCS_SRM521 : ISRM521
+    {
+        /// <inheritdoc/>
+        [DataMember(Order = 0)]
+        public SrmStatus Status { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 1)]
+        public SrmAutoStatus AutoStatus { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 2)]
+        public SrmRunStatus RunStatus { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 3)]
+        public short SLine { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 4)]
+        public short SCol { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 5)]
+        public short SLayer { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 6)]
+        public SrmForkPosition SDepth { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 7)]
+        public short ELine { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 8)]
+        public short ECol { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 9)]
+        public short ELayer { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 10)]
+        public SrmForkPosition EDepth { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 11)]
+        public int TaskNumber { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 12)]
+        public short VoucherNo { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 13)]
+        public short Line { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 14)]
+        public short Col { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 15)]
+        public short Layer { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 16)]
+        public int TaskFinishiId { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 17)]
+        public int TravelPos { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 18)]
+        public int LiftPos { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 19)]
+        public int ForkPos { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 20)]
+        public SrmRunSpeed RunSpeed { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 21)]
+        public SrmTaskType TaskType { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 22)]
+        public float TotalKm { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 23)]
+        public short GoodsType { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 24)]
+        public float RunTime { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 25)]
+        public int Res3 { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 26)]
+        public int Res4 { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 27)]
+        public int Res5 { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 28)]
+        public int Res6 { get; set; }
+    }
+}

+ 15 - 0
业务工程/分拣库/WCS.Entity.Protocol/SRM/WCS_SRM537.cs

@@ -0,0 +1,15 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.SRM
+{
+    /// <summary>
+    ///  SRM537
+    /// </summary>
+    [DataContract]
+    public class WCS_SRM537 : ISRM537
+    {
+        /// <inheritdoc/>
+        [DataMember(Order = 0)]
+        public SrmAlarm Alarm { get; set; }
+    }
+}

+ 46 - 0
业务工程/分拣库/WCS.Entity.Protocol/Station/IStation520.cs

@@ -0,0 +1,46 @@
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.Station
+{
+    /// <summary>
+    /// DB520
+    /// </summary>
+    public interface IStation520 : IProtocol
+    {
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        StationMode Mode { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        StationCmd CmdType { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo { get; set; }
+    }
+}

+ 52 - 0
业务工程/分拣库/WCS.Entity.Protocol/Station/IStation521.cs

@@ -0,0 +1,52 @@
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.Station
+{
+    /// <summary>
+    /// 输送机交互信号 读
+    /// </summary>
+    public interface IStation521 : IProtocol
+    {
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("运行模式")]
+        StationMode Mode { get; set; }
+
+        /// <summary>
+        /// 指令回复
+        /// </summary>
+        [Description("指令回复")]
+        short CmdType { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo { get; set; }
+
+        /// <summary>
+        /// 请求
+        /// </summary>
+        [Description("请求")]
+        short Request { get; set; }
+    }
+}

+ 41 - 0
业务工程/分拣库/WCS.Entity.Protocol/Station/IStation523.cs

@@ -0,0 +1,41 @@
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.Station
+{
+    /// <summary>
+    /// 输送机状态读取协议
+    /// </summary>
+    public interface IStation523 : IProtocol
+    {
+        /// <summary>
+        /// 警报
+        /// </summary>
+        [Description("警报")]
+        StationAlarm Alarm { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        short RES { get; set; }
+
+        /// <summary>
+        /// 状态
+        /// </summary>
+        [Description("状态")]
+        StationStatus Status { get; set; }
+
+        /// <summary>
+        /// 运行时间
+        /// </summary>
+        [Description("运行时间")]
+        [IgnoreChanging]
+        float RunTime { get; set; }
+
+        /// <summary>
+        ///  运行状态位
+        /// </summary>
+        [Description("运行状态位")]
+        StationStatus1 Status1 { get; set; }
+    }
+}

+ 52 - 0
业务工程/分拣库/WCS.Entity.Protocol/Station/IStation524.cs

@@ -0,0 +1,52 @@
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.Station
+{
+    /// <summary>
+    /// 输送机状态读取协议
+    /// </summary>
+    public interface IStation524 : IProtocol
+    {
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("运行模式")]
+        StationMode Mode { get; set; }
+
+        /// <summary>
+        /// 指令回复
+        /// </summary>
+        [Description("指令回复")]
+        short CmdType { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo { get; set; }
+
+        /// <summary>
+        /// 请求
+        /// </summary>
+        [Description("请求")]
+        short Request { get; set; }
+    }
+}

+ 2116 - 0
业务工程/分拣库/WCS.Entity.Protocol/Station/IStation525.cs

@@ -0,0 +1,2116 @@
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.Entity.Protocol.Station
+{
+    /// <summary>
+    ///  预写入地址
+    /// </summary>
+    public interface IStation525 : IProtocol
+    {
+        /// <summary>
+        ///  数组下一个写入指针
+        /// </summary>
+        public short NextIndex { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode0 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber0 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart0 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd0 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode0 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType0 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo0 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode1 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber1 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart1 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd1 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode1 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType1 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo1 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode2 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber2 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart2 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd2 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode2 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType2 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo2 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode3 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber3 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart3 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd3 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode3 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType3 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo3 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode4 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber4 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart4 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd4 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode4 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType4 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo4 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode5 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber5 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart5 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd5 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode5 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType5 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo5 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode6 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber6 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart6 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd6 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode6 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType6 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo6 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode7 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber7 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart7 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd7 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode7 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType7 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo7 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode8 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber8 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart8 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd8 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode8 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType8 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo8 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode9 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber9 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart9 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd9 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode9 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType9 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo9 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode10 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber10 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart10 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd10 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode10 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType10 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo10 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode11 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber11 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart11 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd11 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode11 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType11 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo11 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode12 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber12 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart12 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd12 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode12 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType12 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo12 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode13 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber13 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart13 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd13 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode13 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType13 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo13 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode14 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber14 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart14 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd14 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode14 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType14 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo14 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode15 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber15 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart15 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd15 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode15 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType15 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo15 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode16 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber16 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart16 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd16 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode16 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType16 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo16 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode17 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber17 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart17 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd17 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode17 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType17 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo17 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode18 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber18 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart18 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd18 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode18 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType18 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo18 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode19 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber19 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart19 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd19 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode19 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType19 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo19 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode20 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber20 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart20 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd20 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode20 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType20 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo20 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode21 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber21 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart21 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd21 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode21 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType21 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo21 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode22 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber22 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart22 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd22 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode22 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType22 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo22 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode23 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber23 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart23 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd23 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode23 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType23 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo23 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode24 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber24 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart24 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd24 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode24 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType24 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo24 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode25 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber25 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart25 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd25 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode25 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType25 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo25 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode26 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber26 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart26 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd26 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode26 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType26 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo26 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode27 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber27 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart27 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd27 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode27 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType27 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo27 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode28 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber28 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart28 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd28 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode28 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType28 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo28 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode29 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber29 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart29 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd29 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode29 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType29 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo29 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode30 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber30 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart30 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd30 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode30 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType30 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo30 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode31 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber31 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart31 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd31 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode31 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType31 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo31 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode32 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber32 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart32 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd32 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode32 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType32 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo32 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode33 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber33 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart33 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd33 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode33 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType33 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo33 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode34 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber34 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart34 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd34 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode34 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType34 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo34 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode35 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber35 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart35 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd35 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode35 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType35 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo35 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode36 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber36 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart36 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd36 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode36 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType36 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo36 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode37 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber37 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart37 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd37 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode37 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType37 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo37 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode38 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber38 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart38 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd38 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode38 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType38 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo38 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode39 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber39 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart39 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd39 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode39 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType39 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo39 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode40 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber40 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart40 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd40 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode40 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType40 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo40 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode41 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber41 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart41 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd41 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode41 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType41 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo41 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode42 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber42 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart42 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd42 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode42 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType42 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo42 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode43 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber43 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart43 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd43 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode43 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType43 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo43 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode44 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber44 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart44 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd44 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode44 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType44 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo44 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode45 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber45 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart45 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd45 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode45 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType45 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo45 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode46 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber46 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart46 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd46 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode46 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType46 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo46 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode47 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber47 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart47 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd47 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode47 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType47 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo47 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode48 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber48 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart48 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd48 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode48 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType48 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo48 { get; set; }
+
+        /// <summary>
+        ///  条码
+        /// </summary>
+        [StringLength(50)]
+        public string BcrCode49 { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Description("任务号")]
+        int TaskNumber49 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        [Description("起始地址")]
+        short GoodsStart49 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        [Description("目标地址")]
+        short GoodsEnd49 { get; set; }
+
+        /// <summary>
+        /// 运行模式
+        /// </summary>
+        [Description("任务类型")]
+        short Mode49 { get; set; }
+
+        /// <summary>
+        /// 指令类型 1
+        /// </summary>
+        [Description("指令类型")]
+        short CmdType49 { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        [Description("凭证号")]
+        short VoucherNo49 { get; set; }
+    }
+}

+ 6 - 0
业务工程/分拣库/WCS.Entity.Protocol/Station/IStation90.cs

@@ -0,0 +1,6 @@
+namespace WCS.Entity.Protocol.Station
+{
+    public interface IStation90 : IProtocol
+    {
+    }
+}

+ 29 - 0
业务工程/分拣库/WCS.Entity.Protocol/Station/IStation91.cs

@@ -0,0 +1,29 @@
+namespace WCS.Entity.Protocol.Station
+{
+    /// <summary>
+    /// 外检读取信息
+    /// </summary>
+    public interface IStation91 : IProtocol
+    {
+        /// <summary>
+        /// 外形检测故障
+        /// </summary>
+        StationShapeAlarm ShapeAlarm { get; set; }
+
+        /// <summary>
+        /// 重量
+        /// </summary>
+
+        float Weight { get; set; }
+
+        /// <summary>
+        /// 长度
+        /// </summary>
+        float Length { get; set; }
+
+        /// <summary>
+        ///  宽度
+        /// </summary>
+        float Width { get; set; }
+    }
+}

+ 469 - 0
业务工程/分拣库/WCS.Entity.Protocol/Station/StationEnum.cs

@@ -0,0 +1,469 @@
+using System;
+using System.ComponentModel;
+
+namespace WCS.Entity.Protocol.Station
+{
+    /// <summary>
+    /// 输送机模式
+    /// </summary>
+    public enum StationMode : short
+    {
+        /// <summary>
+        /// 自动
+        /// </summary>
+        [Description("自动")]
+        Automatic = 1,
+
+        /// <summary>
+        /// 手动
+        /// </summary>
+        [Description("手动")]
+        Manual = 2,
+
+        /// <summary>
+        /// 维修
+        /// </summary>
+        [Description("维修")]
+        Repair = 3,
+    }
+
+    ///// <summary>
+    /////  指令类型
+    ///// </summary>
+    //public enum CmdType : short
+    //{
+    //    #region MyRegion
+
+    //    /// <summary>
+    //    ///  用于RGV使用,表示当前任务是WCS执行
+    //    /// </summary>
+    //    Task = 98,
+
+    //    /// <summary>
+    //    ///  用于RGV使用,表示当前任务是码垛信息执行
+    //    /// </summary>
+    //    palletizing = 99
+
+    //    #endregion MyRegion
+    //}
+
+    /// <summary>
+    /// 输送机警报
+    /// </summary>
+    [Flags]
+    public enum StationAlarm : ushort
+    {
+    }
+
+    /// <summary>
+    /// 输送机状态
+    /// </summary>
+    [Flags]
+    public enum StationStatus : ushort
+    {
+        /// <summary>
+        /// 自动
+        /// </summary>
+        [Description("自动")]
+        Auto = 1 << 0,
+
+        /// <summary>
+        /// 选中状态位
+        /// </summary>
+        [Description("选中状态位")]
+        Choice_Bit = 1 << 1,
+
+        /// <summary>
+        /// 任务有货
+        /// </summary>
+        [Description("任务有货")]
+        OT_Status = 1 << 2,
+
+        /// <summary>
+        /// 光电有货
+        /// </summary>
+        [Description("光电有货")]
+        PH_Status = 1 << 3,
+
+        /// <summary>
+        /// 运行状态位
+        /// </summary>
+        [Description("运行状态位")]
+        Run = 1 << 4,
+
+        /// <summary>
+        /// 正转
+        /// </summary>
+        [Description("正转")]
+        Fwd_1 = 1 << 5,
+
+        /// <summary>
+        /// 反转
+        /// </summary>
+        [Description("反转")]
+        Rev_1 = 1 << 6,
+
+        /// <summary>
+        /// 上升/右转/伸出(顶升移栽升降、拆码盘机升降、提升机升降、拆码盘机拨叉伸出)
+        /// </summary>
+        [Description("上升/右转/伸出(顶升移栽升降、拆码盘机升降、提升机升降、拆码盘机拨叉伸出)")]
+        Up_Right_Front_2 = 1 << 7,
+
+        /// <summary>
+        /// 下降/左转/缩回(顶升移栽升降、拆码盘机升降、提升机升降、拆码盘机拨叉缩回)
+        /// </summary>
+        [Description("下降/左转/缩回(顶升移栽升降、拆码盘机升降、提升机升降、拆码盘机拨叉缩回)")]
+        Down_Left_Back_2 = 1 << 8,
+
+        /// <summary>
+        /// 高位(顶升移栽升降、拆码盘机升降、提升机升降)
+        /// </summary>
+        [Description("高位(顶升移栽升降、拆码盘机升降、提升机升降)")]
+        High_Station_2 = 1 << 9,
+
+        /// <summary>
+        /// 中位(拆码盘机升降)
+        /// </summary>
+        [Description("中位(拆码盘机升降)")]
+        Mid_Station_2 = 1 << 10,
+
+        /// <summary>
+        /// 低位(顶升移栽升降、拆码盘机升降、提升机升降)
+        /// </summary>
+        [Description("低位(顶升移栽升降、拆码盘机升降、提升机升降)")]
+        Low_Station_2 = 1 << 11,
+
+        /// <summary>
+        /// 前位(拆码盘机拨叉伸出)
+        /// </summary>
+        [Description("前位(拆码盘机拨叉伸出)")]
+        Front_Station_2 = 1 << 12,
+
+        /// <summary>
+        /// 后位(拆码盘机拨叉缩回)
+        /// </summary>
+        [Description("后位(拆码盘机拨叉缩回)")]
+        Back_Station_2 = 1 << 13,
+
+        /// <summary>
+        /// 手动入库
+        /// </summary>
+        [Description("手动入库")]
+        ManualStorage = 1 << 14,
+
+        /// <summary>
+        /// 上位机未分配任务
+        /// </summary>
+        [Description("上位机未分配任务")]
+        UnassignedTask = 1 << 15,
+    }
+
+    /// <summary>
+    /// 输送机状态
+    /// </summary>
+    [Flags]
+    public enum StationStatus1 : ushort
+    {
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        RES1 = 1 << 0,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        RES2 = 1 << 1,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        RES3 = 1 << 2,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        RES4 = 1 << 3,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        RES5 = 1 << 4,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        RES6 = 1 << 5,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        RES7 = 1 << 6,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        RES8 = 1 << 7,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        RES9 = 1 << 8,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        RES10 = 1 << 9,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        RES11 = 1 << 10,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        RES12 = 1 << 11,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        RES13 = 1 << 12,
+
+        /// <summary>
+        ///  拆盘机光电
+        /// </summary>
+        [Description("拆盘机光电")]
+        RES14 = 1 << 13,
+
+        /// <summary>
+        ///  是否锁定
+        /// </summary>
+        [Description("是否锁定")]
+        RES15 = 1 << 14,
+
+        /// <summary>
+        ///  备用
+        /// </summary>
+        [Description("备用")]
+        IsLock = 1 << 15,
+    }
+
+    /// <summary>
+    /// 外形故障
+    /// </summary>
+    [Flags]
+    public enum StationShapeAlarm : ushort
+    {
+        /// <summary>
+        /// 外形/条码等货物故障
+        /// </summary>
+        [Description("外形/条码等货物故障")]
+        GoodsErr = 1 << 0,
+
+        /// <summary>
+        /// 前超长故障
+        /// </summary>
+        [Description("前超长故障")]
+        FOutside = 1 << 1,
+
+        /// <summary>
+        /// 后超长故障
+        /// </summary>
+        [Description("后超长故障")]
+        BOutside = 1 << 2,
+
+        /// <summary>
+        /// 左超宽故障
+        /// </summary>
+        [Description("左超宽故障")]
+        LOutside = 1 << 3,
+
+        /// <summary>
+        /// 右超宽故障
+        /// </summary>
+        [Description("右超宽故障")]
+        ROutside = 1 << 4,
+
+        /// <summary>
+        /// 超高故障
+        /// </summary>
+        [Description("超高故障")]
+        HOutside = 1 << 5,
+
+        /// <summary>
+        /// 条码读取失败
+        /// </summary>
+        [Description("条码读取失败")]
+        BcrNoread = 1 << 6,
+
+        /// <summary>
+        /// 超重
+        /// </summary>
+        [Description("超重")]
+        Overload = 1 << 7,
+
+        /// <summary>
+        /// 货物严重外检故障
+        /// </summary>
+        [Description("货物严重外检故障")]
+        GoodsErr1 = 1 << 8,
+
+        /// <summary>
+        /// 二维条码未读出
+        /// </summary>
+        [Description("二维条码未读出")]
+        BcrNoread1 = 1 << 9,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res1 = 1 << 10,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res2 = 1 << 11,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res3 = 1 << 12,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res4 = 1 << 13,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res5 = 1 << 14,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res6 = 1 << 15,
+    }
+
+    /// <summary>
+    ///  站台指令
+    /// </summary>
+    [Flags]
+    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,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res4 = 1 << 4,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res5 = 1 << 5,
+
+        /// <summary>
+        ///  翻转信号
+        /// </summary>
+        [Description("翻转信号")]
+        Res6 = 1 << 6,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res7 = 1 << 7,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res8 = 1 << 8,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res9 = 1 << 9,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res10 = 1 << 10,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res11 = 1 << 11,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res12 = 1 << 12,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res13 = 1 << 13,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res14 = 1 << 14,
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        [Description("备用")]
+        Res15 = 1 << 15,
+    }
+}

+ 35 - 0
业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station520.cs

@@ -0,0 +1,35 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.Station
+{
+    /// <summary>
+    ///  520
+    /// </summary>
+    [DataContract]
+    public class WCS_Station520 : IStation520
+    {
+        /// <inheritdoc/>
+        [DataMember(Order = 0)]
+        public int TaskNumber { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 1)]
+        public short GoodsStart { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 2)]
+        public short GoodsEnd { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 3)]
+        public StationMode Mode { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 4)]
+        public StationCmd CmdType { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 5)]
+        public short VoucherNo { get; set; }
+    }
+}

+ 39 - 0
业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station521.cs

@@ -0,0 +1,39 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.Station
+{
+    /// <summary>
+    ///  521
+    /// </summary>
+    [DataContract]
+    public class WCS_Station521 : IStation521
+    {
+        /// <inheritdoc/>
+        [DataMember(Order = 0)]
+        public int TaskNumber { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 1)]
+        public short GoodsStart { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 2)]
+        public short GoodsEnd { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 3)]
+        public StationMode Mode { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 4)]
+        public short CmdType { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 5)]
+        public short VoucherNo { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 6)]
+        public short Request { get; set; }
+    }
+}

+ 31 - 0
业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station523.cs

@@ -0,0 +1,31 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.Station
+{
+    /// <summary>
+    ///  523
+    /// </summary>
+    [DataContract]
+    public class WCS_Station523 : IStation523
+    {
+        /// <inheritdoc/>
+        [DataMember(Order = 0)]
+        public StationAlarm Alarm { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 1)]
+        public short RES { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 2)]
+        public StationStatus Status { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 3)]
+        public float RunTime { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 4)]
+        public StationStatus1 Status1 { get; set; }
+    }
+}

+ 29 - 0
业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station524.cs

@@ -0,0 +1,29 @@
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.Station
+{
+    [DataContract]
+    public class WCS_Station524 : IStation524
+    {
+        [DataMember(Order = 0)]
+        public int TaskNumber { get; set; }
+
+        [DataMember(Order = 1)]
+        public short GoodsStart { get; set; }
+
+        [DataMember(Order = 2)]
+        public short GoodsEnd { get; set; }
+
+        [DataMember(Order = 3)]
+        public StationMode Mode { get; set; }
+
+        [DataMember(Order = 4)]
+        public short CmdType { get; set; }
+
+        [DataMember(Order = 5)]
+        public short VoucherNo { get; set; }
+
+        [DataMember(Order = 6)]
+        public short Request { get; set; }
+    }
+}

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff