diff --git a/CMS_CORE_Library/Models/ThermoModels.cs b/CMS_CORE_Library/Models/ThermoModels.cs index 324a9e4..e36fe40 100644 --- a/CMS_CORE_Library/Models/ThermoModels.cs +++ b/CMS_CORE_Library/Models/ThermoModels.cs @@ -47,6 +47,7 @@ namespace CMS_CORE_Library.Models } } + /// /// Recipe Parameters /// @@ -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) diff --git a/CMS_CORE_Library/NcThermo.cs b/CMS_CORE_Library/NcThermo.cs index cc622b8..e3d1156 100644 --- a/CMS_CORE_Library/NcThermo.cs +++ b/CMS_CORE_Library/NcThermo.cs @@ -678,13 +678,13 @@ namespace CMS_CORE_Library /// /// /// - public abstract CmsError PLC_RProdInfo(ref ThermoModels.ProdInfo currProdInfo); + public abstract CmsError PLC_RProdInfo(ref ThermoModels.ProdInfoModel currProdInfo); /// /// Get current Production Cycle data /// /// /// - public abstract CmsError PLC_RProdCycle(ref ThermoModels.ProdCycle currProdCycle); + public abstract CmsError PLC_RProdCycle(ref ThermoModels.ProdCycleModel currProdCycle); #endregion THERMO high level data diff --git a/CMS_CORE_Library/S7Net/Nc_S7Net.cs b/CMS_CORE_Library/S7Net/Nc_S7Net.cs index 53f2902..f6c30a9 100644 --- a/CMS_CORE_Library/S7Net/Nc_S7Net.cs +++ b/CMS_CORE_Library/S7Net/Nc_S7Net.cs @@ -61,8 +61,8 @@ namespace CMS_CORE_Library.S7Net private static Dictionary ThermoParamList; private static Dictionary ThermoModuleList; private static Dictionary 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(); ThermoModuleList = new Dictionary(); ThermoWarmChannels = new Dictionary(); - ThermoProdCycle = new ThermoModels.ProdCycle(); - ThermoProdInfo = new ThermoModels.ProdInfo(); + ThermoProdCycle = new ThermoModels.ProdCycleModel(); + ThermoProdInfo = new ThermoModels.ProdInfoModel(); } /// /// Connessione al PLC @@ -1952,7 +1952,7 @@ namespace CMS_CORE_Library.S7Net /// /// /// - public override CmsError PLC_RProdInfo(ref ThermoModels.ProdInfo currProdInfo) + public override CmsError PLC_RProdInfo(ref ThermoModels.ProdInfoModel currProdInfo) { List currMem = new List(); 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 /// /// /// - public override CmsError PLC_RProdCycle(ref ThermoModels.ProdCycle currProdCycle) + public override CmsError PLC_RProdCycle(ref ThermoModels.ProdCycleModel currProdCycle) { List currMem = new List(); 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 /// private void refreshRiscSetpointPLC() { - // leggo DB500 x area Ich + // leggo DB514 x area Ich List currMem = new List(); // leggo da PLC a array di byte di appoggio... @@ -2398,12 +2403,62 @@ namespace CMS_CORE_Library.S7Net } } } + /// + /// Write SetPoint PLC on CHp area + /// + private void PLC_WRiscSetpointPLC() + { + List currMem = new List(); + // 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 + /// + /// Write Board enabled on OCC area + /// + private void PLC_WRiscAbilitSch() + { + List currMem = new List(); + // 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 + /// + /// Write riflector on CFI area + /// + private void PLC_WRiscSetReflector() + { + List currMem = new List(); + // 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 /// /// Refresh Canali Riscaldi: actual current PLC /// private void refreshRiscActCurr() { - // leggo DB500 x area Ich + // leggo DB514 x area Ich List currMem = new List(); // leggo da PLC a array di byte di appoggio... @@ -2439,7 +2494,7 @@ namespace CMS_CORE_Library.S7Net /// private void refreshRiscPerc() { - // leggo DB500 x area OVp + // leggo DB514 x area OVp List currMem = new List(); // leggo da PLC a array di byte di appoggio... @@ -2473,7 +2528,7 @@ namespace CMS_CORE_Library.S7Net /// private void refreshRiscStatus() { - // leggo DB500 x area ESP + // leggo DB514 x area ESP List currMem = new List(); // 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); diff --git a/SiemensS7/Siemens-S7-Test/TestMainForm.cs b/SiemensS7/Siemens-S7-Test/TestMainForm.cs index e139812..b8af922 100644 --- a/SiemensS7/Siemens-S7-Test/TestMainForm.cs +++ b/SiemensS7/Siemens-S7-Test/TestMainForm.cs @@ -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);