From f4ac59213c79b155b85785f68fb9c424a7214d69 Mon Sep 17 00:00:00 2001 From: Lucio Maranta Date: Thu, 20 Dec 2018 12:51:21 +0000 Subject: [PATCH] WIP Scada --- CMS_CORE_Library/Demo/Nc_Demo.cs | 56 +++- CMS_CORE_Library/Fanuc/Nc_Fanuc.cs | 5 + CMS_CORE_Library/Models/DataStructures.cs | 347 +++++++++++----------- CMS_CORE_Library/Nc.cs | 2 + CMS_CORE_Library/Osai/Nc_Osai.cs | 5 + CMS_CORE_Library/Siemens/Nc_Siemens.cs | 5 + 6 files changed, 250 insertions(+), 170 deletions(-) diff --git a/CMS_CORE_Library/Demo/Nc_Demo.cs b/CMS_CORE_Library/Demo/Nc_Demo.cs index c2f9909..5f67f5d 100644 --- a/CMS_CORE_Library/Demo/Nc_Demo.cs +++ b/CMS_CORE_Library/Demo/Nc_Demo.cs @@ -830,7 +830,9 @@ namespace CMS_CORE_Library.Demo IsNeeded = true, Buttons = new Dictionary() { - { 1, "bottoneDiTest" } + { 1, "bottoneDiTest3" }, + { 2, "bottoneDiTest2" }, + { 3, "bottoneDiTest3" } }, Message = "Messaggio di test", Type = bits[6] == false ? M155_TYPE.REAL : M155_TYPE.MULTIPLE_BUTTONS @@ -855,6 +857,58 @@ namespace CMS_CORE_Library.Demo } + public override CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value) + { + string[] index = memIndex.Split('.'); + + if (index.Count() == 0) + { + return INCORRECT_PARAMETERS_ERROR; + } + else if(index.Count() == 1) + { + if(memType == SCADA_MEM_TYPE.INT) + { + // READ INT + int val = 0; + CmsError cmsError = MEM_RWInteger(R, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), ref val); + if (cmsError.IsError()) + return cmsError; + + value = val; + } + else if(memType == SCADA_MEM_TYPE.INT) + { // READ WORD + ushort val = 0; + CmsError cmsError = MEM_RWWord(R, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), ref val); + if (cmsError.IsError()) + return cmsError; + + value = val; + } + else + { // READ byte + byte val = 0; + CmsError cmsError = MEM_RWByte(R, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), 0, ref val); + if (cmsError.IsError()) + return cmsError; + + value = val; + } + } + else if(index.Count() == 2 && memType == SCADA_MEM_TYPE.BOOL) + { // READ BOOL + bool val = false; + CmsError cmsError = MEM_RWBoolean(R, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), ref val); + if (cmsError.IsError()) + return cmsError; + + value = val; + } + + return NO_ERROR; + } + #endregion PLC High-level data /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs index fe4dc5d..49546be 100644 --- a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs +++ b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs @@ -859,6 +859,11 @@ namespace CMS_CORE_Library.Fanuc return NO_ERROR; } + public override CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value) + { + return NO_ERROR; + } + #endregion PLC High-level data /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/CMS_CORE_Library/Models/DataStructures.cs b/CMS_CORE_Library/Models/DataStructures.cs index 09ab020..68052a9 100644 --- a/CMS_CORE_Library/Models/DataStructures.cs +++ b/CMS_CORE_Library/Models/DataStructures.cs @@ -9,6 +9,182 @@ namespace CMS_CORE_Library.Models { /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + #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 IMAGES_PATH = @"C:\CMS\STEP\pp_img\"; + public const string MILLIMETERS = "mm"; + public const string INCHES = "inches"; + + 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 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 + } + + public enum SIEMENS_MAGAZINE_TYPE + { + CHAIN = 1, + REVOLVER = 3, + BOX_MAGAZINE = 5, + MAGAZINE_TOOL_BUFFER = 7, + MAGAZINE_LOADING_STATION = 9 + } + + public enum NC_MAGAZINE_TYPE + { + BOX_MAGAZINE = 0, + DISK = 1, + CHAIN = 2, + } + + 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, + WEAR = 4 + } + + public enum PROGRAM_TYPE_ENUM + { + NONE = 0, + PART_PROGRAM = 1, + JOB = 2 + } + + public enum M155_TYPE + { + REAL = 0, + MULTIPLE_BUTTONS = 1 + } + + public enum SCADA_MEM_TYPE + { + BOOL = 0, + BYTE = 1, + WORD = 2, + INT = 3, + REAL = 4 + } + + 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 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 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"); + + #endregion Cms Errors Codes + + #endregion Constants + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + #region Data structure models // R-W MEMORY Cell @@ -202,179 +378,12 @@ namespace CMS_CORE_Library.Models WAITING_OPERATOR = 2, CLOSING = 3 } - + public enum AXIS_TYPE { - LINEAR = 0, + LINEAR = 0, ROTATING = 1 } #endregion Data structure models - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - #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 IMAGES_PATH = @"C:\CMS\STEP\pp_img\"; - public const string MILLIMETERS = "mm"; - public const string INCHES = "inches"; - - 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 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 - } - - public enum SIEMENS_MAGAZINE_TYPE - { - CHAIN = 1, - REVOLVER = 3, - BOX_MAGAZINE = 5, - MAGAZINE_TOOL_BUFFER = 7, - MAGAZINE_LOADING_STATION = 9 - } - - public enum NC_MAGAZINE_TYPE - { - BOX_MAGAZINE = 0, - DISK = 1, - CHAIN = 2, - } - - 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, - WEAR = 4 - } - - public enum PROGRAM_TYPE_ENUM - { - NONE = 0, - PART_PROGRAM = 1, - JOB = 2 - } - - public enum M155_TYPE - { - REAL = 0, - MULTIPLE_BUTTONS = 1 - } - - 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 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 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"); - - #endregion Cms Errors Codes - - #endregion Constants } } \ No newline at end of file diff --git a/CMS_CORE_Library/Nc.cs b/CMS_CORE_Library/Nc.cs index 4d702cd..58aa183 100644 --- a/CMS_CORE_Library/Nc.cs +++ b/CMS_CORE_Library/Nc.cs @@ -560,6 +560,8 @@ namespace CMS_CORE_Library public abstract CmsError PLC_RMTConnectData(ref List value); + public abstract CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value); + #endregion PLC High-level data (to override) diff --git a/CMS_CORE_Library/Osai/Nc_Osai.cs b/CMS_CORE_Library/Osai/Nc_Osai.cs index 1db9cec..9575b6a 100644 --- a/CMS_CORE_Library/Osai/Nc_Osai.cs +++ b/CMS_CORE_Library/Osai/Nc_Osai.cs @@ -803,6 +803,11 @@ namespace CMS_CORE_Library.Osai return NO_ERROR; } + public override CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value) + { + return NO_ERROR; + } + private CmsError PLC_WStrobe(MEMORY_CELL ackCell, MEMORY_CELL strobeCell, uint id) { CmsError cmsError; diff --git a/CMS_CORE_Library/Siemens/Nc_Siemens.cs b/CMS_CORE_Library/Siemens/Nc_Siemens.cs index 04cbe38..c53f578 100644 --- a/CMS_CORE_Library/Siemens/Nc_Siemens.cs +++ b/CMS_CORE_Library/Siemens/Nc_Siemens.cs @@ -1131,6 +1131,11 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } + public override CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value) + { + return NO_ERROR; + } + private CmsError ReadActiveLine(uint path, ref string line) { try