Added method for prodInfo reset and setup
This commit is contained in:
@@ -245,6 +245,29 @@ namespace CMS_CORE_Library.Models
|
||||
{
|
||||
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.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
|
||||
|
||||
@@ -725,6 +725,13 @@ namespace CMS_CORE_Library
|
||||
/// <returns></returns>
|
||||
public abstract CmsError PLC_RProdInfo(ref ThermoModels.ProdInfoModel currProdInfo);
|
||||
/// <summary>
|
||||
/// Set ProdInfo data
|
||||
/// </summary>
|
||||
/// <param name="numTarget">Qty requested (target)</param>
|
||||
/// <param name="doReset">Reset counter (actual counter)</param>
|
||||
/// <returns></returns>
|
||||
public abstract CmsError PLC_WProdInfo(short NumTarget, bool doReset);
|
||||
/// <summary>
|
||||
/// Get current Production Cycle data
|
||||
/// </summary>
|
||||
/// <param name="currProdCycle"></param>
|
||||
|
||||
@@ -2191,6 +2191,54 @@ namespace CMS_CORE_Library.S7Net
|
||||
MouldEnergyIN = S7.Net.Types.Double.FromByteArray(currMem.Skip(46).Take(4).ToArray())
|
||||
};
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
/// <summary>
|
||||
/// Set ProdInfo data
|
||||
/// </summary>
|
||||
/// <param name="numTarget">Qty requested (target)</param>
|
||||
/// <param name="doReset">Reset counter (actual counter)</param>
|
||||
/// <returns></returns>
|
||||
public override CmsError PLC_WProdInfo(short numTarget, bool doReset)
|
||||
{
|
||||
List<byte> currMem = new List<byte>();
|
||||
CmsError cmsError = MEM_RWByteList(R, 0, PROCESS_PROD_INFO.MemType, PROCESS_PROD_INFO.Address, PROCESS_PROD_INFO.SubAddress, 0, PROCESS_PROD_INFO.Size, ref currMem);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
// converto!
|
||||
var 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())
|
||||
};
|
||||
|
||||
// aggiorno...
|
||||
currProdInfo.NumTarget = numTarget;
|
||||
if(doReset)
|
||||
{
|
||||
currProdInfo.NumDone = 0;
|
||||
}
|
||||
// converto a byte...
|
||||
List<byte> newMem = currProdInfo.convertToByte().ToList();
|
||||
// riscrivo!!!!
|
||||
cmsError = MEM_RWByteList(W, 0, PROCESS_PROD_INFO.MemType, PROCESS_PROD_INFO.Address, PROCESS_PROD_INFO.SubAddress, 0, PROCESS_PROD_INFO.Size, ref newMem);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user