xu.lu 1 жил өмнө
parent
commit
91182490fb
44 өөрчлөгдсөн 826 нэмэгдсэн , 360 устгасан
  1. 6 0
      WCS.Entity/WCS_CacheLineLoc.cs
  2. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/BCR/WCS_BCR80.cs
  3. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/BCR/WCS_BCR81.cs
  4. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/BCR/WCS_BCR83.cs
  5. 6 5
      业务工程/分拣库/WCS.Entity.Protocol/DataStructure/DeviceDataPack.cs
  6. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/DataStructure/SRMData.cs
  7. 3 1
      业务工程/分拣库/WCS.Entity.Protocol/QuestDBBaseEntity.cs
  8. 0 4
      业务工程/分拣库/WCS.Entity.Protocol/RGV/IRGV521.cs
  9. 18 0
      业务工程/分拣库/WCS.Entity.Protocol/RGV/IRGV523.cs
  10. 392 0
      业务工程/分拣库/WCS.Entity.Protocol/RGV/RGVEnum.cs
  11. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/RGV/WCS_RGV520.cs
  12. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/RGV/WCS_RGV521.cs
  13. 41 0
      业务工程/分拣库/WCS.Entity.Protocol/RGV/WCS_RGV523.cs
  14. 26 26
      业务工程/分拣库/WCS.Entity.Protocol/Robot/RobotEnum.cs
  15. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Robot/WCS_Robot520.cs
  16. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Robot/WCS_Robot521.cs
  17. 15 1
      业务工程/分拣库/WCS.Entity.Protocol/Robot/WCS_Robot522.cs
  18. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Robot/WCS_Robot530.cs
  19. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Robot/WCS_Robot531.cs
  20. 8 3
      业务工程/分拣库/WCS.Entity.Protocol/SRM/ISRM523.cs
  21. 121 17
      业务工程/分拣库/WCS.Entity.Protocol/SRM/SrmEnum.cs
  22. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/SRM/WCS_SRM520.cs
  23. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/SRM/WCS_SRM521.cs
  24. 42 0
      业务工程/分拣库/WCS.Entity.Protocol/SRM/WCS_SRM523.cs
  25. 0 25
      业务工程/分拣库/WCS.Entity.Protocol/SRM/WCS_SRM537.cs
  26. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station520.cs
  27. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station521.cs
  28. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station523.cs
  29. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station524.cs
  30. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station525.cs
  31. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station90.cs
  32. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Station/WCS_Station91.cs
  33. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Truss/WCS_Truss520.cs
  34. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Truss/WCS_Truss521.cs
  35. 1 1
      业务工程/分拣库/WCS.Entity.Protocol/Truss/WCS_Truss530.cs
  36. 1 0
      业务工程/分拣库/WCS.Entity.Protocol/Truss/WCS_Truss531.cs
  37. 31 2
      业务工程/分拣库/WCS.Entity.Protocol/WCS_Log.cs
  38. 1 1
      业务工程/分拣库/WCS.WorkEngineering/Extensions/SRMExtension.cs
  39. 6 0
      业务工程/分拣库/WCS.WorkEngineering/Extensions/TaskExtension.cs
  40. 51 245
      业务工程/分拣库/WCS.WorkEngineering/Systems/分拣支线/桁架分流点.cs
  41. 26 5
      业务工程/分拣库/WCS.WorkEngineering/Systems/分拣支线/环形库分流点.cs
  42. 7 0
      业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架缓存放行点.cs
  43. 1 1
      业务工程/分拣库/WCS.WorkEngineering/Systems/环形库/环形库码垛结束.cs
  44. 2 2
      业务工程/分拣库/WCS.WorkEngineering/WorkStart.cs

+ 6 - 0
WCS.Entity/WCS_CacheLineLoc.cs

@@ -74,5 +74,11 @@ namespace WCS.Entity
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDescription = "编辑时间")]
         public DateTime EditTime { get; set; }
+
+        /// <summary>
+        ///  正反面  1正面 2反面
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "正反面")]
+        public int SideNum { get; set; }
     }
 }

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

@@ -9,7 +9,7 @@ namespace WCS.Entity.Protocol.BCR
     /// </summary>
     [DataContract]
     [SugarTable("FJ_BCR80")]
