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