diff --git a/CMS_CORE_Library/Models/DataStructures.cs b/CMS_CORE_Library/Models/DataStructures.cs index ed25d3d..d063401 100644 --- a/CMS_CORE_Library/Models/DataStructures.cs +++ b/CMS_CORE_Library/Models/DataStructures.cs @@ -527,7 +527,8 @@ namespace CMS_CORE_Library.Models public enum AXIS_TYPE { LINEAR = 0, - ROTATING = 1 + ROTATING = 1, + NA } public enum SIEMENS_TDI_ACTION diff --git a/CMS_CORE_Library/Models/ThermoModels.cs b/CMS_CORE_Library/Models/ThermoModels.cs index fa3c6e0..84ccf7e 100644 --- a/CMS_CORE_Library/Models/ThermoModels.cs +++ b/CMS_CORE_Library/Models/ThermoModels.cs @@ -98,8 +98,70 @@ namespace CMS_CORE_Library.Models return base.GetHashCode(); } } + /// + /// Single AXIS RealTime (positions / movement) Data + /// + public class AxisRT + { + public short Id { get; set; } = 0; + public double Position { get; set; } = 0; + public double Speed { get; set; } = 0; + public double Load { get; set; } = 0; + public override bool Equals(object obj) + { + // Object is not a GaugeModel instance + if (!(obj is AxisRT item)) + return false; + + if (Id != item.Id) + return false; + if (Position != item.Position) + return false; + if (Speed != item.Speed) + return false; + if (Load != item.Load) + return false; + return true; + } + public override int GetHashCode() + { + return base.GetHashCode(); + } + } + /// + /// Single AXIS Info Data + /// + public class AxisInfo + { + public short Id { get; set; } = 0; + public int errorCode { get; set; } = 0; + public int movPhase { get; set; } = 0; + public int statusCode { get; set; } = 0; + + public override bool Equals(object obj) + { + // Object is not a GaugeModel instance + if (!(obj is AxisInfo item)) + return false; + + if (Id != item.Id) + return false; + if (errorCode != item.errorCode) + return false; + if (movPhase != item.movPhase) + return false; + if (statusCode != item.statusCode) + return false; + return true; + } + public override int GetHashCode() + { + return base.GetHashCode(); + } + } + public class ModuleBlock { public short Id { get; set; } = 0; diff --git a/CMS_CORE_Library/S7Net/Nc_S7Net.cs b/CMS_CORE_Library/S7Net/Nc_S7Net.cs index 05877a5..31b18e4 100644 --- a/CMS_CORE_Library/S7Net/Nc_S7Net.cs +++ b/CMS_CORE_Library/S7Net/Nc_S7Net.cs @@ -3220,6 +3220,43 @@ namespace CMS_CORE_Library.S7Net #region PROCESS-AXES (PATH) High-level data + + /// + /// Get current Production Info data + /// + /// + /// + public override CmsError PLC_RAxesMov(ref ThermoModels.AxisRT currProdInfo) + { + List currMem = new List(); + CmsError libraryError = MEM_RWByteList(R, 0, PROCESS_PROD_INFO.MemType, PROCESS_PROD_INFO.Address, PROCESS_PROD_INFO.SubAddress, 0, PROCESS_PROD_INFO.Size, ref currMem); + if (libraryError.IsError()) + return libraryError; + +#if false + // converto! + currProdInfo = new ThermoModels.ProdInfoModel() + { + NumTarget = S7.Net.Types.Int.FromByteArray(currMem.Skip(0).Take(2).ToArray()), + NumDone = S7.Net.Types.Int.FromByteArray(currMem.Skip(2).Take(2).ToArray()), + // cicli preriscaldo? FIXME TODO + TimeWarm = S7.Net.Types.DInt.FromByteArray(currMem.Skip(6).Take(4).ToArray()), + TimeVent = S7.Net.Types.DInt.FromByteArray(currMem.Skip(10).Take(4).ToArray()), + TimeVacuum = S7.Net.Types.DInt.FromByteArray(currMem.Skip(14).Take(4).ToArray()), + TimeCycleGross = S7.Net.Types.DInt.FromByteArray(currMem.Skip(18).Take(4).ToArray()), + TimeCycleNet = S7.Net.Types.DInt.FromByteArray(currMem.Skip(22).Take(4).ToArray()), + MaterialTempEndWarm = S7.Net.Types.Double.FromByteArray(currMem.Skip(26).Take(4).ToArray()), + MaterialTempEndVent = S7.Net.Types.Double.FromByteArray(currMem.Skip(30).Take(4).ToArray()), + 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()) + }; +#endif + + return NO_ERROR; + } + public override CmsError AXES_RInterpPosition(ushort channel, ref Dictionary axes) { return FUNCTION_NOT_ALLOWED_ERROR; @@ -4708,6 +4745,10 @@ namespace CMS_CORE_Library.S7Net // Main DB Table internal const int TABLE = 604; + // assi + internal static MEMORY_CELL AXES_RTDATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 615, 0, 768); + internal static MEMORY_CELL AXES_INFO = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 616, 0, 640); + // aree Parametri 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);