Merge branch 'beta' into ADM

This commit is contained in:
Samuele Locatelli
2021-04-10 10:35:52 +02:00
8 changed files with 186 additions and 146 deletions
Vendored
+1 -1
View File
@@ -13,7 +13,7 @@ pipeline {
steps {
/* calcolo numero versione... diverso x branch MASTER/DEVELOP */
script {
withEnv(['NEXT_BUILD_NUMBER=1410']) {
withEnv(['NEXT_BUILD_NUMBER=1411']) {
// env.versionNumber = VersionNumber(versionNumberString : '6.13.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true)
env.versionNumber = VersionNumber(versionNumberString : '6.13.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true, overrideBuildsAllTime: '${NEXT_BUILD_NUMBER}')
env.APP_NAME = 'MAPO'
+6
View File
@@ -280,6 +280,12 @@ namespace MP_IO.Controllers
// aggiorno valore e data
trovato.value = item.valore;
trovato.lastRead = DateTime.Now;
// se fosse un valore WRITE e mi ha dato un valore vuoto --> mando un fix x riscrittura
if (trovato.writable && string.IsNullOrEmpty(item.valore))
{
taskType currTask = (taskType)Enum.Parse(typeof(taskType), trovato.uid);
DataLayerObj.addCheckTask4Machine(id, currTask, item.valore);
}
}
// altrimenti AGGIUNGO (READ ONLY)...
else
+11 -23
View File
@@ -4,31 +4,19 @@
<%@ Register Src="~/WebUserControls/mod_sendParameters.ascx" TagPrefix="uc1" TagName="mod_sendParameters" %>
<%@ Register Src="~/WebUserControls/mod_dettMacchina.ascx" TagPrefix="uc1" TagName="mod_dettMacchina" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div class="container-flow m-3" role="main">
<div class="row">
<div class="col-12 col-md-8 col-lg-9 col-xl-10">
<uc1:mod_dettMacchina runat="server" ID="mod_dettMacchina" />
<uc1:mod_sendParameters runat="server" ID="mod_sendParameters" />
<%--<div class="row textCondens">
<div class="col-6">
<asp:HyperLink runat="server" ID="hlScarti" NavigateUrl="~/Scarti" CssClass="btn btn-info btn-lg btn-block"><i class="fa fa-bug"></i> Reg. SCARTI</asp:HyperLink>
</div>
<div class="col-6">
<asp:HyperLink runat="server" ID="hlControlli" NavigateUrl="~/Controlli" CssClass="btn btn-primary btn-lg btn-block"><i class="fa fa-wrench"></i> Reg.CONTROLLI</asp:HyperLink>
</div>
</div>--%>
</div>
<div class="col-12 col-md-4 col-lg-3 col-xl-2">
<uc1:mod_directLinks runat="server" ID="mod_directLinks" />
</div>
<div class="container-flow m-3" role="main">
<div class="row">
<div class="col-12 col-md-8 col-lg-9 col-xl-10">
<uc1:mod_dettMacchina runat="server" ID="mod_dettMacchina" />
<uc1:mod_sendParameters runat="server" ID="mod_sendParameters" />
</div>
<div class="col-12 col-md-4 col-lg-3 col-xl-2">
<uc1:mod_directLinks runat="server" ID="mod_directLinks" />
</div>
</div>
</div>
</div>
</asp:Content>
</asp:Content>
+32 -32
View File
@@ -1,44 +1,44 @@
//------------------------------------------------------------------------------
// <generato automaticamente>
// Codice generato da uno strumento.
// <auto-generated>
// This code was generated by a tool.
//
// Le modifiche a questo file possono causare un comportamento non corretto e verranno perse se
// il codice viene rigenerato.
// </generato automaticamente>
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace MoonProTablet
{
public partial class SendParameters
{
public partial class SendParameters
{
/// <summary>
/// Controllo mod_dettMacchina.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// </remarks>
protected global::MoonProTablet.WebUserControls.mod_dettMacchina mod_dettMacchina;
/// <summary>
/// mod_dettMacchina control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::MoonProTablet.WebUserControls.mod_dettMacchina mod_dettMacchina;
/// <summary>
/// Controllo mod_sendParameters.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// </remarks>
protected global::MoonProTablet.WebUserControls.mod_sendParameters mod_sendParameters;
/// <summary>
/// mod_sendParameters control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::MoonProTablet.WebUserControls.mod_sendParameters mod_sendParameters;
/// <summary>
/// Controllo mod_directLinks.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// </remarks>
protected global::MoonProTablet.WebUserControls.mod_directLinks mod_directLinks;
}
/// <summary>
/// mod_directLinks control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::MoonProTablet.WebUserControls.mod_directLinks mod_directLinks;
}
}
+3
View File
@@ -857,6 +857,9 @@ namespace MoonProTablet.WebUserControls
Response.Redirect("~/DettaglioMacchina.aspx");
}
}
// invio task x end produzione...
DataLayerObj.addTask4Machine(idxMacchinaFix, taskType.endProd, "");
// resetto ODL su redis...
DataLayerObj.emptyCurrODL(idxMacchinaFix);
// reset ODL!...
@@ -13,10 +13,29 @@ namespace MoonProTablet.WebUserControls
{
public partial class mod_sendParameters : BaseUserControl
{
#region Protected Methods
protected void grView_RowEditing(object sender, GridViewEditEventArgs e)
{
}
protected void grView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
}
protected void lbtReload_Click(object sender, EventArgs e)
{
grView.DataBind();
}
protected void Page_Load(object sender, EventArgs e)
{
}
#endregion Protected Methods
#region Public Methods
/// <summary>
/// wrapper recupero parametri macchina
/// </summary>
@@ -53,38 +72,7 @@ namespace MoonProTablet.WebUserControls
DataLayerObj.updateMachineParameter(idxMacchina, Original_uid, reqValue);
}
}
protected void lbtReload_Click(object sender, EventArgs e)
{
grView.DataBind();
}
protected void grView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
#if false
var txtReqVal = grView.Rows[e.RowIndex].FindControl("txtReqValue") as TextBox;
string Original_uid = e.Keys[0].ToString();
// recupero items...
List<objItem> dcList = DataLayer.getCurrObjItems(idxMacchina);
// cerco quello da aggiornare
objItem trovato = dcList.Find(obj => obj.uid == Original_uid);
List<objItem> list2Update = new List<objItem>();
// se trovato procedo
if (trovato != null)
{
// aggiorno valore richiesto + dt richiesta
trovato.reqValue = txtReqVal.Text.Trim();
trovato.lastRequest = DateTime.Now;
list2Update.Add(trovato);
DataLayer.upsertCurrObjItems(idxMacchina, list2Update);
// accodo in task 2 exe la richiesta di processing
DataLayer.addTask4Machine(idxMacchina, taskType.setParameter, trovato.uid);
}
#endif
}
protected void grView_RowEditing(object sender, GridViewEditEventArgs e)
{
}
#endregion Public Methods
}
}
+107 -57
View File
@@ -786,6 +786,16 @@ namespace MapoDb
return mHash(string.Format("PzCount:{0}", idxMacchina));
}
/// <summary>
/// Hash dati SAVED (EXE) TASK x la macchina specificata x poter ripristinare in caso di perdita valore WRITE
/// </summary>
/// <param name="idxMacchina"></param>
/// <returns></returns>
public static string savedTaskHash(string idxMacchina)
{
return mHash(string.Format("SavedTask:{0}", idxMacchina));
}
/// <summary>
/// Hash dati STATUS x la macchina specificata.
/// - dati ODL
@@ -809,6 +819,41 @@ namespace MapoDb
return mHash($"VetoOdlMacc:{idxMacchina}");
}
/// <summary>
/// verifica se sia da reinviare un task alla macchina dall'elenco di quelli salvati (in modalità upsert) se non scaduti
/// </summary>
/// <param name="idxMacchina"></param>
/// <param name="taskKey"></param>
/// <param name="taskVal"></param>
/// <returns></returns>
public bool addCheckTask4Machine(string idxMacchina, taskType taskKey, string taskVal)
{
bool answ = false;
string currHash = exeTaskHash(idxMacchina);
logger.lg.scriviLog($"addCheckTask4Machine idxMacchina: {idxMacchina} | taskKey: {taskKey} | taskVal: {taskVal}");
try
{
Dictionary<string, string> savedTask = mSavedTaskMacchina(idxMacchina);
// cerco valore saved
string savedVal = savedTask[taskKey.ToString()];
// se ho un valore != "" --> rimetto in coda di invio...
if (!string.IsNullOrEmpty(savedVal) && (savedVal != taskVal))
{
// leggo task attuali...
Dictionary<string, string> currTask = mTaskMacchina(idxMacchina);
// rimetto in task da eseguire...
currTask[taskKey.ToString()] = savedVal;
answ = memLayer.ML.redSaveHashDict(currHash, currTask);
logger.lg.scriviLog($"re-issued task4machine: idxMacchina: {idxMacchina} | taskKey: {taskKey} | savedVal: {savedVal}");
}
}
catch
{ }
// chiamo update come task di scrittura
return answ;
}
/// <summary>
/// Aggiunge un PARAMETRO OPZIONALE all'elenco di quelli salvati (in modalità upsert)
/// </summary>
@@ -842,15 +887,40 @@ namespace MapoDb
{
bool answ = false;
string currHash = exeTaskHash(idxMacchina);
string currSavedParHash = savedTaskHash(idxMacchina);
Dictionary<string, string> currTask = new Dictionary<string, string>();
Dictionary<string, string> savedTask = new Dictionary<string, string>();
try
{
// leggo task attuali...
var currTask = mTaskMacchina(idxMacchina);
currTask = mTaskMacchina(idxMacchina);
currTask[taskKey.ToString()] = taskVal;
answ = memLayer.ML.redSaveHashDict(currHash, currTask);
logger.lg.scriviLog($"Task ADD - idxMacchina: {idxMacchina} | taskKey: {taskKey.ToString()} | taskVal: {taskVal}");
logger.lg.scriviLog($"Task ADD - idxMacchina: {idxMacchina} | taskKey: {taskKey} | taskVal: {taskVal}");
}
catch { }
// verifico in base al tipo di task se fare backup...
switch (taskKey)
{
case taskType.setArt:
case taskType.setComm:
case taskType.setPzComm:
case taskType.setProg:
// leggo task SALVATI attuali...
savedTask = mSavedTaskMacchina(idxMacchina);
savedTask[taskKey.ToString()] = taskVal;
answ = memLayer.ML.redSaveHashDict(currSavedParHash, savedTask);
break;
case taskType.endProd:
// salvo un DICT vuoto x resettare
savedTask = new Dictionary<string, string>();
answ = memLayer.ML.redSaveHashDict(currSavedParHash, savedTask);
break;
default:
break;
}
return answ;
}
@@ -1931,6 +2001,28 @@ namespace MapoDb
return answ;
}
/// <summary>
/// Restitusice elenco KVP dei TASK SALVATI (da passare a IOB-WIN) per l'impianto indicato
/// </summary>
/// <param name="idxMacchina"></param>
/// <returns></returns>
public Dictionary<string, string> mSavedTaskMacchina(string idxMacchina)
{
// hard coded dimensione vettore DatiMacchine
Dictionary<string, string> answ = new Dictionary<string, string>();
// ORA recupero da memoria redis...
try
{
string currHash = savedTaskHash(idxMacchina);
answ = memLayer.ML.redGetHashDict(currHash);
}
catch (Exception exc)
{
logger.lg.scriviLog(string.Format("Errore in recupero dati SAVED TASK x Redis mSavedTaskMacchina - idxMacchina {2}:{0}{1}", Environment.NewLine, exc, idxMacchina));
}
return answ;
}
/// <summary>
/// Restitusice elenco KVP
/// key: IdxMacchina
@@ -2010,7 +2102,7 @@ namespace MapoDb
}
catch (Exception exc)
{
logger.lg.scriviLog(string.Format("Errore in compilazione dati EXE TASK x Redis - idxMacchina {2}:{0}{1}", Environment.NewLine, exc, idxMacchina));
logger.lg.scriviLog(string.Format("Errore in recupero dati EXE TASK x Redis mTaskMacchina - idxMacchina {2}:{0}{1}", Environment.NewLine, exc, idxMacchina));
}
return answ;
}
@@ -3333,6 +3425,17 @@ namespace MapoDb
{
string serVal = JsonConvert.SerializeObject(currValues);
memLayer.ML.setRSV(currParametersHash(idxMacchina), serVal);
// controllo se ha valori write...
foreach (var item in currValues)
{
// se fosse un valore WRITE e mi ha dato un valore vuoto --> mando un fix x riscrittura
if (item.writable && string.IsNullOrEmpty(item.value))
{
taskType currTask = (taskType)Enum.Parse(typeof(taskType), item.uid);
addCheckTask4Machine(idxMacchina, currTask, item.value);
}
}
}
return answ;
}
@@ -3467,57 +3570,4 @@ namespace MapoDb
#endregion Public Methods
}
}
#if false
/// <summary>
/// Elenco task ammessi (x IOB-WIN da eseguire...)
/// </summary>
public enum taskType {
/// <summary>
/// Task nullo / fake
/// </summary>
nihil,
/// <summary>
/// Rimanda a PLC eventuale segnale NON in setup (MA NON RESETTA)
/// </summary>
fixStopSetup,
/// <summary>
/// Indica al PLC di forzare il reset del contapezzi
/// </summary>
forceResetPzCount,
/// <summary>
/// Indica al PLC di forzare il NUOVO valore di contapezzi (impostato come value)
/// </summary>
forceSetPzCount,
/// <summary>
/// Imposta Articolo su PLC
/// </summary>
setArt,
/// <summary>
/// Imposta Commessa su PLC
/// </summary>
setComm,
/// <summary>
/// Set Programma CNC su PLC
/// </summary>
setProg,
/// <summary>
/// Indica al PLC iniziato setup (e secondo casi ferma contapezzi /resetta)
/// </summary>
startSetup,
/// <summary>
/// Indica al PLC finito setup (e secondo casi ferma contapezzi /resetta)
/// </summary>
stopSetup,
/// <summary>
/// Richiesta invio watchdog a PLC
/// </summary>
sendWatchDogMes2Plc
}
public enum tipoSelettore {
articoli
}
#endif
}
+6 -1
View File
@@ -173,7 +173,12 @@
/// <summary>
/// Richiesta invio watchdog a PLC
/// </summary>
sendWatchDogMes2Plc
sendWatchDogMes2Plc,
/// <summary>
/// Indica che è FINITA la produzione (e quindi cancello dati backup)
/// </summary>
endProd,
}
/// <summary>