diff --git a/IOB-WIN-NEXT/IobGeneric.cs b/IOB-WIN-NEXT/IobGeneric.cs
index 7accd397..bb912c8a 100644
--- a/IOB-WIN-NEXT/IobGeneric.cs
+++ b/IOB-WIN-NEXT/IobGeneric.cs
@@ -562,6 +562,11 @@ namespace IOB_WIN_NEXT
}
}
+ ///
+ /// Variabile di appoggio GLOBALE x indicare macchina RUN (es x gestione su reset pezzi)
+ ///
+ protected bool isRunning { get; set; } = false;
+
///
/// Valore limite MASSIMO di invio di dati come array Json
///
@@ -607,6 +612,11 @@ namespace IOB_WIN_NEXT
///
protected int numSim { get; set; }
+ ///
+ /// Indica se sia stato resettato un contapezzi
+ ///
+ protected bool pzCountResetted { get; set; } = false;
+
///
/// Fornisce il valore letto da BITMAP in formato valido x messa in coda nel formato dtEve#value#cont
///
@@ -3601,63 +3611,91 @@ namespace IOB_WIN_NEXT
bool.TryParse(getOptPar("AUTO_CHANGE_ODL"), out doProc);
if (doProc)
{
- // carico i parametri di configurazione x reset ODL...
- string CHANGE_ODL_HOURS = getOptPar("CHANGE_ODL_HOURS");
- string CHANGE_ODL_IDLE_MIN = getOptPar("CHANGE_ODL_IDLE_MIN");
- if (!string.IsNullOrEmpty(CHANGE_ODL_HOURS) && !string.IsNullOrEmpty(CHANGE_ODL_IDLE_MIN))
+ bool callChangeODL = false;
+ // modalità change ODL
+ string CHANGE_ODL_MODE = "TIME";
+ if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE")))
{
- int minOdlDurHours = -1;
- int minPlcIdelMin = -1;
- int.TryParse(CHANGE_ODL_HOURS, out minOdlDurHours);
- int.TryParse(CHANGE_ODL_IDLE_MIN, out minPlcIdelMin);
- // controllo parametri validi
- if (minOdlDurHours > 0 && minPlcIdelMin >= 0)
+ CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE");
+ }
+ if (CHANGE_ODL_MODE == "PZCOUNT_RESET")
+ {
+ /* verifico se sia "armato" il reset cambio ODL, DEVO essere :
+ * - NON in produzione
+ * - contapezzi ACT < contapezzi LAST
+ * */
+ if (!isRunning && pzCountResetted)
{
- // leggo da server inizio ODL... se non multi 1 solo...
- DateTime inizioOdl = DateTime.Now;
- string rawDataInizio = "";
- if (!isMulti)
+ callChangeODL = true;
+ }
+ }
+ else if (CHANGE_ODL_MODE == "TIME")
+ {
+ // carico i parametri di configurazione x reset ODL...
+ string CHANGE_ODL_HOURS = getOptPar("CHANGE_ODL_HOURS");
+ string CHANGE_ODL_IDLE_MIN = getOptPar("CHANGE_ODL_IDLE_MIN");
+ if (!string.IsNullOrEmpty(CHANGE_ODL_HOURS) && !string.IsNullOrEmpty(CHANGE_ODL_IDLE_MIN))
+ {
+ int minOdlDurHours = -1;
+ int minPlcIdelMin = -1;
+ int.TryParse(CHANGE_ODL_HOURS, out minOdlDurHours);
+ int.TryParse(CHANGE_ODL_IDLE_MIN, out minPlcIdelMin);
+ // controllo parametri validi
+ if (minOdlDurHours > 0 && minPlcIdelMin >= 0)
{
- rawDataInizio = callUrl(urlInizioOdlIob, false);
- DateTime.TryParse(rawDataInizio, out inizioOdl);
- }
- else
- {
- DateTime tmpData = DateTime.Now;
- // prendo il + vecchio...
- foreach (var item in elencoMulti)
- {
- fullUrl = $"{urlInizioOdlIob}|{item}";
- rawDataInizio = callUrl(fullUrl, false);
- DateTime.TryParse(rawDataInizio, out tmpData);
- inizioOdl = (tmpData < inizioOdl) ? tmpData : inizioOdl;
- }
- }
- // verifico se sia scaduto...
- if (inizioOdl.AddHours(minOdlDurHours) < adesso)
- {
- string rawIdle = "";
- int idlePeriod = 0;
+ // leggo da server inizio ODL... se non multi 1 solo...
+ DateTime inizioOdl = DateTime.Now;
+ string rawDataInizio = "";
if (!isMulti)
{
- // controllo SE sono fermo (spento o in manuale) per il periodo minimo richiesto...
- rawIdle = callUrl(urlIdleTime, false);
- int.TryParse(rawIdle, out idlePeriod);
+ rawDataInizio = callUrl(urlInizioOdlIob, false);
+ DateTime.TryParse(rawDataInizio, out inizioOdl);
}
else
{
- int tmpIdle = 0;
- // prendo il + grande...
+ DateTime tmpData = DateTime.Now;
+ // prendo il + vecchio...
foreach (var item in elencoMulti)
{
- fullUrl = $"{urlIdleTime}|{item}";
- rawIdle = callUrl(fullUrl, false);
- int.TryParse(rawIdle, out tmpIdle);
- idlePeriod = tmpIdle > idlePeriod ? tmpIdle : idlePeriod;
+ fullUrl = $"{urlInizioOdlIob}|{item}";
+ rawDataInizio = callUrl(fullUrl, false);
+ DateTime.TryParse(rawDataInizio, out tmpData);
+ inizioOdl = (tmpData < inizioOdl) ? tmpData : inizioOdl;
}
}
- if (idlePeriod >= minPlcIdelMin)
+ // verifico se sia scaduto...
+ if (inizioOdl.AddHours(minOdlDurHours) < adesso)
{
+ string rawIdle = "";
+ int idlePeriod = 0;
+ if (!isMulti)
+ {
+ // controllo SE sono fermo (spento o in manuale) per il periodo minimo richiesto...
+ rawIdle = callUrl(urlIdleTime, false);
+ int.TryParse(rawIdle, out idlePeriod);
+ }
+ else
+ {
+ int tmpIdle = 0;
+ // prendo il + grande...
+ foreach (var item in elencoMulti)
+ {
+ fullUrl = $"{urlIdleTime}|{item}";
+ rawIdle = callUrl(fullUrl, false);
+ int.TryParse(rawIdle, out tmpIdle);
+ idlePeriod = tmpIdle > idlePeriod ? tmpIdle : idlePeriod;
+ }
+ }
+ if (idlePeriod >= minPlcIdelMin)
+ {
+ callChangeODL = true;
+ }
+ }
+ }
+ }
+ }
+ if (callChangeODL)
+ {
#if false
/***************************************************
* Descrizione procedura (OK X SIMULATORI...)
@@ -3681,31 +3719,10 @@ namespace IOB_WIN_NEXT
* - serve NUOVA TABELLA delle macchine LEADER | FOLLOWER (1:n) e gestione da MP/IO
*
***************************************************/
-
- string rawSplit = "";
- // se multi gestisco il bit delle tavole...
- if (!isMulti)
- {
- // invio chiamata URL x reset ODL su macchina
- rawSplit = callUrl(urlForceSplit, false);
- fatto = (rawSplit == "OK") ? true : false;
- }
- else
- {
- foreach (string item in elencoMulti)
- {
- // invio chiamata URL x reset ODL su macchina, ATTENZIONE scriviamo | al posto di "#" che in URL sarebbe filtrato...
- fullUrl = $"{urlForceSplit}|{item}";
- rawSplit = callUrl(fullUrl, true);
- }
- fatto = (rawSplit == "OK") ? true : false;
- }
#endif
- fatto = forceSplitOdl();
- lgInfo("Chiamata: processAutoOdl --> forceSplitODL");
- }
- }
- }
+ fatto = forceSplitOdl();
+ lgInfo("Chiamata: processAutoOdl --> forceSplitODL");
+ pzCountResetted = false;
}
}
}
diff --git a/IOB-WIN-NEXT/IobOpcUa.cs b/IOB-WIN-NEXT/IobOpcUa.cs
index 4d1d17cc..f6bb6bdc 100644
--- a/IOB-WIN-NEXT/IobOpcUa.cs
+++ b/IOB-WIN-NEXT/IobOpcUa.cs
@@ -116,9 +116,9 @@ namespace IOB_WIN_NEXT
}
///
- /// Indica se abbia emergenza premuta
+ /// Indica se abbia emergenza ARMATA (cond normale)
///
- protected bool hasEStopTriggered
+ protected bool hasEStopArmed
{
get
{
@@ -279,8 +279,6 @@ namespace IOB_WIN_NEXT
{
numCondOk++;
}
- // FIXME DELETEME !!!
- lgInfo($"getDataItemValue(item.keyName): {getDataItemValue(item.keyName)} | item.targetValue: {item.targetValue}");
}
}
if (checkMode == boolCheckMode.AND)
@@ -291,16 +289,6 @@ namespace IOB_WIN_NEXT
{
answ = numCondOk > 0;
}
-
- if (!answ)
- {
- string outData = "";
- foreach (var item in checkList)
- {
- outData += $"{item.keyName} ";
- };
- lgInfo($"checkMultiCondition | test: {outData} | checkMode: {checkMode} | numCond: {numCond} | numCondOk: {numCondOk}");
- }
return answ;
}
@@ -339,29 +327,32 @@ namespace IOB_WIN_NEXT
// variabili RUN...
string currRun = getDataItemValue(opcUaParams.keyRunMode);
+ // salvo running come = working...
+ isRunning = isWorking;
+
+ // se ho emergenza premuta --> emergenza!
+ if (hasEStopArmed)
+ {
+ B_input += (1 << 7);
+ }
+ // se ho emergenza premuta --> emergenza!
+ if (isWarmUpCoolDown)
+ {
+ B_input += (1 << 6);
+ }
+ // se ho almeno 1 allarme E NON SONO IN AUTO --> ALARM!
+ if (hasError)
+ {
+ B_input += (1 << 3);
+ }
if (isWorking)
{
// RUN = LAVORA!
B_input += (1 << 1);
}
- // se ho emergenza premuta --> emergenza!
- else if (hasEStopTriggered)
+ else if (!isReady)
{
- B_input += (1 << 7);
- }
- // se ho almeno 1 allarme E NON SONO IN AUTO --> ALARM!
- else if (hasError)
- {
- B_input += (1 << 3);
- }
- // se ho emergenza premuta --> emergenza!
- else if (isWarmUpCoolDown)
- {
- B_input += (1 << 6);
- }
- else if (isReady)
- {
- // se ho run mode != auto --> manual
+ // se NON ready --> manual
B_input += (1 << 4);
}
@@ -840,6 +831,19 @@ namespace IOB_WIN_NEXT
{
int newVal = -1;
Int32.TryParse(currPzCount, out newVal);
+
+ // gestione decremento contapezzi: viene "messo via" solo SE c'è un effettivo decremento contapezzi...
+ if (newVal < contapezziPLC)
+ {
+ pzCountResetted = true;
+ }
+ else if (isRunning)
+ {
+ // eliminazione semaforo decremento contapezzi SE aumenta e siamo in lavorazione
+ pzCountResetted = false;
+ }
+
+ // salvo nuovo valore contapezziPLC
contapezziPLC = newVal > -1 ? newVal : contapezziPLC;
}
}