| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413 | 
							- using PlcSiemens.Core.Extension;
 
- using ServiceCenter.Extensions;
 
- using ServiceCenter.Logs;
 
- using ServiceCenter.Redis;
 
- using WCS.Core;
 
- using WCS.WorkEngineering.Protocol.BCR;
 
- using WCS.WorkEngineering.Protocol.Station;
 
- namespace WCS.WorkEngineering.Extensions
 
- {
 
-     /// <summary>
 
-     ///  设备扩展
 
-     /// </summary>
 
-     public static class DeviceExtension
 
-     {
 
-         #region 设备类型
 
-         public static List<ProtocolInfo> ProtocolInfos = new List<ProtocolInfo>();
 
-         /// <summary>
 
-         ///  是否是巷道
 
-         /// </summary>
 
-         /// <param name="source">设备信息</param>
 
-         /// <returns></returns>
 
-         public static bool IsTunnel(this Device source)
 
-         {
 
-             return source.HasFlag(DeviceFlags.巷道);
 
-         }
 
-         #endregion 设备类型
 
-         #region 标签判断
 
-         public static bool HasFlag(this Device device, params DeviceFlags[] flag)
 
-         {
 
-             foreach (var item in flag)
 
-             {
 
-                 if (device.HasFlag(item)) continue;
 
-                 return false;
 
-             }
 
-             return true;
 
-         }
 
-         #endregion 标签判断
 
-         #region 协议操作扩展
 
-         public static void AddProtocol<T>(this Device device, int position, ushort db, string ip)
 
-         {
 
-             var info = new ProtocolInfo
 
-             {
 
-                 Position = position,
 
-                 DBInfo = new DBInfo
 
-                 {
 
-                     No = db,
 
-                     PLCInfo = new PLCInfo
 
-                     {
 
-                         IP = ip,
 
-                         Port = 102,
 
-                         Rack = 0,
 
-                         Slot = 1,
 
-                         Type = PLCType.Siemens
 
-                     }
 
-                 }
 
-             };
 
-             ProtocolInfos.Add(info);
 
-             device.AddProtocol<T>(info);
 
-         }
 
-         #endregion 协议操作扩展
 
-         #region 设备扩展方法
 
-         /// <summary>
 
-         ///  入库站点是否被禁止
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public static void 入库站点是否被禁止(this Device<IStation520, IStation521, IStation523> device)
 
-         {
 
-             var config = RedisHub.Default.Check("ForbidTubuEnter") ?? throw new Exception("请在Redis中配置入库口禁用");
 
-             var configs = config.Split(",");
 
-             if (configs.Contains(device.Entity.Code)) throw new KnownException("当前入库口已被禁用,请联系运维人员了解具体情况", LogLevelEnum.High);
 
-         }
 
-         /// <summary>
 
-         ///  入库站点是否被禁止
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public static void 入库站点是否被禁止(this Device<IStation520, IStation521, IStation523, IBCR81> device)
 
-         {
 
-             var config = RedisHub.Default.Check("ForbidTubuEnter") ?? throw new Exception("请在Redis中配置入库口禁用");
 
-             var configs = config.Split(",");
 
-             if (configs.Contains(device.Entity.Code)) throw new KnownException("当前入库口已被禁用,请联系运维人员了解具体情况", LogLevelEnum.High);
 
-         }
 
-         /// <summary>
 
-         ///  入库站点是否被禁止
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public static void 入库站点是否被禁止(this Device<IStation520, IStation521, IStation523, IStation91> device)
 
-         {
 
-             var config = RedisHub.Default.Check("ForbidTubuEnter") ?? throw new Exception("请在Redis中配置入库口禁用");
 
-             var configs = config.Split(",");
 
-             if (configs.Contains(device.Entity.Code)) throw new KnownException("当前入库口已被禁用,请联系运维人员了解具体情况", LogLevelEnum.High);
 
-         }
 
-         /// <summary>
 
-         ///  入库站点是否被禁止
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public static void 入库站点是否被禁止(this Device<IStation520, IStation521, IStation523, IStation91, IBCR81> device)
 
-         {
 
-             var config = RedisHub.Default.Check("ForbidTubuEnter") ?? throw new Exception("请在Redis中配置入库口禁用");
 
-             var configs = config.Split(",");
 
-             if (configs.Contains(device.Entity.Code)) throw new KnownException("当前入库口已被禁用,请联系运维人员了解具体情况", LogLevelEnum.High);
 
-         }
 
-         /// <summary>
 
-         ///  入库站点是否满足执行条件
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public static void 入库站点是否满足执行条件(this Device<IStation520, IStation521, IStation523> device)
 
-         {
 
-             if (device.Data.VoucherNo != device.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{device.Data.VoucherNo}-DB521:{device.Data2.VoucherNo}", LogLevelEnum.High);
 
-             if (device.Data3.Status.HasFlag(StationStatus.Run)) throw new KnownException("设备运行中", LogLevelEnum.Low);
 
-             if (device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 0) throw new KnownException("有光电无请求", LogLevelEnum.Mid);
 
-             if (!device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 1) throw new KnownException("无光电有请求", LogLevelEnum.Mid);
 
-             if (!device.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new KnownException("站台货物信息与实际占用不一致", LogLevelEnum.Low);
 
-             //if (!device.Data3.Status.HasFlag(StationStatus.PH_Status)) throw new KnownException("无光电", LogLevelEnum.Mid);
 
-             if (device.Data2.Request != 1) throw new KnownException("无请求", LogLevelEnum.Mid);
 
-         }
 
-         /// <summary>
 
-         ///  入库站点是否满足执行条件
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public static void 入库站点是否满足执行条件(this Device<IStation520, IStation521, IStation523, IBCR81> device)
 
-         {
 
-             if (device.Data.VoucherNo != device.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{device.Data.VoucherNo}-DB521:{device.Data2.VoucherNo}", LogLevelEnum.High);
 
-             if (device.Data3.Status.HasFlag(StationStatus.Run)) throw new KnownException("设备运行中", LogLevelEnum.Low);
 
-             if (device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 0) throw new KnownException("有光电无请求", LogLevelEnum.Mid);
 
-             if (!device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 1) throw new KnownException("无光电有请求", LogLevelEnum.Mid);
 
-             if (!device.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new KnownException("站台货物信息与实际占用不一致", LogLevelEnum.Low);
 
-             if (!device.Data3.Status.HasFlag(StationStatus.PH_Status)) throw new KnownException("无光电", LogLevelEnum.Mid);
 
-             if (device.Data2.Request != 1) throw new KnownException("无请求", LogLevelEnum.Mid);
 
-         }
 
-         /// <summary>
 
-         ///  入库站点是否满足执行条件
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public static void 入库站点是否满足执行条件(this Device<IStation520, IStation521, IStation523, IStation91> device)
 
-         {
 
-             if (device.Data.VoucherNo != device.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{device.Data.VoucherNo}-DB521:{device.Data2.VoucherNo}", LogLevelEnum.High);
 
-             if (device.Data3.Status.HasFlag(StationStatus.Run)) throw new KnownException("设备运行中", LogLevelEnum.Low);
 
-             if (device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 0) throw new KnownException("有光电无请求", LogLevelEnum.Mid);
 
-             if (!device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 1) throw new KnownException("无光电有请求", LogLevelEnum.Mid);
 
-             if (!device.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new KnownException("站台货物信息与实际占用不一致", LogLevelEnum.Low);
 
-             if (!device.Data3.Status.HasFlag(StationStatus.PH_Status)) throw new KnownException("无光电", LogLevelEnum.Mid);
 
-             if (device.Data2.Request != 1) throw new KnownException("无请求", LogLevelEnum.Mid);
 
-         }
 
-         /// <summary>
 
-         ///  入库站点是否满足执行条件
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public static void 入库站点是否满足执行条件(this Device<IStation520, IStation521, IStation523, IStation91, IBCR81> device)
 
-         {
 
-             if (device.Data.VoucherNo != device.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{device.Data.VoucherNo}-DB521:{device.Data2.VoucherNo}", LogLevelEnum.High);
 
-             if (device.Data3.Status.HasFlag(StationStatus.Run)) throw new KnownException("设备运行中", LogLevelEnum.Low);
 
-             if (device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 0) throw new KnownException("有光电无请求", LogLevelEnum.Mid);
 
-             if (!device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 1) throw new KnownException("无光电有请求", LogLevelEnum.Mid);
 
-             if (!device.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new KnownException("站台货物信息与实际占用不一致", LogLevelEnum.Low);
 
-             if (device.Data2.Request != 1.ToShort()) throw new KnownException("无请求", LogLevelEnum.Mid);
 
-             if (!device.Data3.Status.HasFlag(StationStatus.PH_Status)) throw new KnownException("无光电", LogLevelEnum.Mid);
 
-             if (device.Data2.Request != 1) throw new KnownException("无请求", LogLevelEnum.Mid);
 
-         }
 
-         /// <summary>
 
-         ///  获取BCR码
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public static string GetBCRCode(this IBCR81 bCR)
 
-         {
 
-             var barcode = bCR.Content.Trim('\0').Trim();
 
-             if (barcode.IsNullOrWhiteSpace()) throw new KnownException($"扫码失败,内容为空", LogLevelEnum.High);
 
-             return barcode;
 
-         }
 
-         /// <summary>
 
-         ///  获取历史扫码记录
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         public static List<string> GetBcrCodeList(this IBCR83 bCR)
 
-         {
 
-             return new List<string>() {
 
-                 bCR.BcrCode1.Trim('\0').Trim(),
 
-                 bCR.BcrCode2.Trim('\0').Trim(),
 
-                 bCR.BcrCode3.Trim('\0').Trim(),
 
-                 bCR.BcrCode4.Trim('\0').Trim(),
 
-                 bCR.BcrCode5.Trim('\0').Trim(),
 
-                 bCR.BcrCode6.Trim('\0').Trim(),
 
-                 bCR.BcrCode7.Trim('\0').Trim(),
 
-                 bCR.BcrCode8.Trim('\0').Trim(),
 
-                 bCR.BcrCode9.Trim('\0').Trim(),
 
-                 bCR.BcrCode10.Trim('\0').Trim(),
 
-                 bCR.BcrCode11.Trim('\0').Trim() };
 
-         }
 
-         #endregion 设备扩展方法
 
-     }
 
-     /// <summary>
 
-     ///  设备标签
 
-     /// </summary>
 
-     [Flags]
 
-     public enum DeviceFlags : ulong
 
-     {
 
-         扫码 = 1L << 0,
 
-         称重 = 1L << 1,
 
-         外检 = 1L << 2,
 
-         顶升 = 1L << 3,
 
-         移栽 = 1L << 4,
 
-         旋转 = 1L << 5,
 
-         入库 = 1L << 6,
 
-         出库 = 1L << 7,
 
-         巷道口 = 1L << 8,
 
-         出货口 = 1L << 9,
 
-         AGV口 = 1L << 10,
 
-         直轨 = 1L << 11,
 
-         出库口 = 1L << 12,
 
-         RGV = 1L << 13,
 
-         巷道 = 1L << 14,
 
-         堆垛机 = 1L << 15,
 
-         输送机 = 1L << 16
 
-     }
 
-     /// <summary>
 
-     /// 输送机段信息
 
-     /// </summary>
 
-     public class StationSegmentInfo
 
-     {
 
-         /// <summary>
 
-         ///  构造函数
 
-         /// </summary>
 
-         /// <param name="start">起始设备号</param>
 
-         /// <param name="end">结束设备号</param>
 
-         /// <param name="ip">ip</param>
 
-         public StationSegmentInfo(int start, int end, string ip)
 
-         {
 
-             Start = start;
 
-             End = end;
 
-             IP = ip;
 
-         }
 
-         /// <summary>
 
-         /// 起始设备编号
 
-         /// </summary>
 
-         public int Start { get; set; }
 
-         /// <summary>
 
-         ///结束设备编号
 
-         /// </summary>
 
-         public int End { get; set; }
 
-         /// <summary>
 
-         ///  输送机段所属IP
 
-         /// </summary>
 
-         public string IP { get; set; }
 
-     }
 
-     /// <summary>
 
-     /// RGV信息
 
-     /// </summary>
 
-     public class RGVSegmentInfo
 
-     {
 
-         /// <summary>
 
-         ///  构造函数
 
-         /// </summary>
 
-         /// <param name="start">起始设备号</param>
 
-         /// <param name="end">结束设备号</param>
 
-         /// <param name="ip">ip</param>
 
-         public RGVSegmentInfo(int code, string ip)
 
-         {
 
-             Code = code;
 
-             IP = ip;
 
-         }
 
-         /// <summary>
 
-         /// 设备编号
 
-         /// </summary>
 
-         public int Code { get; set; }
 
-         /// <summary>
 
-         ///  输送机段所属IP
 
-         /// </summary>
 
-         public string IP { get; set; }
 
-     }
 
-     /// <summary>
 
-     /// 桁架信息
 
-     /// </summary>
 
-     public class TrussSegmentInfo
 
-     {
 
-         /// <summary>
 
-         ///  构造函数
 
-         /// </summary>
 
-         /// <param name="code"></param>
 
-         /// <param name="ip">ip</param>
 
-         public TrussSegmentInfo(int code, string ip)
 
-         {
 
-             Code = code;
 
-             IP = ip;
 
-         }
 
-         /// <summary>
 
-         /// 设备编号
 
-         /// </summary>
 
-         public int Code { get; set; }
 
-         /// <summary>
 
-         ///  输送机段所属IP
 
-         /// </summary>
 
-         public string IP { get; set; }
 
-     }
 
-     /// <summary>
 
-     ///  扫码器信息
 
-     /// </summary>
 
-     public class BcrInfo
 
-     {
 
-         /// <summary>
 
-         ///  构造函数
 
-         /// </summary>
 
-         /// <param name="deviceNo">设备编号</param>
 
-         /// <param name="ip">ip</param>
 
-         public BcrInfo(int[] deviceNo, string ip)
 
-         {
 
-             DeviceNo = deviceNo;
 
-             IP = ip;
 
-         }
 
-         /// <summary>
 
-         ///  设备编号
 
-         /// </summary>
 
-         public int[] DeviceNo { get; set; }
 
-         /// <summary>
 
-         ///  ip
 
-         /// </summary>
 
-         public string IP { get; set; }
 
-     }
 
-     /// <summary>
 
-     ///  外形信息
 
-     /// </summary>
 
-     public class ShapeInfo
 
-     {
 
-         /// <summary>
 
-         ///  构造函数
 
-         /// </summary>
 
-         /// <param name="deviceNo">设备编号</param>
 
-         /// <param name="ip">ip</param>
 
-         public ShapeInfo(int[] deviceNo, string ip)
 
-         {
 
-             DeviceNo = deviceNo;
 
-             IP = ip;
 
-         }
 
-         /// <summary>
 
-         ///  设备编号
 
-         /// </summary>
 
-         public int[] DeviceNo { get; set; }
 
-         /// <summary>
 
-         ///  ip
 
-         /// </summary>
 
-         public string IP { get; set; }
 
-     }
 
-     /// <summary>
 
-     /// 路径信息
 
-     /// </summary>
 
-     public class RouteInfo
 
-     {
 
-         /// <summary>
 
-         ///  构造函数
 
-         /// </summary>
 
-         /// <param name="deviceCode">起始点设备号</param>
 
-         /// <param name="nextList">下一个设备集合</param>
 
-         public RouteInfo(string deviceCode, string[] nextList)
 
-         {
 
-             DeviceCode = deviceCode;
 
-             NextList = nextList;
 
-         }
 
-         /// <summary>
 
-         ///  设备号
 
-         /// </summary>
 
-         public string DeviceCode { get; set; }
 
-         /// <summary>
 
-         ///  下一个设备
 
-         /// </summary>
 
-         public string[] NextList { get; set; }
 
-     }
 
- }
 
 
  |