Merge branch 'feature/S7Net' into develop

This commit is contained in:
Samuele Locatelli
2020-06-09 19:11:33 +02:00
4 changed files with 109 additions and 35 deletions
+10 -7
View File
@@ -47,6 +47,7 @@ namespace CMS_CORE_Library.Models
}
}
/// <summary>
/// Recipe Parameters
/// </summary>
@@ -147,12 +148,14 @@ namespace CMS_CORE_Library.Models
public class WarmerChannel
{
public int IdChannel { get; set; } = 0;
public double SetpointRecipe { get; set; } = 0;
public double SetpointThermoCam { get; set; } = 0;
public double SetpointPLC { get; set; } = 0;
public byte IdRefl { get; set; } = 0;
public byte SetpointRecipe { 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)
{
@@ -184,7 +187,7 @@ namespace CMS_CORE_Library.Models
}
public class ProdInfo
public class ProdInfoModel
{
public short NumTarget { get; set; } = 0;
public short NumDone { get; set; } = 0;
@@ -203,7 +206,7 @@ namespace CMS_CORE_Library.Models
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is ProdInfo item))
if (!(obj is ProdInfoModel item))
return false;
if (NumTarget != item.NumTarget)
@@ -241,7 +244,7 @@ namespace CMS_CORE_Library.Models
}
}
public class ProdCycle
public class ProdCycleModel
{
public ushort Status { get; set; } = 0;
public ushort MessageId { get; set; } = 0;
@@ -251,7 +254,7 @@ namespace CMS_CORE_Library.Models
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is ProdCycle item))
if (!(obj is ProdCycleModel item))
return false;
if (Status != item.Status)
+2 -2
View File
@@ -678,13 +678,13 @@ namespace CMS_CORE_Library
/// </summary>
/// <param name="currProdInfo"></param>
/// <returns></returns>
public abstract CmsError PLC_RProdInfo(ref ThermoModels.ProdInfo currProdInfo);
public abstract CmsError PLC_RProdInfo(ref ThermoModels.ProdInfoModel currProdInfo);
/// <summary>
/// Get current Production Cycle data
/// </summary>
/// <param name="currProdCycle"></param>
/// <returns></returns>
public abstract CmsError PLC_RProdCycle(ref ThermoModels.ProdCycle currProdCycle);
public abstract CmsError PLC_RProdCycle(ref ThermoModels.ProdCycleModel currProdCycle);
#endregion THERMO high level data
+93 -24
View File
@@ -61,8 +61,8 @@ namespace CMS_CORE_Library.S7Net
private static Dictionary<int, ThermoModels.RecipeParam> ThermoParamList;
private static Dictionary<int, ThermoModels.ModuleBlock> ThermoModuleList;
private static Dictionary<int, ThermoModels.WarmerChannel> ThermoWarmChannels;
private static ThermoModels.ProdInfo ThermoProdInfo;
private static ThermoModels.ProdCycle ThermoProdCycle;
private static ThermoModels.ProdInfoModel ThermoProdInfo;
private static ThermoModels.ProdCycleModel ThermoProdCycle;
// connessione S7
private CpuType tipoCpu = CpuType.S71500;
@@ -136,8 +136,8 @@ namespace CMS_CORE_Library.S7Net
ThermoParamList = new Dictionary<int, ThermoModels.RecipeParam>();
ThermoModuleList = new Dictionary<int, ThermoModels.ModuleBlock>();
ThermoWarmChannels = new Dictionary<int, ThermoModels.WarmerChannel>();
ThermoProdCycle = new ThermoModels.ProdCycle();
ThermoProdInfo = new ThermoModels.ProdInfo();
ThermoProdCycle = new ThermoModels.ProdCycleModel();
ThermoProdInfo = new ThermoModels.ProdInfoModel();
}
/// <summary>
/// Connessione al PLC
@@ -1952,7 +1952,7 @@ namespace CMS_CORE_Library.S7Net
/// </summary>
/// <param name="currProdInfo"></param>
/// <returns></returns>
public override CmsError PLC_RProdInfo(ref ThermoModels.ProdInfo currProdInfo)
public override CmsError PLC_RProdInfo(ref ThermoModels.ProdInfoModel currProdInfo)
{
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);
@@ -1960,7 +1960,7 @@ namespace CMS_CORE_Library.S7Net
if (cmsError.IsError())
return cmsError;
// converto!
currProdInfo = new ThermoModels.ProdInfo()
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()),
@@ -1985,7 +1985,7 @@ namespace CMS_CORE_Library.S7Net
/// </summary>
/// <param name="currProdCycle"></param>
/// <returns></returns>
public override CmsError PLC_RProdCycle(ref ThermoModels.ProdCycle currProdCycle)
public override CmsError PLC_RProdCycle(ref ThermoModels.ProdCycleModel currProdCycle)
{
List<byte> currMem = new List<byte>();
CmsError cmsError = MEM_RWByteList(R, 0, PROCESS_PROD_CYCLE.MemType, PROCESS_PROD_CYCLE.Address, PROCESS_PROD_CYCLE.SubAddress, 0, PROCESS_PROD_CYCLE.Size, ref currMem);
@@ -1993,7 +1993,7 @@ namespace CMS_CORE_Library.S7Net
if (cmsError.IsError())
return cmsError;
// converto!
currProdCycle = new ThermoModels.ProdCycle()
currProdCycle = new ThermoModels.ProdCycleModel()
{
Status = S7.Net.Types.Word.FromByteArray(currMem.Skip(0).Take(2).ToArray()),
MessageId = S7.Net.Types.Word.FromByteArray(currMem.Skip(2).Take(2).ToArray()),
@@ -2078,7 +2078,12 @@ namespace CMS_CORE_Library.S7Net
}
else
{
ThermoParamList.Add(currParam.Id, new ThermoModels.RecipeParam() { Id = currParam.Id, SetpointHMI = currParam.SetpointHMI, SetpointPLC = currParam.SetpointPLC, ValMax = currParam.ValMax, ValMin = currParam.ValMin, UnitMeasure = currParam.UnitMeasure });
try
{
ThermoParamList.Add(currParam.Id, new ThermoModels.RecipeParam() { Id = currParam.Id, SetpointHMI = currParam.SetpointHMI, SetpointPLC = currParam.SetpointPLC, ValMax = currParam.ValMax, ValMin = currParam.ValMin, UnitMeasure = currParam.UnitMeasure });
}
catch
{ }
}
}
}
@@ -2367,7 +2372,7 @@ namespace CMS_CORE_Library.S7Net
/// </summary>
private void refreshRiscSetpointPLC()
{
// leggo DB500 x area Ich
// leggo DB514 x area Ich
List<byte> currMem = new List<byte>();
// leggo da PLC a array di byte di appoggio...
@@ -2398,12 +2403,62 @@ namespace CMS_CORE_Library.S7Net
}
}
}
/// <summary>
/// Write SetPoint PLC on CHp area
/// </summary>
private void PLC_WRiscSetpointPLC()
{
List<byte> currMem = new List<byte>();
// converto a blocchi di 2 byte...
for (int i = 0; i < RISC_CHP_DATA.Size / 2; i++)
{
currMem.Add(ThermoWarmChannels[i + 1].SetpointPLC);
currMem.Add(ThermoWarmChannels[i].SetpointPLC);
}
// scrivo sul PLC array di byte...
CmsError cmsError = MEM_RWByteList(W, 0, RISC_CHP_DATA.MemType, RISC_CHP_DATA.Address, RISC_CHP_DATA.SubAddress, 0, RISC_CHP_DATA.Size, ref currMem);
}
// FIXME TODO : devo farla o legge da conf il PLC?
#if false
/// <summary>
/// Write Board enabled on OCC area
/// </summary>
private void PLC_WRiscAbilitSch()
{
List<byte> currMem = new List<byte>();
// converto a blocchi di 2 byte...
for (int i = 0; i < RISC_OCC_DATA.Size / 2; i++)
{
currMem.Add(ThermoWarmChannels[i + 1].SetpointPLC);
currMem.Add(ThermoWarmChannels[i].SetpointPLC);
}
// scrivo sul PLC array di byte...
CmsError cmsError = MEM_RWByteList(W, 0, RISC_CHP_DATA.MemType, RISC_CHP_DATA.Address, RISC_CHP_DATA.SubAddress, 0, RISC_CHP_DATA.Size, ref currMem);
}
#endif
#if false
/// <summary>
/// Write riflector on CFI area
/// </summary>
private void PLC_WRiscSetReflector()
{
List<byte> currMem = new List<byte>();
// converto a blocchi di 2 byte...
for (int i = 0; i < RISC_CFI_DATA.Size / 2; i++)
{
currMem.Add(RiskChannelConfig[i + 1].SetpointPLC);
currMem.Add(RiskChannelConfig[i].SetpointPLC);
}
// scrivo sul PLC array di byte...
CmsError cmsError = MEM_RWByteList(W, 0, RISC_CFI_DATA.MemType, RISC_CFI_DATA.Address, RISC_CFI_DATA.SubAddress, 0, RISC_CFI_DATA.Size, ref currMem);
}
#endif
/// <summary>
/// Refresh Canali Riscaldi: actual current PLC
/// </summary>
private void refreshRiscActCurr()
{
// leggo DB500 x area Ich
// leggo DB514 x area Ich
List<byte> currMem = new List<byte>();
// leggo da PLC a array di byte di appoggio...
@@ -2439,7 +2494,7 @@ namespace CMS_CORE_Library.S7Net
/// </summary>
private void refreshRiscPerc()
{
// leggo DB500 x area OVp
// leggo DB514 x area OVp
List<byte> currMem = new List<byte>();
// leggo da PLC a array di byte di appoggio...
@@ -2473,7 +2528,7 @@ namespace CMS_CORE_Library.S7Net
/// </summary>
private void refreshRiscStatus()
{
// leggo DB500 x area ESP
// leggo DB514 x area ESP
List<byte> currMem = new List<byte>();
// leggo da PLC a array di byte di appoggio...
@@ -3095,7 +3150,15 @@ namespace CMS_CORE_Library.S7Net
// try/catch
try
{
currPLC.WriteBytes(DataType.DataBlock, MemTable, MemIndex, Values.ToArray());
byte[] memByteSwap = new byte[Values.Count];
// faccio swap a 2 byte x volta...
for (int i = 0; i < Values.Count / 2; i++)
{
memByteSwap[2 * i] = Values.ElementAt(2 * i + 1);
memByteSwap[2 * i + 1] = Values.ElementAt(2 * i);
}
currPLC.WriteBytes(DataType.DataBlock, MemTable, MemIndex, memByteSwap);
//currPLC.WriteBytes(DataType.DataBlock, MemTable, MemIndex, Values.ToArray());
}
catch
{
@@ -3111,8 +3174,14 @@ namespace CMS_CORE_Library.S7Net
Values.Clear();
try
{
var memByteRead = currPLC.ReadBytes(DataType.DataBlock, MemTable, MemIndex, Number);
Values = memByteRead.ToList();
byte[] memByteRead = currPLC.ReadBytes(DataType.DataBlock, MemTable, MemIndex, Number);
// faccio swap a 2 byte x volta...
for (int i = 0; i < memByteRead.Length / 2; i++)
{
Values.Add(memByteRead[2 * i + 1]);
Values.Add(memByteRead[2 * i]);
}
//Values = memByteRead.ToList();
}
catch
{
@@ -4566,14 +4635,14 @@ namespace CMS_CORE_Library.S7Net
internal static MEMORY_CELL MODULE_RT_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 603, 12, 1536);
// riscaldi
internal static MEMORY_CELL RISC_OCC_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 500, 64, 64);
internal static MEMORY_CELL RISC_CHP_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 500, 128, 1024);
internal static MEMORY_CELL RISC_CFI_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 500, 2176, 1024);
internal static MEMORY_CELL RISC_ICH_MIN_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 500, 3200, 4096);
internal static MEMORY_CELL RISC_OCS_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 500, 9472, 64);
internal static MEMORY_CELL RISC_ESP_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 500, 9728, 1024);
internal static MEMORY_CELL RISC_OVP_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 500, 10752, 1024);
internal static MEMORY_CELL RISC_ICH_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 500, 11776, 4096);
internal static MEMORY_CELL RISC_OCC_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 64, 64);
internal static MEMORY_CELL RISC_CHP_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 128, 1024);
internal static MEMORY_CELL RISC_CFI_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 2176, 1024);
internal static MEMORY_CELL RISC_ICH_MIN_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 3200, 4096);
internal static MEMORY_CELL RISC_OCS_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 9472, 64);
internal static MEMORY_CELL RISC_ESP_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 9728, 1024);
internal static MEMORY_CELL RISC_OVP_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 10752, 1024);
internal static MEMORY_CELL RISC_ICH_DATA = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 514, 11776, 4096);
// produzione
internal static MEMORY_CELL PROCESS_PROD_INFO = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, 606, 0, 50);
+4 -2
View File
@@ -223,8 +223,10 @@ namespace Siemens_S7_Test
{
memByteRead = currPLC.ReadBytes(DataType.DataBlock, memoria.DbNum, memoria.indiceMem, numByte);
}
catch
{ }
catch(Exception exc)
{
lg.Error(exc);
}
sw.Stop();
// salvo risultati
PerfStats.addValue((double)sw.ElapsedMilliseconds);