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