diff --git a/Thermo.Active.Model/DTOModels/ThProd/DTOThermoPanelProd.cs b/Thermo.Active.Model/DTOModels/ThProd/DTOThermoPanelProd.cs
index 46ebe5b9..d70cb291 100644
--- a/Thermo.Active.Model/DTOModels/ThProd/DTOThermoPanelProd.cs
+++ b/Thermo.Active.Model/DTOModels/ThProd/DTOThermoPanelProd.cs
@@ -42,11 +42,10 @@ namespace Thermo.Active.Model.DTOModels.ThProd
return false;
if (LastTCiclo != item.LastTCiclo)
return false;
- // FIXME TODO rimettere quando NON sim
- //if (!Enumerable.SequenceEqual(TS_Cadenza,item.TS_Cadenza))
- // return false;
- //if (!Enumerable.SequenceEqual(TS_TCiclo, item.TS_TCiclo))
- // return false;
+ if (!Enumerable.SequenceEqual(TS_Cadenza, item.TS_Cadenza))
+ return false;
+ if (!Enumerable.SequenceEqual(TS_TCiclo, item.TS_TCiclo))
+ return false;
return true;
}
diff --git a/Thermo.Active.NC/NcAdapter.cs b/Thermo.Active.NC/NcAdapter.cs
index 3653d4e5..dfd8aaa7 100644
--- a/Thermo.Active.NC/NcAdapter.cs
+++ b/Thermo.Active.NC/NcAdapter.cs
@@ -221,6 +221,10 @@ namespace Thermo.Active.NC
/// Last prod info from PLC
///
protected static ThermoModels.ProdInfoModel lastProdInfoData = new ThermoModels.ProdInfoModel();
+ ///
+ /// Ultimi dati prodPanel
+ ///
+ protected static DTOThermoPanelProd LastProdPanelData = new DTOThermoPanelProd();
#endregion
@@ -1259,110 +1263,138 @@ namespace Thermo.Active.NC
Dictionary TS_Cad = new Dictionary();
Dictionary TS_TC = new Dictionary();
CmsError libraryError = NO_ERROR;
+ bool dataChanged = false;
int numTcOk = 0;
// inizio da ncAdapter.lottoStart
currentProdPanel.InizioProd = lottoStart;
// dati ricetta da live
currentProdPanel.NomeRicetta = NcFileAdapter.RecipeLiveData.RecipeName;
- // parto dai dati di lastProdInfoData...
- if (lastProdInfoData != null)
+ // se NON HO dati già letti --> cambiati devo rileggere
+ if (LastProdPanelData == null)
{
- currentProdPanel.NumDone = lastProdInfoData.NumDone;
- currentProdPanel.NumTarget = lastProdInfoData.NumTarget;
- currentProdPanel.LastTCiclo = lastProdInfoData.TimeCycleGross;
- if (lastProdInfoData.TimeCycleGross > 0)
- {
- currentProdPanel.LastCadenza = (double)3600 / lastProdInfoData.TimeCycleGross;
- }
- // stima durata da pz fatti...
- currentProdPanel.StimaDurata = (currentProdPanel.NumTarget - currentProdPanel.NumDone) * currentProdPanel.LastTCiclo;
+ dataChanged = true;
}
-
- // dai parametri sistemo i setpoints
- if (lastRecipe != null)
+ // se non sono variati dati di produzione --> li riutilizzo!
+ else
{
- if (lastRecipe.ContainsKey("pyrometer_pyrometer_setpoint"))
+ // verifico se siano ancora validi i dati precedenti...
+ if (lastProdInfoData == null)
{
- currentProdPanel.TempAct = lastRecipe["pyrometer_pyrometer_setpoint"].ValueAct;
- currentProdPanel.TempSetpoint = lastRecipe["pyrometer_pyrometer_setpoint"].SetpointPLC;
+ dataChanged = true;
+ }
+ else
+ {
+ // confronto ultimo pezzo --> se diverso sono cambiati
+ dataChanged = (LastProdPanelData.NumDone != lastProdInfoData.NumDone);
}
}
- // dal DB recupero i dati dei TC storici... cablato a last 30 x ora...
- if (currentProdPanel.NumDone > 0)
+ if (dataChanged)
{
- libraryError = GetHistProdInfoData(out List prodInfoDataList, currentProdPanel.NumDone, numRecProdPanelGraph);
- // se ci sono dati --> creo le 2 TS!
- if (prodInfoDataList != null)
+ // parto dai dati di lastProdInfoData...
+ if (lastProdInfoData != null)
{
- foreach (var item in prodInfoDataList)
+ currentProdPanel.NumDone = lastProdInfoData.NumDone;
+ currentProdPanel.NumTarget = lastProdInfoData.NumTarget;
+ currentProdPanel.LastTCiclo = lastProdInfoData.TimeCycleGross;
+ if (lastProdInfoData.TimeCycleGross > 0)
{
- if (TS_TC.ContainsKey(item.NumDone))
+ currentProdPanel.LastCadenza = (double)3600 / lastProdInfoData.TimeCycleGross;
+ }
+ // stima durata da pz fatti...
+ currentProdPanel.StimaDurata = (currentProdPanel.NumTarget - currentProdPanel.NumDone) * currentProdPanel.LastTCiclo;
+ }
+ // dai parametri sistemo i setpoints
+ if (lastRecipe != null)
+ {
+ if (lastRecipe.ContainsKey("pyrometer_pyrometer_setpoint"))
+ {
+ currentProdPanel.TempAct = lastRecipe["pyrometer_pyrometer_setpoint"].ValueAct;
+ currentProdPanel.TempSetpoint = lastRecipe["pyrometer_pyrometer_setpoint"].SetpointPLC;
+ }
+ }
+ // dal DB recupero i dati dei TC storici... cablato a last 30 x ora...
+ if (currentProdPanel.NumDone > 0)
+ {
+ libraryError = GetHistProdInfoData(out List prodInfoDataList, currentProdPanel.NumDone, numRecProdPanelGraph);
+ // se ci sono dati --> creo le 2 TS!
+ if (prodInfoDataList != null)
+ {
+ foreach (var item in prodInfoDataList)
{
- TS_TC[item.NumDone] = item.TimeCycleGross;
- }
- else
- {
- TS_TC.Add(item.NumDone, item.TimeCycleGross);
- }
- if (item.TimeCycleGross > 0)
- {
- if (TS_Cad.ContainsKey(item.NumDone))
+ if (TS_TC.ContainsKey(item.NumDone))
{
- TS_Cad[item.NumDone] = 3600 / item.TimeCycleGross;
+ TS_TC[item.NumDone] = item.TimeCycleGross;
}
else
{
- TS_Cad.Add(item.NumDone, 3600 / item.TimeCycleGross);
+ TS_TC.Add(item.NumDone, item.TimeCycleGross);
}
- numTcOk++;
- }
- }
- // FIXME TODO: da levare post test... SE i TC sono zero (almeno 5)--> SIMULO
- if (numTcOk == 0 || (numRecProdPanelGraph - numTcOk) > 5)
- {
- // calcolo primo/ultimo e divido...
- DateTime fine = prodInfoDataList[0].DtEvent;
- DateTime inizio = prodInfoDataList[prodInfoDataList.Count - 1].DtEvent;
- double TCMedio = Math.Abs(fine.Subtract(inizio).TotalSeconds / prodInfoDataList.Count);
- // simulo
- var rand = new Random();
- List numList = new List();
- foreach (var item2fix in TS_TC)
- {
- numList.Add(item2fix.Key);
- }
- foreach (var numPz in numList)
- {
- TS_TC[numPz] = TCMedio + (rand.NextDouble() * 4 - 2);
- if (TS_Cad.ContainsKey(numPz))
+ if (item.TimeCycleGross > 0)
{
- TS_Cad[numPz] = 3600 / TS_TC[numPz];
- }
- else
- {
- TS_Cad.Add(numPz, 3600 / TS_TC[numPz]);
+ if (TS_Cad.ContainsKey(item.NumDone))
+ {
+ TS_Cad[item.NumDone] = 3600 / item.TimeCycleGross;
+ }
+ else
+ {
+ TS_Cad.Add(item.NumDone, 3600 / item.TimeCycleGross);
+ }
+ numTcOk++;
}
}
+ // FIXME TODO: da levare post test... SE i TC sono zero (almeno 5)--> SIMULO
+ if (numTcOk == 0 || (numRecProdPanelGraph - numTcOk) > 5)
+ {
+ // calcolo primo/ultimo e divido...
+ DateTime fine = prodInfoDataList[0].DtEvent;
+ DateTime inizio = prodInfoDataList[prodInfoDataList.Count - 1].DtEvent;
+ double TCMedio = Math.Abs(fine.Subtract(inizio).TotalSeconds / prodInfoDataList.Count);
+ // simulo
+ var rand = new Random();
+ List numList = new List();
+ foreach (var item2fix in TS_TC)
+ {
+ numList.Add(item2fix.Key);
+ }
+ foreach (var numPz in numList)
+ {
+ TS_TC[numPz] = TCMedio + (rand.NextDouble() * 4 - 2);
+ if (TS_Cad.ContainsKey(numPz))
+ {
+ TS_Cad[numPz] = 3600 / TS_TC[numPz];
+ }
+ else
+ {
+ TS_Cad.Add(numPz, 3600 / TS_TC[numPz]);
+ }
+ }
+ }
+ // accodo!
+ currentProdPanel.TS_Cadenza = TS_Cad;
+ currentProdPanel.TS_TCiclo = TS_TC;
}
- // accodo!
- currentProdPanel.TS_Cadenza = TS_Cad;
- currentProdPanel.TS_TCiclo = TS_TC;
- }
- // già che ci sono recupero prima record x prodStart...
- libraryError = GetHistProdInfoData(out List prodInfoFirst, 1, 1);
- // se ci sono dati --> fix start
- if (prodInfoFirst != null)
- {
- try
+ // già che ci sono recupero prima record x prodStart...
+ libraryError = GetHistProdInfoData(out List prodInfoFirst, 1, 1);
+ // se ci sono dati --> fix start
+ if (prodInfoFirst != null)
{
- currentProdPanel.InizioProd = prodInfoFirst.FirstOrDefault().DtEvent;
+ try
+ {
+ currentProdPanel.InizioProd = prodInfoFirst.FirstOrDefault().DtEvent;
+ }
+ catch
+ { }
}
- catch
- { }
}
+ // salvo ultimi dati!
+ LastProdPanelData = currentProdPanel;
+ }
+ else
+ {
+ // uso ultimi dati
+ currentProdPanel = LastProdPanelData;
}
-
return libraryError;
}