diff --git a/CMS_CORE_Library/Models/ThermoModels.cs b/CMS_CORE_Library/Models/ThermoModels.cs index 29b2d37..08cef20 100644 --- a/CMS_CORE_Library/Models/ThermoModels.cs +++ b/CMS_CORE_Library/Models/ThermoModels.cs @@ -329,6 +329,79 @@ namespace CMS_CORE_Library.Models #endregion Public Methods } + public class LogCycleData + { + #region Public Constructors + + /// + /// Deserializzazione da byte ad oggetto LogCycleData + /// + /// + public LogCycleData(byte[] rawData) + { + // converto i dati da byte grezzi ai 3 componenti... + year = S7.Net.Types.Word.FromByteArray(rawData.Skip(0).Take(2).ToArray()); + month = S7.Net.Types.Byte.FromByteArray(rawData.Skip(2).Take(1).ToArray()); + day = S7.Net.Types.Byte.FromByteArray(rawData.Skip(3).Take(1).ToArray()); + hour = S7.Net.Types.Byte.FromByteArray(rawData.Skip(4).Take(1).ToArray()); + min = S7.Net.Types.Byte.FromByteArray(rawData.Skip(5).Take(1).ToArray()); + msec = S7.Net.Types.Word.FromByteArray(rawData.Skip(6).Take(2).ToArray()); + Code = S7.Net.Types.Word.FromByteArray(rawData.Skip(8).Take(2).ToArray()); + } + + #endregion Public Constructors + + #region Public Properties + + protected int year { get; set; } = 0; + protected int month { get; set; } = 0; + protected int day { get; set; } = 0; + protected int hour { get; set; } = 0; + protected int min { get; set; } = 0; + protected int msec { get; set; } = 0; + public DateTime DtEvent + { + get + { + DateTime answ = DateTime.Now; + try + { + new DateTime(year, month, day); + answ = answ.AddHours(hour).AddMinutes(min).AddMilliseconds(msec); + } + catch + { } + return answ; + } + } + public int Code { get; set; } = 0; + + #endregion Public Properties + + #region Public Methods + + + public override bool Equals(object obj) + { + // Object is not a GaugeModel instance + if (!(obj is LogCycleData item)) + return false; + + if (DtEvent != item.DtEvent) + return false; + if (Code != item.Code) + return false; + return true; + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + #endregion Public Methods + } + public class ModuleBlock { #region Public Properties diff --git a/CMS_CORE_Library/NcThermo.cs b/CMS_CORE_Library/NcThermo.cs index f42c7d8..163b3a5 100644 --- a/CMS_CORE_Library/NcThermo.cs +++ b/CMS_CORE_Library/NcThermo.cs @@ -636,6 +636,13 @@ namespace CMS_CORE_Library /// public abstract CmsError PLC_WAckSetpointInvalidated(); + /// + /// Get current LOG Cycle data + /// + /// + /// + public abstract CmsError PLC_RLogCycleData(out List currLogCycle); + /// /// Get current Axis RT data /// diff --git a/CMS_CORE_Library/S7Net/Nc_S7Net.cs b/CMS_CORE_Library/S7Net/Nc_S7Net.cs index 8a5c403..9280f43 100644 --- a/CMS_CORE_Library/S7Net/Nc_S7Net.cs +++ b/CMS_CORE_Library/S7Net/Nc_S7Net.cs @@ -103,6 +103,8 @@ namespace CMS_CORE_Library.S7Net internal static MEMORY_CELL KEYBOARD_STAR_MEMORY = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6780, 2); + internal static MEMORY_CELL LOG_CYCLE_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 617, 12, 1000); + internal static MEMORY_CELL M154_ACK = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 3042, 1); internal static MEMORY_CELL M154_STROBE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 3043, 1); @@ -191,6 +193,7 @@ namespace CMS_CORE_Library.S7Net internal static MEMORY_CELL REQ_MODE_STROBE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2, 2); internal static MEMORY_CELL RISC_CFI_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 2176, 1024); + // riscaldi internal static MEMORY_CELL RISC_CHP_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 614, 0, 1024); internal static MEMORY_CELL RISC_ESP_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 9728, 1024); @@ -207,7 +210,6 @@ namespace CMS_CORE_Library.S7Net internal static MEMORY_CELL RISC_PLC_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 627, 0, 1024); - // riscaldi internal static MEMORY_CELL RISC_VU_MIN = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 513, 0, 2); internal static MEMORY_CELL SELECT_AXIS = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2627, 1); @@ -236,6 +238,7 @@ namespace CMS_CORE_Library.S7Net internal static MEMORY_CELL TCAM_TEMP_ACT_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 625, 0, 2048); internal static MEMORY_CELL TCAM_TEMP_REQ_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 624, 0, 2048); + internal static MEMORY_CELL USER_SOFT_KEYS_ACK = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6584, 16); internal static MEMORY_CELL USER_SOFT_KEYS_CLICKED = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6600, 16); internal static MEMORY_CELL USER_SOFTKEYS_CLICKABLE = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6568, 16); @@ -3278,6 +3281,47 @@ namespace CMS_CORE_Library.S7Net return libraryError; } + + /// + /// Get current LOG Cycle data + /// + /// + /// + public override CmsError PLC_RLogCycleData(out List currLogCycle) + { + CmsError libraryError = NO_ERROR; + List currMem = new List(); + int packSize = 10; + currLogCycle = new List(); + + // leggo da PLC a array di byte di appoggio... + libraryError = MEM_RWByteList(R, 0, LOG_CYCLE_DATA.MemType, LOG_CYCLE_DATA.Address, LOG_CYCLE_DATA.SubAddress, 0, LOG_CYCLE_DATA.Size, ref currMem); + if (libraryError.IsError()) + return libraryError; + + // controllo SE ho dati... + if (currMem.Count > 0) + { + // converto a blocchi di byte... + byte[] memArray = currMem.ToArray(); + for (int i = 0; i < LOG_CYCLE_DATA.Size / packSize; i++) + { + ThermoModels.LogCycleData currData = new ThermoModels.LogCycleData(memArray.Skip(i * packSize).Take(packSize).ToArray()); + // se il valore ricevuto di evento รจ > 0... + if (currData.Code > 0) + { + try + { + currLogCycle.Add(currData); + } + catch + { } + } + } + } + return libraryError; + } + /// /// Get current Axis RT data ///