Files
cms-core-active/CMS_CORE_Library/DataStructures.cs
T
2018-05-24 15:41:42 +00:00

666 lines
21 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using static CMS_CORE.Nc;
namespace CMS_CORE_Library
{
public static class DataStructures
{
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#region Data structure models
#region Pre and Post Power on Models
public class PreAndPostPowerOnModel
{
public PrePowerOnModel PrePowerOn { get; set; }
public PostPowerOnModel PostPowerOn { get; set; }
public PreAndPostPowerOnModel()
{
PrePowerOn = new PrePowerOnModel();
PostPowerOn = new PostPowerOnModel();
}
public override bool Equals(object obj)
{
var item = obj as PreAndPostPowerOnModel;
if (item == null)
return false;
if (!PrePowerOn.Equals(item.PrePowerOn) || !PostPowerOn.Equals(item.PostPowerOn))
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class PrePowerOnModel
{
public PowerOnDataModel PowerOn { get; set; }
public PowerOnDataModel AirPressure { get; set; }
public PowerOnDataModel ProtectionStatus { get; set; }
public PowerOnDataModel EmergencyButtons { get; set; }
public PowerOnDataModel SettingMode { get; set; }
public PowerOnDataModel StartingKey { get; set; }
public PrePowerOnModel()
{
PowerOn = new PowerOnDataModel();
AirPressure = new PowerOnDataModel();
ProtectionStatus = new PowerOnDataModel();
EmergencyButtons = new PowerOnDataModel();
SettingMode = new PowerOnDataModel();
StartingKey = new PowerOnDataModel();
}
public override bool Equals(object obj)
{
var item = obj as PrePowerOnModel;
if (item == null)
return false;
if (!PowerOn.Equals(item.PowerOn) ||
!AirPressure.Equals(item.AirPressure) ||
!ProtectionStatus.Equals(item.ProtectionStatus) ||
!EmergencyButtons.Equals(item.EmergencyButtons) ||
!SettingMode.Equals(item.SettingMode) ||
!StartingKey.Equals(item.StartingKey))
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class PostPowerOnModel
{
public PowerOnDataModel AxisReset { get; set; }
public PowerOnDataModel WaterjetPump { get; set; }
public PostPowerOnModel()
{
AxisReset = new PowerOnDataModel();
WaterjetPump = new PowerOnDataModel();
}
public override bool Equals(object obj)
{
var item = obj as PostPowerOnModel;
if (item == null)
return false;
if (!AxisReset.Equals(item.AxisReset) ||
!WaterjetPump.Equals(item.WaterjetPump))
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class PowerOnDataModel
{
public uint Id { get; set; }
public bool Active { get; set; }
public bool Clickable { get; set; }
public PowerOnDataModel()
{
Id = 0;
Active = false;
Clickable = false;
}
public override bool Equals(object obj)
{
var item = obj as PowerOnDataModel;
if (item == null)
return false;
if (Id != item.Id || Active != item.Active || Clickable != item.Clickable)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
#endregion Pre and Post Power on Models
// R-W MEMORY Cell
internal struct MEMORY_CELL
{
public readonly MEMORY_TYPE MemType;
public readonly int Address;
public readonly int SubAddress; //Only for Siemens
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<int> 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 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 SoftKeysModel
{
public uint Id;
public bool Active;
public bool Value;
}
public class HeadDataModel
{
public uint Id;
public byte Process;
public byte Override;
public ushort Load_Abrasive;
public int ActualSpeed_Pressure;
public short MountedTool_Vacum;
public bool IsActive;
public bool IsSelected;
public bool OverrideEditable;
}
public class AxisModel
{
public int Id;
public string Name;
}
#endregion Data structure models
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#region Cms Errors Codes
public class CmsError
{
public CMS_ERROR_CODES errorCode;
public string localizationKey;
public CmsError(CMS_ERROR_CODES errorCode, string message)
{
this.errorCode = errorCode;
this.localizationKey = message;
}
public bool IsError()
{
if (errorCode == CMS_ERROR_CODES.OK)
return false;
else
return true;
}
public static CmsError InternalError(string message)
{
return new CmsError(CMS_ERROR_CODES.INTERNAL_ERROR, message);
}
public static CmsError NcError(string message)
{
return new CmsError(CMS_ERROR_CODES.NC_PROD_ERROR, message);
}
}
public enum CMS_ERROR_CODES : uint
{
OK = 0,
NC_PROD_ERROR = 1,
NOT_CONNECTED = 2,
PROC_NOT_FOUND = 3,
FUNCTION_NOT_ALLOWED = 4,
BIT_NOT_IN_RANGE = 5,
BYTE_NOT_IN_RANGE = 6,
INTERNAL_ERROR = 7,
INCORRECT_PARAMETERS = 8,
NC_LANGUAGE_ERROR = 9,
SIEMENS_ENVIRONMENT_NOT_FOUND = 10,
SIEMENS_HMI_NOT_RUNNING = 11,
MAX_TOOL_REACHED = 12,
MAX_EDGES_PER_TOOL_REACHED = 13,
MAX_FAMILY_REACHED = 14,
MAX_MULTITOOL_REACHED = 15,
MAX_TOOLS_PER_MULTITOOL_REACHED = 16,
MAG_POS_OCCUPIED = 17
}
internal static CmsError NO_ERROR = new CmsError(CMS_ERROR_CODES.OK, "");
internal static CmsError NOT_CONNECTED_ERROR = new CmsError(CMS_ERROR_CODES.NOT_CONNECTED, "error_not_connected");
internal static CmsError PROC_NOT_FOUND_ERROR = new CmsError(CMS_ERROR_CODES.FUNCTION_NOT_ALLOWED, "error_process_not_found");
internal static CmsError FUNCTION_NOT_ALLOWED_ERROR = new CmsError(CMS_ERROR_CODES.FUNCTION_NOT_ALLOWED, "error_function_not_allowed");
internal static CmsError BIT_NOT_IN_RANGE_ERROR = new CmsError(CMS_ERROR_CODES.BIT_NOT_IN_RANGE, "error_bit_not_in_range");
internal static CmsError BYTE_NOT_IN_RANGE_ERROR = new CmsError(CMS_ERROR_CODES.BYTE_NOT_IN_RANGE, "error_byte_not_in_range");
internal static CmsError INCORRECT_PARAMETERS_ERROR = new CmsError(CMS_ERROR_CODES.INCORRECT_PARAMETERS, "error_incorrect_parameters");
internal static CmsError INCORRECT_LANGUAGE_ERROR = new CmsError(CMS_ERROR_CODES.NC_LANGUAGE_ERROR, "error_invalid_language");
internal static CmsError SIEMENS_ENVIRONMENT_NOT_FOUND_ERROR = new CmsError(CMS_ERROR_CODES.SIEMENS_ENVIRONMENT_NOT_FOUND, "error_siemens_enviroment_not_found_error");
internal static CmsError SIEMENS_HMI_NOT_RUNNING_ERROR = new CmsError(CMS_ERROR_CODES.SIEMENS_HMI_NOT_RUNNING, "error_siemens_hmi_not_running");
internal static CmsError MAX_TOOL_REACHED_ERROR = new CmsError(CMS_ERROR_CODES.MAX_TOOL_REACHED, "error_max_tool_reached");
internal static CmsError MAX_EDGES_PER_TOOL_REACHED_ERROR = new CmsError(CMS_ERROR_CODES.MAX_EDGES_PER_TOOL_REACHED, "error_max_edges_per_tool_reached");
internal static CmsError MAX_FAMILY_REACHED_ERROR = new CmsError(CMS_ERROR_CODES.MAX_FAMILY_REACHED, "error_max_family_reached");
internal static CmsError MAX_MULTITOOL_REACHED_ERROR = new CmsError(CMS_ERROR_CODES.MAX_MULTITOOL_REACHED, "error_max_multitools_reached");
internal static CmsError MAX_TOOLS_PER_MULTITOOL_REACHED_ERROR = new CmsError(CMS_ERROR_CODES.MAX_TOOLS_PER_MULTITOOL_REACHED, "error_max_tools_per_multitool_reached");
internal static CmsError MAG_POS_OCCUPIED_ERROR = new CmsError(CMS_ERROR_CODES.MAG_POS_OCCUPIED, "error_mag_pos_occupied");
#endregion Cms Errors Codes
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#region Constants
public const int USER_SOFTKEYS_NUMBER = 128;
public const int NC_SOFTKEYS_NUMBER = 32;
public const int PROCESS_NUMBER = 6;
public const int ALARMS_NUMBER = 1024;
public const int HEADS_NUMBER = 20;
public enum HEAD_OVERRIDE_SIGN
{
PLUS = 0,
MINUS = 1
}
/** <summary>Process-Status</summary> */
public enum PROC_STATUS : ushort
{
/** <summary>Idle-Status</summary> */
IDLE = 1,
/** <summary>Run-Status</summary> */
RUN = 2,
/** <summary>Hold-Status</summary> */
HOLD = 3,
/** <summary>Error-Status</summary> */
ERROR = 4,
/** <summary>Reset-Status</summary> */
RESET = 5,
/** <summary>Emergency-Status</summary> */
EMERG = 6
};
/** <summary>CMS-Process-Mode</summary> */
public enum PROC_MODE : ushort
{
/** <summary>Automatic-Mode</summary> */
AUTO = 1,
/** <summary>Edit-Mode</summary> */
EDIT = 2,
/** <summary>Mdi-Mode</summary> */
MDI = 3,
/** <summary>Remote-Mode</summary> */
REMOTE = 4,
/** <summary>Teach-Mode</summary> */
TEACH = 5,
/** <summary>Ref-Mode</summary> */
REF = 6,
/** <summary>Jog-Mode</summary> */
JOG = 7,
/** <summary>Joginc-Mode</summary> */
JOGINC = 8,
/** <summary>Ret_on_Profile-Mode</summary> */
RETPROF = 9,
/** <summary>Handle-Mode</summary> */
HANDLE = 10,
/** <summary>Restart-Mode</summary> */
RESTART = 11,
/** <summary>Error-Mode</summary> */
ERROR = 12
};
public static IFormatProvider numberFormat = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
#endregion Constants
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#region Tool Table Models
public enum MAGAZINE_ACTIONS
{
NONE = 0,
LOADING = 1,
UNLOADING = 2,
TRANSFER = 4,
GENERIC = 5
}
public enum ROTATION
{
NONE = 0,
CLOCKWHISE = 1,
COUNTERCLOCKWHISE = 2
}
public enum MAGAZINE_TYPE
{
MAGAZINE = 0,
SPINDLE = 1,
MAGAZINE_GROUND = 2
}
public enum SIEMENS_LIFE_TYPE
{
NONE = 0,
TIME = 1,
COUNT = 2,
WEAR = 4
}
public class SiemensToolModel
{
public int Id;
public string FamilyName;
public int ChildId;
public SIEMENS_LIFE_TYPE LifeType;
public int MagazinePositionType;
public int ToolType;
public int LeftSize;
public int RightSize;
public ROTATION Rotation;
public bool Cooling1;
public bool Cooling2;
public bool IsEnabled;
public bool IsActive;
public bool InFixedPlace;
public bool IsInhibited;
public bool IsMeasured;
public bool InChangeTool;
public bool IsInUse;
public bool PreAlarm;
public double MaxSpeed;
public double MaxAcceleration;
public List<EdgeModel> EdgesData;
public SiemensToolModel()
{
EdgesData = new List<EdgeModel>();
}
}
public class EdgeModel
{
public int Id;
public double ResidualLife;
public double NominalLife;
public double PreAlmLife;
public Dictionary<string, double> EdgeAdditionalParams;
public EdgeModel()
{
EdgeAdditionalParams = new Dictionary<string, double>();
}
}
public class ShankModel
{
public int Id;
public string Name;
public bool IsEnabled;
public bool IsInhibited;
public bool InChangeTool;
public bool InFixedPlace;
public bool InUse;
public int LeftSize;
public int RightSize;
public int MagazinePositionType;
public int MaxChilds;
public List<ShankChildModel> ChildsTools;
public ShankModel()
{
ChildsTools = new List<ShankChildModel>();
}
}
public class ShankChildModel
{
public int Id;
public int MultitoolId;
public string FamilyName;
public int ToolType;
}
public class FamilyModel
{
public string Name;
public List<FamilyChildModel> ChildTools;
public FamilyModel()
{
ChildTools = new List<FamilyChildModel>();
}
}
public class FamilyChildModel
{
public int Id;
public int ChildId;
public int ToolType;
}
public class PositionModel
{
public int PositionId;
public int MagazineId;
public int Type;
public bool Disabled;
}
public class EdgeConfigModel
{
public string Name;
public string Path;
public int Number;
}
public class PositionWithMultiToolModel : PositionModel
{
public MountedMultiToolModel ChildShank;
}
public class PositionWithToolModel : PositionModel
{
public MountedToolModel ChildTool;
}
public class MountedMultiToolModel
{
public int Id;
public string Name;
public List<ShankChildModel> ChildsTools;
}
public class MountedToolModel
{
public int Id;
public string FamilyName;
public int ToolType;
}
public class NewToolInMagazineModel
{
public int PositionId;
public int ToolId;
}
public class MagazineActionModel
{
public MAGAZINE_ACTIONS action;
public int OriginMagazine;
public int OriginPosition;
public int DestinationMagazine;
public int DestinationPosition;
public MagazineActionToolModel Tool;
}
public class MagazineActionToolModel
{
public int Id;
public int ToolType;
public string Name;
public bool IsMultitool;
}
///////////////// Tools Configuration
public class FieldsConfiguration
{
public string Name;
public string Type;
public string Category;
public bool ReadOnly;
public Dictionary<int, string> SelectValues;
}
public class FamiliesConfiguration
{
public List<FieldsConfiguration> FamilyConfiguration;
public List<FieldsConfiguration> ToolsConfiguration;
}
public class ShanksConfiguration
{
public List<FieldsConfiguration> ShankConfiguration;
public List<FieldsConfiguration> ToolsConfiguration;
}
public class EdgesConfiguration
{
public List<FieldsConfiguration> EdgeConfiguration;
public Dictionary<int, List<string>> EdgesAdditionalParamsConfiguration;
}
public class MagazineModel
{
public int Id;
public MAGAZINE_TYPE Type;
}
public class ToolTableConfiguration
{
public int MaxTools;
public int MaxEdgesPerTools;
public int MaxToolsPerFamily;
public int MaxMultitools;
public int MaxToolsPerMultitools;
public List<MagazineModel> Magazines;
public List<FieldsConfiguration> ToolsConfiguration;
public FamiliesConfiguration FamiliesConfiguration;
public ShanksConfiguration ShanksConfiguration;
public List<FieldsConfiguration> MagazinePosConfiguration;
public EdgesConfiguration EdgesConfiguration;
}
#endregion Tool Table Models
}
}