Quellcode durchsuchen

init WCS.Entity.Protocol

林豪 左 vor 3 Jahren
Ursprung
Commit
d80dee9dda
30 geänderte Dateien mit 2970 neuen und 0 gelöschten Zeilen
  1. 7 0
      WCS Pedestal.sln
  2. 19 0
      WCS.Entity.Protocol/BCR/IBCR80.cs
  3. 20 0
      WCS.Entity.Protocol/BCR/WCS_BCR80.cs
  4. 124 0
      WCS.Entity.Protocol/DeviceData.cs
  5. 2 0
      WCS.Entity.Protocol/Properties/PublishProfiles/FolderProfile.pubxml
  6. 100 0
      WCS.Entity.Protocol/RGV/IRGV520.cs
  7. 166 0
      WCS.Entity.Protocol/RGV/IRGV521.cs
  8. 40 0
      WCS.Entity.Protocol/RGV/IRGV523.cs
  9. 141 0
      WCS.Entity.Protocol/RGV/RGVEnum.cs
  10. 78 0
      WCS.Entity.Protocol/RGV/WCS_RGV520.cs
  11. 110 0
      WCS.Entity.Protocol/RGV/WCS_RGV521.cs
  12. 38 0
      WCS.Entity.Protocol/RGV/WCS_RGV523.cs
  13. 198 0
      WCS.Entity.Protocol/SRM/ISRM520.cs
  14. 343 0
      WCS.Entity.Protocol/SRM/ISRM521.cs
  15. 17 0
      WCS.Entity.Protocol/SRM/ISRM537.cs
  16. 140 0
      WCS.Entity.Protocol/SRM/SRMEnum.cs
  17. 158 0
      WCS.Entity.Protocol/SRM/WCS_SRM520.cs
  18. 266 0
      WCS.Entity.Protocol/SRM/WCS_SRM521.cs
  19. 18 0
      WCS.Entity.Protocol/SRM/WCS_SRM537.cs
  20. 58 0
      WCS.Entity.Protocol/Station/IStation520.cs
  21. 108 0
      WCS.Entity.Protocol/Station/IStation521.cs
  22. 79 0
      WCS.Entity.Protocol/Station/IStation523.cs
  23. 53 0
      WCS.Entity.Protocol/Station/WCS_Station520.cs
  24. 50 0
      WCS.Entity.Protocol/Station/WCS_Station521.cs
  25. 29 0
      WCS.Entity.Protocol/Station/WCS_Station523.cs
  26. 14 0
      WCS.Entity.Protocol/WCS.Entity.Protocol.csproj
  27. 129 0
      WCS.Entity.Protocol/WCS_AGVTask.cs
  28. 47 0
      WCS.Entity.Protocol/WCS_StatusLog.cs
  29. 53 0
      WCS.Entity.Protocol/WCS_SystemConfig.cs
  30. 365 0
      WCS.Entity.Protocol/WCS_TASK.cs

+ 7 - 0
WCS Pedestal.sln

