using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Linq; using System.Reflection; using System.Resources; using System.Text; using System.Threading.Tasks; using System.Windows.Media; namespace Bro.Common.Helper { public static class EnumHelper { /// /// 根据枚举的代码名称获取枚举列表信息 /// /// /// public static List GetEnumListByName(string enumName, string assemblyName = "Common.Helper.EnumHelper+") { List list = new List(); string fullName = assemblyName + enumName; Type t = typeof(EnumHelper).Assembly.GetType(fullName); t.GetEnumNames().ToList().ForEach(e => { int value = Convert.ToInt32(Enum.Parse(t, e)); string desc = ((Enum)Enum.Parse(t, e)).GetEnumDescription(); var item = new { Value = value, Desc = desc, Code = e }; list.Add(item); }); return list; } public static List GetEnumListByType(Type enumType) { List list = new List(); enumType.GetEnumNames().ToList().ForEach(e => { int value = Convert.ToInt32(Enum.Parse(enumType, e)); string desc = ((Enum)Enum.Parse(enumType, e)).GetEnumDescription(); var item = new { Value = value, Desc = desc, Code = e }; list.Add(item); }); return list; } /// /// 获取具体某一枚举的中文描述 /// /// /// public static string GetEnumDescription(this Enum enumObj) { Type t = enumObj.GetType(); FieldInfo f = t.GetField(enumObj.ToString()); DescriptionAttribute attr = f.GetCustomAttribute(); if (attr != null) { return attr.Description; } else { return null; } } public static string GetPartSFCName(this PartType partType) { Type t = partType.GetType(); FieldInfo f = t.GetField(partType.ToString()); SFCNameAttribute attr = f.GetCustomAttribute(); if (attr != null) { return attr.SFCAlias; } else { return ""; } } public static System.Windows.Media.Color GetEnumSelectedMediaColor(this Enum enumObj) { Type t = enumObj.GetType(); FieldInfo f = t.GetField(enumObj.ToString()); ColorSelectAttribute attr = f.GetCustomAttribute(); if (attr != null) { var prop = typeof(Colors).GetProperties().FirstOrDefault(p => p.Name == attr.SelectedColor); if (prop != null) { return (System.Windows.Media.Color)prop.GetValue(null); } } return Colors.Transparent; } public static System.Drawing.Color GetEnumSelectedColor(this Enum enumObj) { Type t = enumObj.GetType(); FieldInfo f = t.GetField(enumObj.ToString()); ColorSelectAttribute attr = f.GetCustomAttribute(); if (attr != null) { return System.Drawing.Color.FromName(attr.SelectedColor); } else { return System.Drawing.Color.Transparent; } } public static string GetEnumSelectedColorString(this Enum enumObj) { Type t = enumObj.GetType(); FieldInfo f = t.GetField(enumObj.ToString()); ColorSelectAttribute attr = f.GetCustomAttribute(); if (attr != null) { return attr.SelectedColor; } else { return "Transparent"; } } /// /// 当枚举牵涉到状态变换,检查现状态是否满足待转换的状态的前置状态要求 /// /// /// /// public static bool CheckPreStateValid(this Enum stateToBe, int currentState) { Type t = stateToBe.GetType(); FieldInfo f = t.GetField(stateToBe.ToString()); PreStateAttribute attr = f.GetCustomAttribute(); if (attr == null) { return true; } else { return attr.CheckPreStateValid(currentState); } } /// /// 设备状态定义 /// 未初始化和异常状态无前置状态要求 /// 初始化操作前置状态必须是未初始化、关闭状态和异常状态 /// 打开前置必须是初始化和暂停 /// 关闭前置必须是打开和暂停和异常 /// 暂停前置必须是打开 /// public enum DeviceState { TBD = -1, [ColorSelect("Gray")] [Description("未初始化")] DSUninit = 1, [ColorSelect("Gold")] [PreState(1 + 2 + 4 + 8 + 32)] [Description("已初始化")] DSInit = 2, [ColorSelect("Lime")] [PreState(2 + 4 + 16)] [Description("已打开")] DSOpen = 4, [ColorSelect("Gray")] [PreState(1 + 4 + 8 + 16 + 32)] [Description("已关闭")] DSClose = 8, [ColorSelect("Gold")] [PreState(4 + 16)] [Description("已暂停")] DSPause = 16, [ColorSelect("Red")] [Description("异常状态")] DSExcept = 32 } /// /// 工序状态 /// public enum ProcessState { [Description("空闲")] Idel = 1, [Description("运行中")] Running = 2, [Description("完成")] Done = 3, [Description("异常")] Exceptional = 99, } public enum DeviceAttributeType { [Description("设备驱动")] Device = 1, [Description("初始配置")] InitialConfig = 2, [Description("操作配置")] OperationConfig = 4, [Description("设备配置")] DeviceConfig = 8, [Description("输入配置")] InputConfig = 16, [Description("初始配置控件")] InitialConfigCtrl = 32, [Description("操作配置控件")] OperationConfigCtrl = 64, [Description("设备配置控件")] DeviceConfigCtrl = 128, [Description("输入配置控件")] InputConfigCtrl = 256, [Description("运行控件")] RunCtrl = 512, [Description("操作配置面板")] OperationConfigPanel = 1024, } public enum EnableState { [Description("启用")] Enabled = 0, [Description("禁用")] Disabled = 1, } public enum EnableStateFilter { [Description("全部")] All = -1, [Description("启用")] Enabled = 0, [Description("禁用")] Disabled = 1, } public enum OutputResultCommon { [Description("OK")] OK = 1, [Description("NG")] NG = 2, } /// /// 设备工作后的输出结果 /// public enum OutputResult { [Description("分支一")] Branch1 = 1, [Description("分支二")] Branch2 = 2, [Description("分支三")] Branch3 = 4, [Description("分支四")] Branch4 = 8, [Description("分支五")] Branch5 = 16, [Description("分支六")] Branch6 = 32, [Description("分支七")] Branch7 = 64, [Description("分支八")] Branch8 = 128, } /// /// PLC项目的值的类型 /// public enum PLCItemType { [Description("布尔类型")] Bool = 0, [Description("整型")] Integer = 1, [Description("字符串型")] String = 2, } /// /// 对PLC项目的操作类型 /// public enum PLCOpType { [Description("读取")] Read = 1, [Description("写入")] Write = 2, [Description("监控")] Monitor = 4, /// /// 报警监控 1+8 /// [Description("报警监控")] WarningMonitor = 9, /// /// CT监控 1+16 /// [Description("CT监控")] CTMonitor = 17, } /// /// PLC的运行模式 /// public enum PLCRunMode { [Description("自动模式")] Auto = 0, [Description("手动模式")] Manual = 1 } /// /// 相机运行模式 /// public enum CameraOpMode { [Description("拍照")] Snapshot = 1, [Description("扫描")] Scan = 2, } /// /// 设备操作类型 /// public enum DeviceMode { [Description("编辑时")] Edit = 1, [Description("运行时")] Run = 2, } /// /// 日志类型 /// public enum LogType { [Description("警告信息")] Exception_Warning = 1, [Description("错误信息")] Exception_Error = 2, [Description("致命信息")] Exception_Fatal = 3, [Description("设备信息")] Info_Device = 11, [Description("工序信息")] Info_Process = 12, [Description("操作信息")] Info_Operation = 13, [Description("用户操作信息")] User_Operation = 21, [Description("测量结果")] MeasureResult = 31, } /// /// 马达/运动板卡运行模式 /// public enum MotorMoveMode { /// /// 普通点位运动 /// [Description("普通点位运动")] Normal = 1, ///// ///// 高速等距运动 ///// //[Description("高速等距运动")] //HighSpeedStep = 2, ///// ///// 高速不等距运动 ///// //[Description("高速不等距运动")] //HighSpeed = 3, /// /// 找正限位运动 /// [Description("找正限位运动")] FindPositive = 4, /// /// 离开正限位 /// [Description("离开正限位")] LeavePositive = 5, /// /// 找负限位运动 /// [Description("找负限位运动")] FindNegative = 6, /// /// 离开负限位 /// [Description("离开负限位")] LeaveNegative = 7, /// /// 找原点运动 /// [Description("找原点运动")] FindOri = 8, /// /// Jog模式 /// [Description("Jog模式")] Jog = 9, /// /// 读数头找原点方式 /// [Description("读数头找原点方式")] FindOriIndex = 10, /// /// 插补模式 /// [Description("插补模式")] Coordinate = 11, ///// ///// 刀向更随功能 ///// //[Description("刀向更随功能")] //BufMove = 12, } /// /// 马达IO定义类型 /// public enum MotorIODefine { Nothing, InputStartLeft, InputStartRight, InputCurtainLeft, InputCurtainRight, InputSafeDoor, InputEmergency, InputReset, InputScrew1, InputScrew2, InputSuckLeft, InputSuckRight, InputSuckXYZ, InputCylinderLeftLimitFront, InputCylinderLeftLimitBack, InputCylinderRightLimitFront, InputCylinderRightLimitBack, OutputYellow, OutputGreen, OutputRed, OutputBeep, OutputLight, OutputMotorPower, OutputInitOK, OutputZLock, OutputLeftCylinder, OutputRightCylinder, OutputLeftSuck, OutputRightSuck, OutputScrewBlow, OutputCamera, OutputScrewSuck, } /// /// GTS运动板卡控制返回控制码 /// public enum GTSRetCode { [Description("指令执行成功")] GRCRunOK = 0, // 指令执行成功 [Description("指令执行错误")] GRCRunErr = 1, // 指令执行错误 [Description("icense不支持")] GRCNotSupport = 2, // icense不支持 [Description("指令参数错误")] GRCInvalidParam = 7, // 指令参数错误 [Description("主机和运动控制器通讯失败")] GRCCommErr = -1, // 主机和运动控制器通讯失败 [Description("打开控制器失败")] GRCOpenErr = -6, // 打开控制器失败 [Description("运动控制器没有响应")] GRCNotAck = -7 // 运动控制器没有响应 } /// /// 机台工位设置 /// public enum WorkStation { [Description("左工位")] Left = 1, [Description("右工位")] Right = 2 } /// /// 零件类型 /// public enum PartType { [Description("托盘")] Tray, [Description("流程卡")] ProcessCard, [SFCName("ENCL")] [Description("外壳")] Housing, [SFCName("LATOR")] [Description("绝缘片")] Insulator, [SFCName("TOP")] [Description("散热片")] TopSpread, [SFCName("PWRSPLY")] [Description("PSU")] PSU, [Description("WIP")] WIP, } /// /// 装载结果 /// public enum MountResult { [Description("未装载")] NULL = -1, [Description("开始装载")] START = 99, [Description("OK")] OK = 1, [Description("NG")] NG = 0, [Description("过站OK")] PASS = 2 } /// /// 订阅发布类型 /// public enum PubTag { //[Description("RFID标签上传")] //RFIDCodeUpdate, [Description("条码上传")] BarcodeUpdate, [Description("产品条码信息上传")] ProductionCodeUpdate, [Description("图像上传")] ImageUpdate, [Description("图像清除")] ImageClear, [Description("螺丝扭矩上传")] ScrewTorqueUpdate, [Description("螺丝平面检测上传")] ScrewPlaneUpdate, [Description("异常信息上传")] ExceptionUpdate, [Description("PLC报警信息上传")] PLCWarningUpdate, [Description("DownTime通知")] DownTimeNotice, [Description("来料剩余通知")] TrayRemain, [Description("CT时间上传")] CTUpdate, [Description("简单信息上传")] SimpleInfoUpdate, [Description("设备状态")] DeviceState, [Description("设备操作")] DeviceOperation, [Description("特征点数据上传")] FeaturePointUpdate, [Description("引导值上传")] AdjustUpdate, [Description("螺丝图像点位数据上传")] ScrewImagePositionUpdate, [Description("螺丝运动点位数据上传")] ScrewPositionUpdate, [Description("Log信息")] LogInfo, [Description("工站完成信息")] StationDone, #region ByPass /// /// ByPass模式下输入条码 /// [Description("ByPass模式下输入条码")] OnByPassInput, /// /// ByPass模式切换 /// [Description("ByPass模式切换")] ByPassModeChange, /// /// ByPass模式操作完成 /// [Description("ByPass模式操作完成")] ByPassOpDone, /// /// ByPass模式过站检查 /// [Description("ByPass模式过站检查")] ByPassPreCheck, /// /// ByPass模式来料检查 /// [Description("ByPass模式来料检查")] ByPassIncomingCheck, #endregion #region 总线PLC [Description("总线PLC数据上传")] MainPLCDataUpdate, #endregion #region Calibration [Description("单次标定完成")] CalibStepDone, [Description("全部标定完成")] CalibAllDone, #endregion [Description("视觉计算结果")] VisionResult, } /// /// 站点操作模式 PLC通信使用 /// public enum StationMode { [ColorSelect("Transparent")] [Description("无状态")] NULL = -1, [ColorSelect("Green")] [Description("自动模式")] AUTO = 1, [ColorSelect("Gold")] [Description("手动模式")] MANUAL = 0, } /// /// 站点状态 PLC通信使用 /// public enum StationState { [ColorSelect("Transparent")] [Description("无状态")] NULL, [ColorSelect("Red")] [Description("故障状态")] ERROR, [ColorSelect("Green")] [Description("运行状态")] RUN, [ColorSelect("Gold")] [Description("暂停状态")] PAUSE, } public enum WarningFromPC { OK = 0, SFCPartFail = 1, SFCProductionFail = 2, SFCNetError = 3, LocalNetError = 11, UnknowError = 21, /// /// 取料持续失败 /// PickContinuousFailure = 31, /// /// 持续抛料 /// ContinuousRejection = 32, /// /// 俯拍安装持续失败 /// InstallContinuousFailure = 33, } //public enum CameraDriverType //{ // Halcon, // //HalconPlugIn, // Hik, //} public enum ImageType { Bmp, Jpeg, } public enum PLCReplyValue { OK = 1, NG = -1, IGNORE = -999, } public enum PriorityDirection { X, Y, } public enum ElementState { New = 1, MouseHover = 2, MouseInSide = 3, Selected = 4, Moving = 5, Normal = 11, Measuring = 21, MeasureDoneOK = 22, MeasureDoneNG = 23, } public enum MouseState { Normal = 1, HoverElement = 2, InSideElement = 3, StretchingLeft = 11, StretchingRight = 12, StretchingUp = 13, StretchingDown = 14, MoveElement = 15, New = 21, Editing = 22, SelectedElement = 23, MovingAll = 31, SelectionZone = 41, SelectionZoneDoing = 42, } public enum RunMode { [Description("设置模式")] SetMode = 0, [Description("运行模式")] RunMode = 1, } } }