using WCS.Core; using PLCType = WCS.Core.PLCType; namespace WCS.WorkEngineering.Extensions { /// /// 设备扩展 /// public static class DeviceExtension { #region 设备类型 public static List ProtocolInfos = new List(); /// /// 是否是巷道 /// /// 设备信息 /// 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(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(info); } #endregion 协议操作扩展 } /// /// 设备标签 /// [Flags] public enum DeviceFlags { 扫码 = 1 << 0, 称重 = 1 << 1, 外检 = 1 << 2, 顶升 = 1 << 3, 移栽 = 1 << 4, 旋转 = 1 << 5, 入库 = 1 << 6, 出库 = 1 << 7, 巷道口 = 1 << 8, RGV口 = 1 << 9, AGV口 = 1 << 10, 直轨 = 1 << 11, 弯轨 = 1 << 12, 环轨 = 1 << 13, 巷道 = 1 << 14, 堆垛机 = 1 << 15, 输送机 = 1 << 16, 一楼出库口 = 1 << 17, 二楼出库口 = 1 << 18, 一楼入库口 = 1 << 19, 二楼入库口 = 1 << 20, 一楼出入库口 = 1 << 21, 二楼出入库口 = 1 << 22, #region 一轨双车堆垛机 一列堆垛机 = 1 << 23, 二列堆垛机 = 1 << 24, #endregion 一轨双车堆垛机 RGV = 1 << 25, 桁架 = 1 << 26 } /// /// 输送机段信息 /// public class StationSegmentInfo { /// /// 构造函数 /// /// 起始设备号 /// 结束设备号 /// ip public StationSegmentInfo(int start, int end, string ip) { Start = start; End = end; IP = ip; } /// /// 起始设备编号 /// public int Start { get; set; } /// ///结束设备编号 /// public int End { get; set; } /// /// 输送机段所属IP /// public string IP { get; set; } } /// /// RGV信息 /// public class RGVSegmentInfo { /// /// 构造函数 /// /// 起始设备号 /// 结束设备号 /// ip public RGVSegmentInfo(int code, string ip) { Code = code; IP = ip; } /// /// 设备编号 /// public int Code { get; set; } /// /// 输送机段所属IP /// public string IP { get; set; } } /// /// 桁架信息 /// public class TrussSegmentInfo { /// /// 构造函数 /// /// /// ip public TrussSegmentInfo(int code, string ip) { Code = code; IP = ip; } /// /// 设备编号 /// public int Code { get; set; } /// /// 输送机段所属IP /// public string IP { get; set; } } /// /// 扫码器信息 /// public class BcrInfo { /// /// 构造函数 /// /// 设备编号 /// ip public BcrInfo(int[] deviceNo, string ip) { DeviceNo = deviceNo; IP = ip; } /// /// 设备编号 /// public int[] DeviceNo { get; set; } /// /// ip /// public string IP { get; set; } } /// /// 外形信息 /// public class ShapeInfo { /// /// 构造函数 /// /// 设备编号 /// ip public ShapeInfo(int[] deviceNo, string ip) { DeviceNo = deviceNo; IP = ip; } /// /// 设备编号 /// public int[] DeviceNo { get; set; } /// /// ip /// public string IP { get; set; } } /// /// 路径信息 /// public class RouteInfo { /// /// 构造函数 /// /// 起始点设备号 /// 下一个设备集合 public RouteInfo(string deviceCode, string[] nextList) { DeviceCode = deviceCode; NextList = nextList; } /// /// 设备号 /// public string DeviceCode { get; set; } /// /// 下一个设备 /// public string[] NextList { get; set; } } }