@@ -17,6 +17,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WCS.Entity", "WCS.Entity\WC
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WCS.Core", "WCS.Core\WCS.Core.csproj", "{17CF21B9-84AC-4FB3-9BC1-EF96CF8381CA}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WCS.Entity.Protocol", "WCS.Entity.Protocol\WCS.Entity.Protocol.csproj", "{300F18EA-128F-45EE-AE54-51AE8D2E0B57}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -43,6 +45,10 @@ Global
 		{17CF21B9-84AC-4FB3-9BC1-EF96CF8381CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{17CF21B9-84AC-4FB3-9BC1-EF96CF8381CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{17CF21B9-84AC-4FB3-9BC1-EF96CF8381CA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{300F18EA-128F-45EE-AE54-51AE8D2E0B57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{300F18EA-128F-45EE-AE54-51AE8D2E0B57}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{300F18EA-128F-45EE-AE54-51AE8D2E0B57}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{300F18EA-128F-45EE-AE54-51AE8D2E0B57}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -53,6 +59,7 @@ Global
 		{A93E66D2-2A49-410C-BDA6-AF0EF230A958} = {43005E7B-7FC3-407D-B098-E58D0B5B465F}
 		{E20F0C8A-619A-4D78-835C-909E81338458} = {43005E7B-7FC3-407D-B098-E58D0B5B465F}
 		{17CF21B9-84AC-4FB3-9BC1-EF96CF8381CA} = {43005E7B-7FC3-407D-B098-E58D0B5B465F}
+		{300F18EA-128F-45EE-AE54-51AE8D2E0B57} = {9D01B749-E4C4-4AD4-82E1-5C3CA65295E5}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {BF8ACC41-E6AD-46E2-8A85-2BD2AE0990C0}

+ 19 - 0
WCS.Entity.Protocol/BCR/IBCR80.cs

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

+ 20 - 0
WCS.Entity.Protocol/BCR/WCS_BCR80.cs

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

+ 124 - 0
WCS.Entity.Protocol/DeviceData.cs

@@ -0,0 +1,124 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.Station;
+
+namespace WCS.Entity.Protocol
+{
+    [DataContract]
+    public class ProdLineData : DeviceData
+    {
+        [DataMember(Order = 3)]
+        public List<WCS_AGVTask> TaskList { get; set; } = new List<WCS_AGVTask>();
+    }
+
+    [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 = 4)]
+        //public WCS_RobotStation RobotStation { get; set; }
+    }
+
+    [DataContract]
+    public class RGVData : DeviceData
+    {
+        [DataMember(Order = 5)]
+        public WCS_RGV520 D520 { get; set; }
+
+        [DataMember(Order = 3)]
+        public WCS_RGV521 D521 { get; set; }
+
+        [DataMember(Order = 4)]
+        public WCS_RGV523 D523 { get; set; }
+    }
+
+    [DataContract]
+    public class SCData : DeviceData
+    {
+        [DataMember(Order = 5)]
+        public WCS_SRM520 D520 { get; set; }
+
+        [DataMember(Order = 3)]
+        public WCS_SRM521 D521 { get; set; }
+
+        [DataMember(Order = 4)]
+        public WCS_SRM537 D537 { get; set; }
+    }
+
+    [DataContract]
+    public class RobotData : DeviceData
+    {
+        //[DataMember(Order = 3)]
+        //public WCS_Robot Data { get; set; }
+    }
+
+    [DataContract]
+    public class DeviceData
+    {
+        [DataMember(Order = 0)]
+        public string Code { get; set; }
+
+        [DataMember(Order = 1)]
+        public DateTime Frame { get; set; }
+
+        [DataMember(Order = 2)]
+        public string Info { get; set; } = "";
+    }
+
+    [DataContract]
+    public class DeviceDataCollection<T> where T : DeviceData
+    {
+        [DataMember(Order = 0)]
+        public DateTime Frame { get; set; }
+
+        [DataMember(Order = 1)]
+        public T[] Datas { get; set; }
+
+        public DeviceDataCollection()
+        { }
+
+        public DeviceDataCollection(DateTime frame, object[] datas)
+        {
+            this.Frame = frame;
+            this.Datas = datas.OfType<T>().ToArray();
+        }
+    }
+
+    [DataContract]
+    public class DeviceDataPack
+    {
+        [DataMember(Order = 0)]
+        public DeviceDataCollection<SCData> SCDatas { get; set; }
+
+        [DataMember(Order = 1)]
+        public DeviceDataCollection<RGVData> RGVDatas { get; set; }
+
+        [DataMember(Order = 2)]
+        public DeviceDataCollection<StationData> StationDatas { get; set; }
+
+        [DataMember(Order = 3)]
+        public DeviceDataCollection<RobotData> RobotData { get; set; }
+
+        [DataMember(Order = 4)]
+        public DeviceDataCollection<ProdLineData> ProdLineData { get; set; }
+
+        [DataMember(Order = 5)]
+        public DateTime Frame { get; set; }
+
+        /// <summary>
+        /// 回放最早时间
+        /// </summary>
+        [DataMember(Order = 6)]
+        public int PlaybackSeconds { get; set; }
+    }
+}

+ 2 - 0
WCS.Entity.Protocol/Properties/PublishProfiles/FolderProfile.pubxml

@@ -8,5 +8,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
     <Platform>Any CPU</Platform>
     <PublishDir>D:\XM\Release\DLL</PublishDir>
     <PublishProtocol>FileSystem</PublishProtocol>
+    <VersionPrefix>1.0.0</VersionPrefix>
+    <describe>第一版</describe>
   </PropertyGroup>
 </Project>

+ 100 - 0
WCS.Entity.Protocol/RGV/IRGV520.cs

@@ -0,0 +1,100 @@
+using WCS.Entity.Protocol.RGV;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// RGV 写入协议 后缀 _1=1工位 _2=2工位
+    /// </summary>
+    public interface IRGV520 : IProtocol
+    {
+        #region 一工位
+
+        /// <summary>
+        /// WCS任务号1
+        /// </summary>
+        int TaskID_1 { get; set; }
+
+        /// <summary>
+        /// 任务类型
+        /// </summary>
+        RGVTaskType TaskType_1 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// 环穿RGV无起始地址,只有目标地址
+        /// </summary>
+        short StartPosition_1 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        short DestPosition_1 { get; set; }
+
+        /// <summary>
+        /// 优先
+        /// </summary>
+        short Priority_1 { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        short RES1_1 { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        short RES2_1 { get; set; }
+
+        /// <summary>
+        /// 触发信号 在通讯协议中为VoucherNo_1
+        /// </summary>
+        int Trigger_1 { get; set; }
+
+        #endregion 一工位
+
+        #region 二工位
+
+        /// <summary>
+        /// WCS任务号
+        /// </summary>
+        int TaskID_2 { get; set; }
+
+        /// <summary>
+        /// 任务类型
+        /// </summary>
+        RGVTaskType TaskType_2 { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// 环穿RGV无起始地址,只有目标地址
+        /// </summary>
+        short StartPosition_2 { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        short DestPosition_2 { get; set; }
+
+        /// <summary>
+        /// 优先
+        /// </summary>
+        short Priority_2 { get; set; }
+
+        /// <summary>
+        /// WCS处理完任务时写入的反馈信号
+        /// </summary>
+        short RES1_2 { get; set; }
+
+        /// <summary>
+        /// WCS处理完任务时写入的反馈信号
+        /// </summary>
+        short RES2_2 { get; set; }
+
+        /// <summary>
+        /// 触发信号 在通讯协议中为VoucherNo_2
+        /// </summary>
+        int Trigger_2 { get; set; }
+
+        #endregion 二工位
+    }
+}

+ 166 - 0
WCS.Entity.Protocol/RGV/IRGV521.cs

@@ -0,0 +1,166 @@
+using System;
+using WCS.Entity.Protocol.RGV;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// RGV 读取协议 后缀 _1=1工位 _2=2工位 无=共用
+    /// </summary>
+    public interface IRGV521 : IProtocol
+    {
+        #region 一工位
+
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        int TaskID_1 { get; set; }
+
+        /// <summary>
+        /// 任务类型
+        /// </summary>
+        RGVTaskType TaskType_1 { get; set; }
+
+        /// <summary>
+        /// 起始站台
+        /// </summary>
+        short StartPosition_1 { get; set; }
+
+        /// <summary>
+        /// 目标站台
+        /// </summary>
+        short DestPosition_1 { get; set; }
+
+        /// <summary>
+        /// 优先级
+        /// </summary>
+        short PRIORITY_1 { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        short RES1_1 { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        short RES2_1 { get; set; }
+
+        /// <summary>
+        /// 一工位状态
+        /// </summary>
+        RGVStatus Status_1 { get; set; }
+
+        /// <summary>
+        /// 触发信号 在通讯协议中为VoucherNo_1
+        /// </summary>
+        int Trigger_1 { get; set; }
+
+        #endregion 一工位
+
+        #region 二工位
+
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        int TaskID_2 { get; set; }
+
+        /// <summary>
+        /// 任务类型
+        /// </summary>
+        RGVTaskType TaskType_2 { get; set; }
+
+        /// <summary>
+        /// 起始站台
+        /// </summary>
+        short StartPosition_2 { get; set; }
+
+        /// <summary>
+        /// 目标站台
+        /// </summary>
+        short DestPosition_2 { get; set; }
+
+        /// <summary>
+        /// 优先级
+        /// </summary>
+        short PRIORITY_2 { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        short RES1_2 { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        short RES2_2 { get; set; }
+
+        /// <summary>
+        /// 一工位状态
+        /// </summary>
+        RGVStatus Status_2 { get; set; }
+
+        /// <summary>
+        /// 触发信号 在通讯协议中为VoucherNo_1
+        /// </summary>
+        int Trigger_2 { get; set; }
+
+        #endregion 二工位
+
+        #region 共用
+
+        /// <summary>
+        /// RGV运行状态
+        /// </summary>
+        RGVRunStatus SystemStatus { get; set; }
+
+        /// <summary>
+        /// RGV运行模式
+        /// </summary>
+        RGVMode WorkMode { get; set; }
+
+        /// <summary>
+        /// 备用6
+        /// </summary>
+        short RES6 { get; set; }
+
+        /// <summary>
+        /// 位置
+        /// </summary>
+        float Position { get; set; }
+
+        /// <summary>
+        /// 里程
+        /// </summary>
+        [IgnoreChanging]
+        float Mileage { get; set; }
+
+        /// <summary>
+        /// 运行时长 (单位:小时,带小数)
+        /// </summary>
+        [IgnoreChanging]
+        float Runtime { get; set; }
+
+        #endregion 共用
+    }
+
+    [Flags]
+    public enum RGVStatus : ushort
+    {
+        光电 = 1 << 0,
+        RGV到站 = 1 << 1,
+        任务完成 = 1 << 2,
+        备用 = 1 << 3,
+        备用9 = 1 << 4,
+        备用10 = 1 << 5,
+        备用11 = 1 << 6,
+        备用12 = 1 << 7,
+        备用1 = 1 << 8,
+        备用2 = 1 << 9,
+        备用3 = 1 << 10,
+        备用4 = 1 << 11,
+        备用5 = 1 << 12,
+        备用6 = 1 << 13,
+        备用7 = 1 << 14,
+        备用8 = 1 << 15,
+    }
+}

+ 40 - 0
WCS.Entity.Protocol/RGV/IRGV523.cs

@@ -0,0 +1,40 @@
+using WCS.Entity.Protocol.RGV;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// RGV状态协议
+    /// </summary>
+    public interface IRGV523 : IProtocol
+    {
+        /// <summary>
+        /// 环形穿梭车故障
+        /// </summary>
+         RGVFault Fault { get; set; }
+
+        /// <summary>
+        /// 环形穿梭车工位1故障
+        /// </summary>
+         RGVPlatformFault Fault1 { get; set; }
+
+        /// <summary>
+        /// 工位2故障
+        /// </summary>
+         RGVPlatformFault Fault2 { get; set; }
+
+        /// <summary>
+        /// 环穿状态
+        /// </summary>
+         RGVStatus Status { get; set; }
+
+        /// <summary>
+        /// 工位1状态
+        /// </summary>
+         RGVPlatformStatus Status1 { get; set; }
+
+        /// <summary>
+        /// 工位2状态
+        /// </summary>
+         RGVPlatformStatus Status2 { get; set; }
+    }
+}

+ 141 - 0
WCS.Entity.Protocol/RGV/RGVEnum.cs

@@ -0,0 +1,141 @@
+using System;
+
+namespace WCS.Entity.Protocol.RGV
+{
+    /// <summary>
+    /// RGV运行状态
+    /// </summary>
+    public enum RGVRunStatus : short
+    {
+        空闲 = 1,
+        取货移动 = 2,
+        取货 = 3,
+        放货移动 = 4,
+        放货 = 5
+    }
+
+    /// <summary>
+    /// RGV运行模式
+    /// </summary>
+    public enum RGVMode : short
+    {
+        自动 = 1,
+        半自动 = 2,
+        手动 = 3,
+        维护 = 4
+    }
+
+    /// <summary>
+    /// RGV任务类型
+    /// </summary>
+    public enum RGVTaskType : short
+    {
+        取货 = 1,
+        放货 = 2,
+        移动 = 3,
+        码盘 = 4,
+        拆盘 = 5,
+        变更放货站台 = 6,
+
+        /// <summary>
+        /// 环穿、双工位使用
+        /// </summary>
+        变更取货站台 = 7,
+    }
+
+    /// <summary>
+    /// RGV故障
+    /// </summary>
+    [Flags]
+    public enum RGVFault : ushort
+    {
+        RGV前后防撞条故障 = 1 << 0,
+        RGV载货极限光电故障 = 1 << 1,
+        RGV输送线变频器故障 = 1 << 2,
+        RGV行走变频器故障 = 1 << 3,
+        RGV扫码器故障 = 1 << 4,
+        RGV位置值故障 = 1 << 5,
+        RGV定位失败 = 1 << 6,
+        RGV取放货时位置偏差过大 = 1 << 7,
+        RGV急停按下 = 1 << 8,
+        主柜急停按下 = 1 << 9,
+        站台货物超出 = 1 << 10,
+        RGV输送线超时 = 1 << 11,
+        RGV输送线光电异常 = 1 << 12,
+        RGV任务号与站台任务号不匹配 = 1 << 13,
+        RGV不支持此任务类型 = 1 << 14,
+        RGV目标站台与交互站台号不一致 = 1 << 15,
+    }
+
+    /// <summary>
+    /// RGV工位故障
+    /// </summary>
+    [Flags]
+    public enum RGVPlatformFault : ushort
+    {
+        RGV站台号错误 = 1 << 0,
+        RGV任务类型错误 = 1 << 1,
+        RGV任务号错误 = 1 << 2,
+        RGV货物超出故障 = 1 << 3,
+        RGV输送线变频器故障2 = 1 << 4,
+        RGV输送线传感器异常 = 1 << 5,
+        RGV输送线运行超时 = 1 << 6,
+        RGV输送线总故障 = 1 << 7,
+        RGV硬极限故障 = 1 << 8,
+        RGV软极限故障 = 1 << 9,
+        RGV货物超出故障2 = 1 << 10,
+        RGV行走测距信号丢失 = 1 << 11,
+        RGV行走变频器故障 = 1 << 12,
+        RGV = 1 << 13,
+        RGV2 = 1 << 14,
+        RGV急停按下 = 1 << 15,
+    }
+
+    /// <summary>
+    /// RGV状态
+    /// </summary>
+    [Flags]
+    public enum RGVStatus : ushort
+    {
+        RGV与站台交互完成 = 1 << 0,
+        RGV前方有障暂停运行 = 1 << 1,
+        RGV = 1 << 2,
+        RGV2 = 1 << 3,
+        RGV3 = 1 << 4,
+        RGV4 = 1 << 5,
+        RGV5 = 1 << 6,
+        RGV6 = 1 << 7,
+        RGV运行 = 1 << 8,
+        RGV移动中 = 1 << 9,
+        RGV取货中 = 1 << 10,
+        RGV放货中 = 1 << 11,
+        RGV变址运行 = 1 << 12,
+        RGV定位完成 = 1 << 13,
+        RGV有货光电 = 1 << 14,
+        RGV与站台交互中 = 1 << 15,
+    }
+
+    /// <summary>
+    /// RGV工位状态
+    /// </summary>
+    [Flags]
+    public enum RGVPlatformStatus : ushort
+    {
+        RGV任务挂起 = 1 << 0,
+        RGV移动中 = 1 << 1,
+        RGV取货中 = 1 << 2,
+        RGV放货中 = 1 << 3,
+        RGV定位完全 = 1 << 4,
+        RGV有货光电 = 1 << 5,
+        RGV与站台交互中 = 1 << 6,
+        RGV与站台交互完 = 1 << 7,
+        RGV = 1 << 8,
+        RGV2 = 1 << 9,
+        RGV3 = 1 << 10,
+        RGV4 = 1 << 11,
+        RGV5 = 1 << 12,
+        RGV6 = 1 << 13,
+        RGV7 = 1 << 14,
+        RGV8 = 1 << 15,
+    }
+}

+ 78 - 0
WCS.Entity.Protocol/RGV/WCS_RGV520.cs

@@ -0,0 +1,78 @@
+using SqlSugar;
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.RGV;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// RGV 读取记录表 后缀 _1=1工位 _2=2工位
+    /// </summary>
+    [SugarTable(nameof(WCS_RGV520), "RGV 读取记录表 后缀 _1=1工位 _2=2工位 ")]
+    [DataContract]
+    public class WCS_RGV520 : WCS_PROTOCOLDATA, IRGV520
+    {
+        [SugarColumn(ColumnDescription = "WCS任务号")]
+        [DataMember(Order = 0)]
+        public int TaskID_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "任务类型")]
+        [DataMember(Order = 1)]
+        public RGVTaskType TaskType_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始地址环穿RGV无起始地址,只有目标地址")]
+        [DataMember(Order = 2)]
+        public short StartPosition_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标地址")]
+        [DataMember(Order = 3)]
+        public short DestPosition_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "优先")]
+        [DataMember(Order = 4)]
+        public short Priority_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用")]
+        [DataMember(Order = 5)]
+        public short RES1_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用")]
+        [DataMember(Order = 6)]
+        public short RES2_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "触发")]
+        [DataMember(Order = 7)]
+        public int Trigger_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "WCS任务号")]
+        [DataMember(Order = 8)]
+        public int TaskID_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "任务类型")]
+        [DataMember(Order = 9)]
+        public RGVTaskType TaskType_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始地址环穿RGV无起始地址,只有目标地址")]
+        [DataMember(Order = 10)]
+        public short StartPosition_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标地址")]
+        [DataMember(Order = 11)]
+        public short DestPosition_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "优先")]
+        [DataMember(Order = 12)]
+        public short Priority_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用")]
+        [DataMember(Order = 13)]
+        public short RES1_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用")]
+        [DataMember(Order = 14)]
+        public short RES2_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "触发")]
+        [DataMember(Order = 15)]
+        public int Trigger_2 { get; set; }
+    }
+}

