From 84c3f74d7f0dd7434245ea65ec5e9531a5b8e522 Mon Sep 17 00:00:00 2001 From: Lucio Maranta Date: Wed, 16 Jan 2019 16:21:30 +0000 Subject: [PATCH] --- CMS_CORE_Library/Demo/Nc_Demo.cs | 52 +++++++++++++++++ CMS_CORE_Library/Fanuc/Nc_Fanuc.cs | 52 +++++++++++++++++ CMS_CORE_Library/Nc.cs | 1 + CMS_CORE_Library/Osai/Nc_Osai.cs | 56 +++++++++++++++++- CMS_CORE_Library/Siemens/Nc_Siemens.cs | 81 ++++++++++++++++++++++---- 5 files changed, 230 insertions(+), 12 deletions(-) diff --git a/CMS_CORE_Library/Demo/Nc_Demo.cs b/CMS_CORE_Library/Demo/Nc_Demo.cs index 1322b06..bf15f74 100644 --- a/CMS_CORE_Library/Demo/Nc_Demo.cs +++ b/CMS_CORE_Library/Demo/Nc_Demo.cs @@ -909,6 +909,58 @@ namespace CMS_CORE_Library.Demo return NO_ERROR; } + public override CmsError PLC_WScadaValue(string memIndex, SCADA_MEM_TYPE memType, 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(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), ref val); + if (cmsError.IsError()) + return cmsError; + + value = val; + } + else if (memType == SCADA_MEM_TYPE.WORD) + { // READ WORD + ushort val = 0; + CmsError cmsError = MEM_RWWord(W, 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(W, 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(W, 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 0b85811..52f67b0 100644 --- a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs +++ b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs @@ -871,6 +871,58 @@ namespace CMS_CORE_Library.Fanuc return NO_ERROR; } + public override CmsError PLC_WScadaValue(string memIndex, SCADA_MEM_TYPE memType, 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(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), ref val); + if (cmsError.IsError()) + return cmsError; + + value = val; + } + else if (memType == SCADA_MEM_TYPE.WORD) + { // READ WORD + ushort val = 0; + CmsError cmsError = MEM_RWWord(W, 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(W, 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(W, 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/Nc.cs b/CMS_CORE_Library/Nc.cs index 776a1dd..73a92d1 100644 --- a/CMS_CORE_Library/Nc.cs +++ b/CMS_CORE_Library/Nc.cs @@ -562,6 +562,7 @@ namespace CMS_CORE_Library public abstract CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value); + public abstract CmsError PLC_WScadaValue(string memIndex, SCADA_MEM_TYPE memType, 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 805b3eb..ba985fc 100644 --- a/CMS_CORE_Library/Osai/Nc_Osai.cs +++ b/CMS_CORE_Library/Osai/Nc_Osai.cs @@ -667,7 +667,7 @@ namespace CMS_CORE_Library.Osai softKeyStatusMemory.MemType, softKeyStatusMemory.Address, memorySizeToRead / 4, - ref readValue); + ref readValue); if (cmsError.IsError()) return cmsError; @@ -676,7 +676,7 @@ namespace CMS_CORE_Library.Osai // Convert array into structured data for (ushort i = 0; i < bits.Count() / 2; i++) - { + { softKeys.Add(new SoftKeysModel() { Id = (uint)i + 1, @@ -808,6 +808,58 @@ namespace CMS_CORE_Library.Osai return NO_ERROR; } + public override CmsError PLC_WScadaValue(string memIndex, SCADA_MEM_TYPE memType, 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(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), ref val); + if (cmsError.IsError()) + return cmsError; + + value = val; + } + else if (memType == SCADA_MEM_TYPE.WORD) + { // READ WORD + ushort val = 0; + CmsError cmsError = MEM_RWWord(W, 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(W, 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(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), ref val); + if (cmsError.IsError()) + return cmsError; + + value = val; + } + + 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 7a81901..b04788c 100644 --- a/CMS_CORE_Library/Siemens/Nc_Siemens.cs +++ b/CMS_CORE_Library/Siemens/Nc_Siemens.cs @@ -25,6 +25,7 @@ namespace CMS_CORE_Library.Siemens { // Global Constants private const string OptionHMINotRunning = "P66"; + private const string HMIDllName = "Wrapper.dll"; private const string NcNotFound = "Missing response"; private const string NcNotFound2 = "networking error"; @@ -165,8 +166,20 @@ namespace CMS_CORE_Library.Siemens AxesSvc = new DataSvc(); if (SelectedProcessSvc == null) + { SelectedProcessSvc = new DataSvc(); + SelectedProcessSvc.Subscribe(ManageSelectedProcess, new Item[] + { + new Item() { Path = "DB258.DBX2582.2" }, + new Item() { Path = "DB258.DBX2586.2" }, + new Item() { Path = "DB258.DBX2590.2" }, + new Item() { Path = "DB258.DBX2594.2" }, + new Item() { Path = "DB258.DBX2598.2" }, + new Item() { Path = "DB258.DBX2602.2" }, + }); + } + //Check if Siemens Environment is started CmsError cmsError = CheckSiemensEnv(); if (cmsError.IsError()) @@ -191,16 +204,6 @@ namespace CMS_CORE_Library.Siemens MagazineActionsSvc = new DataSvc(); SetupToolTableData(); } - - SelectedProcessSvc.Subscribe(ManageSelectedProcess, new Item[] - { - new Item() { Path = "DB258.DBX2582.2" }, - new Item() { Path = "DB258.DBX2586.2" }, - new Item() { Path = "DB258.DBX2590.2" }, - new Item() { Path = "DB258.DBX2594.2" }, - new Item() { Path = "DB258.DBX2598.2" }, - new Item() { Path = "DB258.DBX2602.2" }, - }); } catch (Exception ex) { @@ -1142,6 +1145,58 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } + public override CmsError PLC_WScadaValue(string memIndex, SCADA_MEM_TYPE memType, 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(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), ref val); + if (cmsError.IsError()) + return cmsError; + + value = val; + } + else if (memType == SCADA_MEM_TYPE.WORD) + { // READ WORD + ushort val = 0; + CmsError cmsError = MEM_RWWord(W, 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(W, 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(W, 0, MEMORY_TYPE.Demo, Convert.ToInt32(index[0]), Convert.ToInt32(index[1]), ref val); + if (cmsError.IsError()) + return cmsError; + + value = val; + } + + return NO_ERROR; + } + private CmsError ReadActiveLine(uint path, ref string line) { try @@ -3296,6 +3351,7 @@ namespace CMS_CORE_Library.Siemens // If the magazine is a circular magazine move position before ( for left case ) or after ( right case ) the location you want to mount the tool if (magConfig.Type != SIEMENS_MAGAZINE_TYPE.BOX_MAGAZINE) { + // If magazine is circular, move position before ( for left case ) or after ( right case ) the location you want to mount the tool decPosition = decPosition < newMagazineTool.PositionId ? decPosition + magConfig.MaxPositions : decPosition; incPosition = incPosition > newMagazineTool.PositionId ? incPosition - magConfig.MaxPositions : incPosition; @@ -3819,12 +3875,17 @@ namespace CMS_CORE_Library.Siemens //Manage the Exception Launch private CmsError ManageException(Exception ex) { + var a = ex.GetType(); //Catch the Siemens exceptions if (ex is OperateMissingOptionException && ex.Message.Contains(OptionHMINotRunning)) { Connected = false; return SIEMENS_HMI_NOT_RUNNING_ERROR; } + else if(ex is FileNotFoundException && ex.Message.Contains(HMIDllName)) + { + return SIEMENS_ENVIRONMENT_NOT_FOUND_ERROR; + } else if (ex.Message.Contains(NcNotFound) || ex.Message.Contains(NcNotFound2) || ex.Message.Contains(NcNotFound3)) { Connected = false;