Impostata nuova gestione invio pezzi in blocco x Torri

This commit is contained in:
Samuele E. Locatelli
2019-12-13 17:18:26 +01:00
parent 51adf72c87
commit 2f60af3e5e
4 changed files with 134 additions and 14 deletions
+2
View File
@@ -57,6 +57,8 @@ PZCOUNT_MODE=STD.DB1275.DBDW4
DISABLE_PZCOUNT=TRUE
ENABLE_DYN_DATA=TRUE
FORCE_DYN_DATA=TRUE
ENABLE_SEND_PZC_BLOCK=TRUE
MAX_SEND_PZC_BLOCK=10
; conf parametri memoria READ/WRITE
PARAM_CONF=VL24.json
+107 -2
View File
@@ -273,6 +273,16 @@ namespace IOB_WIN
/// Ultimo Override set letto
/// </summary>
public string lastOverrideRapid { get; set; }
/// <summary>
/// Abilitazione invio pezzi "in blocco" per recupero contapezzi
/// </summary>
public bool enableSendPzCountBlock { get; set; } = false;
/// <summary>
/// Massimo numero di px da inviare in blocco
/// </summary>
public int maxSendPzCountBlock { get; set; } = 0;
/// <summary>
/// Array dei contatori x segnali blinking
@@ -603,6 +613,28 @@ namespace IOB_WIN
protected virtual void loadMemConf()
{
lgInfo("BEGIN loadMemConf");
// variabili x gestione send contapezzi in blocco
string currPar = getOptPar("ENABLE_SEND_PZC_BLOCK");
if (!string.IsNullOrEmpty(currPar))
{
bool enableSend = false;
bool.TryParse(currPar, out enableSend);
enableSendPzCountBlock = enableSend;
// se abilitato leggo num pezzi da reinviare in blocco
if (enableSendPzCountBlock)
{
currPar = getOptPar("MAX_SEND_PZC_BLOCK");
if (!string.IsNullOrEmpty(currPar))
{
int numMax = 0;
int.TryParse(currPar, out numMax);
if (numMax > 0)
{
maxSendPzCountBlock = numMax;
}
}
}
}
// inizializzo LUT decodifica
string jsonConf = getOptPar("PARAM_CONF");
if (!string.IsNullOrEmpty(jsonConf))
@@ -2169,6 +2201,44 @@ namespace IOB_WIN
}
}
/// <summary>
/// URL per salvataggio contapezzi (quelli della macchina: PLC/CNC)...
/// </summary>
public string urlSetPzCountMAC
{
get
{
string answ = "";
try
{
answ = string.Format(@"http://{0}{1}{2}/setCounter/MAC_{3}?counter=", cIobConf.serverData.MPIP, cIobConf.serverData.MPURL, cIobConf.serverData.CMDALIVE, cIobConf.codIOB);
}
catch (Exception exc)
{
lgError(exc, "Errore in composizione urlSetPzCountMAC");
}
return answ;
}
}
/// <summary>
/// URL per INVIO IN BLOCCO di un INCREMENTO x contapezzi (quelli della macchina: PLC/CNC)...
/// </summary>
public string urlAddPzCount
{
get
{
string answ = "";
try
{
answ = string.Format(@"http://{0}{1}{2}/doPzCountInc/{3}?qty=", cIobConf.serverData.MPIP, cIobConf.serverData.MPURL, cIobConf.serverData.CMDALIVE, cIobConf.codIOB);
}
catch (Exception exc)
{
lgError(exc, "Errore in composizione urlAddPzCount");
}
return answ;
}
}
/// <summary>
/// URL per salvataggio VALORI opzionali...
/// </summary>
public string urlSetOptVal
@@ -3010,7 +3080,43 @@ namespace IOB_WIN
accodaFLog(sVal, qEncodeFLog("PROG", currPrgName));
}
}
/// <summary>
/// Effettua verifica se abilitato invio pezzi in blocco e nel caso
/// - invio in blocco pezzi
/// - aggiornamento del contapezzi (passato come ref) x nuovo valore post invio
/// </summary>
/// <param name="contapezzi"></param>
/// <param name="lastCountCNC"></param>
public void trySendPzCountBlock(ref int contapezzi, int lastCountCNC)
{
int numIncr = 0;
int qtyAdded = 0;
int delta = lastCountCNC - contapezzi;
// verifico se la funzione SIA abilitata
if (enableSendPzCountBlock)
{
// se è abilitata verifico differenza: se ho DELTA > 3 --> invio un blocco <= maxSendPzCountBlock
if (delta > 2)
{
numIncr = delta > maxSendPzCountBlock ? maxSendPzCountBlock : delta - 1;
// invio il num max di pezzi ammesso in blocco!
lgInfo($"Predisposizione chiamata incremento contapezzi in blocco per {numIncr} pezzi");
string resp = utils.callUrlNow(urlAddPzCount + numIncr.ToString());
if (!string.IsNullOrEmpty(resp))
{
lgInfo($"Risposta chiamata incremento contapezzi: {resp}");
// dalla risposta (come numero) capisco SE ha aggiunto i pezzi (e quanti)
int.TryParse(resp, out qtyAdded);
if (qtyAdded > 0)
{
// incremento il contapezzi della quantità restituita e confermata
contapezzi += qtyAdded;
lgInfo($"Confermato incremento contapezzi interno a {contapezzi} post chiamata diretta");
}
}
}
}
}
/// <summary>
/// Verifica se sia machcina multi = DoppioPallet da CONF
/// </summary>
@@ -3041,7 +3147,6 @@ namespace IOB_WIN
/// <summary>
/// Verifica e processing x gestione ODL automatica
/// </summary>
public void processAutoOdl()
{
bool fatto = false;
+24 -11
View File
@@ -157,11 +157,11 @@ namespace IOB_WIN
{
currODL = utils.callUrl(urlGetCurrODL);
// solo SE HO un ODL...
if (currODL == "" || currODL == "0")
if (string.IsNullOrEmpty(currODL) || currODL == "0")
{
if (periodicLog)
{
lgInfo(string.Format("SiemensTorri | Lettura ODL andata a vuoto: currODL: {0}", currODL));
lgInfo($"SiemensTorri | Lettura ODL andata a vuoto: currODL: {currODL}");
}
}
else
@@ -169,7 +169,7 @@ namespace IOB_WIN
// se variato o scaduto timeout log...
if (periodicLog || (currIdxODL.ToString() != currODL))
{
lgInfo(string.Format("SiemensTorri | Lettura ODL, currODL: {0} --> currIdxODL prec: {1}", currODL, currIdxODL));
lgInfo($"SiemensTorri | Lettura ODL, currODL: {currODL} --> currIdxODL prec: {currIdxODL}");
}
// provo a salvare nuovo ODL
int.TryParse(currODL, out currIdxODL);
@@ -179,42 +179,53 @@ namespace IOB_WIN
{
if (DateTime.Now.Subtract(lastWarnODL).TotalSeconds > 15)
{
lgError(exc, "Errore in fase di chiamata URL x ODL corrente | URL chiamato: {0}", urlGetCurrODL);
lgError(exc, $"Errore in fase di chiamata URL x ODL corrente | URL chiamato: {urlGetCurrODL}");
lastWarnODL = DateTime.Now;
}
}
if (currODL != null && currODL != "" && currODL != "0")
if (!string.IsNullOrEmpty(currODL) && currODL != "0")
{
// ora processo il contapezzi...
string retVal = "";
// controllo se è passato intervallo minimo tra 2 controlli/elaborazioni x distanziare invio e ridurre letture
if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay))
{
// PRIMA salvo il contapezzi della macchina
retVal = utils.callUrlNow(urlSetPzCountMAC + lastCountCNC.ToString());
// verifica se tutto OK
if (retVal != "OK")
{
// errore salvataggio contapezzi
lgInfo($"Errore salvataggio Contapezzi PLC SIEMENST-TORRI: {lastCountCNC} | Contapezzi interno IOB {contapezzi} | Errore salvataggio: {retVal}");
}
// se sono differenti MOSTRO...
if (lastCountCNC != contapezzi)
{
// registro contapezzi
lgInfo(string.Format("Differenza Contapezzi: CNC READ: {0} | Interno IOB {1}", lastCountCNC, contapezzi));
lgInfo($"Differenza Contapezzi: CNC READ: {lastCountCNC} | Interno IOB {contapezzi}");
}
// verifico se variato contapezzi... e se passato ritardo minimo...
if (lastCountCNC > contapezzi)
{
trySendPzCountBlock(ref contapezzi, lastCountCNC);
// salvo nuovo contapezzi (incremento di 1...)
contapezzi++;
// salvo in semaforo!
B_input += 1 << 2;
// registro contapezzi
lgInfo(string.Format("Contapezzi SIEMENST-TORRI: {0} | Contapezzi interno IOB {1}", lastCountCNC, contapezzi));
lgInfo($"Contapezzi SIEMENST-TORRI: {lastCountCNC} | Contapezzi interno IOB {contapezzi}");
}
// invio a server contapezzi (aggiornato)
string retVal = utils.callUrl(urlSetPzCount + contapezzi.ToString());
retVal = utils.callUrlNow(urlSetPzCount + contapezzi.ToString());
// verifica se tutto OK
if (retVal != "OK")
{
// errore salvataggio contapezzi
lgInfo(string.Format("Errore salvataggio Contapezzi SIEMENST-TORRI: {0} | Contapezzi interno IOB {1} | Errore salvataggio: {2}", lastCountCNC, contapezzi, retVal));
lgInfo($"Errore salvataggio Contapezzi SIEMENST-TORRI: {lastCountCNC} | Contapezzi interno IOB {contapezzi} | Errore salvataggio: {retVal}");
}
// resetto timer...
lastPzCountSend = DateTime.Now;
}
@@ -223,7 +234,7 @@ namespace IOB_WIN
{
if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay))
{
lgInfo(string.Format("Attenzione: mancanza ODL non procedo con gestione contapezzi. Contapezzi SIEMENST-TORRI: {0} | Contapezzi interno {1}", lastCountCNC, contapezzi));
lgInfo($"Attenzione: mancanza ODL non procedo con gestione contapezzi. Contapezzi SIEMENST-TORRI: {lastCountCNC} | Contapezzi interno {contapezzi}");
// resetto timer...
lastPzCountSend = DateTime.Now;
}
@@ -232,9 +243,11 @@ namespace IOB_WIN
// log opzionale!
if (verboseLog)
{
lgInfo(string.Format("Trasformazione B_input: {0}", B_input));
lgInfo("Trasformazione B_input: {B_input}");
}
}
/// <summary>
/// Recupero programma in lavorazione
/// </summary>
Vendored
+1 -1
View File
@@ -16,7 +16,7 @@ pipeline {
/* calcolo numero versione... diverso x branch MASTER/DEVELOP */
script {
withEnv(['NEXT_BUILD_NUMBER=588']) {
withEnv(['NEXT_BUILD_NUMBER=589']) {
// env.versionNumber = VersionNumber(versionNumberString : '2.6.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true)
env.versionNumber = VersionNumber(versionNumberString : '2.6.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true, overrideBuildsAllTime: '${NEXT_BUILD_NUMBER}')
env.APP_NAME = 'MAPO-IOB-WIN'