+ 110 - 0
WCS.Entity.Protocol/RGV/WCS_RGV521.cs

@@ -0,0 +1,110 @@
+using SqlSugar;
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.RGV;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// RGV 读取协议 后缀 _1=1工位 _2=2工位 无=共用
+    /// </summary>
+    [SugarTable(nameof(WCS_RGV521), "RGV 读取协议 后缀 _1=1工位 _2=2工位 无=共用")]
+    [DataContract]
+    public class WCS_RGV521 : WCS_PROTOCOLDATA, IRGV521
+    {
+        [SugarColumn(ColumnDescription = "任务号")]
+        [DataMember(Order = 0)]
+        public int TaskID_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "任务类型")]
+        [DataMember(Order = 1)]
+        public RGVTaskType TaskType_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始站台")]
+        [DataMember(Order = 2)]
+        public short StartPosition_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标站台")]
+        [DataMember(Order = 3)]
+        public short DestPosition_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "优先级")]
+        [DataMember(Order = 4)]
+        public short PRIORITY_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用1")]
+        [DataMember(Order = 5)]
+        public short RES1_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用2")]
+        [DataMember(Order = 6)]
+        public short RES2_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "状态")]
+        [DataMember(Order = 7)]
+        public RGVStatus Status_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "凭证号")]
+        [DataMember(Order = 8)]
+        public int Trigger_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "任务号")]
+        [DataMember(Order = 9)]
+        public int TaskID_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "任务类型")]
+        [DataMember(Order = 10)]
+        public RGVTaskType TaskType_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始站点")]
+        [DataMember(Order = 11)]
+        public short StartPosition_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标站点")]
+        [DataMember(Order = 12)]
+        public short DestPosition_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "优先级")]
+        [DataMember(Order = 13)]
+        public short PRIORITY_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用1")]
+        [DataMember(Order = 14)]
+        public short RES1_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用2")]
+        [DataMember(Order = 15)]
+        public short RES2_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "状态")]
+        [DataMember(Order = 16)]
+        public RGVStatus Status_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "凭证号")]
+        [DataMember(Order = 17)]
+        public int Trigger_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "运行状态")]
+        [DataMember(Order = 18)]
+        public RGVRunStatus SystemStatus { get; set; }
+
+        [SugarColumn(ColumnDescription = "运行模式")]
+        [DataMember(Order = 19)]
+        public RGVMode WorkMode { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用6")]
+        [DataMember(Order = 20)]
+        public short RES6 { get; set; }
+
+        [SugarColumn(ColumnDescription = "位置")]
+        [DataMember(Order = 21)]
+        public float Position { get; set; }
+
+        [SugarColumn(ColumnDescription = "里程")]
+        [DataMember(Order = 22)]
+        public float Mileage { get; set; }
+
+        [SugarColumn(ColumnDescription = "运行时长")]
+        [DataMember(Order = 23)]
+        public float Runtime { get; set; }
+    }
+}

+ 38 - 0
WCS.Entity.Protocol/RGV/WCS_RGV523.cs

@@ -0,0 +1,38 @@
+using SqlSugar;
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.RGV;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// RGV状态记录
+    /// </summary>
+    [SugarTable(nameof(WCS_RGV523), "RGV状态记录")]
+    [DataContract]
+    public class WCS_RGV523 : WCS_PROTOCOLDATA, IRGV523
+    {
+        [SugarColumn(ColumnDescription = "环形穿梭车故障")]
+        [DataMember(Order = 0)]
+        public RGVFault Fault { get; set; }
+
+        [SugarColumn(ColumnDescription = "工位1故障")]
+        [DataMember(Order = 1)]
+        public RGVPlatformFault Fault1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "工位2故障")]
+        [DataMember(Order = 2)]
+        public RGVPlatformFault Fault2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "环穿状态")]
+        [DataMember(Order = 3)]
+        public RGVStatus Status { get; set; }
+
+        [SugarColumn(ColumnDescription = "工位1状态")]
+        [DataMember(Order = 4)]
+        public RGVPlatformStatus Status1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "工位2状态")]
+        [DataMember(Order = 5)]
+        public RGVPlatformStatus Status2 { get; set; }
+    }
+}

+ 198 - 0
WCS.Entity.Protocol/SRM/ISRM520.cs

@@ -0,0 +1,198 @@
+using WCS.Entity.Protocol.SRM;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// 堆垛机协议,WCS写入
+    /// </summary>
+    public interface ISRM520 : IProtocol
+    {
+        #region 工位一
+
+        /// <summary>
+        /// WCS心跳信号
+        /// </summary>
+        short Handshake_1 { get; set; }
+
+        /// <summary>
+        /// 货物数量
+        /// </summary>
+        short RES1_1 { get; set; }
+
+        /// <summary>
+        /// 备用2
+        /// </summary>
+        short RES2_1 { get; set; }
+
+        /// <summary>
+        /// 货物类型
+        /// </summary>
+        short GoodsType_1 { get; set; }
+
+        /// <summary>
+        /// 行驶速度
+        /// </summary>
+        SCSpeedMode SpeedMode_1 { get; set; }
+
+        /// <summary>
+        /// 起始行
+        /// </summary>
+        short SLine_1 { get; set; }
+
+        /// <summary>
+        /// 起始列
+        /// </summary>
+        short SCol_1 { get; set; }
+
+        /// <summary>
+        /// 起始层
+        /// </summary>
+        short SLayer_1 { get; set; }
+
+        /// <summary>
+        /// 起始深度
+        /// </summary>
+        short SDepth_1 { get; set; }
+
+        /// <summary>
+        /// 目标行
+        /// </summary>
+        short ELine_1 { get; set; }
+
+        /// <summary>
+        /// 目标列
+        /// </summary>
+        short ECol_1 { get; set; }
+
+        /// <summary>
+        /// 目标层
+        /// </summary>
+        short ELayer_1 { get; set; }
+
+        /// <summary>
+        /// 目标深度
+        /// </summary>
+        short EDepth_1 { get; set; }
+
+        /// <summary>
+        ///任务号
+        /// </summary>
+        int TaskID_1 { get; set; }
+
+        /// <summary>
+        /// 触发
+        /// </summary>
+        short VoucherNo_1 { get; set; }
+
+        /// <summary>
+        /// 完成任务触发
+        /// </summary>
+        short FinishedACK_1 { get; set; }
+
+        /// <summary>
+        /// 备用3
+        /// </summary>
+        short RES3_1 { get; set; }
+
+        /// <summary>
+        /// 备用4
+        /// </summary>
+        short RES4_1 { get; set; }
+
+        #endregion 工位一
+
+        #region 二工位
+
+        /// <summary>
+        /// WCS心跳信号
+        /// </summary>
+        short Handshake_2 { get; set; }
+
+        /// <summary>
+        /// 货物数量
+        /// </summary>
+        short RES1_2 { get; set; }
+
+        /// <summary>
+        /// 备用2
+        /// </summary>
+        short RES2_2 { get; set; }
+
+        /// <summary>
+        /// 货物类型
+        /// </summary>
+        short GoodsType_2 { get; set; }
+
+        /// <summary>
+        /// 行驶速度
+        /// </summary>
+        SCSpeedMode SCSpeedMode_2 { get; set; }
+
+        /// <summary>
+        /// 起始行
+        /// </summary>
+        short SLine_2 { get; set; }
+
+        /// <summary>
+        /// 起始列
+        /// </summary>
+        short SCol_2 { get; set; }
+
+        /// <summary>
+        /// 起始层
+        /// </summary>
+        short SLayer_2 { get; set; }
+
+        /// <summary>
+        /// 起始深度
+        /// </summary>
+        short SDepth_2 { get; set; }
+
+        /// <summary>
+        /// 目标行
+        /// </summary>
+        short ELine_2 { get; set; }
+
+        /// <summary>
+        /// 目标列
+        /// </summary>
+        short ECol_2 { get; set; }
+
+        /// <summary>
+        /// 目标层
+        /// </summary>
+        short ELayer_2 { get; set; }
+
+        /// <summary>
+        /// 目标深度
+        /// </summary>
+        short EDepth_2 { get; set; }
+
+        /// <summary>
+        ///任务号
+        /// </summary>
+        int TaskID_2 { get; set; }
+
+        /// <summary>
+        /// 触发
+        /// </summary>
+        short VoucherNo_2 { get; set; }
+
+        /// <summary>
+        /// 完成任务触发
+        /// </summary>
+        short FinishedACK_2 { get; set; }
+
+        /// <summary>
+        /// 备用3
+        /// </summary>
+        short RES3_2 { get; set; }
+
+        /// <summary>
+        /// 备用4
+        /// </summary>
+        short RES4_2 { get; set; }
+
+        #endregion 二工位
+    }
+}

