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") {