From 54ad008b010e0e3b1ca616f60ed8fbaecb6362a4 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 5 Jun 2020 18:48:38 +0200 Subject: [PATCH] Added method for Thermo recipe confirm --- CMS_CORE_Library/NcThermo.cs | 6 +++ CMS_CORE_Library/S7Net/Nc_S7Net.cs | 86 +++++++++++++++++++++++++++--- 2 files changed, 84 insertions(+), 8 deletions(-) diff --git a/CMS_CORE_Library/NcThermo.cs b/CMS_CORE_Library/NcThermo.cs index ec8ff52..f01dbc4 100644 --- a/CMS_CORE_Library/NcThermo.cs +++ b/CMS_CORE_Library/NcThermo.cs @@ -634,6 +634,12 @@ namespace CMS_CORE_Library /// public abstract CmsError PLC_WRecipeParam(ThermoModels.RecipeParam updtParam); /// + /// Confirm/Cancel recipe modifications + /// + /// true: HMI --> PLC, false: PLC --> HMI + /// + public abstract CmsError PLC_WRecipeEdit(bool confirmUpdate); + /// /// Get current Modules Block list /// /// updates only RT parameters (false = update all) diff --git a/CMS_CORE_Library/S7Net/Nc_S7Net.cs b/CMS_CORE_Library/S7Net/Nc_S7Net.cs index 22591f2..71bf528 100644 --- a/CMS_CORE_Library/S7Net/Nc_S7Net.cs +++ b/CMS_CORE_Library/S7Net/Nc_S7Net.cs @@ -1853,6 +1853,33 @@ namespace CMS_CORE_Library.S7Net return NO_ERROR; } + /// + /// Confirm/Cancel recipe modifications + /// + /// true: HMI --> PLC, false: PLC --> HMI + /// + public override CmsError PLC_WRecipeEdit(bool confirmUpdate) + { + // se update --> scrivo strobe comando update... + if (confirmUpdate) + { + // Call confirm update + CmsError cmsError = PLC_WStrobe(PARAMETER_EDIT_ACK, PARAMETER_EDIT_STROBE, 2); + if (cmsError.IsError()) + return cmsError; + } + // altrimenti mando strobe comando cancel... + else + { + // Call cancel update + CmsError cmsError = PLC_WStrobe(PARAMETER_EDIT_ACK, PARAMETER_EDIT_STROBE, 3); + if (cmsError.IsError()) + return cmsError; + } + + return NO_ERROR; + } + /// /// Get current Modules Block list /// @@ -1946,7 +1973,7 @@ namespace CMS_CORE_Library.S7Net MoldTemp = S7.Net.Types.Double.FromByteArray(currMem.Skip(34).Take(4).ToArray()), VacuumReadVal = S7.Net.Types.Double.FromByteArray(currMem.Skip(38).Take(4).ToArray()), MouldEnergyOUT = S7.Net.Types.Double.FromByteArray(currMem.Skip(42).Take(4).ToArray()), - MouldEnergyIN= S7.Net.Types.Double.FromByteArray(currMem.Skip(46).Take(4).ToArray()) + MouldEnergyIN = S7.Net.Types.Double.FromByteArray(currMem.Skip(46).Take(4).ToArray()) }; return NO_ERROR; @@ -2808,18 +2835,56 @@ namespace CMS_CORE_Library.S7Net return NO_ERROR; } - //Read-Write a Byte-Value-List inside the NC. In writing-mode the field "Number" is not required + /// + /// Read-Write a SINGLE Byte inside the NC. In writing-mode the field "Number" is not required + /// + /// + /// + /// + /// + /// + /// + /// + /// public override CmsError MEM_RWByte(bool bWrite, int Process, MEMORY_TYPE MemType, int MemTable, int MemIndex, int MemByte, ref byte Value) { - List ListValue = new List() { Value }; - - //uses the List method with one-element list - CmsError cmsError = MEM_RWByteList(bWrite, Process, MemType, MemTable, MemIndex, MemByte, 1, ref ListValue); + //Check if the NC is Connected + CmsError cmsError = CheckConnection(); if (cmsError.IsError()) return cmsError; - if (ListValue.Count > 0) + + if (MemType != MEMORY_TYPE.Siemens_DB) { - Value = ListValue.First(); + return INCORRECT_PARAMETERS_ERROR; + } + + cmsError = null; + + if (bWrite) + { + // try/catch + try + { + byte[] DB_Byte = new byte[1]; + DB_Byte[0] = Value; + currPLC.WriteBytes(DataType.DataBlock, MemTable, MemIndex, DB_Byte); + } + catch + { + return PLC_MEM_CONF_ERROR; + } + } + else + { + try + { + var memByteRead = currPLC.ReadBytes(DataType.DataBlock, MemTable, MemIndex, 1); + Value = memByteRead[0]; + } + catch + { + return PLC_MEM_CONF_ERROR; + } } return NO_ERROR; @@ -4391,6 +4456,10 @@ namespace CMS_CORE_Library.S7Net internal static MEMORY_CELL PARAMETER_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 600, 20, 8000); internal static MEMORY_CELL PARAMETER_RT_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 601, 8, 3200); + // recipe edit confirmation/cancel strobe/ack + internal static MEMORY_CELL PARAMETER_EDIT_ACK = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 0, 2); + internal static MEMORY_CELL PARAMETER_EDIT_STROBE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2, 2); + // aree Moduli internal static MEMORY_CELL MODULE_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 602, 18, 2304); internal static MEMORY_CELL MODULE_RT_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 603, 12, 1536); @@ -4418,6 +4487,7 @@ namespace CMS_CORE_Library.S7Net internal static MEMORY_CELL MACHINE_GAUGE_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 605, 6, 16); + internal static MEMORY_CELL NC_WATCHDOG = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 0, 1); internal static MEMORY_CELL ACTIVE_WATCHDOG = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2, 1);