+ 343 - 0
WCS.Entity.Protocol/SRM/ISRM521.cs

@@ -0,0 +1,343 @@
+using WCS.Entity.Protocol.SRM;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// 堆垛机协议,WCS只读
+    /// </summary>
+    public interface ISRM521 : IProtocol
+    {
+        #region 一工位
+
+        SRMForkStatus ForkStatus_1 { get; set; }
+
+        /// <summary>
+        /// 模式
+        /// </summary>
+        SCMode Mode_1 { get; set; }
+
+        /// <summary>
+        /// 运行状态
+        /// </summary>
+        SCRunStatus Status_1 { get; set; }
+
+        /// <summary>
+        /// 起始行
+        /// </summary>
+        short SLine_1 { get; set; }
+
+        /// <summary>
+        /// 起始列
+        /// </summary>
+        short SCol_1 { get; set; }
+
+        /// <summary>
+        /// 起始层
+        /// </summary>
+        short SLayer_1 { get; set; }
+
+        /// <summary>
+        /// 起始深度
+        /// </summary>
+        short SDepth_1 { get; set; }
+
+        /// <summary>
+        /// 目标行
+        /// </summary>
+        short ELine_1 { get; set; }
+
+        /// <summary>
+        /// 目标列
+        /// </summary>
+        short ECol_1 { get; set; }
+
+        /// <summary>
+        /// 目标层
+        /// </summary>
+        short ELayer_1 { get; set; }
+
+        /// <summary>
+        /// 目标深度
+        /// </summary>
+        short EDepth_1 { get; set; }
+
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        int TaskID_1 { get; set; }
+
+        /// <summary>
+        /// 触发信号
+        /// </summary>
+        short VoucherNo_1 { get; set; }
+
+        /// <summary>
+        /// 当前行
+        /// </summary>
+        short Line_1 { get; set; }
+
+        /// <summary>
+        /// 当前列
+        /// </summary>
+        short Col_1 { get; set; }
+
+        /// <summary>
+        /// 当前层
+        /// </summary>
+        short Layer_1 { get; set; }
+
+        /// <summary>
+        /// 已完成任务号
+        /// </summary>
+        int FinishedTask_1 { get; set; }
+
+        /// <summary>
+        /// X轴位置(0.1毫米) 行走
+        /// </summary>
+        [IgnoreChanging]
+        int TravelPos_1 { get; set; }
+
+        /// <summary>
+        /// Y轴位置 提升
+        /// </summary>
+        [IgnoreChanging]
+        int LiftPos_1 { get; set; }
+
+        /// <summary>
+        /// Z轴位置 货叉
+        /// </summary>
+        [IgnoreChanging]
+        int ForkPos_1 { get; set; }
+
+        /// <summary>
+        /// 备用 PLCname=Start_number1
+        /// </summary>
+        short RES9_1 { get; set; }
+
+        /// <summary>
+        /// 备用 PLCname=End_number2
+        /// </summary>
+        short RES10_1 { get; set; }
+
+        /// <summary>
+        /// 总里程
+        /// </summary>
+        [IgnoreChanging]
+        float TotalKM_1 { get; set; }
+
+        /// <summary>
+        /// 货物类型
+        /// </summary>
+        short GoodsType_1 { get; set; }
+
+        /// <summary>
+        /// 运行时长
+        /// </summary>
+        [IgnoreChanging]
+        float Runtime_1 { get; set; }
+
+        /// <summary>
+        /// 备用 PLCname=ForkPos2
+        /// </summary>
+        int RES11_1 { get; set; }
+
+        /// <summary>
+        /// 备用 PLCname=Dest_Xmm
+        /// </summary>
+        int RES12_1 { get; set; }
+
+        /// <summary>
+        /// 备用 PLCname=Dest_Ymm
+        /// </summary>
+        int RES13_1 { get; set; }
+
+        /// <summary>
+        /// 备用 PLCname=Dest_Zmm
+        /// </summary>
+        int RES14_1 { get; set; }
+
+        #endregion 一工位
+
+        #region 二工位
+
+        SRMForkStatus ForkStatus_2 { get; set; }
+
+        /// <summary>
+        /// 模式
+        /// </summary>
+        SCMode Mode_2 { get; set; }
+
+        /// <summary>
+        /// 运行状态
+        /// </summary>
+        SCRunStatus Status_2 { get; set; }
+
+        /// <summary>
+        /// 起始行
+        /// </summary>
+        short SLine_2 { get; set; }
+
+        /// <summary>
+        /// 起始列
+        /// </summary>
+        short SCol_2 { get; set; }
+
+        /// <summary>
+        /// 起始层
+        /// </summary>
+        short SLayer_2 { get; set; }
+
+        /// <summary>
+        /// 起始深度
+        /// </summary>
+        short SDepth_2 { get; set; }
+
+        /// <summary>
+        /// 目标行
+        /// </summary>
+        short ELine_2 { get; set; }
+
+        /// <summary>
+        /// 目标列
+        /// </summary>
+        short ECol_2 { get; set; }
+
+        /// <summary>
+        /// 目标层
+        /// </summary>
+        short ELayer_2 { get; set; }
+
+        /// <summary>
+        /// 目标深度
+        /// </summary>
+        short EDepth_2 { get; set; }
+
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        int TaskID_2 { get; set; }
+
+        /// <summary>
+        /// 触发信号
+        /// </summary>
+        short VoucherNo_2 { get; set; }
+
+        /// <summary>
+        /// 当前行
+        /// </summary>
+        short Line_2 { get; set; }
+
+        /// <summary>
+        /// 当前列
+        /// </summary>
+        short Col_2 { get; set; }
+
+        /// <summary>
+        /// 当前层
+        /// </summary>
+        short Layer_2 { get; set; }
+
+        /// <summary>
+        /// 已完成任务号
+        /// </summary>
+        int FinishedTask_2 { get; set; }
+
+        /// <summary>
+        /// X轴位置(0.1毫米) 行走
+        /// </summary>
+        [IgnoreChanging]
+        int TravelPos_2 { get; set; }
+
+        /// <summary>
+        /// Y轴位置 提升
+        /// </summary>
+        [IgnoreChanging]
+        int LiftPos_2 { get; set; }
+
+        /// <summary>
+        /// Z轴位置 货叉
+        /// </summary>
+        [IgnoreChanging]
+        int ForkPos_2 { get; set; }
+
+        /// <summary>
+        /// 备用 PLCname=Start_number1
+        /// </summary>
+        short RES9_2 { get; set; }
+
+        /// <summary>
+        /// 备用 PLCname=End_number2
+        /// </summary>
+        short RES10_2 { get; set; }
+
+        /// <summary>
+        /// 总里程
+        /// </summary>
+        [IgnoreChanging]
+        float TotalKM_2 { get; set; }
+
+        /// <summary>
+        /// 货物类型
+        /// </summary>
+        short GoodsType_2 { get; set; }
+
+        /// <summary>
+        /// 运行时长
+        /// </summary>
+        [IgnoreChanging]
+        float Runtime_2 { get; set; }
+
+        /// <summary>
+        /// 备用 PLCname=ForkPos2
+        /// </summary>
+        int RES11_2 { get; set; }
+
+        /// <summary>
+        /// 备用 PLCname=Dest_Xmm
+        /// </summary>
+        int RES12_2 { get; set; }
+
+        /// <summary>
+        /// 备用 PLCname=Dest_Ymm
+        /// </summary>
+        int RES13_2 { get; set; }
+
+        /// <summary>
+        /// 备用 PLCname=Dest_Zmm
+        /// </summary>
+        int RES14_2 { get; set; }
+
+        #endregion 二工位
+
+        #region 公用
+
+        /// <summary>
+        /// 堆垛机模式
+        /// </summary>
+        SCMode SRMMode { get; set; }
+
+        /// <summary>
+        /// 堆垛机状态
+        /// </summary>
+        SCRunStatus SRMStatus { get; set; }
+
+        /// <summary>
+        /// 总里程
+        /// </summary>
+        [IgnoreChanging]
+        float TotalKM { get; set; }
+
+        /// <summary>
+        /// 运行时长
+        /// </summary>
+        [IgnoreChanging]
+        float Runtime { get; set; }
+
+        /// <summary>
+        /// 堆垛机是否异常 1:异常 0:正常
+        /// </summary>
+        short Alarm { get; set; }
+
+        #endregion 公用
+    }
+}

+ 17 - 0
WCS.Entity.Protocol/SRM/ISRM537.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WCS.Entity.Protocol.SRM;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// 堆垛机异常读取
+    /// </summary>
+    public interface ISRM537 : IProtocol
+    {
+        SCAlarm SCAlarm { get; set; }
+    }
+}

