fix pre warm S7Net

This commit is contained in:
Samuele Locatelli
2020-10-09 15:31:00 +02:00
parent 0f8e623fab
commit e60e3bd7bb
2 changed files with 415 additions and 428 deletions
+401 -401
View File
@@ -4,414 +4,414 @@ using System.Linq;
namespace CMS_CORE_Library.Models
{
public class ThermoModels
{
#region Thermo models
protected const double EPSILON = 0.1;
/// <summary>
/// Represents thermo LIVE prod data (gauge, time adv...)
/// </summary>
public class LiveProdDataModel
public class ThermoModels
{
public double TimeAdv { get; set; } = 0;
public double Power { get; set; } = 0;
public double Vacuum { get; set; } = 0;
public double Air { get; set; } = 0;
#region Thermo models
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is LiveProdDataModel item))
return false;
protected const double EPSILON = 0.1;
if (TimeAdv != item.TimeAdv)
return false;
/// <summary>
/// Represents thermo LIVE prod data (gauge, time adv...)
/// </summary>
public class LiveProdDataModel
{
public double TimeAdv { get; set; } = 0;
public double Power { get; set; } = 0;
public double Vacuum { get; set; } = 0;
public double Air { get; set; } = 0;
if (Power != item.Power)
return false;
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is LiveProdDataModel item))
return false;
if (Vacuum != item.Vacuum)
return false;
if (TimeAdv != item.TimeAdv)
return false;
if (Air != item.Air)
return false;
if (Power != item.Power)
return false;
return true;
}
if (Vacuum != item.Vacuum)
return false;
public override int GetHashCode()
{
return base.GetHashCode();
}
if (Air != item.Air)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
/// <summary>
/// Recipe Parameters
/// </summary>
public class RecipeParam
{
public short Id { get; set; } = 0;
public double SetpointHMI { get; set; } = 0;
public double SetpointPLC { get; set; } = 0;
public double ValMax { get; set; } = 0;
public double ValMin { get; set; } = 0;
public ushort UnitMeasure { get; set; } = 0;
public bool Visible { get; set; } = false;
public bool Enabled { get; set; } = false;
public bool HasError { get; set; } = false;
public double ValueAct { get; set; } = 0;
public int ScaleFactor { get; set; } = 1;
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is RecipeParam item))
return false;
if (Id != item.Id)
return false;
if (SetpointHMI != item.SetpointHMI)
return false;
if (SetpointPLC != item.SetpointPLC)
return false;
if (ValMax != item.ValMax)
return false;
if (ValMin != item.ValMin)
return false;
if (UnitMeasure != item.UnitMeasure)
return false;
if (Visible != item.Visible)
return false;
if (Enabled != item.Enabled)
return false;
if (HasError != item.HasError)
return false;
if (ValueAct != item.ValueAct)
return false;
if (ScaleFactor != item.ScaleFactor)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
/// <summary>
/// Single AXIS RealTime (positions / movement) Data
/// </summary>
public class AxisRT
{
public int 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();
}
/// <summary>
/// Deserializzazione da byte ad oggetto AxisRT
/// </summary>
/// <param name="rawData"></param>
public AxisRT(int currId, byte[] rawData)
{
// converto i dati da byte grezzi ai 3 componenti...
Id = currId;
Position = S7.Net.Types.Double.FromByteArray(rawData.Skip(0).Take(4).ToArray());
Speed = S7.Net.Types.Double.FromByteArray(rawData.Skip(4).Take(4).ToArray());
Load = S7.Net.Types.Double.FromByteArray(rawData.Skip(8).Take(4).ToArray());
}
/// <summary>
/// Converte un singolo item in un array di byte per scrittura su PLC S7
/// </summary>
/// <returns></returns>
public byte[] convertToByte()
{
byte[] answ = new byte[12];
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(Position), 0, answ, 0, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(Speed), 0, answ, 4, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(Load), 0, answ, 8, 4);
return answ;
}
}
/// <summary>
/// Single AXIS Info Data
/// </summary>
public class AxisInfo
{
public int Id { get; set; } = 0;
public int ErrorCode { get; set; } = 0;
public int MovPhase { get; set; } = 0;
public int StatusWord { get; set; } = 0;
public int ControlWord { get; set; } = 0;
public double TargetPos { 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 (StatusWord != item.StatusWord)
return false;
if (ControlWord != item.ControlWord)
return false;
if (TargetPos != item.TargetPos)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class ModuleBlock
{
public short Id { get; set; } = 0;
public int ActualDelay { get; set; } = 0;
public int ActualDuration { get; set; } = 0;
public int EstimatedDelay { get; set; } = 0;
public int EstimatedDuration { get; set; } = 0;
public List<short> PrecedingId { get; set; } = new List<short>();
public bool Visible { get; set; } = false;
public bool Running { get; set; } = false;
public bool HasError { get; set; } = false;
public bool Terminated { get; set; } = false;
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is ModuleBlock item))
return false;
if (Id != item.Id)
return false;
if (ActualDelay != item.ActualDelay)
return false;
if (ActualDuration != item.ActualDuration)
return false;
if (EstimatedDelay != item.EstimatedDelay)
return false;
if (EstimatedDuration != item.EstimatedDuration)
return false;
if (PrecedingId != item.PrecedingId)
return false;
if (Visible != item.Visible)
return false;
if (Running != item.Running)
return false;
if (HasError != item.HasError)
return false;
if (Terminated != item.Terminated)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class WarmerChannel
{
public int IdChannel { get; set; } = 0;
public byte IdRefl { get; set; } = 0;
public byte SetpointHMI { get; set; } = 0;
public byte SetpointThermoCam { get; set; } = 0;
public byte SetpointPLC { get; set; } = 0;
public byte ChStatus { get; set; } = 0;
public double CurrAct { get; set; } = 0;
public byte PercAct { get; set; } = 0;
public int MaxPower { get; set; } = 0;
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is WarmerChannel item))
return false;
if (IdChannel != item.IdChannel)
return false;
if (SetpointHMI != item.SetpointHMI)
return false;
if (SetpointThermoCam != item.SetpointThermoCam)
return false;
if (SetpointPLC != item.SetpointPLC)
return false;
if (ChStatus != item.ChStatus)
return false;
if (CurrAct != item.CurrAct)
return false;
if (PercAct != item.PercAct)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class ProdInfoModel
{
public DateTime DtEvent { get; set; } = DateTime.Now;
public short NumTarget { get; set; } = 0;
public short NumDone { get; set; } = 0;
public short PreWarmCycle { get; set; } = 0;
public int TimeWarm { get; set; } = 0;
public int TimeVent { get; set; } = 0;
public int TimeVacuum { get; set; } = 0;
public int TimeCycleGross { get; set; } = 0;
public int TimeCycleNet { get; set; } = 0;
public double MaterialTempEndWarm { get; set; } = 0;
public double MaterialTempEndVent { get; set; } = 0;
public double MoldTemp { get; set; } = 0;
public double VacuumReadVal { get; set; } = 0;
public double MouldEnergyOUT { get; set; } = 0;
public double MouldEnergyIN { get; set; } = 0;
public bool IsScrap { get; set; } = false;
public short NumPreHot { get; set; } = 0;
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is ProdInfoModel item))
return false;
if (DtEvent != item.DtEvent)
return false;
if (NumTarget != item.NumTarget)
return false;
if (NumDone != item.NumDone)
return false;
if (PreWarmCycle != item.PreWarmCycle)
return false;
if (TimeWarm != item.TimeWarm)
return false;
if (TimeVent != item.TimeVent)
return false;
if (TimeVacuum != item.TimeVacuum)
return false;
if (TimeCycleGross != item.TimeCycleGross)
return false;
if (TimeCycleNet != item.TimeCycleNet)
return false;
if (Math.Round(Math.Abs(MaterialTempEndWarm - item.MaterialTempEndWarm), 1) >= EPSILON)
return false;
if (Math.Round(Math.Abs(MaterialTempEndVent - item.MaterialTempEndVent), 1) >= EPSILON)
return false;
if (Math.Round(Math.Abs(MoldTemp - item.MoldTemp), 1) >= EPSILON)
return false;
if (Math.Round(Math.Abs(VacuumReadVal - item.VacuumReadVal), 1) >= EPSILON)
return false;
if (Math.Round(Math.Abs(MouldEnergyOUT - item.MouldEnergyOUT), 1) >= EPSILON)
return false;
if (Math.Round(Math.Abs(MouldEnergyIN - item.MouldEnergyIN), 1) >= EPSILON)
return false;
if (IsScrap != item.IsScrap)
return false;
if (NumPreHot != item.NumPreHot)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
/// <summary>
/// Converte un singolo item in un array di byte per scrittura su PLC S7
/// </summary>
/// <returns></returns>
public byte[] convertToByte()
{
byte[] answ = new byte[50];
Buffer.BlockCopy(S7.Net.Types.Int.ToByteArray(NumTarget), 0, answ, 0, 2);
Buffer.BlockCopy(S7.Net.Types.Int.ToByteArray(NumDone), 0, answ, 2, 2);
Buffer.BlockCopy(S7.Net.Types.Int.ToByteArray(PreWarmCycle), 0, answ, 4, 2);
Buffer.BlockCopy(S7.Net.Types.DInt.ToByteArray(TimeWarm), 0, answ, 6, 4);
Buffer.BlockCopy(S7.Net.Types.DInt.ToByteArray(TimeVent), 0, answ, 10, 4);
Buffer.BlockCopy(S7.Net.Types.DInt.ToByteArray(TimeVacuum), 0, answ, 14, 4);
Buffer.BlockCopy(S7.Net.Types.DInt.ToByteArray(TimeCycleGross), 0, answ, 18, 4);
Buffer.BlockCopy(S7.Net.Types.DInt.ToByteArray(TimeCycleNet), 0, answ, 22, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(MaterialTempEndWarm), 0, answ, 26, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(MaterialTempEndVent), 0, answ, 30, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(MoldTemp), 0, answ, 34, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(VacuumReadVal), 0, answ, 38, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(MouldEnergyOUT), 0, answ, 42, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(MouldEnergyIN), 0, answ, 46, 4);
return answ;
}
}
public class ProdCycleModel
{
public ushort Status { get; set; } = 0;
public ushort MessageId { get; set; } = 0;
public ushort Mode { get; set; } = 0;
public ushort Submode { get; set; } = 0;
public uint TimeAdv { get; set; } = 0;
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is ProdCycleModel item))
return false;
if (Status != item.Status)
return false;
if (MessageId != item.MessageId)
return false;
if (Mode != item.Mode)
return false;
if (Submode != item.Submode)
return false;
if (TimeAdv != item.TimeAdv)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
#endregion
}
/// <summary>
/// Recipe Parameters
/// </summary>
public class RecipeParam
{
public short Id { get; set; } = 0;
public double SetpointHMI { get; set; } = 0;
public double SetpointPLC { get; set; } = 0;
public double ValMax { get; set; } = 0;
public double ValMin { get; set; } = 0;
public ushort UnitMeasure { get; set; } = 0;
public bool Visible { get; set; } = false;
public bool Enabled { get; set; } = false;
public bool HasError { get; set; } = false;
public double ValueAct { get; set; } = 0;
public int ScaleFactor { get; set; } = 1;
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is RecipeParam item))
return false;
if (Id != item.Id)
return false;
if (SetpointHMI != item.SetpointHMI)
return false;
if (SetpointPLC != item.SetpointPLC)
return false;
if (ValMax != item.ValMax)
return false;
if (ValMin != item.ValMin)
return false;
if (UnitMeasure != item.UnitMeasure)
return false;
if (Visible != item.Visible)
return false;
if (Enabled != item.Enabled)
return false;
if (HasError != item.HasError)
return false;
if (ValueAct != item.ValueAct)
return false;
if (ScaleFactor != item.ScaleFactor)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
/// <summary>
/// Single AXIS RealTime (positions / movement) Data
/// </summary>
public class AxisRT
{
public int 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();
}
/// <summary>
/// Deserializzazione da byte ad oggetto AxisRT
/// </summary>
/// <param name="rawData"></param>
public AxisRT(int currId, byte[] rawData)
{
// converto i dati da byte grezzi ai 3 componenti...
Id = currId;
Position = S7.Net.Types.Double.FromByteArray(rawData.Skip(0).Take(4).ToArray());
Speed = S7.Net.Types.Double.FromByteArray(rawData.Skip(4).Take(4).ToArray());
Load = S7.Net.Types.Double.FromByteArray(rawData.Skip(8).Take(4).ToArray());
}
/// <summary>
/// Converte un singolo item in un array di byte per scrittura su PLC S7
/// </summary>
/// <returns></returns>
public byte[] convertToByte()
{
byte[] answ = new byte[12];
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(Position), 0, answ, 0, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(Speed), 0, answ, 4, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(Load), 0, answ, 8, 4);
return answ;
}
}
/// <summary>
/// Single AXIS Info Data
/// </summary>
public class AxisInfo
{
public int Id { get; set; } = 0;
public int ErrorCode { get; set; } = 0;
public int MovPhase { get; set; } = 0;
public int StatusWord { get; set; } = 0;
public int ControlWord { get; set; } = 0;
public double TargetPos { 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 (StatusWord != item.StatusWord)
return false;
if (ControlWord != item.ControlWord)
return false;
if (TargetPos != item.TargetPos)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class ModuleBlock
{
public short Id { get; set; } = 0;
public int ActualDelay { get; set; } = 0;
public int ActualDuration { get; set; } = 0;
public int EstimatedDelay { get; set; } = 0;
public int EstimatedDuration { get; set; } = 0;
public List<short> PrecedingId { get; set; } = new List<short>();
public bool Visible { get; set; } = false;
public bool Running { get; set; } = false;
public bool HasError { get; set; } = false;
public bool Terminated { get; set; } = false;
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is ModuleBlock item))
return false;
if (Id != item.Id)
return false;
if (ActualDelay != item.ActualDelay)
return false;
if (ActualDuration != item.ActualDuration)
return false;
if (EstimatedDelay != item.EstimatedDelay)
return false;
if (EstimatedDuration != item.EstimatedDuration)
return false;
if (PrecedingId != item.PrecedingId)
return false;
if (Visible != item.Visible)
return false;
if (Running != item.Running)
return false;
if (HasError != item.HasError)
return false;
if (Terminated != item.Terminated)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class WarmerChannel
{
public int IdChannel { get; set; } = 0;
public byte IdRefl { get; set; } = 0;
public byte SetpointHMI { get; set; } = 0;
public byte SetpointThermoCam { get; set; } = 0;
public byte SetpointPLC { get; set; } = 0;
public byte ChStatus { get; set; } = 0;
public double CurrAct { get; set; } = 0;
public byte PercAct { get; set; } = 0;
public int MaxPower { get; set; } = 0;
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is WarmerChannel item))
return false;
if (IdChannel != item.IdChannel)
return false;
if (SetpointHMI != item.SetpointHMI)
return false;
if (SetpointThermoCam != item.SetpointThermoCam)
return false;
if (SetpointPLC != item.SetpointPLC)
return false;
if (ChStatus != item.ChStatus)
return false;
if (CurrAct != item.CurrAct)
return false;
if (PercAct != item.PercAct)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class ProdInfoModel
{
public DateTime DtEvent { get; set; }
public short NumTarget { get; set; } = 0;
public short NumDone { get; set; } = 0;
public short PreWarmCycle { get; set; } = 0;
public int TimeWarm { get; set; } = 0;
public int TimeVent { get; set; } = 0;
public int TimeVacuum { get; set; } = 0;
public int TimeCycleGross { get; set; } = 0;
public int TimeCycleNet { get; set; } = 0;
public double MaterialTempEndWarm { get; set; } = 0;
public double MaterialTempEndVent { get; set; } = 0;
public double MoldTemp { get; set; } = 0;
public double VacuumReadVal { get; set; } = 0;
public double MouldEnergyOUT { get; set; } = 0;
public double MouldEnergyIN { get; set; } = 0;
public bool IsScrap { get; set; } = false;
public short NumPreHot { get; set; } = 0;
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is ProdInfoModel item))
return false;
if (DtEvent != item.DtEvent)
return false;
if (NumTarget != item.NumTarget)
return false;
if (NumDone != item.NumDone)
return false;
if (PreWarmCycle != item.PreWarmCycle)
return false;
if (TimeWarm != item.TimeWarm)
return false;
if (TimeVent != item.TimeVent)
return false;
if (TimeVacuum != item.TimeVacuum)
return false;
if (TimeCycleGross != item.TimeCycleGross)
return false;
if (TimeCycleNet != item.TimeCycleNet)
return false;
if (Math.Round(Math.Abs(MaterialTempEndWarm - item.MaterialTempEndWarm), 1) >= EPSILON)
return false;
if (Math.Round(Math.Abs(MaterialTempEndVent - item.MaterialTempEndVent), 1) >= EPSILON)
return false;
if (Math.Round(Math.Abs(MoldTemp - item.MoldTemp), 1) >= EPSILON)
return false;
if (Math.Round(Math.Abs(VacuumReadVal - item.VacuumReadVal), 1) >= EPSILON)
return false;
if (Math.Round(Math.Abs(MouldEnergyOUT - item.MouldEnergyOUT), 1) >= EPSILON)
return false;
if (Math.Round(Math.Abs(MouldEnergyIN - item.MouldEnergyIN), 1) >= EPSILON)
return false;
if (IsScrap != item.IsScrap)
return false;
if (NumPreHot != item.NumPreHot)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
/// <summary>
/// Converte un singolo item in un array di byte per scrittura su PLC S7
/// </summary>
/// <returns></returns>
public byte[] convertToByte()
{
byte[] answ = new byte[50];
Buffer.BlockCopy(S7.Net.Types.Int.ToByteArray(NumTarget), 0, answ, 0, 2);
Buffer.BlockCopy(S7.Net.Types.Int.ToByteArray(NumDone), 0, answ, 2, 2);
Buffer.BlockCopy(S7.Net.Types.Int.ToByteArray(PreWarmCycle), 0, answ, 4, 2);
Buffer.BlockCopy(S7.Net.Types.DInt.ToByteArray(TimeWarm), 0, answ, 6, 4);
Buffer.BlockCopy(S7.Net.Types.DInt.ToByteArray(TimeVent), 0, answ, 10, 4);
Buffer.BlockCopy(S7.Net.Types.DInt.ToByteArray(TimeVacuum), 0, answ, 14, 4);
Buffer.BlockCopy(S7.Net.Types.DInt.ToByteArray(TimeCycleGross), 0, answ, 18, 4);
Buffer.BlockCopy(S7.Net.Types.DInt.ToByteArray(TimeCycleNet), 0, answ, 22, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(MaterialTempEndWarm), 0, answ, 26, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(MaterialTempEndVent), 0, answ, 30, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(MoldTemp), 0, answ, 34, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(VacuumReadVal), 0, answ, 38, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(MouldEnergyOUT), 0, answ, 42, 4);
Buffer.BlockCopy(S7.Net.Types.Double.ToByteArray(MouldEnergyIN), 0, answ, 46, 4);
return answ;
}
}
public class ProdCycleModel
{
public ushort Status { get; set; } = 0;
public ushort MessageId { get; set; } = 0;
public ushort Mode { get; set; } = 0;
public ushort Submode { get; set; } = 0;
public uint TimeAdv { get; set; } = 0;
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is ProdCycleModel item))
return false;
if (Status != item.Status)
return false;
if (MessageId != item.MessageId)
return false;
if (Mode != item.Mode)
return false;
if (Submode != item.Submode)
return false;
if (TimeAdv != item.TimeAdv)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
#endregion
}
}
+14 -27
View File
@@ -2406,33 +2406,20 @@ namespace CMS_CORE_Library.S7Net
// 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())
//,NumPreHot = S7.Net.Types.Int.FromByteArray(currMem.Skip(50).Take(2).ToArray())
NumTarget = S7.Net.Types.Int.FromByteArray(currMem.Skip(0).Take(2).ToArray()),
NumDone = S7.Net.Types.Int.FromByteArray(currMem.Skip(2).Take(2).ToArray()),
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()),
NumPreHot = S7.Net.Types.Int.FromByteArray(currMem.Skip(50).Take(2).ToArray())
};
return NO_ERROR;