diff --git a/IOB-UT-NEXT/ToMapo.cs b/IOB-UT-NEXT/ToMapo.cs
index a3909105..818341e4 100644
--- a/IOB-UT-NEXT/ToMapo.cs
+++ b/IOB-UT-NEXT/ToMapo.cs
@@ -723,7 +723,6 @@ namespace IOB_UT_NEXT
#endregion Public Properties
}
-
///
/// Classe gestione configurazione parametri specifici Rest Client da BaseParamConf
///
@@ -744,18 +743,6 @@ namespace IOB_UT_NEXT
///
public Dictionary CallList { get; set; } = new Dictionary();
-#if false
- ///
- /// Dizionario "tampone" di variabili da poter reimpiegare in chiamate successive (es token)
- ///
- public Dictionary TempVars { get; set; } = new Dictionary();
-
- ///
- /// Elenco delle chiamate VIETATE (con nota opzionale sul motivo)
- ///
- public Dictionary CallVeto { get; set; } = new Dictionary();
-#endif
-
public class CallStruc
{
///
diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs b/IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs
index 50f09ea3..0d5844d6 100644
--- a/IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs
+++ b/IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs
@@ -39,9 +39,16 @@ namespace IOB_WIN_NEXT.IobSiemens
///
public SiemensFapeV2(AdapterForm caller, IobConfiguration IOBConf) : base(caller, IOBConf)
{
- lgInfo("NEW IOB SIEMENS versione FAPE v2.0 - 2024+");
+ string sFapeVers = getOptPar("FAPE_VERS");
+ if (!string.IsNullOrEmpty(sFapeVers))
+ {
+ int.TryParse(sFapeVers, out FapeVers);
+ }
+ lgInfo($"NEW IOB SIEMENS versione FAPE v.{FapeVers} - 2024+");
}
+ private int FapeVers = 1;
+
#endregion Public Constructors
#region Public Enums
@@ -49,7 +56,7 @@ namespace IOB_WIN_NEXT.IobSiemens
///
/// Posizione sequenza ciclo standard punzonatrice
///
- public enum posizioneSequenza
+ public enum posSeq2024
{
CICLO_NON_ATTIVO_0 = 0,
CONTROLLO_TIPO_CARICO_5 = 5,
@@ -98,7 +105,18 @@ namespace IOB_WIN_NEXT.IobSiemens
///
/// Enum degli stati macchina (B0)
///
- public enum statoMacchina
+ public enum mainState
+ {
+ ND = 0,
+ Pronta = 1,
+ Lavora = 2,
+ Warning = 3,
+ Allarme = 4
+ }
+ ///
+ /// Enum degli stati macchina (B0)
+ ///
+ public enum stMacc2024
{
COMUNICAZIONE_ASSENTE = 0,
EMERGENZA_RIPRISTINATA = 5,
@@ -130,7 +148,7 @@ namespace IOB_WIN_NEXT.IobSiemens
SOVRAPRESSIONE_PUNZONATURA_1 = 210,
OLTRE_QUOTA_MASSIMA_PUNZONATURA_1 = 215,
SOVRAPRESSIONE_PUNZONATURA_2 = 220,
- OLTRE_QUOTA_MASSIMA_PUNZONATURA_1_225 = 225,
+ OLTRE_QUOTA_MASSIMA_PUNZONATURA_2 = 225,
SOVRAPRESSIONE_TRASLAZIONE_CARRO = 230,
TIMEOUT_AVVIO_DRIVE_POMPA_IDRAULICA = 235,
SOVRAPRESSIONE_MOVIMENTO_PUNZONE = 240,
@@ -143,7 +161,7 @@ namespace IOB_WIN_NEXT.IobSiemens
ALLARME_AREA_TRASLAZIONE_NON_LIBERA = 275,
ANOMALIA_SALITA_PUNZONATORE = 301,
ANOMALIA_TRASLAZIONE_CARRO = 303,
- ANOMALIA_ARRETRAMENTO_CONTRASTO = 305,
+ ANOMALIA_ARRETRAMENTO_CONTRASTO_305 = 305,
ANOMALIA_APERTURA_STAFFAGGIO = 307,
ANOMALIA_STAFFAGGIO_PEZZO = 403,
ANOMALIA_POSIZIONE_CONTRASTO = 405,
@@ -161,6 +179,18 @@ namespace IOB_WIN_NEXT.IobSiemens
#region Public Methods
+ ///
+ /// Stato impianto codificato come valore mainState
+ ///
+ protected ushort valMain = 0;
+ ///
+ /// Stato Dettagliato macchina
+ ///
+ protected ushort valStatus = 0;
+ ///
+ /// Posizione corrente ciclo
+ ///
+ protected ushort valPosit = 0;
///
/// Recupero dati override in formato dictionary
///
@@ -168,12 +198,41 @@ namespace IOB_WIN_NEXT.IobSiemens
public override Dictionary getDynData()
{
Dictionary outVal = new Dictionary();
- ushort valStatus = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray());
- ushort valPosit = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray());
- outVal.Add("CURR_STATO", ((statoMacchina)valStatus).ToString());
- outVal.Add("CURR_POSIT", ((posizioneSequenza)valPosit).ToString());
+ ExtractFapeData();
+ if (FapeVers > 2)
+ {
+ outVal.Add("CURR_LAMP", ((stMacc2024)valMain).ToString());
+ }
+ outVal.Add("CURR_STATO", ((stMacc2024)valStatus).ToString());
+ outVal.Add("CURR_POSIT", ((posSeq2024)valPosit).ToString());
return outVal;
}
+ ///
+ /// recupero dati specifici FAPE da struttura array memoria e versione adapter
+ ///
+ private void ExtractFapeData()
+ {
+ /* ----------------------------------------------
+ * NOTA:
+ * - v1 (2018): 2 blocchi memoria, area DB15
+ * - v2 (2024): 2 blocchi area DB17
+ * - v3 (2024): 3 blocchi area DB17 (MacroStato, stato, ciclo)
+ *
+ * decodifico secondo conf
+ * ----------------------------------------------*/
+ // leggo secondo versione adapter 1/2/3...
+ if (FapeVers <= 2)
+ {
+ valStatus = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray());
+ valPosit = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray());
+ }
+ else
+ {
+ valMain = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray());
+ valStatus = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray());
+ valPosit = S7.Net.Types.Word.FromByteArray(RawInput.Skip(4).Take(2).ToArray());
+ }
+ }
///
/// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid)
@@ -186,6 +245,160 @@ namespace IOB_WIN_NEXT.IobSiemens
#region Protected Methods
+ ///
+ /// Esegue decodificada stati in modalità "classica" (2018)
+ ///
+ ///
+ protected void DecodeV1(ref int B_input)
+ {
+ // FixMe ToDo: riportare stati 2018 e decodifica relativa...
+
+ // Guardo SOLO stato macchina V1 (2018)
+ stMacc2024 _stMacch = ((stMacc2024)valStatus);
+ // controllo stato macchina x impostare altri bit...
+ switch (_stMacch)
+ {
+ // emergenza? poweroff?
+ case stMacc2024.COMUNICAZIONE_ASSENTE:
+ case stMacc2024.EMERGENZA_RIPRISTINATA:
+ B_input += (1 << 5);
+ break;
+
+ case stMacc2024.MACCHINA_NON_ATTIVA:
+ case stMacc2024.MACCHINA_IN_POTENZA:
+ case stMacc2024.MACCHINA_PRONTA_PER_CICLO_LOCALE:
+ case stMacc2024.MACCHINA_PRONTA_PER_CICLO_CON_ROBOT:
+ case stMacc2024.CICLO_RESET_ATTIVO:
+ B_input = 1;
+ break;
+
+ case stMacc2024.CICLO_AUTOMATICO_LOCALE_ATTIVO:
+ case stMacc2024.CICLO_AUTOMATICO_CON_ROBOT_ATTIVO:
+ B_input += (1 << 1);
+ break;
+
+ case stMacc2024.ALLARME_DRIVE_POMPA_IDRAULICA:
+ case stMacc2024.ALLARME_AREA_TRASLAZIONE_NON_LIBERA:
+ case stMacc2024.ANOMALIA_ALIMENTAZIONE_PNEUMATICA:
+ case stMacc2024.ANOMALIA_APERTURA_STAFFAGGIO:
+ case stMacc2024.ANOMALIA_ARRETRAMENTO_CONTRASTO_305:
+ case stMacc2024.ANOMALIA_ARRETRAMENTO_CONTRASTO_413:
+ case stMacc2024.ANOMALIA_DISATTIVAZIONE_DRIVE_POMPA:
+ case stMacc2024.ANOMALIA_POSIZIONE_CONTRASTO:
+ case stMacc2024.ANOMALIA_POSIZIONE_PER_CARICO_ROBOT:
+ case stMacc2024.ANOMALIA_PUNZONATURA_1:
+ case stMacc2024.ANOMALIA_PUNZONATURA_2:
+ case stMacc2024.ANOMALIA_SALITA_PUNZONATORE:
+ case stMacc2024.ANOMALIA_SALITA_STAFFAGGIO:
+ case stMacc2024.ANOMALIA_STAFFAGGIO_PEZZO:
+ case stMacc2024.LIVELLO_OLIO_BASSO_LUBRIFICA_CILINDRO:
+ case stMacc2024.LIVELLO_OLIO_BASSO_LUBRIFICA_PEZZO:
+ case stMacc2024.SOVRAPRESSIONE_MOVIMENTO_PUNZONE:
+ case stMacc2024.SOVRAPRESSIONE_PUNZONATURA_1:
+ case stMacc2024.SOVRAPRESSIONE_PUNZONATURA_2:
+ case stMacc2024.SOVRAPRESSIONE_TRASLAZIONE_CARRO:
+ case stMacc2024.TIMEOUT_AVVIO_DRIVE_POMPA_IDRAULICA:
+ case stMacc2024.TIMEOUT_LUBRIFICAZIONE_CILINDRO:
+ B_input += (1 << 3);
+ break;
+
+ case stMacc2024.MACCHINA_IN_MANUALE:
+ case stMacc2024.ATTESA_AREA_TRASLAZIONE_LIBERA:
+ case stMacc2024.ATTESA_ASSE_PUNZONATURA_ALTO:
+ case stMacc2024.ATTESA_BARRIERE_LIBERE:
+ case stMacc2024.ATTESA_BLOCCAGGIO_PEZZO:
+ case stMacc2024.ATTESA_BLOCCAGGIO_PEZZO_ALTO:
+ case stMacc2024.ATTESA_BLOCCAGGIO_PORTELLO_ANTERIORE:
+ case stMacc2024.ATTESA_CARRO_IN_POSIZIONE_1:
+ case stMacc2024.ATTESA_CHIUSURA_PORTELLO_ROBOT:
+ case stMacc2024.ATTESA_CONTRASTO_PEZZO_DISINSERITO:
+ case stMacc2024.ATTESA_RILASCIO_PULSANTE_RESET:
+ case stMacc2024.ATTESA_ROBOT_FUORI_INGOMBRO:
+ case stMacc2024.ATTESA_TERMINE_CICLO_RESET:
+ B_input += (1 << 4);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ ///
+ /// Esegue decodificada stati in modalità "v2" (2024) con 2 valori senza macro stato
+ ///
+ ///
+ protected void DecodeV2(ref int B_input)
+ {
+ // Guardo SOLO stato macchina V2 (2024)
+ stMacc2024 _stMacch = ((stMacc2024)valStatus);
+
+ // controllo stato macchina x impostare altri bit... semplificato sui VALORI interi val status...
+
+ // da 00..50 -> pronta NON faccio nulla
+ if(valStatus < 51)
+ {
+ //B_input = 1;
+ }
+ // lavora
+ else if (valStatus >= 51 && valStatus < 100)
+ {
+ B_input += (1 << 1);
+ }
+ // manuale/warning
+ else if (valStatus >= 100 && valStatus < 199)
+ {
+ B_input += (1 << 3);
+ }
+ // allarme
+ else if (valStatus >= 200)
+ {
+ B_input += (1 << 4);
+ }
+
+ // controllo COMUNQUE emergenza premuta...
+ if (_stMacch == stMacc2024.MACCHINA_NON_ATTIVA)
+ {
+ B_input += (1 << 5);
+ }
+ }
+
+ ///
+ /// Esegue decodificada stati in modalità "v3" (2024) con 3 valori guardando SOLO macro stato
+ ///
+ ///
+ protected void DecodeV3(ref int B_input)
+ {
+ // Guardo SOLO stato MAIN V3 (2024)
+ mainState _stMain = ((mainState)valMain);
+ stMacc2024 _stMacch = ((stMacc2024)valStatus);
+
+ // controllo stato macchina x impostare altri bit...
+ switch (_stMain)
+ {
+ case mainState.Pronta:
+ break;
+ case mainState.Lavora:
+ B_input += (1 << 1);
+ break;
+ case mainState.Warning:
+ B_input += (1 << 4);
+ break;
+ case mainState.Allarme:
+ B_input += (1 << 3);
+ break;
+ case mainState.ND:
+ default:
+ break;
+ }
+
+ // controllo COMUNQUE emergenza premuta...
+ if(_stMacch == stMacc2024.MACCHINA_NON_ATTIVA)
+ {
+ B_input += (1 << 5);
+ }
+
+ }
+
///
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
///
@@ -194,10 +407,10 @@ namespace IOB_WIN_NEXT.IobSiemens
// init a zero...
B_input = 0;
// FAPE: leggo i primi 2 WORD x decodifica stato e posizione...
- ushort valStatus = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray());
- ushort valPosit = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray());
- statoMacchina _stMacch = ((statoMacchina)valStatus);
- posizioneSequenza _posSeq = ((posizioneSequenza)valPosit);
+ ExtractFapeData();
+ mainState _stMain = ((mainState)valMain);
+ stMacc2024 _stMacch = ((stMacc2024)valStatus);
+ posSeq2024 _posSeq = ((posSeq2024)valPosit);
/* -----------------------------------------------------
* bitmap MAPO - 47
@@ -211,72 +424,24 @@ namespace IOB_WIN_NEXT.IobSiemens
// bit 0 (poweron) imposto a 1 SE connected...
B_input = currPLC.IsConnected ? 1 : 0;
- // controllo stato macchina x impostare altri bit...
- switch (_stMacch)
+
+ // verifico versione decodifica da + recente a + vecchia...
+ if (FapeVers == 3)
{
- // emergenza? poweroff?
- case statoMacchina.COMUNICAZIONE_ASSENTE:
- case statoMacchina.EMERGENZA_RIPRISTINATA:
- B_input += (1 << 5);
- break;
-
- case statoMacchina.MACCHINA_NON_ATTIVA:
- case statoMacchina.MACCHINA_IN_POTENZA:
- case statoMacchina.MACCHINA_PRONTA_PER_CICLO_LOCALE:
- case statoMacchina.MACCHINA_PRONTA_PER_CICLO_CON_ROBOT:
- case statoMacchina.CICLO_RESET_ATTIVO:
- B_input = 1;
- break;
-
- case statoMacchina.CICLO_AUTOMATICO_LOCALE_ATTIVO:
- case statoMacchina.CICLO_AUTOMATICO_CON_ROBOT_ATTIVO:
- B_input += (1 << 1);
- break;
-
- case statoMacchina.ALLARME_DRIVE_POMPA_IDRAULICA:
- case statoMacchina.ALLARME_AREA_TRASLAZIONE_NON_LIBERA:
- case statoMacchina.ANOMALIA_ALIMENTAZIONE_PNEUMATICA:
- case statoMacchina.ANOMALIA_APERTURA_STAFFAGGIO:
- case statoMacchina.ANOMALIA_ARRETRAMENTO_CONTRASTO:
- case statoMacchina.ANOMALIA_ARRETRAMENTO_CONTRASTO_413:
- case statoMacchina.ANOMALIA_DISATTIVAZIONE_DRIVE_POMPA:
- case statoMacchina.ANOMALIA_POSIZIONE_CONTRASTO:
- case statoMacchina.ANOMALIA_POSIZIONE_PER_CARICO_ROBOT:
- case statoMacchina.ANOMALIA_PUNZONATURA_1:
- case statoMacchina.ANOMALIA_PUNZONATURA_2:
- case statoMacchina.ANOMALIA_SALITA_PUNZONATORE:
- case statoMacchina.ANOMALIA_SALITA_STAFFAGGIO:
- case statoMacchina.ANOMALIA_STAFFAGGIO_PEZZO:
- case statoMacchina.LIVELLO_OLIO_BASSO_LUBRIFICA_CILINDRO:
- case statoMacchina.LIVELLO_OLIO_BASSO_LUBRIFICA_PEZZO:
- case statoMacchina.SOVRAPRESSIONE_MOVIMENTO_PUNZONE:
- case statoMacchina.SOVRAPRESSIONE_PUNZONATURA_1:
- case statoMacchina.SOVRAPRESSIONE_PUNZONATURA_2:
- case statoMacchina.SOVRAPRESSIONE_TRASLAZIONE_CARRO:
- case statoMacchina.TIMEOUT_AVVIO_DRIVE_POMPA_IDRAULICA:
- case statoMacchina.TIMEOUT_LUBRIFICAZIONE_CILINDRO:
- B_input += (1 << 3);
- break;
-
- case statoMacchina.MACCHINA_IN_MANUALE:
- case statoMacchina.ATTESA_AREA_TRASLAZIONE_LIBERA:
- case statoMacchina.ATTESA_ASSE_PUNZONATURA_ALTO:
- case statoMacchina.ATTESA_BARRIERE_LIBERE:
- case statoMacchina.ATTESA_BLOCCAGGIO_PEZZO:
- case statoMacchina.ATTESA_BLOCCAGGIO_PEZZO_ALTO:
- case statoMacchina.ATTESA_BLOCCAGGIO_PORTELLO_ANTERIORE:
- case statoMacchina.ATTESA_CARRO_IN_POSIZIONE_1:
- case statoMacchina.ATTESA_CHIUSURA_PORTELLO_ROBOT:
- case statoMacchina.ATTESA_CONTRASTO_PEZZO_DISINSERITO:
- case statoMacchina.ATTESA_RILASCIO_PULSANTE_RESET:
- case statoMacchina.ATTESA_ROBOT_FUORI_INGOMBRO:
- case statoMacchina.ATTESA_TERMINE_CICLO_RESET:
- B_input += (1 << 4);
- break;
-
- default:
- break;
+ DecodeV3(ref B_input);
}
+ else if (FapeVers == 2)
+ {
+ DecodeV2(ref B_input);
+ }
+ else
+ {
+ DecodeV1(ref B_input);
+ }
+
+ // FIXME ToDo !!! verificare da qui...
+
+
// procedo SOLO SE è enabled IOB
if (IobOnline)