+ 140 - 0
WCS.Entity.Protocol/SRM/SRMEnum.cs

@@ -0,0 +1,140 @@
+using System;
+
+namespace WCS.Entity.Protocol.SRM
+{
+    /// <summary>
+    /// 速度模式
+    /// </summary>
+    public enum SCSpeedMode : short
+    {
+        正常 = 0,
+        低速 = 1
+    }
+
+    /// <summary>
+    /// 运行状态
+    /// </summary>
+    public enum SCRunStatus : short
+    {
+        空闲 = 1,
+        取货行走 = 2,
+        取货伸叉 = 3,
+        取货抬叉 = 4,
+        取货收叉 = 5,
+        放货行走 = 6,
+        放货伸叉 = 7,
+        取货降叉 = 8,
+        放货收叉 = 9,
+        维护 = 99
+    }
+
+    /// <summary>
+    /// 运行模式
+    /// </summary>
+    public enum SCMode : short
+    {
+        远程 = 1,
+        半自动 = 2,
+        手动 = 3,
+        维修 = 4
+    }
+
+    /// <summary>
+    /// 货叉状态
+    /// </summary>
+    [Flags]
+    public enum SRMForkStatus : ushort
+    {
+        握手 = 1 << 0,
+        取货完成 = 1 << 1,
+        放货完成 = 1 << 2,
+        设备故障 = 1 << 3,
+        任务完成 = 1 << 4,
+        有货 = 1 << 5,
+        货叉中位 = 1 << 6,
+        WCS能否发任务 = 1 << 7,
+        备用1 = 1 << 8,
+        备用2 = 1 << 9,
+        备用3 = 1 << 10,
+        备用4 = 1 << 11,
+        备用5 = 1 << 12,
+        备用6 = 1 << 13,
+        备用7 = 1 << 14,
+        备用8 = 1 << 15,
+    }
+
+    /// <summary>
+    /// 堆垛机报警
+    /// </summary>
+    [Flags]
+    public enum SCAlarm : ulong
+    {
+        无 = 0,
+        主柜急停 = 1L << 0,
+        分柜急停 = 1L << 1,
+        取货点异常 = 1L << 2,
+        放货点有货 = 1L << 3,
+        货叉取货完成后无货 = 1L << 4,
+        货叉无任务有货异常 = 1L << 5,
+        货叉运行超时 = 1L << 6,
+        货叉左侧超行程 = 1L << 7,
+        货物左前坍塌 = 1L << 8,
+        货物右前坍塌 = 1L << 9,
+        前限位触发 = 1L << 10,
+        后限位触发 = 1L << 11,
+        上限位触发 = 1L << 12,
+        下限位触发 = 1L << 13,
+        超载限位触发 = 1L << 14,
+        松绳限位触发1 = 1L << 15,
+        行走运动超行程 = 1L << 16,
+        起升运动超行程 = 1L << 17,
+        行走变频器报警 = 1L << 18,
+        提升变频器报警 = 1L << 19,
+        货叉变频器报警 = 1L << 20,
+        提升超速报警 = 1L << 21,
+        风扇, 灯, 插座空开 = 1L << 22,
+        触摸屏, 光通讯, 激光测距空开 = 1L << 23,
+        行走马达保护器 = 1L << 24,
+        行走抱闸空开 = 1L << 25,
+        起升马达保护器 = 1L << 26,
+        起升抱闸空开 = 1L << 27,
+        货叉马达保护器 = 1L << 28,
+        货叉抱闸空开 = 1L << 29,
+        安全门打开 = 1L << 30,
+        安全继电器报警 = 1L << 31,
+        当前货位已禁用 = 1L << 32,
+        组态中断报警 = 1L << 33,
+        货物左前超出 = 1L << 34,
+        货物左后超出 = 1L << 35,
+        货物右前超出 = 1L << 36,
+        货物右后超出 = 1L << 37,
+        相序保护 = 1L << 38,
+        货物右超高1M5 = 1L << 39,
+        安全门1报警 = 1L << 40,
+        安全门2报警 = 1L << 41,
+        行走测距信号丢失报警 = 1L << 42,
+        提升测距信号丢失报警 = 1L << 43,
+        行走定位失败 = 1L << 44,
+        提升定位失败 = 1L << 45,
+        回中定位失败 = 1L << 46,
+
+        //根据堆垛机通讯协议定义 下述报警暂时不存在
+        堆垛机巷道有人进入, 光通讯中断 = 1L << 47,
+
+        货叉位置错误 = 1L << 48,
+        货叉编码器报警 = 1L << 49,
+        货叉编码器报警中间位 = 1L << 50,
+        货叉中位光电异常 = 1L << 51,
+        载货台电源空开 = 1L << 52,
+        按钮, 安全回路空开 = 1L << 53,
+        货物左后坍塌 = 1L << 54,
+        货物右后坍塌 = 1L << 55,
+        登梯口急停 = 1L << 56,
+        货物左超高1M9 = 1L << 57,
+        货物右超高1M9 = 1L << 58,
+        松绳限位触发2 = 1L << 59,
+        货叉右侧超行程 = 1L << 60,
+        取放货托盘总数超限 = 1L << 61,
+        安全门急停 = 1L << 62,
+    }
+}

+ 158 - 0
WCS.Entity.Protocol/SRM/WCS_SRM520.cs

@@ -0,0 +1,158 @@
+using SqlSugar;
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.SRM;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// 堆垛机协议,WCS写入
+    /// </summary>
+    [SugarTable(nameof(WCS_SRM520), "堆垛机协议,WCS写入")]
+    [DataContract]
+    public class WCS_SRM520 : WCS_PROTOCOLDATA, ISRM520
+    {
+        [SugarColumn(ColumnDescription = "WCS心跳信号")]
+        [DataMember(Order = 0)]
+        public short Handshake_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "货物数量")]
+        [DataMember(Order = 1)]
+        public short RES1_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用")]
+        [DataMember(Order = 2)]
+        public short RES2_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "货物类型")]
+        [DataMember(Order = 3)]
+        public short GoodsType_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "速度")]
+        [DataMember(Order = 4)]
+        public SCSpeedMode SpeedMode_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始行")]
+        [DataMember(Order = 5)]
+        public short SLine_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始列")]
+        [DataMember(Order = 6)]
+        public short SCol_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始层")]
+        [DataMember(Order = 7)]
+        public short SLayer_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始深度")]
+        [DataMember(Order = 8)]
+        public short SDepth_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标行")]
+        [DataMember(Order = 9)]
+        public short ELine_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标列")]
+        [DataMember(Order = 10)]
+        public short ECol_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标层")]
+        [DataMember(Order = 11)]
+        public short ELayer_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标深度")]
+        [DataMember(Order = 12)]
+        public short EDepth_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "任务号")]
+        [DataMember(Order = 13)]
+        public int TaskID_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "触发")]
+        [DataMember(Order = 14)]
+        public short VoucherNo_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "完成任务触发")]
+        [DataMember(Order = 15)]
+        public short FinishedACK_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用3")]
+        [DataMember(Order = 16)]
+        public short RES3_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用4")]
+        [DataMember(Order = 17)]
+        public short RES4_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "WCS心跳信号")]
+        [DataMember(Order = 18)]
+        public short Handshake_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "货物数量")]
+        [DataMember(Order = 19)]
+        public short RES1_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用2")]
+        [DataMember(Order = 20)]
+        public short RES2_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "货物类型")]
+        [DataMember(Order = 21)]
+        public short GoodsType_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "行驶速度")]
+        [DataMember(Order = 22)]
+        public SCSpeedMode SCSpeedMode_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始行")]
+        [DataMember(Order = 23)]
+        public short SLine_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始列")]
+        [DataMember(Order = 24)]
+        public short SCol_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始层")]
+        [DataMember(Order = 25)]
+        public short SLayer_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始深度")]
+        [DataMember(Order = 26)]
+        public short SDepth_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标行")]
+        [DataMember(Order = 27)]
+        public short ELine_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标列")]
+        [DataMember(Order = 28)]
+        public short ECol_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标层")]
+        [DataMember(Order = 29)]
+        public short ELayer_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标深度")]
+        [DataMember(Order = 30)]
+        public short EDepth_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "任务号")]
+        [DataMember(Order = 31)]
+        public int TaskID_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "触发")]
+        [DataMember(Order = 32)]
+        public short VoucherNo_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "完成任务触发")]
+        [DataMember(Order = 33)]
+        public short FinishedACK_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用3")]
+        [DataMember(Order = 34)]
+        public short RES3_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用4")]
+        [DataMember(Order = 35)]
+        public short RES4_2 { get; set; }
+    }
+}

+ 266 - 0
WCS.Entity.Protocol/SRM/WCS_SRM521.cs

