Completata bozza (solo stato) della Fape V3/V2, da riunificare con V1... + decodifica allarmi
This commit is contained in:
@@ -723,7 +723,6 @@ namespace IOB_UT_NEXT
|
||||
#endregion Public Properties
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Classe gestione configurazione parametri specifici Rest Client da BaseParamConf
|
||||
/// </summary>
|
||||
@@ -744,18 +743,6 @@ namespace IOB_UT_NEXT
|
||||
/// </summary>
|
||||
public Dictionary<string, CallStruc> CallList { get; set; } = new Dictionary<string, CallStruc>();
|
||||
|
||||
#if false
|
||||
/// <summary>
|
||||
/// Dizionario "tampone" di variabili da poter reimpiegare in chiamate successive (es token)
|
||||
/// </summary>
|
||||
public Dictionary<string, string> TempVars { get; set; } = new Dictionary<string, string>();
|
||||
|
||||
/// <summary>
|
||||
/// Elenco delle chiamate VIETATE (con nota opzionale sul motivo)
|
||||
/// </summary>
|
||||
public Dictionary<string, string> CallVeto { get; set; } = new Dictionary<string, string>();
|
||||
#endif
|
||||
|
||||
public class CallStruc
|
||||
{
|
||||
/// <summary>
|
||||
|
||||
@@ -39,9 +39,16 @@ namespace IOB_WIN_NEXT.IobSiemens
|
||||
/// <param name="adpConf"></param>
|
||||
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
|
||||
/// <summary>
|
||||
/// Posizione sequenza ciclo standard punzonatrice
|
||||
/// </summary>
|
||||
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
|
||||
/// <summary>
|
||||
/// Enum degli stati macchina (B0)
|
||||
/// </summary>
|
||||
public enum statoMacchina
|
||||
public enum mainState
|
||||
{
|
||||
ND = 0,
|
||||
Pronta = 1,
|
||||
Lavora = 2,
|
||||
Warning = 3,
|
||||
Allarme = 4
|
||||
}
|
||||
/// <summary>
|
||||
/// Enum degli stati macchina (B0)
|
||||
/// </summary>
|
||||
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
|
||||
|
||||
/// <summary>
|
||||
/// Stato impianto codificato come valore mainState
|
||||
/// </summary>
|
||||
protected ushort valMain = 0;
|
||||
/// <summary>
|
||||
/// Stato Dettagliato macchina
|
||||
/// </summary>
|
||||
protected ushort valStatus = 0;
|
||||
/// <summary>
|
||||
/// Posizione corrente ciclo
|
||||
/// </summary>
|
||||
protected ushort valPosit = 0;
|
||||
/// <summary>
|
||||
/// Recupero dati override in formato dictionary
|
||||
/// </summary>
|
||||
@@ -168,12 +198,41 @@ namespace IOB_WIN_NEXT.IobSiemens
|
||||
public override Dictionary<string, string> getDynData()
|
||||
{
|
||||
Dictionary<string, string> outVal = new Dictionary<string, string>();
|
||||
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;
|
||||
}
|
||||
/// <summary>
|
||||
/// recupero dati specifici FAPE da struttura array memoria e versione adapter
|
||||
/// </summary>
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid)
|
||||
@@ -186,6 +245,160 @@ namespace IOB_WIN_NEXT.IobSiemens
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
/// Esegue decodificada stati in modalità "classica" (2018)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue decodificada stati in modalità "v2" (2024) con 2 valori senza macro stato
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue decodificada stati in modalità "v3" (2024) con 3 valori guardando SOLO macro stato
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||
/// </summary>
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user