diff --git a/IOB-UT/ToMapo.cs b/IOB-UT/ToMapo.cs
index af29b6f5..5e5edf68 100644
--- a/IOB-UT/ToMapo.cs
+++ b/IOB-UT/ToMapo.cs
@@ -28,6 +28,18 @@ namespace IOB_UT
/// Nome variabile x NOME PROGRAMMA
///
public string keyProgName { get; set; } = "";
+ ///
+ /// Indica se il ping sia un criterio valido x determinare powerON impianto
+ ///
+ public bool pingAsPowerOn { get; set; } = true;
+ ///
+ /// Nome variabile x RunMode
+ ///
+ public string keyRunMode { get; set; } = "";
+ ///
+ /// Struttura dati x check condizione PowerOn
+ ///
+ public diCheckCondition condPowerOn { get; set; }
///
/// Dictionary dei nomi da cercare come "endsWith" a cui applicare la soglia indicata
@@ -38,4 +50,18 @@ namespace IOB_UT
///
public Dictionary itemTranslation { get; set; }
}
+ ///
+ /// Classe per rappresentare oggetti chaive/valore target x controlo condizioni multiple
+ ///
+ public class diCheckCondition
+ {
+ ///
+ /// nome variabile
+ ///
+ public string keyName { get; set; } = "";
+ ///
+ /// valore target per esito richeisto
+ ///
+ public string targetValue { get; set; } = "";
+ }
}
diff --git a/IOB-WIN/DATA/CONF/GT573.json b/IOB-WIN/DATA/CONF/GT573.json
index e00acc03..a14c65cd 100644
--- a/IOB-WIN/DATA/CONF/GT573.json
+++ b/IOB-WIN/DATA/CONF/GT573.json
@@ -3,6 +3,12 @@
"keyPartReq": "GD179N_p1_x58",
"keyPartId": "",
"keyProgName": "GD179N_p1_52",
+ "keyRunMode": "",
+ "pingAsPowerOn": false,
+ "condPowerOn": {
+ "keyName": "GD179N_dtop_2",
+ "targetValue": "AVAILABLE"
+ },
"itemTranslation": {
"E_GD179N_p1_48": "ExeMode",
"E_GD179N_p1_49": "ContrMode",
diff --git a/IOB-WIN/DATA/CONF/IMI_50.json b/IOB-WIN/DATA/CONF/IMI_50.json
index b33b96ba..2870c97f 100644
--- a/IOB-WIN/DATA/CONF/IMI_50.json
+++ b/IOB-WIN/DATA/CONF/IMI_50.json
@@ -3,6 +3,12 @@
"keyPartReq": "",
"keyPartId": "Path_01_PartId",
"keyProgName": "Path_01_CurrProg",
+ "keyRunMode": "",
+ "pingAsPowerOn": true,
+ "condPowerOn": {
+ "keyName": "POWER",
+ "targetValue": "OK"
+ },
"paramsEndThresh": {
"PosAct": 50,
"PosTgt": 50,
diff --git a/IOB-WIN/IobMTC.cs b/IOB-WIN/IobMTC.cs
index 760f89ef..5f1b9a26 100644
--- a/IOB-WIN/IobMTC.cs
+++ b/IOB-WIN/IobMTC.cs
@@ -904,7 +904,26 @@ namespace IOB_WIN
processMemoryDiscon();
}
}
-
+ ///
+ /// Recupera uno specifico dataItem
+ ///
+ ///
+ ///
+ public string getDataItemValue(string diKey)
+ {
+ string answ = "";
+ try
+ {
+ var currDataItem = dataItemMem[diKey];
+ answ = currDataItem.value;
+ }
+ catch (Exception exc)
+ {
+ Logging.Instance.Error($"Errore in getDataItemValue per {diKey}{Environment.NewLine}{exc}");
+ }
+ return answ;
+ }
+
#endregion
#region Metodi specifici (da verificare/completare in implementazione)
@@ -917,47 +936,11 @@ namespace IOB_WIN
if (utils.CRB("enableContapezzi"))
{
// cerco parametro contapezzi...
- string currPzCount = "";
- string currPzReq = "";
- string currPartId = "";
- string currProg = "";
- try
- {
- var currDataItem = dataItemMem[mtcParams.keyPartCount];
- currPzCount = currDataItem.value;
- }
- catch(Exception exc)
- {
- lgError($"Eccezione in recupero dati currPzCount:{Environment.NewLine}{exc}");
- }
+ string currPzCount = getDataItemValue(mtcParams.keyPartCount);
#if false
- try
- {
- var currDataItem = dataItemMem[mtcParams.keyPartReq];
- currPzReq = currDataItem.value;
- }
- catch (Exception exc)
- {
- lgError($"Eccezione in recupero dati currPzReq:{Environment.NewLine}{exc}");
- }
- try
- {
- var currDataItem = dataItemMem[mtcParams.keyPartId];
- currPartId = currDataItem.value;
- }
- catch (Exception exc)
- {
- lgError($"Eccezione in recupero dati currPartId:{Environment.NewLine}{exc}");
- }
- try
- {
- var currDataItem = dataItemMem[mtcParams.keyProgName];
- currProg = currDataItem.value;
- }
- catch (Exception exc)
- {
- lgError($"Eccezione in recupero dati currProg:{Environment.NewLine}{exc}");
- }
+ string currPzReq = getDataItemValue(mtcParams.keyPartReq);
+ string currPartId = getDataItemValue(mtcParams.keyPartId);
+ string currProg = getDataItemValue(mtcParams.keyProgName);
#endif
// se ho un contapezzi... processo...
@@ -969,7 +952,6 @@ namespace IOB_WIN
}
}
}
-
///
/// Effettua lettura semafori principale
/// Parametri da aggiornare x display in form
@@ -990,9 +972,10 @@ namespace IOB_WIN
decodeToBaseBitmap();
reportRawInput(ref currDispData);
}
- catch
+ catch (Exception exc)
{
currDispData.semIn = Semaforo.SR;
+ lgError($"Eccezione in readSemafori:{Environment.NewLine}{exc}");
}
}
///
@@ -1031,9 +1014,6 @@ namespace IOB_WIN
// init a zero...
B_input = 0;
-
- // DA RIVEDERE con conf json x decodificare stream MTC --> segnali macchina
-
/* -----------------------------------------------------
* bitmap MAPO
* B0: POWER_ON
@@ -1084,21 +1064,18 @@ namespace IOB_WIN
*
----------------------------------------------------- */
- // Controllo booleano PING e POWERON...
- bool checkPing = (testPingMachine == IPStatus.Success);
- string currPowerOn = "";
MtcDataItemExt currMTC_DI = null;
- try
- {
- currMTC_DI = dataItemMem["POWER"];
- currPowerOn = currMTC_DI.value;
- }
- catch (Exception exc)
- {
- Logging.Instance.Error($"decodeToBaseBitmap 01{Environment.NewLine}{exc}");
- }
- bool checkPowerOn = (currPowerOn == "ON");
+ // Controllo booleano PING e POWERON...
+ string currPowerOn = getDataItemValue(mtcParams.condPowerOn.keyName);
+ // se valido il check ping lo eseguo... altrimenti lo do x buono
+ bool checkPing = !mtcParams.pingAsPowerOn;
+ if (!checkPing)
+ {
+ checkPing = (testPingMachine == IPStatus.Success);
+ }
+ // verifico da target value richiesto...
+ bool checkPowerOn = (currPowerOn == mtcParams.condPowerOn.targetValue);
// bit 0 (poweron) imposto a 1 SE pingo o PowerOn=="ON"...
B_input = (checkPing || checkPowerOn) ? 1 : 0;
@@ -1137,7 +1114,7 @@ namespace IOB_WIN
}
// controllo lavora...
- if (currRun == "AUTOMATIC" || currRun == "SEMI_AUTO")
+ if (currRun == "AUTOMATIC" || currRun == "SEMI_AUTO" || currRun == "SEMI_AUTOMATIC")
{
if (currExe == "ACTIVE")
{