@@ -0,0 +1,266 @@
+using SqlSugar;
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.SRM;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// 堆垛机协议,WCS只读
+    /// </summary>
+    [SugarTable(nameof(WCS_SRM521), "堆垛机协议,WCS只读")]
+    [DataContract]
+    public class WCS_SRM521 : WCS_PROTOCOLDATA, ISRM521
+    {
+        [SugarColumn(ColumnDescription = "货叉状态")]
+        [DataMember(Order = 0)]
+        public SRMForkStatus ForkStatus_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "模式")]
+        [DataMember(Order = 1)]
+        public SCMode Mode_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "运行状态")]
+        [DataMember(Order = 2)]
+        public SCRunStatus Status_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始行")]
+        [DataMember(Order = 3)]
+        public short SLine_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始列")]
+        [DataMember(Order = 4)]
+        public short SCol_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始层")]
+        [DataMember(Order = 5)]
+        public short SLayer_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始深度")]
+        [DataMember(Order = 6)]
+        public short SDepth_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标行")]
+        [DataMember(Order = 7)]
+        public short ELine_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标列")]
+        [DataMember(Order = 8)]
+        public short ECol_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标层")]
+        [DataMember(Order = 9)]
+        public short ELayer_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标深度")]
+        [DataMember(Order = 10)]
+        public short EDepth_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "任务号")]
+        [DataMember(Order = 11)]
+        public int TaskID_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "触发信号")]
+        [DataMember(Order = 12)]
+        public short VoucherNo_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "当前行")]
+        [DataMember(Order = 13)]
+        public short Line_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "当前列")]
+        [DataMember(Order = 14)]
+        public short Col_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "当前层")]
+        [DataMember(Order = 15)]
+        public short Layer_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "已完成任务号")]
+        [DataMember(Order = 16)]
+        public int FinishedTask_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "X轴位置(0.1毫米) 行走")]
+        [DataMember(Order = 17)]
+        public int TravelPos_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "Y轴位置 提升")]
+        [DataMember(Order = 18)]
+        public int LiftPos_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "Z轴位置 货叉")]
+        [DataMember(Order = 19)]
+        public int ForkPos_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用 PLCname=Start_number1")]
+        [DataMember(Order = 20)]
+        public short RES9_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用 PLCname=End_number2")]
+        [DataMember(Order = 21)]
+        public short RES10_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "总里程")]
+        [DataMember(Order = 22)]
+        public float TotalKM_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "货物类型")]
+        [DataMember(Order = 23)]
+        public short GoodsType_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "运行时长")]
+        [DataMember(Order = 24)]
+        public float Runtime_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用 PLCname=ForkPos2")]
+        [DataMember(Order = 25)]
+        public int RES11_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用 PLCname=Dest_Xmm")]
+        [DataMember(Order = 26)]
+        public int RES12_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用 PLCname=Dest_Ymm")]
+        [DataMember(Order = 27)]
+        public int RES13_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用 PLCname=Dest_Zmm")]
+        [DataMember(Order = 28)]
+        public int RES14_1 { get; set; }
+
+        [SugarColumn(ColumnDescription = "货叉状态")]
+        [DataMember(Order = 29)]
+        public SRMForkStatus ForkStatus_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "模式")]
+        [DataMember(Order = 30)]
+        public SCMode Mode_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "运行状态")]
+        [DataMember(Order = 31)]
+        public SCRunStatus Status_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始行")]
+        [DataMember(Order = 32)]
+        public short SLine_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始列")]
+        [DataMember(Order = 33)]
+        public short SCol_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始层")]
+        [DataMember(Order = 34)]
+        public short SLayer_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始深度")]
+        [DataMember(Order = 35)]
+        public short SDepth_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标行")]
+        [DataMember(Order = 36)]
+        public short ELine_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标列")]
+        [DataMember(Order = 37)]
+        public short ECol_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标层")]
+        [DataMember(Order = 38)]
+        public short ELayer_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标深度")]
+        [DataMember(Order = 39)]
+        public short EDepth_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "任务号")]
+        [DataMember(Order = 40)]
+        public int TaskID_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "触发信号")]
+        [DataMember(Order = 41)]
+        public short VoucherNo_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "当前行")]
+        [DataMember(Order = 42)]
+        public short Line_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "当前列")]
+        [DataMember(Order = 43)]
+        public short Col_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "当前层")]
+        [DataMember(Order = 44)]
+        public short Layer_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "已完成任务号")]
+        [DataMember(Order = 45)]
+        public int FinishedTask_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "X轴位置(0.1毫米) 行走")]
+        [DataMember(Order = 46)]
+        public int TravelPos_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "Y轴位置 提升")]
+        [DataMember(Order = 47)]
+        public int LiftPos_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "Z轴位置 货叉")]
+        [DataMember(Order = 48)]
+        public int ForkPos_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用 PLCname=Start_number1")]
+        [DataMember(Order = 49)]
+        public short RES9_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用 PLCname=End_number2")]
+        [DataMember(Order = 50)]
+        public short RES10_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "总里程")]
+        [DataMember(Order = 51)]
+        public float TotalKM_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "货物类型")]
+        [DataMember(Order = 52)]
+        public short GoodsType_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "运行时长")]
+        [DataMember(Order = 53)]
+        public float Runtime_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用 PLCname=ForkPos2")]
+        [DataMember(Order = 54)]
+        public int RES11_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用 PLCname=Dest_Xmm")]
+        [DataMember(Order = 55)]
+        public int RES12_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用 PLCname=Dest_Ymm")]
+        [DataMember(Order = 56)]
+        public int RES13_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用 PLCname=Dest_Zmm")]
+        [DataMember(Order = 57)]
+        public int RES14_2 { get; set; }
+
+        [SugarColumn(ColumnDescription = "堆垛机模式")]
+        [DataMember(Order = 58)]
+        public SCMode SRMMode { get; set; }
+
+        [SugarColumn(ColumnDescription = "堆垛机状态")]
+        [DataMember(Order = 59)]
+        public SCRunStatus SRMStatus { get; set; }
+
+        [SugarColumn(ColumnDescription = "总里程")]
+        [DataMember(Order = 60)]
+        public float TotalKM { get; set; }
+
+        [SugarColumn(ColumnDescription = "运行时长")]
+        [DataMember(Order = 61)]
+        public float Runtime { get; set; }
+
+        [SugarColumn(ColumnDescription = "堆垛机是否异常 1:异常 0:正常")]
+        [DataMember(Order = 62)]
+        public short Alarm { get; set; }
+    }
+}

+ 18 - 0
WCS.Entity.Protocol/SRM/WCS_SRM537.cs

@@ -0,0 +1,18 @@
+using SqlSugar;
+using System.Runtime.Serialization;
+using WCS.Entity.Protocol.SRM;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// 堆垛机异常读取
+    /// </summary>
+    [SugarTable(nameof(WCS_SRM537), "堆垛机异常读取")]
+    [DataContract]
+    public class WCS_SRM537 : WCS_PROTOCOLDATA, ISRM537
+    {
+        [SugarColumn(ColumnDescription = "堆垛机报警")]
+        [DataMember(Order = 0)]
+        public SCAlarm SCAlarm { get; set; }
+    }
+}

+ 58 - 0
WCS.Entity.Protocol/Station/IStation520.cs

