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; }
}
}