diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs
index c511feea..2cabdbc5 100644
--- a/MapoDb/DataLayer.cs
+++ b/MapoDb/DataLayer.cs
@@ -477,12 +477,13 @@ namespace MapoDb
if (DataLayer.isMulti(idxMacchina))
{
// inizio preprocessing
-
+ string newVal = "";
+ // processo OGNI macchina a stati dell'impianto... (IdxMacchina e IdxMacchina#qualcosa...)
+ //foreach(){ !!!FARE!!!
+ newVal = preProcInput(idxMacchina, valore);
// ora processo e salvo il valore del microstato... INTERNAMENTE gestisce i casi DB/REDIS secondo necessità
- connDb.checkMicroStato(idxMacchina, valore, dataOraEvento, contatore);
-
- // ora processo i SUB-systems
-
+ connDb.checkMicroStato(idxMacchina, newVal, dataOraEvento, contatore);
+ //}!!!FARE!!!
}
else
{
@@ -518,12 +519,13 @@ namespace MapoDb
if (MapoDb.obj.isMulti(idxMacchina))
{
// inizio preprocessing
-
+ string newVal = "";
+ // processo OGNI macchina a stati dell'impianto... (IdxMacchina e IdxMacchina#qualcosa...)
+ //foreach(){ !!!FARE!!!
+ newVal = preProcInput(idxMacchina, valore);
// ora processo e salvo il valore del microstato...
- MapoDb.obj.checkMicroStato(idxMacchina, valore, dataOraEvento, contatore);
-
- // ora processo i SUB-systems
-
+ MapoDb.obj.checkMicroStato(idxMacchina, newVal, dataOraEvento, contatore);
+ //}!!!FARE!!!
}
else
{
@@ -558,6 +560,55 @@ namespace MapoDb
}
return answ;
}
+ ///
+ /// Calcola l'effettivo valore da passare alla macchina a stati INGRESSI data conf Macchine2FamigliaIngressi
+ ///
+ ///
+ ///
+ ///
+ private static string preProcInput(string idxMacchina, string valore)
+ {
+ string newVal = "";
+ try
+ {
+ // variabili
+ int valINT = 0;
+ int BitFilt = 0;
+ int BSR = 0;
+ bool ExplodeBit = false;
+ int newValInt = 0;
+ // recupero parametri...
+ int.TryParse(DataLayer.mDatiMacchinaVal(idxMacchina, "BitFilt"), out BitFilt);
+ int.TryParse(DataLayer.mDatiMacchinaVal(idxMacchina, "BSR"), out BSR);
+ Boolean.TryParse(DataLayer.mDatiMacchinaVal(idxMacchina, "ExplodeBit"), out ExplodeBit);
+ // recupero valore
+ valINT = int.Parse(valore, System.Globalization.NumberStyles.HexNumber);
+ // filtro
+ newValInt = utility.bMaskInt(valINT, BitFilt);
+ // effettuo eventuale BitShiftRight
+ if (BSR > 0)
+ {
+ newValInt = newValInt << BSR;
+ }
+ // effettuo eventuale esplosione in BIT esclusivi
+ if (ExplodeBit)
+ {
+ // esplodo a tanti BIT quanto è il MAX dei valori gestiti...
+
+ //... e poi a int...
+
+ }
+
+ // riconverto a STRING HEX!!!
+ newVal = newValInt.ToString("X");
+ }
+ catch
+ {
+ newVal = valore;
+ }
+
+ return newVal;
+ }
#region definizioni hash x REDIS
@@ -788,7 +839,7 @@ namespace MapoDb
}
try
{
- answ = Convert.ToBoolean(mDatiMacchinaVal(idxMacchina, "Multi"));
+ answ = Convert.ToBoolean(mDatiMacchinaVal(idxMacchina, "Multi") == "1");
}
catch
{ }
diff --git a/MapoDb/utility.cs b/MapoDb/utility.cs
index 63fee4f8..d70ac059 100644
--- a/MapoDb/utility.cs
+++ b/MapoDb/utility.cs
@@ -178,8 +178,16 @@ public class utility
}
return durataFormattata;
}
-
-
+ ///
+ /// Effettua la masking di un valore (INT) rispetto ad una BitMask (INT)
+ ///
+ /// Valore da filtrare
+ /// BitMask (espresso in valore INT: es 1001 --> 9)
+ ///
+ public static int bMaskInt(int valore, int bitMask)
+ {
+ return valore & bitMask;
+ }
#region Inizializzazione