@@ -0,0 +1,58 @@
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public interface IStation520 : IProtocol
+    {
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        int Tasknum { get; set; }
+
+        /// <summary>
+        /// 货物数条码 涂布入库口代表AGV任务
+        /// </summary>
+        int Goodscode { get; set; }
+
+        /// <summary>
+        /// 货物数量(1.两个位置放1个货物,2.两个位置放2个货物)
+        /// </summary>
+        short Goodsnum { get; set; }
+
+        /// <summary>
+        /// 货物高度
+        /// </summary>
+        short GoodsSize { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        short Goodsstart { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        short Goodsend { get; set; }
+
+        /// <summary>
+        /// 请求
+        /// </summary>
+        IstationRequest Request { get; set; }
+
+        /// <summary>
+        /// 命令类型
+        /// </summary>
+        IstationCmdType CmdType { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        short VoucherNo { get; set; }
+
+        /// <summary>
+        /// 输送机状态
+        /// </summary>
+        IstationStatus Istation521Status { get; set; }
+    }
+}

+ 108 - 0
WCS.Entity.Protocol/Station/IStation521.cs

@@ -0,0 +1,108 @@
+using System;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// 输送机交互信号 读
+    /// </summary>
+    public interface IStation521 : IProtocol
+    {
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        int Tasknum { get; set; }
+
+        /// <summary>
+        /// 货物数条码 涂布入库扫码位是AGV任务号
+        /// </summary>
+        int Goodscode { get; set; }
+
+        /// <summary>
+        /// 货物数量(1.两个位置放1个货物,2.两个位置放2个货物)
+        /// </summary>
+        short Goodsnum { get; set; }
+
+        /// <summary>
+        /// 货物高度
+        /// </summary>
+        short GoodsSize { get; set; }
+
+        /// <summary>
+        /// 起始地址
+        /// </summary>
+        short Goodsstart { get; set; }
+
+        /// <summary>
+        /// 目标地址
+        /// </summary>
+        short Goodsend { get; set; }
+
+        /// <summary>
+        /// 请求
+        /// </summary>
+        IstationRequest Request { get; set; }
+
+        /// <summary>
+        /// 命令类型
+        /// </summary>
+        IstationCmdType CmdType { get; set; }
+
+        /// <summary>
+        /// 凭证号 每次累加
+        /// </summary>
+        short VoucherNo { get; set; }
+
+        /// <summary>
+        /// 输送机状态
+        /// </summary>
+        IstationStatus Status { get; set; }
+    }
+
+    /// <summary>
+    /// 输送机请求
+    /// </summary>
+    public enum IstationRequest : short
+    {
+        无 = 0,
+        扫码入库 = 1,
+        请求分配目标地址 = 2,
+        月台出库口任务完成 = 3,
+        堆垛机放货完成请求目标地址 = 4,
+    }
+
+    /// <summary>
+    /// 输送机确认
+    /// </summary>
+    public enum IstationCmdType : short
+    {
+        无 = 0,
+        扫码入库 = 1,
+        分配目标地址 = 2,
+        月台出库口任务完成 = 3,
+        堆垛机放货完成请求目标地址 = 4,
+    }
+
+    /// <summary>
+    /// 输送机状态
+    /// </summary>
+    [Flags]
+    public enum IstationStatus : ushort
+    {
+        手动入库 = 1 << 0,
+        备用2 = 1 << 1,
+        RES3 = 1 << 2,
+        上位机未分配任务 = 1 << 3,
+        光电状态 = 1 << 4,
+        外检扫码故障 = 1 << 5,
+        前超长故障 = 1 << 6,
+        后超长故障 = 1 << 7,
+        左超宽故障 = 1 << 8,
+        右超宽故障 = 1 << 9,
+        超高故障 = 1 << 10,
+        条码未读出 = 1 << 11,
+        超重 = 1 << 12,
+        AGV放货完成信号 = 1 << 13,
+        AGV取货完成信号 = 1 << 14,
+        RES7 = 1 << 15,
+    }
+}

+ 79 - 0
WCS.Entity.Protocol/Station/IStation523.cs

@@ -0,0 +1,79 @@
+using System;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// 输送机状态读取协议
+    /// </summary>
+    public interface IStation523 : IProtocol
+    {
+        /// <summary>
+        /// 警报
+        /// </summary>
+        StationFault Alarm { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        short RES { get; set; }
+
+        /// <summary>
+        /// 允许状态 值为零时是手动
+        /// </summary>
+        StationStatus Status { get; set; }
+
+        /// <summary>
+        /// 运行时间
+        /// </summary>
+        [IgnoreChanging]
+        float RunTime { get; set; }
+    }
+
+    /// <summary>
+    /// 输送机故障
+    /// </summary>
+    [Flags]
+    public enum StationFault : ushort
+    {
+        总故障 = 1 << 0,
+        急停故障 = 1 << 1,
+        超时故障 = 1 << 2,
+        驱动故障 = 1 << 3,
+        空气开关故障 = 1 << 4,
+        传感器异常故障 = 1 << 5,
+        其它故障汇入 = 1 << 6,
+        无Ready信号请检查柜内空开 = 1 << 7,
+        超时故障2 = 1 << 8,
+        驱动故障2 = 1 << 9,
+        空气开关故障2 = 1 << 10,
+        左极限故障 = 1 << 11,
+        右极限故障 = 1 << 12,
+        无Ready信号请检查柜内空开2 = 1 << 13,
+        前极限故障 = 1 << 14,
+        后极限故障 = 1 << 15,
+    }
+
+    /// <summary>
+    /// 输送机状态
+    /// </summary>
+    [Flags]
+    public enum StationStatus : ushort
+    {
+        自动 = 1 << 0,
+        选中状态位 = 1 << 1,
+        有货状态位 = 1 << 2,
+        运行状态位 = 1 << 3,
+        正转 = 1 << 4,
+        反转 = 1 << 5,
+        上升_右转 = 1 << 6,
+        下降_左转 = 1 << 7,
+        高位 = 1 << 8,
+        低位 = 1 << 9,
+        左位 = 1 << 10,
+        中位 = 1 << 11,
+        右位 = 1 << 12,
+        前位 = 1 << 13,
+        后位 = 1 << 14,
+        备用 = 1 << 15,
+    }
+}

+ 53 - 0
WCS.Entity.Protocol/Station/WCS_Station520.cs

@@ -0,0 +1,53 @@
+using SqlSugar;
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.Station
+{
+    /// <summary>
+    /// 站台交互信号 写记录表
+    /// </summary>
+    [SugarTable(nameof(WCS_Station520), "站台交互信号 写记录表")]
+    [DataContract]
+    public class WCS_Station520 : WCS_PROTOCOLDATA, IStation520
+    {
+        [SugarColumn(ColumnDescription = "任务号")]
+        [DataMember(Order = 0)]
+        public int Tasknum { get; set; }
+
+        [SugarColumn(ColumnDescription = "货物数条码 涂布入库口代表AGV任务")]
+        [DataMember(Order = 1)]
+        public int Goodscode { get; set; }
+
+        [SugarColumn(ColumnDescription = "货物数量(1.两个位置放1个货物,2.两个位置放2个货物)")]
+        [DataMember(Order = 2)]
+        public short Goodsnum { get; set; }
+
+        [SugarColumn(ColumnDescription = "货物高度")]
+        [DataMember(Order = 3)]
+        public short GoodsSize { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始地址")]
+        [DataMember(Order = 4)]
+        public short Goodsstart { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标地址")]
+        [DataMember(Order = 5)]
+        public short Goodsend { get; set; }
+
+        [SugarColumn(ColumnDescription = "请求")]
+        [DataMember(Order = 6)]
+        public IstationRequest Request { get; set; }
+
+        [SugarColumn(ColumnDescription = "命令类型")]
+        [DataMember(Order = 7)]
+        public IstationCmdType CmdType { get; set; }
+
+        [SugarColumn(ColumnDescription = "凭证号 每次累加")]
+        [DataMember(Order = 8)]
+        public short VoucherNo { get; set; }
+
+        [SugarColumn(ColumnDescription = "输送机状态")]
+        [DataMember(Order = 9)]
+        public IstationStatus Istation521Status { get; set; }
+    }
+}

+ 50 - 0
WCS.Entity.Protocol/Station/WCS_Station521.cs

@@ -0,0 +1,50 @@
+using SqlSugar;
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.Station
+{
+    [SugarTable(nameof(WCS_Station521), "输送机交互信号 读记录表")]
+    [DataContract]
+    public class WCS_Station521 : WCS_PROTOCOLDATA, IStation521
+    {
+        [SugarColumn(ColumnDescription = "任务号")]
+        [DataMember(Order = 0)]
+        public int Tasknum { get; set; }
+
+        [SugarColumn(ColumnDescription = "货物数条码 涂布入库扫码位是AGV任务号")]
+        [DataMember(Order = 1)]
+        public int Goodscode { get; set; }
+
+        [SugarColumn(ColumnDescription = "货物数量(1.两个位置放1个货物,2.两个位置放2个货物)")]
+        [DataMember(Order = 2)]
+        public short Goodsnum { get; set; }
+
+        [SugarColumn(ColumnDescription = "货物高度")]
+        [DataMember(Order = 3)]
+        public short GoodsSize { get; set; }
+
+        [SugarColumn(ColumnDescription = "起始地址")]
+        [DataMember(Order = 4)]
+        public short Goodsstart { get; set; }
+
+        [SugarColumn(ColumnDescription = "目标地址")]
+        [DataMember(Order = 5)]
+        public short Goodsend { get; set; }
+
+        [SugarColumn(ColumnDescription = "请求")]
+        [DataMember(Order = 6)]
+        public IstationRequest Request { get; set; }
+
+        [SugarColumn(ColumnDescription = "命令类型")]
+        [DataMember(Order = 7)]
+        public IstationCmdType CmdType { get; set; }
+
+        [SugarColumn(ColumnDescription = "凭证号 每次累加")]
+        [DataMember(Order = 8)]
+        public short VoucherNo { get; set; }
+
+        [SugarColumn(ColumnDescription = "输送机状态")]
+        [DataMember(Order = 9)]
+        public IstationStatus Status { get; set; }
+    }
+}

+ 29 - 0
WCS.Entity.Protocol/Station/WCS_Station523.cs

@@ -0,0 +1,29 @@
+using SqlSugar;
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.Station
+{
+    /// <summary>
+    /// 站台状态读取记录表
+    /// </summary>
+    [SugarTable(nameof(WCS_Station523), "站台状态读取记录表")]
+    [DataContract]
+    public class WCS_Station523 : WCS_PROTOCOLDATA, IStation523
+    {
+        [SugarColumn(ColumnDescription = "警报")]
+        [DataMember(Order = 0)]
+        public StationFault Alarm { get; set; }
+
+        [SugarColumn(ColumnDescription = "备用")]
+        [DataMember(Order = 1)]
+        public short RES { get; set; }
+
+        [SugarColumn(ColumnDescription = "允许状态 值为零时是手动")]
+        [DataMember(Order = 2)]
+        public StationStatus Status { get; set; }
+
+        [SugarColumn(ColumnDescription = "运行时间")]
+        [DataMember(Order = 3)]
+        public float RunTime { get; set; }
+    }
+}

+ 14 - 0
WCS.Entity.Protocol/WCS.Entity.Protocol.csproj

@@ -0,0 +1,14 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.1</TargetFramework>
+    <Nullable>enable</Nullable>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+    <Description>$(describe)</Description>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="WCS.Entity" Version="1.0.2" />
+  </ItemGroup>
+
+</Project>

+ 129 - 0
WCS.Entity.Protocol/WCS_AGVTask.cs

@@ -0,0 +1,129 @@
+using SqlSugar;
+using System;
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// AGV任务中间表
+    /// </summary>
+    [SugarTable(nameof(WCS_AGVTask), "AGV任务中间表")]
+    [DataContract]
+    public class WCS_AGVTask
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "ID"), DataMember(Order = 0)]
+        public int ID { get; set; }
+
+        /// <summary>
+        /// AGVID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "AGVID", Length = 20), DataMember(Order = 1)]
+        public string AGVID { 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)]
+        [DataMember(Order = 6)]
+        public string Station { get; set; }
+
+        /// <summary>
+        /// 位置
+        /// </summary>
+        [SugarColumn(ColumnDescription = "位置", Length = 20)]
+        [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 Goodsnum { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建时间")]
+        [DataMember(Order = 8)]
+        public DateTime CreateTime { get; set; }
+
+        /// <summary>
+        /// WCS更新时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "WCS更新时间")]
+        [DataMember(Order = 9)]
+        public DateTime? UpdateTime { get; set; }
+
+        /// <summary>
+        /// AGV更新时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "AGV更新时间")]
+        [DataMember(Order = 10)]
+        public DateTime? AGVUpdateTime { get; set; }
+
+        /// <summary>
+        ///更新用户
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新用户")]
+        [DataMember(Order = 11)]
+        public string UPDATEUSER { get; set; }
+
+        /// <summary>
+        /// 更新用户详细信息
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(UPDATEUSER))]
+        public WCS_USERS USER { get; set; }
+    }
+
+    public enum AGVTaskStatus
+    {
+        新建 = 0,
+        确认 = 5,
+        执行 = 10,
+        请求_允许 = 20,
+        取放完成 = 21,
+        请求_允许2 = 30,
+        取放完成2 = 31,
+        完成 = 99,
+        完成扫码 = 100,
+        取消 = 106
+    }
+
+    public enum AGVTaskType
+    {
+        入库 = 1,
+        叫料 = 2
+    }
+}

+ 47 - 0
WCS.Entity.Protocol/WCS_StatusLog.cs