-    public class WCS_BCR80 :  IBCR80
+    public class WCS_BCR80 : IBCR80
     {
         /// <summary>
         /// 内容

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

@@ -9,7 +9,7 @@ namespace WCS.Entity.Protocol.BCR
     /// </summary>
     [DataContract]
     [SugarTable("FJ_BCR81")]
-    public class WCS_BCR81 :  IBCR81
+    public class WCS_BCR81 : IBCR81
     {
         /// <summary>
         /// 内容

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

@@ -10,7 +10,7 @@ namespace WCS.Entity.Protocol.BCR
     /// </summary>
     [DataContract]
     [SugarTable("FJ_BCR83")]
-    public class WCS_BCR83 :  IBCR83
+    public class WCS_BCR83 : IBCR83
     {
         [DataMember(Order = 0)]
         public short Index { get; set; }

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

@@ -17,14 +17,12 @@ namespace WCS.Entity.Protocol.DataStructure
     [DataContract]
     public class DeviceDataPack
     {
-       
         [DataMember(Order = 0)]
         public ProtocolData<WCS_BCR80>[] BCR80 { get; set; }
-      
+
         [DataMember(Order = 1)]
         public ProtocolData<WCS_BCR81>[] BCR81 { get; set; }
 
-        
         [DataMember(Order = 2)]
         public ProtocolData<WCS_BCR83>[] BCR83 { get; set; }
 
@@ -56,7 +54,7 @@ namespace WCS.Entity.Protocol.DataStructure
         public ProtocolData<WCS_SRM521>[] SRM521 { get; set; }
 
         [DataMember(Order = 12)]
-        public ProtocolData<WCS_SRM537>[] SRM537 { get; set; }
+        public ProtocolData<WCS_SRM523>[] SRM523 { get; set; }
 
         [DataMember(Order = 13)]
         public ProtocolData<WCS_Station520>[] Station520 { get; set; }
@@ -106,6 +104,9 @@ namespace WCS.Entity.Protocol.DataStructure
         [DataMember(Order = 26)]
         public int PlaybackSeconds { get; set; }
 
+        [DataMember(Order = 27)]
+        public ProtocolData<WCS_RGV523>[] RGV523 { get; set; }
+
         public Dictionary<string, ProtocolData[]> GetDeviceData()
         {
             List<Tuple<string, ProtocolData>> list = new List<Tuple<string, ProtocolData>>();
@@ -132,9 +133,9 @@ namespace WCS.Entity.Protocol.DataStructure
     {
         [DataMember(Order = 0)]
         public string Code { get; set; }
+
         [DataMember(Order = 1)]
         public DateTime Frame { get; set; }
-
     }
 
     [DataContract]

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

@@ -25,6 +25,6 @@ namespace WCS.Entity.Protocol.DataStructure
         ///  DB523
         /// </summary>
         [DataMember(Order = 5)]
-        public WCS_SRM537 D537 { get; set; } = null!;
+        public WCS_SRM523 D537 { get; set; } = null!;
     }
 }

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

@@ -1,4 +1,5 @@
-using System;
+using SqlSugar;
+using System;
 using System.Runtime.Serialization;
 
 namespace WCS.Entity.Protocol
@@ -9,6 +10,7 @@ namespace WCS.Entity.Protocol
     public class QuestDBBaseEntity
     {
         [DataMember(Order = 0)]
+        
         public DateTime Frame { get; set; }
 
         [DataMember(Order = 1)]

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

@@ -5,10 +5,6 @@ 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>

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

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Text;
+
+namespace WCS.Entity.Protocol.RGV
+{
+    /// <summary>
+    /// rgv523
+    /// </summary>
+    public interface IRGV523 : IProtocol
+    { /// <summary>
+      ///  报警内容
+      /// </summary>
+        [Description("报警内容")]
+        RgvAlarm Alarm { get; set; }
+    }
+}

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

@@ -273,4 +273,396 @@ namespace WCS.Entity.Protocol.RGV
         [Description("备用")]
         RES11 = 1 << 15,
     }
+
+    /// <summary>
+    /// RGV报警项
+    /// </summary>
+    [Description("RGV报警项")]
+    [Flags]
+    public enum RgvAlarm : 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>
+        ///  行走定位失败
+        /// </summary>
+        [Description("行走定位失败")]
+        行走定位失败 = 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>
+        ///  货物左超高
+        /// </summary>
+        [Description("货物左超高")]
+        货物左超高 = 1L << 40,
+
+        /// <summary>
+        ///  货物右超高
+        /// </summary>
+        [Description("货物右超高")]
+        货物右超高 = 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>
+        ///  备用1
+        /// </summary>
+        [Description("备用1")]
+        备用1 = 1L << 48,
+
+        /// <summary>
+        ///  备用2
+        /// </summary>
+        [Description("备用2")]
+        备用2 = 1L << 49,
+
+        /// <summary>
+        ///  备用3
+        /// </summary>
+        [Description("备用3")]
+        备用3 = 1L << 50,
+
+        /// <summary>
+        ///  备用4
+        /// </summary>
+        [Description("备用4")]
+        备用4 = 1L << 51,
+
+        /// <summary>
+        ///  备用5
+        /// </summary>
+        [Description("备用5")]
+        备用5 = 1L << 52,
+
+        /// <summary>
+        ///   备用6
+        /// </summary>
+        [Description("备用6")]
+        备用6 = 1L << 53,
+
+        /// <summary>
+        ///  备用7
+        /// </summary>
+        [Description("备用7")]
+        备用7 = 1L << 54,
+
+        /// <summary>
+        ///  备用8
+        /// </summary>
+        [Description("备用8")]
+        备用8 = 1L << 55,
+
+        /// <summary>
+        ///  备用9
+        /// </summary>
+        [Description("备用9")]
+        备用9 = 1L << 56,
+
+        /// <summary>
+        ///  备用10
+        /// </summary>
+        [Description("备用10")]
+        备用10 = 1L << 57,
+
+        /// <summary>
+        ///  备用11
+        /// </summary>
+        [Description("备用11")]
+        备用11 = 1L << 58,
+
+        /// <summary>
+        ///  备用12
+        /// </summary>
+        [Description("备用12")]
+        备用12 = 1L << 59,
+
+        /// <summary>
+        ///  备用13
+        /// </summary>
+        [Description("备用13")]
+        备用13 = 1L << 60,
+
+        /// <summary>
+        ///  备用14
+        /// </summary>
+        [Description("备用14")]
+        备用14 = 1L << 61,
+
+        /// <summary>
+        ///  备用15
+        /// </summary>
+        [Description("备用15")]
+        备用15 = 1L << 62,
+    }
 }

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

@@ -9,7 +9,7 @@ namespace WCS.Entity.Protocol.RGV
     /// </summary>
     [DataContract]
     [SugarTable("FJ_RGV520")]
-    public class WCS_RGV520 :  IRGV520
+    public class WCS_RGV520 : IRGV520
     {
         [DataMember(Order = 0)]
         public int TaskNumber { get; set; }

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

@@ -6,7 +6,7 @@ namespace WCS.Entity.Protocol.RGV
 {
     [DataContract]
     [SugarTable("FJ_RGV521")]
-    public class WCS_RGV521 :  IRGV521
+    public class WCS_RGV521 : IRGV521
     {
         [DataMember(Order = 0)]
         public int TaskNumber { get; set; }

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

@@ -0,0 +1,41 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.Text;
+using WCS.Entity.Protocol.SRM;
+
+namespace WCS.Entity.Protocol.RGV
+{
+    /// <summary>
+    ///  RGV523
+    /// </summary>
+    [DataContract]
+    [SugarTable("FJ_RGV523")]
+    public class WCS_RGV523 : IRGV523
+    {
+        /// <inheritdoc/>
+        [DataMember(Order = 0)]
+        public RgvAlarm Alarm { get; set; }
+
+        [DataMember(Order = 1)]
+        public new DateTime Frame { get; set; }
+
+        [DataMember(Order = 2)]
+        public new string Code { get; set; }
+    }
+
+    /// <summary>
+    ///  RGV523
+    /// </summary>
+    [DataContract]
+    [SugarTable("FJ_RGV523")]
+    public class QuestDb_RGV523
+    {
+        public string Alarm { get; set; }
+
+        public new DateTime Frame { get; set; }
+
+        public new string Code { get; set; }
+    }
+}

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

@@ -178,119 +178,119 @@ namespace WCS.Entity.Protocol.Protocol.Robot
     [Flags]
     public enum RobotAlarm : ulong
     {
+        /// <summary>
+        ///  无
+        /// </summary>
+        [Description("无")]
+        无 = 0,
+
         /// <summary>
         ///  入库货位有货
         /// </summary>
         [Description("入库货位有货")]
-        入库货位有货 = 0,
+        入库货位有货 = 1L << 0,
 
         /// <summary>
         ///  出库货位无货
         /// </summary>
         [Description("出库货位无货")]
-        出库货位无货 = 1L << 0,
+        出库货位无货 = 1L << 1,
 
         /// <summary>
         ///  库位任务超出范围报错
         /// </summary>
         [Description("库位任务超出范围报错")]
-        库位任务超出范围报错 = 1L << 1,
+        库位任务超出范围报错 = 1L << 2,
 
         /// <summary>
         ///  码垛任务超出范围报错
         /// </summary>
         [Description("码垛任务超出范围报错")]
-        码垛任务超出范围报错 = 1L << 2,
+        码垛任务超出范围报错 = 1L << 3,
 
         /// <summary>
         ///  夹具1抓取货物报错
         /// </summary>
         [Description("夹具1抓取货物报错")]
-        夹具1抓取货物报错 = 1L << 3,
+        夹具1抓取货物报错 = 1L << 4,
 
         /// <summary>
         ///  夹具2抓取货物报错
         /// </summary>
         [Description("夹具2抓取货物报错")]
-        夹具2抓取货物报错 = 1L << 4,
+        夹具2抓取货物报错 = 1L << 5,
 
         /// <summary>
-        ///  夹具1压货报警
+        /// 夹具1压货报警
         /// </summary>
         [Description("夹具1压货报警")]
-        夹具1压货报警 = 1L << 5,
+        夹具1压货报警 = 1L << 6,
 
         /// <summary>
-        /// 夹具2压货报警
+        ///  夹具2压货报警
         /// </summary>
         [Description("夹具2压货报警")]
-        夹具2压货报警 = 1L << 6,
+        夹具2压货报警 = 1L << 7,
 
         /// <summary>
         ///  夹具1掉料报警
         /// </summary>
         [Description("夹具1掉料报警")]
-        夹具1掉料报警 = 1L << 7,
+        夹具1掉料报警 = 1L << 8,
 
         /// <summary>
         ///  夹具2掉料报警
         /// </summary>
         [Description("夹具2掉料报警")]
-        夹具2掉料报警 = 1L << 8,
+        夹具2掉料报警 = 1L << 9,
 
         /// <summary>
         ///  机器人限位报警
         /// </summary>
         [Description("机器人限位报警")]
-        机器人限位报警 = 1L << 9,
+        机器人限位报警 = 1L << 10,
 
         /// <summary>
         ///  机器人充磁失败报警
         /// </summary>
         [Description("机器人充磁失败报警")]
-        机器人充磁失败报警 = 1L << 10,
+        机器人充磁失败报警 = 1L << 11,
 
         /// <summary>
         ///  安全门急停报警
         /// </summary>
         [Description("安全门急停报警")]
-        安全门急停报警 = 1L << 11,
+        安全门急停报警 = 1L << 12,
 
         /// <summary>
         ///  光栅报警
         /// </summary>
         [Description("光栅报警")]
-        光栅报警 = 1L << 12,
+        光栅报警 = 1L << 13,
 
         /// <summary>
         ///  光栅误触报警
         /// </summary>
         [Description("光栅误触报警")]
-        光栅误触报警 = 1L << 13,
+        光栅误触报警 = 1L << 14,
 
         /// <summary>
         ///  托盘任务出错
         /// </summary>
         [Description("托盘任务出错")]
-        托盘任务出错 = 1L << 14,
+        托盘任务出错 = 1L << 15,
 
         /// <summary>
         ///  抓深度2在深度1有货
         /// </summary>
         [Description("抓深度2在深度1有货")]
-        抓深度2在深度1有货 = 1L << 15,
+        抓深度2在深度1有货 = 1L << 16,
 
         /// <summary>
         ///  抓深度3在深度1或者2有货
         /// </summary>
         [Description("抓深度3在深度1或者2有货")]
-        抓深度3在深度1或者2有货 = 1L << 16,
-
-        /// <summary>
-        ///  备用
-        /// </summary>
-        [Description("备用")]
-        备用1 = 1L << 17,
+        抓深度3在深度1或者2有货 = 1L << 17,
 
         /// <summary>
         ///  备用

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

@@ -6,7 +6,7 @@ namespace WCS.Entity.Protocol.Robot
 {
     [DataContract]
     [SugarTable("FJ_Robot520")]
-    public class WCS_Robot520 :  IRobot520
+    public class WCS_Robot520 : IRobot520
     {
         [DataMember(Order = 0)]
         public int TaskNumber1 { get; set; }

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

@@ -7,7 +7,7 @@ namespace WCS.Entity.Protocol.Robot
 {
     [DataContract]
     [SugarTable("FJ_Robot521")]
-    public class WCS_Robot521 :  IRobot521
+    public class WCS_Robot521 : IRobot521
     {
         [DataMember(Order = 0)]
         public int TaskNumber1 { get; set; }

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

@@ -7,7 +7,7 @@ namespace WCS.Entity.Protocol.Robot
 {
     [DataContract]
     [SugarTable("FJ_Robot522")]
-    public class WCS_Robot522 :  IRobot522
+    public class WCS_Robot522 : IRobot522
     {
         [DataMember(Order = 0)]
         [SugarColumn(ColumnDataType = "double")]
@@ -19,4 +19,18 @@ namespace WCS.Entity.Protocol.Robot
         [DataMember(Order = 2)]
         public new string Code { get; set; }
     }
+
+    [DataContract]
+    [SugarTable("FJ_Robot522")]
+    public class QuestDb_Robot522
+    {
+        [DataMember(Order = 0)]
+        public string Alarm { get; set; }
+
+        [DataMember(Order = 1)]
+        public new DateTime Frame { get; set; }
+
+        [DataMember(Order = 2)]
+        public new string Code { get; set; }
+    }
 }

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

@@ -7,7 +7,7 @@ namespace WCS.Entity.Protocol.Robot
 {
     [DataContract]
     [SugarTable("FJ_Robot530")]
-    public class WCS_Robot530 :  IRobot530
+    public class WCS_Robot530 : IRobot530
     {
         [DataMember(Order = 0)]
         public short Type { get; set; }

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

@@ -7,7 +7,7 @@ namespace WCS.Entity.Protocol.Robot
 {
     [DataContract]
     [SugarTable("FJ_Robot531")]
-    public class WCS_Robot531 :  IRobot531
+    public class WCS_Robot531 : IRobot531
     {
         [DataMember(Order = 0)]
         public int TaskNo1 { get; set; }

+ 8 - 3
业务工程/分拣库/WCS.Entity.Protocol/SRM/ISRM537.cs → 业务工程/分拣库/WCS.Entity.Protocol/SRM/ISRM523.cs

@@ -5,13 +5,18 @@ namespace WCS.Entity.Protocol.SRM
     /// <summary>
     /// 堆垛机DB523
     /// </summary>
-    /// <typeparam name="alarm">报警</typeparam>
-    public interface ISRM537 : IProtocol
+    public interface ISRM523 : IProtocol
     {
         /// <summary>
         ///  报警内容
         /// </summary>
         [Description("报警内容")]
-        SrmAlarm Alarm { get; set; }
+        SrmAlarm1 Alarm1 { get; set; }
+
+        /// <summary>
+        ///  报警内容
+        /// </summary>
+        [Description("报警内容")]
+        SrmAlarm2 Alarm2 { get; set; }
     }
 }

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

@@ -286,7 +286,7 @@ namespace WCS.Entity.Protocol.SRM
     /// </summary>
     [Description("堆垛机报警项")]
     [Flags]
-    public enum SrmAlarm : long
+    public enum SrmAlarm1 : ulong
     {
         /// <summary>
         ///  无
@@ -301,16 +301,16 @@ namespace WCS.Entity.Protocol.SRM
         主柜急停 = 1L << 0,
 
         /// <summary>
-        ///  分柜急停
+        ///  南侧安全门急停
         /// </summary>
-        [Description("分柜急停")]
-        分柜急停 = 1L << 1,
+        [Description("南侧安全门急停")]
+        南侧安全门急停 = 1L << 1,
 
         /// <summary>
-        ///  取货点异常双深位
+        ///  取货点异常(双伸位)
         /// </summary>
-        [Description("取货点异常双深位")]
-        取货点异常双位 = 1L << 2,
+        [Description("取货点异常(双伸位)")]
+        取货点异常双位 = 1L << 2,
 
         /// <summary>
         ///  放货点有货
@@ -535,16 +535,16 @@ namespace WCS.Entity.Protocol.SRM
         备用 = 1L << 39,
 
         /// <summary>
-        ///  安全门1报警
+        ///  北侧安全门1故障
         /// </summary>
-        [Description("安全门1报警")]
-        安全门1报警 = 1L << 40,
+        [Description("北侧安全门1故障")]
+        北侧安全门1故障 = 1L << 40,
 
         /// <summary>
-        ///  安全门2报警
+        ///  南侧安全门2故障
         /// </summary>
-        [Description("安全门2报警")]
-        安全门2报警 = 1L << 41,
+        [Description("南侧安全门2故障")]
+        南侧安全门2故障 = 1L << 41,
 
         /// <summary>
         ///  行走测距信号丢失报警
@@ -670,12 +670,116 @@ namespace WCS.Entity.Protocol.SRM
         ///  安全门急停
         /// </summary>
         [Description("安全门急停")]
-        安全门急停 = 1L << 62,
+        北侧安全门急停 = 1L << 62,
+    }
 
+    /// <summary>
+    /// 堆垛机报警项
+    /// </summary>
+    [Description("堆垛机报警项")]
+    [Flags]
+    public enum SrmAlarm2 : ushort
+    {
         /// <summary>
-        ///  安全门急停
+        ///  
         /// </summary>
-        [Description("安全门急停")]
-        安全门急停1 = 1L << 63,
+        [Description("无")]
+        无 = 0,
+
+        /// <summary>
+        ///  目标库位与实际货物检测不一致
+        /// </summary>
+        [Description("目标库位与实际货物检测不一致")]
+        目标库位与实际货物检测不一致 = 1 << 0,
+
+        /// <summary>
+        ///  当前任务不合理
+        /// </summary>
+        [Description("当前任务不合理")]
+        当前任务不合理 = 1 << 1,
+
+        /// <summary>
+        ///  中间阻挡器检测异常
+        /// </summary>
+        [Description("中间阻挡器检测异常")]
+        中间阻挡器检测异常 = 1 << 2,
+
+        /// <summary>
+        ///  其他堆垛机不在检修位
+        /// </summary>
+        [Description("其他堆垛机不在检修位")]
+        其他堆垛机不在检修位 = 1 << 3,
+
+        /// <summary>
+        ///  与输送线通讯超时
+        /// </summary>
+        [Description("与输送线通讯超时")]
+        与输送线通讯超时 = 1 << 4,
+
+        /// <summary>
+        ///  备用1
+        /// </summary>
+        [Description("备用1")]
+        备用1 = 1 << 5,
+
+        /// <summary>
+        /// 备用2
+        /// </summary>
+        [Description("备用2")]
+        备用2 = 1 << 6,
+
+        /// <summary>
+        ///  备用3
+        /// </summary>
+        [Description("备用3")]
+        备用3 = 1 << 7,
+
+        /// <summary>
+        ///  备用4
+        /// </summary>
+        [Description("备用4")]
+        备用4 = 1 << 8,
+
+        /// <summary>
+        ///  备用5
+        /// </summary>
+        [Description("备用5")]
+        备用5 = 1 << 9,
+
+        /// <summary>
+        ///  备用6
+        /// </summary>
+        [Description("备用6")]
+        备用6 = 1 << 10,
+
+        /// <summary>
+        ///  备用7
+        /// </summary>
+        [Description("备用7")]
+        备用7 = 1 << 11,
+
+        /// <summary>
+        ///  备用8
+        /// </summary>
+        [Description("备用8")]
+        备用8 = 1 << 12,
+
+        /// <summary>
+        ///  备用9
+        /// </summary>
+        [Description("备用9")]
+        备用9 = 1 << 13,
+
+        /// <summary>
+        ///  备用10
+        /// </summary>
+        [Description("备用10")]
+        备用10 = 1 << 14,
+
+        /// <summary>
+        ///  备用11
+        /// </summary>
+        [Description("备用11")]
+        备用11 = 1 << 15,
     }
 }

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

@@ -6,7 +6,7 @@ namespace WCS.Entity.Protocol.SRM
 {
     [DataContract]
     [SugarTable("FJ_SRM520")]
-    public class WCS_SRM520 :  ISRM520
+    public class WCS_SRM520 : ISRM520
     {
         /// <inheritdoc/>
         [DataMember(Order = 0)]

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

@@ -9,7 +9,7 @@ namespace WCS.Entity.Protocol.SRM
     /// </summary>
     [DataContract]
     [SugarTable("FJ_SRM521")]
-    public class WCS_SRM521 :  ISRM521
+    public class WCS_SRM521 : ISRM521
     {
         /// <inheritdoc/>
         [DataMember(Order = 0)]

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

@@ -0,0 +1,42 @@
+using SqlSugar;
+using System;
+using System.Runtime.Serialization;
+
+namespace WCS.Entity.Protocol.SRM
+{
+    /// <summary>
+    ///  SRM537
+    /// </summary>
+    [DataContract]
+    [SugarTable("FJ_SRM523")]
+    public class WCS_SRM523 : ISRM523
+    {
+        /// <inheritdoc/>
+        [DataMember(Order = 0)]
+        public SrmAlarm1 Alarm1 { get; set; }
+
+        /// <inheritdoc/>
+        [DataMember(Order = 1)]
+        public SrmAlarm2 Alarm2 { get; set; }
+
+        [DataMember(Order = 2)]
+        public new DateTime Frame { get; set; }
+
+        [DataMember(Order = 3)]
+        public new string Code { get; set; }
+    }
+
+    /// <summary>
+    ///  SRM537
+    /// </summary>
+    [DataContract]
+    [SugarTable("FJ_SRM523")]
+    public class QuestDb_SRM523
+    {
+        public string Alarm { get; set; }
+
+        public new DateTime Frame { get; set; }
+
+        public new string Code { get; set; }
+    }
+}

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

@@ -1,25 +0,0 @@
-using SqlSugar;
-using System;
-using System.Runtime.Serialization;
-
-namespace WCS.Entity.Protocol.SRM
-{
-    /// <summary>
-    ///  SRM537
-    /// </summary>
-    [DataContract]
-    [SugarTable("FJ_SRM537")]
-    public class WCS_SRM537 : ISRM537
-    {
-        /// <inheritdoc/>
-        [DataMember(Order = 0)]
-        [SugarColumn(ColumnDataType = "double")]
-        public SrmAlarm Alarm { get; set; }
-
-        [DataMember(Order = 1)]
-        public new DateTime Frame { get; set; }
-
-        [DataMember(Order = 2)]
-        public new string Code { get; set; }
-    }
-}

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

@@ -9,7 +9,7 @@ namespace WCS.Entity.Protocol.Station
     /// </summary>
     [DataContract]
     [SugarTable("FJ_Station520")]
-    public class WCS_Station520 :  IStation520
+    public class WCS_Station520 : IStation520
     {
         /// <inheritdoc/>
         [DataMember(Order = 0)]

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

@@ -9,7 +9,7 @@ namespace WCS.Entity.Protocol.Station
     /// </summary>
     [DataContract]
     [SugarTable("FJ_Station521")]
-    public class WCS_Station521 :  IStation521
+    public class WCS_Station521 : IStation521
     {
         /// <inheritdoc/>
         [DataMember(Order = 0)]

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

@@ -9,7 +9,7 @@ namespace WCS.Entity.Protocol.Station
     /// </summary>
     [DataContract]
     [SugarTable("FJ_Station523")]
-    public class WCS_Station523 :  IStation523
+    public class WCS_Station523 : IStation523
     {
         /// <inheritdoc/>
         [DataMember(Order = 0)]

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

@@ -6,7 +6,7 @@ namespace WCS.Entity.Protocol.Station
 {
     [DataContract]
     [SugarTable("FJ_Station524")]
-    public class WCS_Station524 :  IStation524
+    public class WCS_Station524 : IStation524
     {
         [DataMember(Order = 0)]
         public int TaskNumber { get; set; }

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

@@ -6,7 +6,7 @@ namespace WCS.Entity.Protocol.Station
 {
     [DataContract]
     [SugarTable("FJ_Station525")]
-    public class WCS_Station525 :  IStation525
+    public class WCS_Station525 : IStation525
     {
         [DataMember(Order = 1)]
         public short NextIndex { get; set; }

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

@@ -9,7 +9,7 @@ namespace WCS.Entity.Protocol.Station
     /// </summary>
     [DataContract]
     [SugarTable("FJ_Station90")]
-    public class WCS_Station90 :  IStation90
+    public class WCS_Station90 : IStation90
     {
         [DataMember(Order = 0)]
         public new DateTime Frame { get; set; }

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

@@ -9,7 +9,7 @@ namespace WCS.Entity.Protocol.Station
     /// </summary>
     [DataContract]
     [SugarTable("FJ_Station91")]
-    public class WCS_Station91 :  IStation91
+    public class WCS_Station91 : IStation91
     {
         /// <inheritdoc/>
         [DataMember(Order = 0)]

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

@@ -6,7 +6,7 @@ namespace WCS.Entity.Protocol.Truss
 {
     [DataContract]
     [SugarTable("FJ_Truss520")]
-    public class WCS_Truss520 :  ITruss520
+    public class WCS_Truss520 : ITruss520
     {
         [DataMember(Order = 0)]
         public short DestPosition_1 { get; set; }

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

@@ -6,7 +6,7 @@ namespace WCS.Entity.Protocol.Truss
 {
     [DataContract]
     [SugarTable("FJ_Truss521")]
-    public class WCS_Truss521 :  ITruss521
+    public class WCS_Truss521 : ITruss521
     {
         [DataMember(Order = 0)]
         public short DestPosition_1 { get; set; }

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

@@ -6,7 +6,7 @@ namespace WCS.Entity.Protocol.Truss
 {
     [DataContract]
     [SugarTable("FJ_Truss530")]
-    public class WCS_Truss530 :  ITruss530
+    public class WCS_Truss530 : ITruss530
     {
         //[DataMember(Order = 0)]
         //public bool IsGoods0 { get; set; }

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

@@ -204,6 +204,7 @@ namespace WCS.Entity.Protocol.Truss
         public short VoucherNo { get; set; }
 
         [DataMember(Order = 65)]
+        
         public new DateTime Frame { get; set; }
 
         [DataMember(Order = 66)]

+ 31 - 2
业务工程/分拣库/WCS.Entity.Protocol/WCS_Log.cs

@@ -5,11 +5,11 @@ using SqlSugar;
 namespace WCS.Entity.Protocol
 {
     /// <summary>
-    ///  RGV
+    ///  FJ_Log
     /// </summary>
     [DataContract]
     [SugarTable("FJ_Log")]
-    public class WCS_Log : QuestDBBaseEntity
+    public class FJ_Log : QuestDBBaseEntity
     {
         [DataMember(Order = 0)]
         public string World { get; set; }
@@ -29,4 +29,33 @@ namespace WCS.Entity.Protocol
         [DataMember(Order = 6)]
         public int ManagedThreadId { get; set; }
     }
+
+    ///// <summary>
+    /////  FJ_HttpLog
+    ///// </summary>
+    //[DataContract]
+    //[SugarTable("FJ_HttpLog")]
+    //public class FJ_HttpLog : QuestDBBaseEntity
+    //{
+    //    /// <summary>
+    //    /// 接口名
+    //    /// </summary>
+    //    [DataMember(Order = 0)]
+    //    public string Name { get; set; }
+
+    //    [DataMember(Order = 1)]
+    //    public string  { get; set; }
+
+    //    [DataMember(Order = 2)]
+    //    public string Title { get; set; }
+
+    //    [DataMember(Order = 3)]
+    //    public string Content { get; set; }
+
+    //    [DataMember(Order = 4)]
+    //    public DateTime ExTime { get; set; }
+
+    //    [DataMember(Order = 6)]
+    //    public int ManagedThreadId { get; set; }
+    //}
 }

+ 1 - 1
业务工程/分拣库/WCS.WorkEngineering/Extensions/SRMExtension.cs

@@ -8,7 +8,7 @@ namespace WCS.WorkEngineering.Extensions
     /// <summary>
     /// 堆垛机扩展
     /// </summary>
-    public class SRM : Device<ISRM520, ISRM521, ISRM537>
+    public class SRM : Device<ISRM520, ISRM521, ISRM523>
     {
         public SRM(Device device, World world) : base(device, world)
         {

+ 6 - 0
业务工程/分拣库/WCS.WorkEngineering/Extensions/TaskExtension.cs

@@ -616,5 +616,11 @@ namespace WCS.WorkEngineering.Extensions
         /// </summary>
         [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "垛型大类")]
         public int StampType { get; set; }
+
+        /// <summary>
+        /// 是否在桁架进行码垛
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "是否在桁架进行码垛")]
+        public bool IsTruss { get; set; }
     }
 }

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

@@ -48,6 +48,7 @@ namespace WCS.WorkEngineering.Systems
                 World.Log("站台货物信息与实际占用不一致");
                 return;
             }
+
             ;
             if (obj.Data2.Request != 1)
             {
@@ -59,7 +60,10 @@ namespace WCS.WorkEngineering.Systems
             SqlSugarHelper.Do(_db =>
             {
                 var db = _db.Default;
-                var task = db.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskNumber && v.Status < TaskStatus.FinishOfShunt) ?? throw new KnownException($"未找到对应的WCS任务{obj.Data2.TaskNumber}", LogLevelEnum.Mid);
+                var task =
+                    db.Queryable<WCS_TaskInfo>()
+                        .First(v => v.ID == obj.Data2.TaskNumber && v.Status < TaskStatus.FinishOfShunt) ??
+                    throw new KnownException($"未找到对应的WCS任务{obj.Data2.TaskNumber}", LogLevelEnum.Mid);
                 if (Allot(db, task, obj)) taskInfo = task;
             });
 
@@ -87,7 +91,8 @@ namespace WCS.WorkEngineering.Systems
         /// <param name="taskInfo"></param>
         /// <param name="obj"></param>
         /// <returns></returns>
-        public bool Allot(SqlSugarScopeProvider db, WCS_TaskInfo taskInfo, Device<IStation520, IStation521, IStation523> obj)
+        public bool Allot(SqlSugarScopeProvider db, WCS_TaskInfo taskInfo,
+            Device<IStation520, IStation521, IStation523> obj)
         {
             var nowTime = DateTime.Now;
             taskInfo.Device = obj.Entity.Code switch
@@ -106,20 +111,25 @@ namespace WCS.WorkEngineering.Systems
             {
                 case 9:
                     //是异常工字轮
-                    cacheLineDevList = taskInfo.BarCode.Contains("Error") ? cacheLineDevList.Where(x => x.HasFlag(DeviceFlags.桁架09异常缓存放行点)) : cacheLineDevList.Where(x => x.HasFlag(DeviceFlags.桁架09缓存放行点));
+                    cacheLineDevList = taskInfo.BarCode.Contains("Error")
+                        ? cacheLineDevList.Where(x => x.HasFlag(DeviceFlags.桁架09异常缓存放行点))
+                        : cacheLineDevList.Where(x => x.HasFlag(DeviceFlags.桁架09缓存放行点));
                     break;
 
                 case 18:
                     cacheLineDevList = cacheLineDevList.Where(x => x.HasFlag(DeviceFlags.桁架18缓存放行点));
                     break;
             }
+
             var cacheLineCodes = cacheLineDevList.Select(x => x.Code.ToShort());
             var cacheLineList = db.Queryable<WCS_CacheLine>().Includes(x => x.Locations).ToList();
 
             #region 跟据缓存信息寻找可以到达的缓存点
 
             //找到当前任务可用的缓存线信息
-            var cacheLine = cacheLineList.Where(x => x.Locations.Any(l => l is { InStock: false, IsEmpty: false })).FirstOrDefault(x => cacheLineCodes.Contains(x.LocationNo) && x.MatCodeList.Contains(taskInfo.MatCode) && !x.InStock);
+            var cacheLine = cacheLineList.Where(x => x.Locations.Any(l => l is { InStock: false, IsEmpty: false }))
+                .FirstOrDefault(x =>
+                    cacheLineCodes.Contains(x.LocationNo) && x.MatCodeList.Contains(taskInfo.MatCode) && !x.InStock);
 
             //这个任务可以直接去一条线体,不需要新建缓存信息
             //找到这条线体中序号最小的一条位信息 非空置且无货
@@ -130,14 +140,16 @@ namespace WCS.WorkEngineering.Systems
                 cacheLoc.InStock = true;
                 cacheLoc.TaskId = taskInfo.ID;
                 cacheLoc.EditTime = nowTime;
-                db.UpdateableRowLock(cacheLoc).UpdateColumns(x => new { x.InStock, x.TaskId, x.EditTime }).ExecuteCommand();
+                db.UpdateableRowLock(cacheLoc).UpdateColumns(x => new { x.InStock, x.TaskId, x.EditTime })
+                    .ExecuteCommand();
 
                 //WCS任务相关信息
                 taskInfo.Status = TaskStatus.FinishOfShunt;
                 taskInfo.AddrNext = cacheLine.LocationNo.ToString();
                 taskInfo.EditWho = "WCS";
                 taskInfo.EditTime = nowTime;
-                db.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.Status, x.AddrNext, x.EditWho, x.EndTime }).ExecuteCommand();
+                db.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.Status, x.AddrNext, x.EditWho, x.EndTime })
+                    .ExecuteCommand();
                 taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, taskInfo.AddrNext, $"完成分库计算,目标地址:{cacheLine.LocationNo}");
 
                 return true;
@@ -148,7 +160,8 @@ namespace WCS.WorkEngineering.Systems
             #region 初始化一个信息的缓存信息
 
             //找到一个可以进行缓存的线体号
-            var devCode = cacheLineDevList.Select(x => x.Code.ToShort()).FirstOrDefault(x => !cacheLineList.Select(s => s.LocationNo).Contains(x));
+            var devCode = cacheLineDevList.Select(x => x.Code.ToShort())
+                .FirstOrDefault(x => !cacheLineList.Select(s => s.LocationNo).Contains(x));
             if (devCode == 0)
             {
                 World.Log($"无可用线体:{taskInfo.ID}", LogLevelEnum.Mid);
@@ -157,28 +170,36 @@ namespace WCS.WorkEngineering.Systems
                 //未结束且包含当前物料编号的垛形,按时间排序,创建时间早的优先分配,当前任务的仓库号必须要等于码垛信息绑定的仓库号
                 var palletizing = db.Queryable<WCS_Palletizing>()
                     .Includes(x => x.Layers, r => r.Rows, l => l.Locs)
-                    .Where(x => !x.Finish && x.WarehouseCode == taskInfo.WarehouseCode && x.Layers.Any(l => l.Rows.Any(r => r.Finish)))
+                    .Where(x => !x.Finish && x.WarehouseCode == taskInfo.WarehouseCode &&
+                                x.Layers.Any(l => l.Rows.Any(r => r.Finish)))
                     .Where(x => x.EditTime < endTime).ToList()
                     .MinBy(x => x.AddTime);
-                cacheLineList = db.Queryable<WCS.Entity.WCS_CacheLine>().Where(x => x.WarehouseCode == taskInfo.WarehouseCode && x.IsTruss).ToList();
+                cacheLineList = db.Queryable<WCS.Entity.WCS_CacheLine>()
+                    .Where(x => x.WarehouseCode == taskInfo.WarehouseCode && x.IsTruss).ToList();
 
                 if (palletizing == null || cacheLineList.Any()) return false;
                 {
-                    var dev = Device.All.Where(x => x.Code == palletizing.PalletizingStation).Select(x => new Device<ITruss530>(x, World)).FirstOrDefault();
-                    if (dev != null && (!dev.Data.CmdType.HasFlag(TrussCmdType.Two) && !dev.Data.CmdType.HasFlag(TrussCmdType.End1)))
+                    var dev = Device.All.Where(x => x.Code == palletizing.PalletizingStation)
+                        .Select(x => new Device<ITruss530>(x, World)).FirstOrDefault();
+                    if (dev != null && (!dev.Data.CmdType.HasFlag(TrussCmdType.Two) &&
+                                        !dev.Data.CmdType.HasFlag(TrussCmdType.End1)))
                     {
                         //如果找到的最早的一个托盘超六小时了,就直接强制结盘
-                        dev.Data.CmdType = palletizing.AddTime < DateTime.Now.AddHours(-6) ? TrussCmdType.End1 : TrussCmdType.Two;
+                        dev.Data.CmdType = palletizing.AddTime < DateTime.Now.AddHours(-6)
+                            ? TrussCmdType.End1
+                            : TrussCmdType.Two;
                     }
                 }
                 return false;
             }
+
             var result = false;
 
             //未结束且包含当前物料编号的垛形,按时间排序,创建时间早的优先分配,当前任务的仓库号必须要等于码垛信息绑定的仓库号
             var palletizingList = db.Queryable<WCS_Palletizing>()
                 .Includes(x => x.Layers, r => r.Rows, l => l.Locs)
-                .Where(x => (!x.Finish /*|| (x.Finish && x.isItHalf)*/) && x.MatCodeList.Contains(taskInfo.MatCode) && x.WarehouseCode == taskInfo.WarehouseCode)
+                .Where(x => (!x.Finish /*|| (x.Finish && x.isItHalf)*/) && x.MatCodeList.Contains(taskInfo.MatCode) &&
+                            x.WarehouseCode == taskInfo.WarehouseCode)
                 .OrderBy(x => x.AddTime)
                 .ToList();
 
@@ -248,8 +269,11 @@ namespace WCS.WorkEngineering.Systems
                             twoDevCode.AddRange(new List<string>() { "", "" });
                             break;
                     }
+
                     //找到一个对应的空置码垛位
-                    var twoDevs = Device.All.Where(x => twoDevCode.Contains(x.Code)).Select(x => new Device<IStation520, IStation521, IStation523>(x, World)).Where(x => !x.Data3.Status.HasFlag(StationStatus.PH_Status)).Select(x => x.Entity.Code);
+                    var twoDevs = Device.All.Where(x => twoDevCode.Contains(x.Code))
+                        .Select(x => new Device<IStation520, IStation521, IStation523>(x, World))
+                        .Where(x => !x.Data3.Status.HasFlag(StationStatus.PH_Status)).Select(x => x.Entity.Code);
                     if (twoDevs.Any())
                     {
                         World.Log("无可用的二次码垛工位");
@@ -261,11 +285,14 @@ namespace WCS.WorkEngineering.Systems
                         World.Log($"有正目标地址是{JsonConvert.SerializeObject(twoDevs)}的未结束二次码垛任务,无可用的二次码垛工位");
                         continue;
                     }
+
                     palletizing.EditTime = nowTime;
                     palletizing.Finish = false;
                     palletizing.PalletizingStation = twoDevs.FirstOrDefault();
                     palletizing.TaskAddNext ??= devCode.ToString();
-                    db.UpdateableRowLock(palletizing).UpdateColumns(x => new { x.EditTime, x.Finish, x.PalletizingStation, x.TaskAddNext }).ExecuteCommand();
+                    db.UpdateableRowLock(palletizing)
+                        .UpdateColumns(x => new { x.EditTime, x.Finish, x.PalletizingStation, x.TaskAddNext })
+                        .ExecuteCommand();
                 }
 
                 if (palletizing.TaskAddNext == null)
@@ -273,8 +300,10 @@ namespace WCS.WorkEngineering.Systems
                     palletizing.TaskAddNext = devCode.ToString();
                     db.Updateable(palletizing).UpdateColumns(x => new { x.TaskAddNext }).ExecuteCommand();
                 }
+
                 var res = db.InsertableRowLock(cacheLine).ExecuteReturnEntity();
-                palletizingRow = db.Queryable<WCS_PalletizingRow>().Includes(x => x.Locs).Single(x => x.Id == palletizingRow.Id);
+                palletizingRow = db.Queryable<WCS_PalletizingRow>().Includes(x => x.Locs)
+                    .Single(x => x.Id == palletizingRow.Id);
                 palletizingRow.Locs = palletizingRow.Locs.OrderBy(x => x.XYNo).ToList();
                 palletizingRow.CacheLineId = res.Id;
                 palletizingRow.EditTime = nowTime;
@@ -288,6 +317,7 @@ namespace WCS.WorkEngineering.Systems
                     TaskId = i == 0 ? taskInfo.ID : 0,
                     CacheLineId = res.Id,
                     AddTime = nowTime,
+                    SideNum = t.SideNum,
                     EditTime = nowTime
                 }).ToList();
 
@@ -295,9 +325,11 @@ namespace WCS.WorkEngineering.Systems
                 taskInfo.AddrNext = devCode.ToString();
                 taskInfo.EditWho = "WCS";
                 taskInfo.EditTime = nowTime;
-                db.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.Status, x.AddrNext, x.EditWho, x.EditTime }).ExecuteCommand();
+                db.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.Status, x.AddrNext, x.EditWho, x.EditTime })
+                    .ExecuteCommand();
                 taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, taskInfo.AddrNext, $"完成分库计算,目标地址:{cacheLine.LocationNo}");
-                db.UpdateableRowLock(palletizingRow).UpdateColumns(x => new { x.CacheLineId, x.EditTime }).ExecuteCommand();
+                db.UpdateableRowLock(palletizingRow).UpdateColumns(x => new { x.CacheLineId, x.EditTime })
+                    .ExecuteCommand();
                 db.InsertableRowLock(createCacheLoc).ExecuteCommand();
 
                 result = true;
@@ -307,236 +339,10 @@ namespace WCS.WorkEngineering.Systems
             {
                 taskInfo.InitStackStructure(db, World);
             }
+
             return result;
 
             #endregion 初始化一个信息的缓存信息
         }
-
-        ///// <summary>
-        /////  计算去向
-        ///// </summary>
-        ///// <param name="db"></param>
-        ///// <param name="taskInfo"></param>
-        ///// <param name="obj"></param>
-        ///// <returns></returns>
-        //public bool Allot(SqlSugarScopeProvider db, WCS_TaskInfo taskInfo, Device<IStation520, IStation521, IStation523> obj)
-        //{
-        //    taskInfo.Device = obj.Entity.Code switch
-        //    {
-        //        "455" => "Truss1",
-        //        "655" => "Truss1",
-        //        "855" => "Truss2",
-        //        "1055" => "Truss2",
-        //        "1255" => "Truss3",
-        //        "1455" => "Truss3",
-        //        _ => "Error"
-        //    };
-        //    //获取当前货物类型可以到达的桁架缓存放行点信息
-        //    var cacheLineDevList = obj.Entity.Targets.Where(x => x.HasFlag(DeviceFlags.桁架缓存放行点)); //当前地址可以到达的所有桁架缓存放行点信息
-        //    switch (taskInfo.GoodsType)
-        //    {
-        //        case 9:
-        //            //是异常工字轮
-        //            cacheLineDevList = taskInfo.BarCode.Contains("Error") ? cacheLineDevList.Where(x => x.HasFlag(DeviceFlags.桁架09异常缓存放行点)) : cacheLineDevList.Where(x => x.HasFlag(DeviceFlags.桁架09缓存放行点));
-        //            break;
-
-        //        case 18:
-        //            cacheLineDevList = cacheLineDevList.Where(x => x.HasFlag(DeviceFlags.桁架18缓存放行点));
-        //            break;
-        //    }
-        //    var cacheLineCodes = cacheLineDevList.Select(x => x.Code.ToShort());
-        //    var cacheLineList = db.Queryable<WCS_CacheLine>().Includes(x => x.Locations).ToList();
-
-        //    #region 跟据缓存信息寻找可以到达的缓存点
-
-        //    //找到当前任务可用的缓存线信息
-        //    var cacheLine = cacheLineList.Where(x => x.Locations.Any(l => l is { InStock: false, IsEmpty: false })).FirstOrDefault(x => cacheLineCodes.Contains(x.LocationNo) && x.MatCodeList.Contains(taskInfo.MatCode) && !x.InStock);
-
-        //    //这个任务可以直接去一条线体,不需要新建缓存信息
-        //    //找到这条线体中序号最小的一条位信息 非空置且无货
-        //    var cacheLoc = cacheLine?.Locations.Where(x => x is { InStock: false, IsEmpty: false }).MinBy(x => x.XYNo);
-        //    if (cacheLoc != null)
-        //    {
-        //        cacheLoc = db.Queryable<WCS_CacheLineLoc>().Single(x => x.Id == cacheLoc.Id);
-        //        cacheLoc.InStock = true;
-        //        cacheLoc.TaskId = taskInfo.ID;
-        //        cacheLoc.EditTime = DateTime.Now;
-        //        db.Updateable(cacheLoc).ExecuteCommand();
-
-        //        //WCS任务相关信息
-        //        taskInfo.Status = TaskStatus.FinishOfShunt;
-        //        taskInfo.AddrNext = cacheLine.LocationNo.ToString();
-        //        taskInfo.EditWho = "WCS";
-        //        taskInfo.EditTime = DateTime.Now;
-        //        db.Updateable(taskInfo).ExecuteCommand();
-        //        taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, taskInfo.AddrNext, $"完成分库计算,目标地址:{cacheLine.LocationNo}");
-
-        //        return true;
-        //    }
-
-        //    #endregion 跟据缓存信息寻找可以到达的缓存点
-
-        //    #region 初始化一个信息的缓存信息
-
-        //    //找到一个可以进行缓存的线体号
-        //    var devCode = cacheLineDevList.Select(x => x.Code.ToShort()).FirstOrDefault(x => !cacheLineList.Select(s => s.LocationNo).Contains(x));
-        //    if (devCode == 0)
-        //    {
-        //        World.Log($"无可用线体:{taskInfo.ID}");
-        //        //var endTime = DateTime.Now.AddMinutes(-10);
-        //        ////找一个当前时间最早且已超过25分钟未码垛的码垛信息半托入库
-        //        ////未结束且包含当前物料编号的垛形,按时间排序,创建时间早的优先分配,当前任务的仓库号必须要等于码垛信息绑定的仓库号
-        //        //var palletizing = db.Queryable<WCS_Palletizing>()
-        //        //    .Includes(x => x.Layers, r => r.Rows, l => l.Locs)
-        //        //    .Where(x => !x.Finish && x.WarehouseCode == taskInfo.WarehouseCode && x.Layers.Any(l => l.Rows.Any(r => r.Finish)))
-        //        //    .Where(x => x.EditTime < endTime).ToList()
-        //        //    .MinBy(x => x.AddTime);
-        //        //cacheLineList = db.Queryable<WCS.Entity.WCS_CacheLine>().Where(x => x.WarehouseCode == taskInfo.WarehouseCode && x.IsTruss).ToList();
-
-        //        //if (palletizing != null && !cacheLineList.Any())
-        //        //{
-        //        //    var dev = Device.All.Where(x => x.Code == palletizing.PalletizingStation).Select(x => new Device<ITruss530>(x, World)).FirstOrDefault();
-        //        //    if (dev != null && !dev.Data.CmdType.HasFlag(TrussCmdType.Two))
-        //        //    {
-        //        //        dev.Data.CmdType = TrussCmdType.Two;
-        //        //    }
-        //        //}
-        //        return false;
-        //    }
-        //    var result = false;
-
-        //    //未结束且包含当前物料编号的垛形,按时间排序,创建时间早的优先分配,当前任务的仓库号必须要等于码垛信息绑定的仓库号
-        //    var palletizingList = db.Queryable<WCS_Palletizing>()
-        //        .Includes(x => x.Layers, r => r.Rows, l => l.Locs)
-        //        .Where(x => (!x.Finish || (x.Finish && x.isItHalf)) && x.MatCodeList.Contains(taskInfo.MatCode) && x.WarehouseCode == taskInfo.WarehouseCode)
-        //        .OrderBy(x => x.AddTime)
-        //        .ToList();
-
-        //    foreach (var palletizing in palletizingList)
-        //    {
-        //        //当前任务已经分配结束,进入下一次迭代
-        //        if (result) continue;
-
-        //        //未结束且包含当前物料编号的层,按层号排序,层号小的优先分配
-        //        var layer = palletizing.Layers.Where(x => x is { IsEmpty: false, Finish: false })
-        //            .Where(x => x.MatCodeList.Contains(taskInfo.MatCode)).MinBy(x => x.LayerNo);
-
-        //        //未找到可用层,进入下一次迭代
-        //        if (layer == null) continue;
-        //        // 当前任务已经分配结束,进入下一次迭代
-
-        //        //未结束,未预分配缓存线信息且包含当前物料编号的行,行号小的优先分配
-        //        var rows = layer.Rows.Where(x => x is { IsEmpty: false, Finish: false })
-        //            .Where(x => x.CacheLineId == 0)
-        //            .Where(x => x.MatCodeList.Contains(taskInfo.MatCode))
-        //            .ToList();
-        //        //未找到可用行,进入下一次迭代
-        //        if (!rows.Any()) continue;
-        //        var palletizingRow = rows.MinBy(x => x.RowNo);
-
-        //        //开始初始化缓存位信息
-        //        cacheLine = new WCS.Entity.WCS_CacheLine()
-        //        {
-        //            LocationNo = devCode,
-        //            AddTime = DateTime.Now,
-        //            PalletizingRowId = palletizingRow.Id,
-        //            InStock = false,
-        //            Put = false,
-        //            IsTruss = false,
-        //            MatCodeList = palletizingRow.MatCodeList,
-        //            Quantity = palletizingRow.QtyMaxCount,
-        //            WarehouseCode = taskInfo.WarehouseCode
-        //        };
-
-        //        if (palletizing.isItHalf) //当前任务被分配到了二次码垛托盘上了。
-        //        {
-        //            var twoDevCode = new List<string>();
-        //            switch (obj.Entity.Code)
-        //            {
-        //                case "455":
-        //                    twoDevCode.AddRange(new List<string>() { "1674", "1675" });
-        //                    break;
-
-        //                case "655":
-        //                    twoDevCode.AddRange(new List<string>() { "", "" });
-        //                    break;
-
-        //                case "855":
-        //                    twoDevCode.AddRange(new List<string>() { "1700", "1701" });
-        //                    break;
-
-        //                case "1055":
-        //                    twoDevCode.AddRange(new List<string>() { "1715", "1716" });
-        //                    break;
-
-        //                case "1255":
-        //                    twoDevCode.AddRange(new List<string>() { "", "" });
-        //                    break;
-
-        //                case "1455":
-        //                    twoDevCode.AddRange(new List<string>() { "", "" });
-        //                    break;
-        //            }
-        //            //找到一个对应的空置码垛位
-        //            var twoDevs = Device.All.Where(x => twoDevCode.Contains(x.Code)).Select(x => new Device<IStation520, IStation521, IStation523>(x, World)).Where(x => !x.Data3.Status.HasFlag(StationStatus.PH_Status)).Select(x => x.Entity.Code);
-        //            if (twoDevs.Any())
-        //            {
-        //                World.Log("无可用的二次码垛工位");
-        //                continue;
-        //            }
-
-        //            if (db.Queryable<WCS_Palletizing>().Any(x => !x.Finish && twoDevs.Contains(x.PalletizingStation)))
-        //            {
-        //                World.Log($"有正目标地址是{JsonConvert.SerializeObject(twoDevs)}的未结束二次码垛任务,无可用的二次码垛工位");
-        //                continue;
-        //            }
-        //            palletizing.EditTime = DateTime.Now;
-        //            palletizing.Finish = false;
-        //            palletizing.PalletizingStation = twoDevs.FirstOrDefault();
-        //            palletizing.TaskAddNext ??= devCode.ToString();
-        //            db.Updateable(palletizing).ExecuteCommand();
-        //        }
-
-        //        if (palletizing.TaskAddNext == null)
-        //        {
-        //            palletizing.TaskAddNext = devCode.ToString();
-        //            db.Updateable(palletizing).ExecuteCommand();
-        //        }
-        //        var res = db.Insertable(cacheLine).ExecuteReturnEntity();
-        //        palletizingRow = db.Queryable<WCS_PalletizingRow>().Includes(x => x.Locs).Single(x => x.Id == palletizingRow.Id);
-        //        palletizingRow.Locs = palletizingRow.Locs.OrderBy(x => x.XYNo).ToList();
-        //        palletizingRow.CacheLineId = res.Id;
-        //        palletizingRow.EditTime = DateTime.Now;
-
-        //        var createCacheLoc = palletizingRow.Locs.Select((t, i) => new WCS_CacheLineLoc()
-        //        {
-        //            XYNo = t.XYNo,
-        //            InStock = i == 0,
-        //            IsEmpty = t.IsEmpty,
-        //            MatCode = t.MatCode,
-        //            TaskId = i == 0 ? taskInfo.ID : 0,
-        //            CacheLineId = res.Id
-        //        }).ToList();
-
-        //        taskInfo.Status = TaskStatus.FinishOfShunt;
-        //        taskInfo.AddrNext = devCode.ToString();
-        //        taskInfo.EditWho = "WCS";
-        //        taskInfo.EditTime = DateTime.Now;
-        //        db.Updateable(taskInfo).ExecuteCommand();
-        //        taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, taskInfo.AddrNext, $"完成分库计算,目标地址:{cacheLine.LocationNo}");
-        //        db.Updateable(palletizingRow).ExecuteCommand();
-        //        db.Insertable(createCacheLoc).ExecuteCommand();
-
-        //        result = true;
-        //    }
-
-        //    if (!result)
-        //    {
-        //        taskInfo.InitStackStructure(db);
-        //    }
-        //    return result;
-
-        //    #endregion 初始化一个信息的缓存信息
-        //}
     }
 }

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

@@ -60,6 +60,7 @@ namespace WCS.WorkEngineering.Systems
             var isPut = false;
             var nextAdd = GetNext(obj);
             if (nextAdd == 9999) return;
+            var goodsType = obj.Data4.Length.ToInt();
             int taskId = 0;
             SqlSugarHelper.Do(_db =>
             {
@@ -67,7 +68,6 @@ namespace WCS.WorkEngineering.Systems
                 var taskInfo = db.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskNumber && v.Status < TaskStatus.FinishOfShunt && !v.BarCode.Contains("Error"));
                 if (obj.Data2.TaskNumber == 1)
                 {
-                    var goodsType = obj.Data4.Length.ToInt();
                     var type = goodsType.ToString();
                     //找到一条起点是当前位置且状态小于2的任务
                     taskInfo = db.Queryable<WCS_TaskInfo>().OrderBy(x => x.AddTime).First(x => x.AddrFrom == obj.Entity.Code && x.BarCode.Contains("Error") && x.AddrNext == null && x.GoodsType == goodsType);
@@ -107,7 +107,7 @@ namespace WCS.WorkEngineering.Systems
 
                 if (!taskInfo.BarCode.Contains("Error"))
                 {
-                    switch (obj.Data4.Length.ToInt())
+                    switch (goodsType)
 
                     {
                         case 9:
@@ -155,15 +155,35 @@ namespace WCS.WorkEngineering.Systems
                         break;
                 };
 
+                var isTruss = false; //表示这个工字轮是要去桁架区域码垛的,默认不作处理
+                if (goodsType == 18)
+                {
+                    //判断这个垛型是否是到桁架区域进行码垛
+                    isTruss = db.Queryable<BillBomsetgrp>().First(x => x.BomCode.Contains(taskInfo.MatCode)).IsTruss;
+                    if (isTruss)
+                    {
+                        nextAdd = obj.Entity.Code switch
+                        {
+                            "418" => 455,
+                            "618" => 655,
+                            "818" => 855,
+                            "1018" => 1055,
+                            "1218" => 1255,
+                            "1418" => 1455,
+                            _ => 9999
+                        };
+                    }
+                }
+
                 taskId = taskInfo.ID;
-                if (obj.Data4.Length.ToInt() != 9) //09工字轮在环形库分流点只分配下一个地址,不作任何变更
+                if (goodsType != 9 && !isTruss) //09工字轮在环形库分流点只分配下一个地址,不作任何变更
                 {
                     taskInfo.AddrNext = nextAdd.ToString();
                     taskInfo.Status = TaskStatus.FinishOfShunt;
                     taskInfo.EditTime = DateTime.Now;
                     taskInfo.WarehouseCode = taskInfo.WarehouseCode.Contains("R") ? taskInfo.WarehouseCode : taskInfo.WarehouseCode + "R";
                     taskInfo.AddrTo = "Robot";
-                    taskInfo.GoodsType = obj.Data4.Length.ToInt();
+                    taskInfo.GoodsType = goodsType;
                     db.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.AddrNext, x.Status, x.EditTime, x.WarehouseCode, x.AddrTo, x.GoodsType }).ExecuteCommand();
                     taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, nextAdd.ToString(), "工字轮完成环形库分流");
                 }
@@ -171,7 +191,7 @@ namespace WCS.WorkEngineering.Systems
                 {
                     taskInfo.AddrNext = nextAdd.ToString();
                     taskInfo.EditTime = DateTime.Now;
-                    taskInfo.GoodsType = obj.Data4.Length.ToInt();
+                    taskInfo.GoodsType = goodsType;
                     db.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.AddrNext, x.EditTime, x.GoodsType }).ExecuteCommand();
                     taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, nextAdd.ToString(), "工字轮途径环形库分流点");
                 }
@@ -184,6 +204,7 @@ namespace WCS.WorkEngineering.Systems
             obj.Data.GoodsStart = obj.Entity.Code.ToShort();
             obj.Data.GoodsEnd = nextAdd;
             obj.Data.GoodsEnd = nextAdd;
+
             obj.Data.VoucherNo++;
             World.Log($"执行记录:任务号[{taskId}]-[{obj.Data.VoucherNo}]");
         }

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

@@ -107,6 +107,7 @@ namespace WCS.WorkEngineering.Systems
 
             WCS_TaskInfo task = null;
             short nextAdd = 0;
+            int isSideNum = 0;
             SqlSugarHelper.Do(_db =>
             {
                 var db = _db.Default;
@@ -140,6 +141,8 @@ namespace WCS.WorkEngineering.Systems
                 }
 
                 var taskInfo = db.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskNumber && v.Status == Entity.TaskStatus.FinishOfShunt) ?? throw new KnownException("未找到对应的WCS任务", LogLevelEnum.Mid);
+                var location = lineCache.Locations.First(x => x.TaskId == taskInfo.ID);
+                isSideNum = location.SideNum;
                 taskInfo.Status = Entity.TaskStatus.ConveyorExecution;
                 //taskInfo.AddrNext = obj.Entity.Targets.FirstOrDefault().Code;
                 taskInfo.EditWho = "WCS";
@@ -154,6 +157,10 @@ namespace WCS.WorkEngineering.Systems
             obj.Data.TaskNumber = obj.Data2.TaskNumber;
             obj.Data.GoodsStart = obj.Entity.Code.ToShort();
             obj.Data.GoodsEnd = nextAdd;
+            if (isSideNum == 2)
+            {
+                obj.Data.CmdType = StationCmd.Res6;
+            }
             obj.Data.VoucherNo++;
         }
 

+ 1 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/环形库/环形库码垛结束.cs

@@ -19,7 +19,7 @@ namespace WCS.WorkEngineering.Systems.环形库
     /// <summary>
     ///  环形库码垛结束
     /// </summary>
-    [BelongTo(typeof(RingWorld))]
+    [BelongTo(typeof(MainWorld))]
     [Description("环形库码垛结束")]
     public class 环形库码垛结束 : DeviceSystem<Device<IStation520, IStation521, IStation523, IRobot530, IRobot531>>
     {

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

@@ -430,7 +430,7 @@ namespace WCS.WorkEngineering
                 //三台堆垛机IP主机位分别是 41、49、57、65、73、81
                 srm.AddProtocol<ISRM520>(0, 520, $"10.30.37.{ip}");
                 srm.AddProtocol<ISRM521>(0, 521, $"10.30.37.{ip}");
-                srm.AddProtocol<ISRM537>(0, 537, $"10.30.37.{ip}");
+                srm.AddProtocol<ISRM523>(0, 537, $"10.30.37.{ip}");
 
                 //增加巷道
                 var tunnel = new Device($"TY{i + 1}");
@@ -1092,7 +1092,7 @@ namespace WCS.WorkEngineering
                     , "866", "880", "894", "908", "922", "936", "1066", "1080", "1094", "1108", "1122", "1136",
                      "1266", "1280", "1294", "1308", "1322", "1336",  "1466", "1480", "1494", "1508", "1522", "1536" } },
                 { DeviceFlags.桁架09异常缓存放行点, new List<string>(){ "591", "791", "991" , "1191" , "1391" , "1591" } },
-                { DeviceFlags.桁架18缓存放行点, new List<string>(){ "550", "564", "578", "750", "764", "778", "950", "964", "978" , "1150", "1164", "1178" /*, "1350", "1364", "1378" , "1450", "1464", "1478"*/ } },
+                { DeviceFlags.桁架18缓存放行点, new List<string>(){ "550", "564", "578", "750", "764", "778", "950", "964", "978" , "1150", "1164", "1178", "1350", "1364", "1378", "1550", "1564", "1578" } },
                 { DeviceFlags.桁架取货点, new List<string>(){ "461", "475", "489", "503", "517", "531", "545", "559", "573", "586", "661", "675", "689", "703", "717", "731", "745", "759", "773", "786",
                      "861", "875", "889", "903", "917", "931", "945", "959", "973", "986", "1061", "1075", "1089", "1103", "1117", "1131", "1145", "1159", "1173", "1186",
                      "1261", "1275", "1289", "1303", "1317", "1331", "1345", "1359", "1373", "1386" , "1461", "1475", "1489", "1503", "1517", "1531", "1545", "1559", "1573", "1586" } },