using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
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 enumObj.ToString();
}
}
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 System.Drawing.Color GetEnumSelectedFontColor(this Enum enumObj)
{
Type t = enumObj.GetType();
FieldInfo f = t.GetField(enumObj.ToString());
var 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")]
[FontColorSelect("Black")]
[Description("未初始化")]
DSUninit = 1,
[ColorSelect("Gold")]
[FontColorSelect("White")]
[PreState(1 + 2 + 4 + 8 + 32)]
[Description("已初始化")]
DSInit = 2,
[ColorSelect("Lime")]
[FontColorSelect("Black")]
[PreState(2 + 4 + 16)]
[Description("已打开")]
DSOpen = 4,
[ColorSelect("Gray")]
[FontColorSelect("White")]
[PreState(1 + 4 + 8 + 16 + 32)]
[Description("已关闭")]
DSClose = 8,
[ColorSelect("Gold")]
[FontColorSelect("White")]
[PreState(4 + 16)]
[Description("已暂停")]
DSPause = 16,
[ColorSelect("Red")]
[FontColorSelect("White")]
[Description("异常状态")]
DSExcept = 32
}
///
/// 工序状态
///
public enum RunState
{
[Description("空闲")]
Idle = 1,
[Description("运行中")]
Running = 2,
[Description("停止")]
Stop = 3,
[Description("宕机")]
Down = 99,
}
[Flags]
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 OutputResult
{
[Description("OK")]
OK = 1,
[Description("NG")]
NG = 2,
}
///
/// 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,
}
///
/// 相机运行模式
///
public enum CameraOpMode
{
[Description("单次拍照")]
SingleSnapShot = 1,
[Description("连续模式")]
ContinuousMode = 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 CameraDriverType
//{
// Halcon,
// //HalconPlugIn,
// Hik,
//}
//public enum ImageType
//{
// Bmp,
// Png,
// Jpeg,
//}
public enum ReplyValue
{
OK = 1,
NG = -1,
IGNORE = -999,
}
public enum PriorityDirection
{
X,
Y,
}
public enum ElementState
{
New = 1,
MouseHover = 2,
MouseInSide = 3,
Selected = 4,
Moving = 5,
Editing = 6,
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,
}
public enum MoveType
{
[Description("绝对运动")]
AbsoluteMove = 1,
[Description("机器人坐标系相对运动")]
RobotRelativeMove = 2,
[Description("相对某个基准点位的相对运动")]
BasedPointRelativeMove = 3,
[Description("回原点")]
Origin = 4,
[Description("左侧姿势")]
LeftPose = 6,
[Description("右侧姿势")]
RightPose = 5,
[Description("前侧姿势")]
FrontPose = 7,
[Description("相机坐标系相对运动")]
CameraRelativeMove = 12,
}
///
/// 马达/运动板卡运行模式
///
public enum MotionMode
{
///
/// 普通点位运动
///
[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 IOPrestatement
{
[Description("自定义")]
Customized = 0,
[Description("指示灯-黄")]
Light_Yellow = 1,
[Description("指示灯-绿")]
Light_Green = 2,
[Description("指示灯-红")]
Light_Red = 3,
[Description("蜂鸣器")]
Beep = 4,
[Description("照明灯")]
Light = 5,
[Description("急停")]
EmergencyStop = 99,
}
///
/// 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 // 运动控制器没有响应
}
///
/// 运动板卡 IO 类型(IN OUT)
///
public enum IOType
{
[Description("INPUT")]
INPUT = 0,
[Description("OUTPUT")]
OUTPUT = 1
}
public enum IOValue
{
[Description("关闭")]
FALSE = 0,
[Description("开启")]
TRUE = 1,
[Description("反转")]
REVERSE = 2,
}
///
/// PubSubCenter事件中心的消息类型
///
public enum PubSubCenterMessageType
{
///
/// 运行界面更新产品下拉
///
[Description("更新产品下拉")]
UpdateProductionCodes,
/////
///// 更新数据
/////
//[Description("更新数据")]
//UpdateData,
}
public enum MachineState
{
Unknown,
Ready,
Running,
Alarm,
Pause,
Resetting,
}
}
}