@@ -0,0 +1,47 @@
+using SqlSugar;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// 任务状态变更记录
+    /// </summary>
+    [SugarTable(nameof(WCS_StatusLog), "任务状态变更记录")]
+    public class WCS_StatusLog : OBJ
+    {
+        /// <summary>
+        /// 关联任务ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "关联任务ID")]
+        public int WCS_TASKID { get; set; }
+
+        /// <summary>
+        /// 新的状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "新的状态")]
+        public TaskStatus NewStatus { get; set; }
+
+        /// <summary>
+        /// 旧的状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "旧的状态")]
+        public TaskStatus OldStatus { get; set; }
+
+        /// <summary>
+        /// 上传的状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "上传的状态")]
+        public TaskStatus upStatus { get; set; }
+
+        /// <summary>
+        /// 产生本次变化的节点
+        /// </summary>
+        [SugarColumn(ColumnDescription = "产生本次变化的节点")]
+        public string Node { get; set; }
+
+        /// <summary>
+        /// 变化的内容
+        /// </summary>
+        [SugarColumn(ColumnDescription = "变化的内容")]
+        public string msg { get; set; }
+    }
+}

+ 53 - 0
WCS.Entity.Protocol/WCS_SystemConfig.cs

@@ -0,0 +1,53 @@
+using SqlSugar;
+
+namespace WCS.Entity.Protocol
+{
+    /// <summary>
+    /// 系统配置
+    /// </summary>
+    [SugarTable(nameof(WCS_SystemConfig), "系统配置")]
+    public class WCS_SystemConfig : OBJ
+    {
+        /// <summary>
+        /// 设备编号 堆垛机/BCR
+        /// </summary>
+        [SugarColumn(ColumnDescription = "设备编号")]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 描述
+        /// </summary>
+        [SugarColumn(ColumnDescription = "描述")]
+        public string Describe { get; set; }
+
+        /// <summary>
+        /// 所属设备
+        /// </summary>
+        [SugarColumn(ColumnDescription = "所属设备")]
+        public string DEVICECODE { get; set; }
+
+        /// <summary>
+        /// 所属设备信息
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(DEVICECODE))]
+        public WCS_DEVICE DEVICE { get; set; }
+
+        /// <summary>
+        /// 巷道
+        /// </summary>
+        [SugarColumn(ColumnDescription = "所属设备")]
+        public string TUNNEL { get; set; }
+
+        /// <summary>
+        /// 所属巷道信息
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(TUNNEL))]
+        public WCS_DEVICE TUNNELDEVICE { get; set; }
+
+        /// <summary>
+        /// 方向
+        /// </summary>
+        [SugarColumn(ColumnDescription = "方向")]
+        public string Direction { get; set; }
+    }
+}

+ 365 - 0
WCS.Entity.Protocol/WCS_TASK.cs

@@ -0,0 +1,365 @@
+using SqlSugar;
+using System;
+using WCS.Entity.Protocol;
+
+namespace WCS.Entity
+{
+    /// <summary>
+    /// 任务表
+    /// </summary>
+    [SugarTable(nameof(WCS_TASK), "任务表")]
+    public class WCS_TASK : OBJ
+    {
+        /// <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)]
+        public string ADDRNEXT { get; set; }
+
+        /// <summary>
+        /// 巷道
+        /// </summary>
+        [SugarColumn(ColumnDescription = "巷道", Length = 10)]
+        public string TUNNEL { get; set; }
+
+        /// <summary>
+        /// 楼层
+        /// </summary>
+        [SugarColumn(ColumnDescription = "楼层")]
+        public int FLOOR { get; set; }
+
+        /// <summary>
+        /// 设备
+        /// </summary>
+        [SugarColumn(ColumnDescription = "设备", Length = 20)]
+        public string DEVICE { get; set; }
+
+        /// <summary>
+        /// 堆垛机放货站台
+        /// </summary>
+        [SugarColumn(ColumnDescription = "堆垛机放货站台", Length = 20)]
+        public string SRMSTATION { get; set; }
+
+        /// <summary>
+        ///创建时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建时间")]
+        public DateTime CREATETIME { get; set; } = DateTime.Now;
+
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "开始时间")]
+        public DateTime? STARTTIME { get; set; }
+
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "结束时间")]
+        public DateTime? ENDTIME { get; set; }
+
+        /// <summary>
+        /// 单号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "单号")]
+        public int DOCID { get; set; }
+
+        /// <summary>
+        /// 托盘类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "托盘类型")]
+        public short PALLETTYPE { get; set; }
+
+        /// <summary>
+        /// 产线
+        /// </summary>
+        [SugarColumn(ColumnDescription = "产线")]
+        public short PRODLINE { get; set; }
+
+        /// <summary>
+        /// 满盘数量
+        /// </summary>
+        [SugarColumn(ColumnDescription = "满盘数量")]
+        public short FULLQTY { get; set; }
+
+        /// <summary>
+        /// 高度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "高度")]
+        public short HEIGHT { get; set; }
+
+        /// <summary>
+        /// WMS任务号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "WMS任务号")]
+        public int WMSTASK { get; set; }
+
+        /// <summary>
+        /// 任务组ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "任务组ID")]
+        public string TaskGroupKey { get; set; }
+
+        /// <summary>
+        /// 更新状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新状态")]
+        public TaskStatus UPLOADED { get; set; }
+
+        /// <summary>
+        /// AGV任务号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "AGV任务号")]
+        public int AGVTASKID { get; set; }
+
+        /// <summary>
+        /// AGV任务详细信息
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(AGVTASKID))]
+        public WCS_AGVTask AGVTASK { get; set; }
+
+        /// <summary>
+        /// 优先级
+        /// </summary>
+        [SugarColumn(ColumnDescription = "优先级")]
+        public int Priority { get; set; }
+
+        /// <summary>
+        /// 手动处理备注
+        /// </summary>
+        [SugarColumn(ColumnDescription = "手动处理备注")]
+        public string ManualRemarks { get; set; }
+
+        /// <summary>
+        /// 产品长度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "产品长度")]
+        public decimal Length { get; set; }
+
+        /// <summary>
+        /// 产品编码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "产品编码")]
+        public string MaterialCode { get; set; }
+    }
+
+    /// <summary>
+    /// 任务表
+    /// </summary>
+    [SugarTable(nameof(WCS_TASK_OLD), "任务表")]
+    public class WCS_TASK_OLD : OBJ
+    {
+        /// <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)]
+        public string ADDRNEXT { get; set; }
+
+        /// <summary>
+        /// 巷道
+        /// </summary>
+        [SugarColumn(ColumnDescription = "巷道", Length = 10)]
+        public string TUNNEL { get; set; }
+
+        /// <summary>
+        /// 楼层
+        /// </summary>
+        [SugarColumn(ColumnDescription = "楼层")]
+        public int FLOOR { get; set; }
+
+        /// <summary>
+        /// 设备
+        /// </summary>
+        [SugarColumn(ColumnDescription = "设备", Length = 20)]
+        public string DEVICE { get; set; }
+
+        /// <summary>
+        /// 堆垛机放货站台
+        /// </summary>
+        [SugarColumn(ColumnDescription = "堆垛机放货站台", Length = 20)]
+        public string SRMSTATION { get; set; }
+
+        /// <summary>
+        ///创建时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建时间")]
+        public DateTime CREATETIME { get; set; } = DateTime.Now;
+
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "开始时间")]
+        public DateTime? STARTTIME { get; set; }
+
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "结束时间")]
+        public DateTime? ENDTIME { get; set; }
+
+        /// <summary>
+        /// 单号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "单号")]
+        public int DOCID { get; set; }
+
+        /// <summary>
+        /// 托盘类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "托盘类型")]
+        public short PALLETTYPE { get; set; }
+
+        /// <summary>
+        /// 产线
+        /// </summary>
+        [SugarColumn(ColumnDescription = "产线")]
+        public short PRODLINE { get; set; }
+
+        /// <summary>
+        /// 满盘数量
+        /// </summary>
+        [SugarColumn(ColumnDescription = "满盘数量")]
+        public short FULLQTY { get; set; }
+
+        /// <summary>
+        /// 高度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "高度")]
+        public short HEIGHT { get; set; }
+
+        /// <summary>
+        /// WMS任务号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "WMS任务号")]
+        public int WMSTASK { get; set; }
+
+        /// <summary>
+        /// 任务组ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "任务组ID")]
+        public string TaskGroupKey { get; set; }
+
+        /// <summary>
+        /// 更新状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新状态")]
+        public TaskStatus UPLOADED { get; set; }
+
+        /// <summary>
+        /// AGV任务号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "AGV任务号")]
+        public int AGVTASKID { get; set; }
+
+        /// <summary>
+        /// AGV任务详细信息
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(AGVTASKID))]
+        public WCS_AGVTask AGVTASK { get; set; }
+
+        /// <summary>
+        /// 优先级
+        /// </summary>
+        [SugarColumn(ColumnDescription = "优先级")]
+        public int Priority { get; set; }
+
+        /// <summary>
+        /// 手动处理备注
+        /// </summary>
+        [SugarColumn(ColumnDescription = "手动处理备注")]
+        public string ManualRemarks { get; set; }
+
+        /// <summary>
+        /// 产品长度
+        /// </summary>
+        [SugarColumn(ColumnDescription = "产品长度")]
+        public decimal Length { get; set; }
+
+        /// <summary>
+        /// 产品编码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "产品编码")]
+        public string MaterialCode { get; set; }
+    }
+
+    public enum TaskType
+    {
+        组盘 = 0,
+        入库 = 1,
+        出库 = 2,
+        移库 = 3,
+        输送 = 5,
+    }
+
+    public enum TaskStatus
+    {
+        新建 = 0,
+        执行中 = 2,
+        入库交管结束 = 3,
+        堆垛机执行 = 5,
+        堆垛机完成 = 6,
+        出库RGV执行 = 9,
+        已完成 = 99,
+        已取消 = 106
+    }
+}