using System; using System.Collections.Generic; using System.Globalization; using static CMS_CORE_Library.Nc; namespace CMS_CORE_Library.Models { public class DataStructures { /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #region Constants public static readonly string[] VALID_PP_FORMATS = { ".txt", ".cnc", ".ini" }; public static readonly string[] VALID_IMAGE_FORMATS = { ".jpg", ".jpeg", ".png" }; public const string PART_PRG_PATH = "C:\\PartPrg\\"; public const string MILLIMETERS = "mm"; public const string INCHES = "inches"; public const double INCHES_CONST = 25.4; public const int USER_SOFTKEYS_NUMBER = 128; public const int NC_SOFTKEYS_NUMBER = 32; public const int MAX_PROCESS_NUMBER = 6; public const int ALARMS_NUMBER = 1024; public const int MAX_HEADS_NUMBER = 20; public enum HEAD_OVERRIDE_SIGN { PLUS = 0, MINUS = 1 } /** Process-Status */ public enum PROC_STATUS : ushort { /** Idle-Status */ IDLE = 1, /** Run-Status */ RUN = 2, /** Hold-Status */ HOLD = 3, /** Error-Status */ ERROR = 4, /** Reset-Status */ RESET = 5, /** Emergency-Status */ EMERG = 6 }; /** CMS-Process-Mode */ public enum PROC_MODE : ushort { /** Automatic-Mode */ AUTO = 1, /** Edit-Mode */ EDIT = 2, /** Mdi-Mode */ MDI = 3, /** Remote-Mode */ REMOTE = 4, /** Teach-Mode */ TEACH = 5, /** Ref-Mode */ REF = 6, /** Jog-Mode */ JOG = 7, /** Joginc-Mode */ JOGINC = 8, /** Ret_on_Profile-Mode */ RETPROF = 9, /** Handle-Mode */ HANDLE = 10, /** Restart-Mode */ RESTART = 11, /** Error-Mode */ ERROR = 12 }; public enum MAGAZINE_ACTIONS { NOT_READY = 0, READY = 1, LOADING = 2, UNLOADING = 3, EXCHANGE = 5, START_NEEDED = 7, TOOL_MANAGER_ERROR = 99 } public enum SIEMENS_MAGAZINE_TYPE { CHAIN = 1, REVOLVER = 3, BOX_MAGAZINE = 5, MAGAZINE_TOOL_BUFFER = 7, MAGAZINE_LOADING_STATION = 9, INVISIBLE_MAGAZINE = 99 } public enum NC_MAGAZINE_TYPE { BOX_MAGAZINE = 0, DISK = 1, CHAIN = 2, MAGAZINE_TOOL_BUFFER = 4, INVISIBLE_MAGAZINE = 5 } public enum POSITION_TYPE { MAGAZINE_LOCATION = 1, SPINDLE = 2, GRIPPER = 3, LOADER = 4, TRANSFER_LOCATION = 5, LOADING_STATION = 6, LOADING_POINT = 7 } public enum ROTATION { NONE = 0, CLOCKWHISE = 1, COUNTERCLOCKWHISE = 2 } public enum SIEMENS_LIFE_TYPE { NONE = 0, TIME = 1, COUNT = 2, DISTANCE = 3, WEAR = 4 } public enum PROGRAM_TYPE_ENUM { NONE = 0, PART_PROGRAM = 1, JOB = 2 } public enum M155_TYPE { REAL = 0, MULTIPLE_BUTTONS = 1, SHOW_VAL = 2 } public enum SCADA_MEM_TYPE { BOOL = 0, BYTE = 1, WORD = 2, INT = 3, REAL = 4 } public enum ASSISTED_TOOLING_ACTION { NONE = 0, EXCHANGE = 1, UNLOAD = 2 } public static IFormatProvider numberFormat = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone(); #region Cms Errors Codes public static CmsError NO_ERROR = new CmsError(CMS_ERROR_CODES.OK, ""); public static CmsError NOT_CONNECTED_ERROR = new CmsError(CMS_ERROR_CODES.NOT_CONNECTED, "error_not_connected"); public static CmsError NOT_FOUND_ERROR = new CmsError(CMS_ERROR_CODES.INTERNAL_ERROR, "error_not_found"); public static CmsError S7_PLC_EMPTY_READ = new CmsError(CMS_ERROR_CODES.PLC_MEM_CONF_ERROR, "error_s7_empy_data"); public static CmsError S7_PLC_WRONG_DATA = new CmsError(CMS_ERROR_CODES.PLC_MEM_CONF_ERROR, "error_s7_wrong_data"); public static CmsError S7_PLC_READ_ERROR = new CmsError(CMS_ERROR_CODES.S7NET_READ_ERROR, "error_s7_read_error"); public static CmsError S7_PLC_READ_ERROR_BYTE = new CmsError(CMS_ERROR_CODES.S7NET_READ_ERROR, "error_s7_read_error_byte"); public static CmsError S7_PLC_READ_ERROR_LST_BYTE = new CmsError(CMS_ERROR_CODES.S7NET_READ_ERROR, "error_s7_read_error_byte_list"); public static CmsError S7_PLC_READ_ERROR_LST_SHORT = new CmsError(CMS_ERROR_CODES.S7NET_READ_ERROR, "error_s7_read_error_short_list"); public static CmsError S7_PLC_READ_ERROR_LST_INT = new CmsError(CMS_ERROR_CODES.S7NET_READ_ERROR, "error_s7_read_error_int_list"); public static CmsError S7_PLC_READ_ERROR_LST_WORD = new CmsError(CMS_ERROR_CODES.S7NET_READ_ERROR, "error_s7_read_error_word_list"); public static CmsError S7_PLC_READ_ERROR_LST_DWORD = new CmsError(CMS_ERROR_CODES.S7NET_READ_ERROR, "error_s7_read_error_dword_list"); public static CmsError S7_PLC_READ_ERROR_LST_DOUBLE = new CmsError(CMS_ERROR_CODES.S7NET_READ_ERROR, "error_s7_read_error_double_list"); public static CmsError S7_PLC_WRITE_ERROR = new CmsError(CMS_ERROR_CODES.S7NET_WRITE_ERROR, "error_s7_write_error"); public static CmsError S7_PLC_WRITE_ERROR_BYTE = new CmsError(CMS_ERROR_CODES.S7NET_WRITE_ERROR, "error_s7_write_error_byte"); public static CmsError S7_PLC_WRITE_ERROR_LST_BYTE = new CmsError(CMS_ERROR_CODES.S7NET_WRITE_ERROR, "error_s7_write_error_byte_list"); public static CmsError S7_PLC_WRITE_ERROR_LST_SHORT = new CmsError(CMS_ERROR_CODES.S7NET_WRITE_ERROR, "error_s7_write_error_short_list"); public static CmsError S7_PLC_WRITE_ERROR_LST_INT = new CmsError(CMS_ERROR_CODES.S7NET_WRITE_ERROR, "error_s7_write_error_int_list"); public static CmsError S7_PLC_WRITE_ERROR_LST_WORD = new CmsError(CMS_ERROR_CODES.S7NET_WRITE_ERROR, "error_s7_write_error_word_list"); public static CmsError S7_PLC_WRITE_ERROR_LST_DWORD = new CmsError(CMS_ERROR_CODES.S7NET_WRITE_ERROR, "error_s7_write_error_dword_list"); public static CmsError S7_PLC_WRITE_ERROR_LST_DOUBLE = new CmsError(CMS_ERROR_CODES.S7NET_WRITE_ERROR, "error_s7_write_error_double_list"); public static CmsError PROC_NOT_FOUND_ERROR = new CmsError(CMS_ERROR_CODES.FUNCTION_NOT_ALLOWED, "error_process_not_found"); public static CmsError FUNCTION_NOT_ALLOWED_ERROR = new CmsError(CMS_ERROR_CODES.FUNCTION_NOT_ALLOWED, "error_function_not_allowed"); public static CmsError BIT_NOT_IN_RANGE_ERROR = new CmsError(CMS_ERROR_CODES.BIT_NOT_IN_RANGE, "error_bit_not_in_range"); public static CmsError BYTE_NOT_IN_RANGE_ERROR = new CmsError(CMS_ERROR_CODES.BYTE_NOT_IN_RANGE, "error_byte_not_in_range"); public static CmsError INCORRECT_PARAMETERS_ERROR = new CmsError(CMS_ERROR_CODES.INCORRECT_PARAMETERS, "error_incorrect_parameters"); public static CmsError INCORRECT_LANGUAGE_ERROR = new CmsError(CMS_ERROR_CODES.NC_LANGUAGE_ERROR, "error_invalid_language"); public static CmsError SIEMENS_ENVIRONMENT_NOT_FOUND_ERROR = new CmsError(CMS_ERROR_CODES.SIEMENS_ENVIRONMENT_NOT_FOUND, "error_siemens_enviroment_not_found_error"); public static CmsError PLC_IP_NOT_FOUND_ERROR = new CmsError(CMS_ERROR_CODES.PLC_IP_NOT_FOUND, "error_plc_ip_not_found_error"); public static CmsError SIEMENS_HMI_NOT_RUNNING_ERROR = new CmsError(CMS_ERROR_CODES.SIEMENS_HMI_NOT_RUNNING, "error_siemens_hmi_not_running"); public static CmsError MAX_TOOL_REACHED_ERROR = new CmsError(CMS_ERROR_CODES.MAX_TOOL_REACHED, "error_max_tool_reached"); public static CmsError MAX_EDGES_PER_TOOL_REACHED_ERROR = new CmsError(CMS_ERROR_CODES.MAX_EDGES_PER_TOOL_REACHED, "error_max_edges_per_tool_reached"); public static CmsError MAX_FAMILY_REACHED_ERROR = new CmsError(CMS_ERROR_CODES.MAX_FAMILY_REACHED, "error_max_family_reached"); public static CmsError MAX_MULTITOOL_REACHED_ERROR = new CmsError(CMS_ERROR_CODES.MAX_MULTITOOL_REACHED, "error_max_multitools_reached"); public static CmsError MAX_TOOLS_PER_MULTITOOL_REACHED_ERROR = new CmsError(CMS_ERROR_CODES.MAX_TOOLS_PER_MULTITOOL_REACHED, "error_max_tools_per_multitool_reached"); public static CmsError MAX_MULTITOOL_LOCATION_REACHED_ERROR = new CmsError(CMS_ERROR_CODES.MAX_MULTITOOL_LOCATION_REACHED, "error_max_multitools_location_reached"); public static CmsError MAGAZINE_POSITION_OCCUPIED_ERROR = new CmsError(CMS_ERROR_CODES.MAG_POS_OCCUPIED, "error_magazine_position_occupied"); public static CmsError MAGAZINE_BUSY_ERROR = new CmsError(CMS_ERROR_CODES.MAGAZINE_OCCUPIED, "error_magazine_occupied"); public static CmsError TOOL_IS_MOUNTED_ERROR = new CmsError(CMS_ERROR_CODES.TOOL_IS_MOUNTED, "error_tool_mounted"); public static CmsError TOOL_AND_POSITION_NOT_MATCHING_ERROR = new CmsError(CMS_ERROR_CODES.TOOL_IS_MOUNTED, "error_tool_and_position_not_matching"); public static CmsError FILE_NOT_FOUND_ERROR = new CmsError(CMS_ERROR_CODES.FILE_NOT_FOUND, "error_file_not_found"); public static CmsError PLC_NOT_RUNNING_ERROR = new CmsError(CMS_ERROR_CODES.PLC_NOT_RUNNING, "error_plc_not_running"); public static CmsError HMI_NOT_RESPONDING_ERROR = new CmsError(CMS_ERROR_CODES.HMI_NOT_RESPONDING, "error_hmi_not_responding"); public static CmsError PROGRAM_IS_SELECTED_ERROR = new CmsError(CMS_ERROR_CODES.PROGRAM_IS_SELECTED, "error_program_is_selected"); public static CmsError SELECTED_PROCESS_ERROR = new CmsError(CMS_ERROR_CODES.SELECTED_PROCESS, "error_selected_process_not_found"); public static CmsError OSAI_TT_FOLDER_NOT_FOUND_ERROR = new CmsError(CMS_ERROR_CODES.OSAI_TT_FOLDER_NOT_FOUND, "osai_tt_folder_not_found_error"); public static CmsError OPTION_NOT_CONSISTENT_ERROR = new CmsError(CMS_ERROR_CODES.OPTION_NOT_CONSISTENT, "error_option_not_consistent"); public static CmsError WRONG_CMS_PP_ERROR = new CmsError(CMS_ERROR_CODES.WRONG_CMS_PP, "error_wrong_custom_part_program"); public static CmsError SIEMENS_TOOL_TABLE_ERROR = new CmsError(CMS_ERROR_CODES.SIEMENS_TOOL_TABLE_ERROR, "error_siemens_tool_table_error"); public static CmsError PLC_MEM_CONF_ERROR = new CmsError(CMS_ERROR_CODES.PLC_MEM_CONF_ERROR, "error_plc_mem_conf_not_found"); #endregion Cms Errors Codes #endregion Constants /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #region Data structure models // R-W MEMORY Cell public struct MEMORY_CELL { public readonly MEMORY_TYPE MemType; public readonly int Address; public readonly int SubAddress; /// /// Memory size (in byte) /// public readonly int Size; public MEMORY_CELL(MEMORY_TYPE MType, int Addr, int SubAddr, int Sz) { MemType = MType; Address = Addr; SubAddress = SubAddr; Size = Sz; } public MEMORY_CELL(MEMORY_TYPE MType, int Addr, int Sz) { MemType = MType; Address = Addr; SubAddress = 0; Size = Sz; } } public class AlarmModel { public uint Id; public string Message; public bool IsWarning; public int Process; public DateTime DateTime; } public class PlcAlarmModel { public uint Id; public bool IsWarning; public bool RestorationIsActive; public List Process; } public class ProcessDataModel { public uint Id; public string Type; public bool IsInAlarm; public string PartProgramName; public string Status; public bool Visible; public ushort Reps; public bool IsSelected; public bool IsInPieceWork; public bool CanLoadProgram; } public class FunctionalityModel { public uint Id; public bool IsActive; } public struct StrobeModel { public uint Id; public bool IsActive; } public class AxisResetDataModel { public bool IsActive; public int Percentage; public AxisResetDataModel() { IsActive = false; Percentage = 0; } public override bool Equals(object obj) { var item = obj as AxisResetDataModel; if (IsActive == item.IsActive && Percentage == item.Percentage) return true; else return false; } public override int GetHashCode() { return base.GetHashCode(); } } public struct CounterModel { public uint Id; public uint Value; } public class M155InputIsNeededModel { public uint Process; public bool IsNeeded; public M155_TYPE Type; public string Message; public double Value; public Dictionary Buttons; } public class M156InputIsNeededModel { public uint Process; public int Id; public double Value; } public class M157DataModel { public uint Process; public ushort Timer; public bool CountdownIsActive; public bool TimerInputNeeded; } public struct M154DataModel { public uint Process; public bool IsNeeded; public string[] Parameters; } public struct MtConnectDataNeededModel { public uint Process; public bool IsNeeded; } public class SoftKeysModel { public uint Id; public bool Active; public bool Value; } public class ToolInSpindleModel { public string ToolName; public int ChildId; public bool Disabled; public bool Measured; public bool Broken; public double MaxLoad; public double MaxSpeed; public double ResidualLife; } public class HeadDataModel { public uint Id; public byte Process; public byte Override; public short Param3; public int Param1; public short Param2; public bool IsActive; public bool IsSelected; public bool OverrideEditable; public bool AbrasiveIsActive; public bool Configured; public ROTATION Rotation; public uint WorkedTime; public ToolInSpindleModel Tool; } public class AxisModel { public int Id; public string Name; public bool IsSelectable; public AXIS_TYPE Type; } public class PreviewFileModel { public string Name; public string Path; public string AbsolutePath; public bool IsDirectory; } public class InfoFile { public string Name; public DateTime CreationDate; public DateTime LastModDate; public List Content; public string PreviewBase64; public string AbsolutePath; } public class ActiveProgramDataModel { public string Path { get; set; } public List IsoLines { get; set; } public DateTime TimeLeft { get; set; } } public class QueueStatusModel { public int ProcessId; public bool LoadNextProgram; public QUEUE_STATUS Status; public bool StartStopQueueEnabled; } public class SelectedProcessData { public short Origin { get; set; } public short ActiveOffsetId { get; set; } public string ProcessMessage { get; set; } public byte RapidOverride { get; set; } public byte WorkOverride { get; set; } public double FeedOverride { get; set; } public OffsetModel OffsetData { get; set; } } public class AssistedToolingModel { public bool IsActive { get; set; } public ushort ToolId { get; set; } public ushort MagazineId { get; set; } public ushort PositionId { get; set; } public ASSISTED_TOOLING_ACTION Action { get; set; } } public class MovementBetweenMagazinesModel { public ushort NewMagazineId { get; set; } public ushort NewPositionId { get; set; } public ushort OldMagazineId { get; set; } public ushort OldPositionId { get; set; } public MOVEMENT_TYPE Action { get; set; } } public enum MOVEMENT_TYPE { NONE = 0, TRANSFER = 1, TRANSFER_WITHOUT_ORIG = 2, SWITCH = 3 } public enum MOVEMENT_RESPONSE { NONE = 0, OK = 1, TOOL_NOT_FOUND = 2, MAGAZINE_NOT_FOUND = 3, POSITION_NOT_FOUND = 4, POSITION_OCCUPIED = 5, POSITION_INCOMPATIBLE = 6 } public enum ORIGIN { NONE = 0, G54 = 1, G55 = 2, G56 = 3, G57 = 4, G505 = 5 } public enum QUEUE_STATUS { NOT_ACTIVE = 0, RUNNING = 1, WAITING_OPERATOR = 2, CLOSING = 3 } public enum AXIS_TYPE { LINEAR = 0, ROTATING = 1, NA } public enum SIEMENS_TDI_ACTION { LOAD = 1, UNLOAD = 2, NEW_DATA = 3, DELETE_TABLET = 90, ABORT = 99 } public class ScadaObjectModel { public int Id { get; set; } public string Address { get; set; } public SCADA_MEM_TYPE MemType { get; set; } public object Value { get; set; } public int Round { get; set; } public string Action { get; set; } public int ObjectType { get; set; } } #endregion Data structure models } }