GEstione reset ODL alternativa
This commit is contained in:
+85
-68
@@ -562,6 +562,11 @@ namespace IOB_WIN_NEXT
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Variabile di appoggio GLOBALE x indicare macchina RUN (es x gestione su reset pezzi)
|
||||
/// </summary>
|
||||
protected bool isRunning { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Valore limite MASSIMO di invio di dati come array Json
|
||||
/// </summary>
|
||||
@@ -607,6 +612,11 @@ namespace IOB_WIN_NEXT
|
||||
/// </summary>
|
||||
protected int numSim { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Indica se sia stato resettato un contapezzi
|
||||
/// </summary>
|
||||
protected bool pzCountResetted { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Fornisce il valore letto da BITMAP in formato valido x messa in coda nel formato dtEve#value#cont
|
||||
/// </summary>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+35
-31
@@ -116,9 +116,9 @@ namespace IOB_WIN_NEXT
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Indica se abbia emergenza premuta
|
||||
/// Indica se abbia emergenza ARMATA (cond normale)
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user