Merge branch 'release/CitizenRest09'

This commit is contained in:
Samuele Locatelli
2024-11-15 10:55:53 +01:00
10 changed files with 716 additions and 272 deletions
+1 -1
View File
@@ -698,7 +698,7 @@ namespace IOB_UT_NEXT
}
/// <summary>
/// Classe conf x decodifica stsatus
/// Classe conf x decodifica status
/// </summary>
public class StatusItem : DynDataItem
{
-13
View File
@@ -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>
+7 -1
View File
@@ -30,7 +30,13 @@ namespace IOB_UT_NEXT
/// impiegato tipicamente per poter gestire scritture valori INT su CNC/PLC che non accettano stringhe (es FANUC)
/// </summary>
public Dictionary<string, string> mMapWriteLink { get; set; } = new Dictionary<string, string>();
/// <summary>
/// Dizionario di dizionari di decodifica, chiave è nome/tipo dizionario e poi dizionario da impiegare
/// Usato ad esempio x decodifica stati da valore intero o degli step di esecuzione di un ciclo (es Fape v2+)
/// </summary>
public Dictionary<string, Dictionary<string, string>> DataDecodMap { get; set; } = new Dictionary<string, Dictionary<string, string>>();
#if false
/// <summary>
/// Base del NameSpace usato per le funzionalità di translate (parametri ACT-SET), da inserire come PRE
+3
View File
@@ -51,6 +51,9 @@ BLINK_FILT=0
;BLINK_FILT=28
[OPTPAR]
;Fape vers: 1 originale, 2 = stato + ciclo, 3 = semafoto + stato + ciclo
FAPE_VERS=2
;FAPE_VERS=3
PZCOUNT_MODE=STD.DB17.DBDW6
PZ_GTOT_MADDR=STD.DB17.DBDW10
PZ_REQ_MADDR=STD.DB16.DBDW64
+113 -1
View File
@@ -35,7 +35,7 @@
"period": 60,
"factor": 1,
"displOrdinal": 13
},
}
},
"mMapWrite": {
"setArt": {
@@ -86,5 +86,117 @@
"factor": 1,
"displOrdinal": 3
}
},
"DataDecodMap": {
"StatoMacchina": {
"0": "COMUNICAZIONE ASSENTE",
"5": "5 EMERGENZA RIPRISTINATA",
"10": "10 MACCHINA IN POTENZA",
"15": "15 MACCHINA PRONTA PER CICLO LOCALE",
"20": "20 MACCHINA PRONTA PER CICLO CON ROBOT",
"25": "25 MACCHINA IN MANUALE",
"30": "30",
"35": "35",
"50": "50 CICLO RESET ATTIVO",
"55": "55 CICLO AUTOMATICO LOCALE ATTIVO",
"60": "60 CICLO AUTOMATICO CON ROBOT ATTIVO",
"65": "65",
"70": "70",
"100": "100 MANCANZA OLIO LUBRIFICAZIONE PEZZO",
"105": "105 MANCANZA OLIO LUBRIFICAZIONE CILINDRO",
"110": "110 ATTESA BARRIERE LIBERE",
"111": "111 ATTESA BLOCCAGGIO PORTELLO ANTERIORE",
"115": "115 ATTESA RILASCIO PULSANTE RESET",
"120": "120 ATTESA ASSE PUNZONATURA ALTO",
"125": "125 ATTESA BLOCCAGGIO PEZZO ALTO",
"126": "126 ATTESA BLOCCAGGIO PEZZO",
"130": "130 ATTESA CONTRASTO PEZZO DISINSERITO",
"135": "135 ATTESA CARRO IN POSIZIONE 1",
"140": "140 ATTESA CHIUSURA PORTELLO ROBOT",
"145": "145 ATTESA ROBOT FUORI INGOMBRO",
"150": "150 ATTESA TERMINE CICLO RESET",
"155": "155 TIMEOUT LUBRIFICAZIONE CILINDRO",
"160": "160 LIVELLO OLIO BASSO LUBRIFICA PEZZO",
"165": "165 LIVELLO OLIO BASSO LUBRIFICA CILINDRO",
"170": "170 ATTESA AREA TRASLAZIONE LIBERA",
"175": "175",
"200": "200",
"205": "205 ANOMALIA POSIZIONE PER CARICO ROBOT",
"210": "210 SOVRAPRESSIONE PUNZONATURA 1",
"215": "215 OLTRE QUOTA MASSIMA PUNZONATURA 1",
"220": "220 SOVRAPRESSIONE PUNZONATURA 2",
"225": "225 OLTRE QUOTA MASSIMA PUNZONATURA 1",
"230": "230 SOVRAPRESSIONE TRASLAZIONE CARRO",
"235": "235 TIMEOUT AVVIO DRIVE POMPA IDRAULICA",
"240": "240 SOVRAPRESSIONE MOVIMENTO PUNZONE",
"245": "245 ALLARME DRIVE POMPA IDRAULICA",
"250": "250 ANOMALIA ALIMENTAZIONE PNEUMATICA",
"255": "255 APERTURA ANOMALA PORTELLO ROBOT",
"260": "260 APERTURA ANOMALA PORTELLO ANTERIORE",
"265": "265 INTRUSIONE ANOMALA BARRIERE",
"270": "270 MACCHINA NON ATTIVA",
"275": "275 ALLARME AREA TRASLAZIONE NON LIBERA",
"280": "280",
"301": "301 ANOMALIA SALITA PUNZONATORE",
"302": "302",
"303": "303 ANOMALIA TRASLAZIONE CARRO",
"304": "304",
"305": "305 ANOMALIA ARRETRAMENTO CONTRASTO",
"306": "306",
"307": "307 ANOMALIA APERTURA STAFFAGGIO",
"403": "403 ANOMALIA STAFFAGGIO PEZZO",
"405": "405 ANOMALIA POSIZIONE CONTRASTO",
"407": "407 ANOMALIA PUNZONATURA 1",
"409": "409 ANOMALI TRASLAZIONE IN POSIZIONE 2",
"411": "411 ANOMALIA PUNZONATURA 2",
"413": "413 ANOMALIA ARRETRAMENTO CONTRASTO",
"415": "415 ANOMALIA SALITA STAFFAGGIO",
"417": "417 ANOMALI TRASLAZIONE IN POSIZIONE 1",
"419": "419 ANOMALIA DISATTIVAZIONE DRIVE POMPA"
},
"StepCiclo": {
"0": "CICLO NON ATTIVO",
"5": "CONTROLLO TIPO CARICO",
"10": "APERTURA PORTELLO ACCESSO AREA ROBOT",
"15": "ATTESA SCARICO CARICO PEZZO DA ROBOT",
"20": "ATTESA ROBOT FUORI AREA",
"25": "ATTESA CADUTA SEGNALE ROBOT FUORI AREA",
"30": "CHIUSURA PORTELLO ACCESSO AREA ROBOT",
"50": "FASE 1 STAFFAGGIO PEZZO",
"60": "FASE 2 POSIZIONAMENTO CONTRASTO PEZZO",
"69": "FASE 3 PUNZONATURA 1 LUBRIFICAZIONE PUNZONE",
"70": "FASE 3 PUNZONATURA 1 DISCESA RAPIDA",
"74": "FASE 3 PUNZONATURA 1 DISCESA LENTA",
"75": "FASE 3 PUNZONATURA 1 DISCESA LENTISSIMA",
"79": "FASE 3 PUNZONATURA 1 ARRESTO AZIONAMENTO",
"80": "FASE 3 PUNZONATURA 1 RITARDO PER RISALITA",
"85": "FASE 3 PUNZONATURA 1 SALITA LENTA",
"90": "FASE 3 PUNZONATURA 1 SALITA RAPIDA",
"95": "FASE 3 PUNZONATURA 1 SALITA FINALE",
"96": "FASE 3 PUNZONATURA 1 ARRESTO AZIONAMENTO",
"105": "FASE 4 TRASLAZIONE 1 RITARDO AVVIO",
"110": "FASE 4 TRASLAZIONE 1 MOVIMENTO SU PUNZONATURA 2",
"114": "FASE 4 TRASLAZIONE 1 ARRESTO AZIONAMENTO",
"115": "FASE 5 PUNZONATURA 2 RITARDO AVVIO",
"119": "FASE 5 PUNZONATURA 2 LUBRIFICAZIONE PUNZONE",
"120": "FASE 5 PUNZONATURA 2 DISCESA RAPIDA",
"124": "FASE 5 PUNZONATURA 2 DISCESA LENTA",
"125": "FASE 5 PUNZONATURA 2 DISCESA LENTISSIMA",
"126": "FASE 5 PUNZONATURA 2 ARRESTO AZIONAMENTO",
"130": "FASE 5 PUNZONATURA 2 RITARDO PER RISALITA",
"135": "FASE 5 PUNZONATURA 2 SALITA LENTA",
"140": "FASE 5 PUNZONATURA 2 SALITA RAPIDA",
"145": "FASE 5 PUNZONATURA 2 SALITA FINALE",
"146": "FASE 5 PUNZONATURA 2 ARRESTO AZIONAMENTO",
"155": "INCREMENTO CONTATORI PEZZI ESEGUITI",
"156": "FASE 6 TRASLAZIONE 2 RITARDO AVVIO",
"160": "FASE 6 TRASLAZIONE 2 MOVIMENTO SU PUNZONATURA 1",
"161": "FASE 6 TRASLAZIONE 2 ARRESTO AZIONAMENTO",
"165": "FASE 7 DISINSERIMENTO CONTRASTO",
"170": "FASE 8 DESTAFFAGGIO PEZZO",
"180": "DISATTIVAZIONE AZIONAMENTO",
"190": "VERIFICA RIAVVIO CICLO CON CARICO DA ROBOT",
"300": "CICLO TERMINATO"
}
}
}
+14 -14
View File
@@ -24,6 +24,18 @@
"factor": 1,
"displOrdinal": 6
},
"qtyReq": {
"name": "qtyReq",
"description": "Qty Richiesta",
"memAddr": "",
"tipoMem": "Int",
"index": 0,
"size": 4,
"func": "POINT",
"period": 60,
"factor": 1,
"displOrdinal": 4
},
"gLamp": {
"name": "gLamp",
"description": "Lamp G",
@@ -122,18 +134,6 @@
}
},
"mMapWrite": {
"qtyReq": {
"name": "qtyReq",
"description": "Qty Richiesta",
"memAddr": "",
"tipoMem": "Int",
"index": 0,
"size": 4,
"func": "POINT",
"period": 60,
"factor": 1,
"displOrdinal": 4
},
"setArt": {
"name": "setArt",
"description": "Articolo",
@@ -268,10 +268,10 @@
"OutVarName": "",
"ListPrevCall": [ "GetToken" ]
},
"SetNeededQuantity": {
"SetNeededQuantity_disab": {
"Method": "Post",
"Url": "SetNeededQuantity",
"Name": "Invio Qty Richiesta",
"Name": "Invio Qty Richiesta (disabilitato)",
"OutVarName": "",
"ListPrevCall": [ "GetToken" ]
},
+40 -10
View File
@@ -3,20 +3,50 @@
NAME=master
[SERVER]
MPIP=192.168.1.64
; Server Steamware
MPIP=10.74.82.218
MPURL=/MP/IO
CMDREBO=/IOB/sendRebootGateway?GWIP=
CMDIOB2CALL=/IOB/getIob2call?GWIP=
;Client Install
CLI_INST=SteamWareSim
[IOB]
;--- TEST SIMULAZIONE
STARTLIST=SIMUL_00
;--- TEST sul campo
; SIMULAZIONE verso server ufficio
;STARTLIST=SIMUL_01,SIMUL_02,SIMUL_03,SIMUL_04
;STARTLIST=PIZ09
;STARTLIST=VL25
;STARTLIST=SIMUL_03
;STARTLIST=GIACO_CEDAX_001
;STARTLIST=GIACO_ICOEL_002
;STARTLIST=GIACO_CENTERFRIGO
;STARTLIST=GIACO_NWSE
;STARTLIST=SIM_DP_01
;STARTLIST=WPS
;STARTLIST=FINASSI_HELPI_01
;STARTLIST=FINASSI_OMP_01
;STARTLIST=BAGLIETTO_CIMOLAI_01
;STARTLIST=GIACO_SAIM_003
;STARTLIST=PIZ09
;STARTLIST=IMI_RIMOR_SAB_01
;STARTLIST=IMI_RIMOR_SAB_02
;STARTLIST=IMI_RIMOR_VER_01
;STARTLIST=IMI_RIMOR_VER_02
;STARTLIST=IMI_PAMA_392
;STARTLIST=Tend_FIMAT_01
;STARTLIST=PIZ10
;STARTLIST=IMI_SOITAAB_Z2342_02
;STARTLIST=IMI_GOMBA
;STARTLIST=PING
;STARTLIST=SIMUL_02
;STARTLIST=SIM_DP_01
MAXCNC=10
;NB: mettere copy always ai file di conf x fare test...
;STARTLIST=FTP_SONATEST
;STARTLIST=SIMUL_01
STARTLIST=L020
; Tags manuali
[TAGS]
Customer=LVF
HostOS=WIN
HostName=Server-MAPO-IOB
HostAddr=192.168.1.208
MAXCNC=10
+11 -4
View File
@@ -87,13 +87,20 @@ namespace IOB_WIN_NEXT.IobRest
// faccio chiamata POST x invio
var rawResp = ExecuteCallPost(GetUrlResource("SetJobData"), jobPayload);
bool.TryParse(rawResp, out answ);
// se andata invio anche la qty richiesta...
// se andatae se ho la chaive x invio abilitata invio anche la qty richiesta...
if (answ)
{
jobPayload = JsonConvert.SerializeObject(qtyReq);
var rawRespQty = ExecuteCallPost(GetUrlResource("SetNeededQuantity"), jobPayload);
string urlNeedQty = GetUrlResource("SetNeededQuantity");
if (string.IsNullOrEmpty(urlNeedQty))
{
lgInfo($"Set NeedQty NON abilitato, non invio");
}
else
{
jobPayload = JsonConvert.SerializeObject(qtyReq);
var rawRespQty = ExecuteCallPost(GetUrlResource("SetNeededQuantity"), jobPayload);
}
}
//answ = true;
}
catch (Exception exc)
{
+24 -24
View File
@@ -38,12 +38,12 @@ namespace IOB_WIN_NEXT.IobSiemens
#endregion Public Constructors
#region Public Enums
#region private enums
/// <summary>
/// Posizione sequenza ciclo standard punzonatrice
/// </summary>
public enum posizioneSequenza
private enum posSeq2018
{
CICLO_AUTOMATICO_FERMO = 0,
CONTROLLO_MODO_OPERATIVO = 5,
@@ -73,7 +73,7 @@ namespace IOB_WIN_NEXT.IobSiemens
/// <summary>
/// Enum degli stati macchina (B0)
/// </summary>
public enum statoMacchina
private enum stMacc2018
{
COMUNICAZIONE_ASSENTE = 0,
EMERGENZA_INSERITA = 1,
@@ -93,7 +93,7 @@ namespace IOB_WIN_NEXT.IobSiemens
LIBERO = 15
}
#endregion Public Enums
#endregion private enums
#region Public Methods
@@ -106,8 +106,8 @@ namespace IOB_WIN_NEXT.IobSiemens
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());
outVal.Add("CURR_STATO", ((stMacc2018)valStatus).ToString());
outVal.Add("CURR_POSIT", ((posSeq2018)valPosit).ToString());
return outVal;
}
@@ -132,8 +132,8 @@ namespace IOB_WIN_NEXT.IobSiemens
// 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);
stMacc2018 _stMacch = ((stMacc2018)valStatus);
posSeq2018 _posSeq = ((posSeq2018)valPosit);
/* -----------------------------------------------------
* bitmap MAPO
@@ -150,41 +150,41 @@ namespace IOB_WIN_NEXT.IobSiemens
// controllo stato macchina x impostare altri bit...
switch (_stMacch)
{
case statoMacchina.EMERGENZA_INSERITA:
case stMacc2018.EMERGENZA_INSERITA:
B_input += (1 << 5);
break;
case statoMacchina.AVARIA_ARIA:
case statoMacchina.AVARIA_PRESSIONE_OLIO:
case statoMacchina.AVARIA_LIVELLO_OLIO:
case statoMacchina.AVARIA_TEMPERATURA_OLIO:
case stMacc2018.AVARIA_ARIA:
case stMacc2018.AVARIA_PRESSIONE_OLIO:
case stMacc2018.AVARIA_LIVELLO_OLIO:
case stMacc2018.AVARIA_TEMPERATURA_OLIO:
B_input += (1 << 3);
B_input += (1 << 6);
break;
case statoMacchina.AVARIA_MOTORE_POMPA_IDRAULICA:
case statoMacchina.AVARIA_MOTORE_RAFFREDDO_IDRAULICA:
case statoMacchina.COMUNICAZIONE_ASSENTE:
case statoMacchina.AVARIA_SINCRONISMO_PORTE:
case statoMacchina.AVARIA_LIBERA:
case statoMacchina.ATTIVAZIONE_IN_CORSO:
case stMacc2018.AVARIA_MOTORE_POMPA_IDRAULICA:
case stMacc2018.AVARIA_MOTORE_RAFFREDDO_IDRAULICA:
case stMacc2018.COMUNICAZIONE_ASSENTE:
case stMacc2018.AVARIA_SINCRONISMO_PORTE:
case stMacc2018.AVARIA_LIBERA:
case stMacc2018.ATTIVAZIONE_IN_CORSO:
B_input += (1 << 3);
break;
case statoMacchina.MODO_MANUALE_ATTREZZAGGIO:
case stMacc2018.MODO_MANUALE_ATTREZZAGGIO:
B_input += (1 << 4);
break;
case statoMacchina.CICLO_IN_CORSO:
case stMacc2018.CICLO_IN_CORSO:
B_input += (1 << 1);
break;
case statoMacchina.MODO_AUTOMATICO_LOCALE:
case statoMacchina.MODO_AUTOMATICO_ROBOT:
case stMacc2018.MODO_AUTOMATICO_LOCALE:
case stMacc2018.MODO_AUTOMATICO_ROBOT:
B_input += (1 << 7);
break;
case statoMacchina.LIBERO:
case stMacc2018.LIBERO:
default:
break;
}
+503 -204
View File
@@ -10,23 +10,41 @@ namespace IOB_WIN_NEXT.IobSiemens
* Controlli SIEMENS FAPE (es punzonatrice Tecnomeccanica di LVF)
* - basasto su SIEMENS
* - S7 vers 1200
* - V2.0 (2024): abilitata 1 area in lettura DB17 ed 1 in scrittura DB16
* - x poter funzionare --> protezione: meccanismi di collegamento / consenti put/get
* - lettura/scrittura aree di 2 DB cablate
*
* Versione 2024
* DB17 | Read seguenti byte:
* - B0, WORD, Stato Macchina Generale
* - B2, WORD, Posizione sequenza contatore
* - B4, WORD, contatore cicli eseguiti per lubrifica
* - B6, DWORD, contapezzi azzerabile da operatore
* - B10, DWORD, contapezzi ASSOLUTO
*
* DB16 | Write seguenti byte:
* - B0, STRING(30), Commessa
* - B32, STRING(30), Articolo
* - B64, DWORD, NumPezzi
* - B68, BOOL, Reset Contapezzi Parziale(autoresetta)
*
* V1.0 (2018):
* - abilitata 1 area in lettura DB15
* DB15 | Read seguenti byte:
* - B0, WORD, Stato Macchina Generale
* - B2, WORD, Posizione sequenza contatore
* - B4, WORD, contatore cicli eseguiti per lubrifica
* - B40, DWORD, contapezzi azzerabile da operatore
* - B44, DWORD, contapezzi ASSOLUTO
* - abilitata 1 area in scrittura DB16 (NON la usano)
*
* V2.0 (2024):
* - abilitata 1 area in lettura DB17
* DB17 v.2 | Read seguenti byte:
* - B0, WORD, Stato Macchina Generale
* - B2, WORD, Posizione sequenza contatore
* - B4, WORD, contatore cicli eseguiti per lubrifica
* - B6, DWORD, contapezzi azzerabile da operatore
* - B10, DWORD, contapezzi ASSOLUTO
*
* DB17 v.3 | Read seguenti byte:
* - B0, WORD, Semaforo Macchina
* - B2, WORD, Stato Macchina Generale
* - B4, WORD, Posizione sequenza contatore
* - B6, WORD, contatore cicli eseguiti per lubrifica
* - B8, DWORD, contapezzi azzerabile da operatore
* - B12, DWORD, contapezzi ASSOLUTO
*
* - abilitata 1 area in scrittura DB16
* DB16 | Write seguenti byte:
* - B0, STRING(30), Commessa
* - B32, STRING(30), Articolo
* - B64, DWORD, NumPezzi
* - B68, BOOL, Reset Contapezzi Parziale(autoresetta)
*
* -------------------------------------------------------------------------------- */
@@ -39,126 +57,45 @@ 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);
}
int yRef = FapeVers == 1 ? 2018 : 2024;
// inizializzo dizionari decodifica da conf json...
// cerco nella conf specifica...
if (memMap.DataDecodMap != null && memMap.DataDecodMap.Count > 0)
{
if (memMap.DataDecodMap.ContainsKey("StatoMacchina"))
{
DictState = memMap.DataDecodMap["StatoMacchina"];
}
else
{
lgError("Errore: missing DataDecodMap.StatoMacchina dict");
}
if (memMap.DataDecodMap.ContainsKey("StepCiclo"))
{
DictStCic = memMap.DataDecodMap["StepCiclo"];
}
else
{
lgError("Errore: missing DataDecodMap.StepCiclo dict");
}
}
else
{
lgInfo("Attenzione. non ho trovcato dizionari di decodifica (DataDecodMap) nel file json!");
}
lgInfo($"NEW IOB SIEMENS versione FAPE v.{FapeVers} - {yRef}");
}
private Dictionary<string, string> DictState = new Dictionary<string, string>();
private Dictionary<string, string> DictStCic = new Dictionary<string, string>();
#endregion Public Constructors
#region Public Enums
/// <summary>
/// Posizione sequenza ciclo standard punzonatrice
/// </summary>
public enum posizioneSequenza
{
CICLO_NON_ATTIVO_0 = 0,
CONTROLLO_TIPO_CARICO_5 = 5,
APERTURA_PORTELLO_ACCESSO_AREA_ROBOT_10 = 10,
ATTESA_SCARICO_CARICO_PEZZO_DA_ROBOT_15 = 15,
ATTESA_ROBOT_FUORI_AREA_20 = 20,
ATTESA_CADUTA_SEGNALE_ROBOT_FUORI_AREA_25 = 25,
CHIUSURA_PORTELLO_ACCESSO_AREA_ROBOT_30 = 30,
FASE_1_STAFFAGGIO_PEZZO_50 = 50,
FASE_2_POSIZIONAMENTO_CONTRASTO_PEZZO_60 = 60,
FASE_3_PUNZONATURA_1_LUBRIFICAZIONE_PUNZONE_69 = 69,
FASE_3_PUNZONATURA_1_DISCESA_RAPIDA_70 = 70,
FASE_3_PUNZONATURA_1_DISCESA_LENTA_74 = 74,
FASE_3_PUNZONATURA_1_DISCESA_LENTISSIMA_75 = 75,
FASE_3_PUNZONATURA_1_ARRESTO_AZIONAMENTO_79 = 79,
FASE_3_PUNZONATURA_1_RITARDO_PER_RISALITA_80 = 80,
FASE_3_PUNZONATURA_1_SALITA_LENTA_85 = 85,
FASE_3_PUNZONATURA_1_SALITA_RAPIDA_90 = 90,
FASE_3_PUNZONATURA_1_SALITA_FINALE_95 = 95,
FASE_3_PUNZONATURA_1_ARRESTO_AZIONAMENTO_96 = 96,
FASE_4_TRASLAZIONE_1_RITARDO_AVVIO_105 = 105,
FASE_4_TRASLAZIONE_1_MOVIMENTO_SU_PUNZONATURA_2_110 = 110,
FASE_4_TRASLAZIONE_1_ARRESTO_AZIONAMENTO_114 = 114,
FASE_5_PUNZONATURA_2_RITARDO_AVVIO_115 = 115,
FASE_5_PUNZONATURA_2_LUBRIFICAZIONE_PUNZONE_119 = 119,
FASE_5_PUNZONATURA_2_DISCESA_RAPIDA_120 = 120,
FASE_5_PUNZONATURA_2_DISCESA_LENTA_124 = 124,
FASE_5_PUNZONATURA_2_DISCESA_LENTISSIMA_125 = 125,
FASE_5_PUNZONATURA_2_ARRESTO_AZIONAMENTO_126 = 126,
FASE_5_PUNZONATURA_2_RITARDO_PER_RISALITA_130 = 130,
FASE_5_PUNZONATURA_2_SALITA_LENTA_135 = 135,
FASE_5_PUNZONATURA_2_SALITA_RAPIDA_140 = 140,
FASE_5_PUNZONATURA_2_SALITA_FINALE_145 = 145,
FASE_5_PUNZONATURA_2_ARRESTO_AZIONAMENTO_146 = 146,
INCREMENTO_CONTATORI_PEZZI_ESEGUITI_155 = 155,
FASE_6_TRASLAZIONE_2_RITARDO_AVVIO_156 = 156,
FASE_6_TRASLAZIONE_2_MOVIMENTO_SU_PUNZONATURA_1_160 = 160,
FASE_6_TRASLAZIONE_2_ARRESTO_AZIONAMENTO_161 = 161,
FASE_7_DISINSERIMENTO_CONTRASTO_165 = 165,
FASE_8_DESTAFFAGGIO_PEZZO_170 = 170,
DISATTIVAZIONE_AZIONAMENTO_180 = 180,
VERIFICA_RIAVVIO_CICLO_CON_CARICO_DA_ROBOT_190 = 190,
CICLO_TERMINATO_300 = 300
}
/// <summary>
/// Enum degli stati macchina (B0)
/// </summary>
public enum statoMacchina
{
COMUNICAZIONE_ASSENTE = 0,
EMERGENZA_RIPRISTINATA = 5,
MACCHINA_IN_POTENZA = 10,
MACCHINA_PRONTA_PER_CICLO_LOCALE = 15,
MACCHINA_PRONTA_PER_CICLO_CON_ROBOT = 20,
MACCHINA_IN_MANUALE = 25,
CICLO_RESET_ATTIVO = 50,
CICLO_AUTOMATICO_LOCALE_ATTIVO = 55,
CICLO_AUTOMATICO_CON_ROBOT_ATTIVO = 60,
MANCANZA_OLIO_LUBRIFICAZIONE_PEZZO = 100,
MANCANZA_OLIO_LUBRIFICAZIONE_CILINDRO = 105,
ATTESA_BARRIERE_LIBERE = 110,
ATTESA_BLOCCAGGIO_PORTELLO_ANTERIORE = 111,
ATTESA_RILASCIO_PULSANTE_RESET = 115,
ATTESA_ASSE_PUNZONATURA_ALTO = 120,
ATTESA_BLOCCAGGIO_PEZZO_ALTO = 125,
ATTESA_BLOCCAGGIO_PEZZO = 126,
ATTESA_CONTRASTO_PEZZO_DISINSERITO = 130,
ATTESA_CARRO_IN_POSIZIONE_1 = 135,
ATTESA_CHIUSURA_PORTELLO_ROBOT = 140,
ATTESA_ROBOT_FUORI_INGOMBRO = 145,
ATTESA_TERMINE_CICLO_RESET = 150,
TIMEOUT_LUBRIFICAZIONE_CILINDRO = 155,
LIVELLO_OLIO_BASSO_LUBRIFICA_PEZZO = 160,
LIVELLO_OLIO_BASSO_LUBRIFICA_CILINDRO = 165,
ATTESA_AREA_TRASLAZIONE_LIBERA = 170,
ANOMALIA_POSIZIONE_PER_CARICO_ROBOT = 205,
SOVRAPRESSIONE_PUNZONATURA_1 = 210,
OLTRE_QUOTA_MASSIMA_PUNZONATURA_1 = 215,
SOVRAPRESSIONE_PUNZONATURA_2 = 220,
OLTRE_QUOTA_MASSIMA_PUNZONATURA_1_225 = 225,
SOVRAPRESSIONE_TRASLAZIONE_CARRO = 230,
TIMEOUT_AVVIO_DRIVE_POMPA_IDRAULICA = 235,
SOVRAPRESSIONE_MOVIMENTO_PUNZONE = 240,
ALLARME_DRIVE_POMPA_IDRAULICA = 245,
ANOMALIA_ALIMENTAZIONE_PNEUMATICA = 250,
APERTURA_ANOMALA_PORTELLO_ROBOT = 255,
APERTURA_ANOMALA_PORTELLO_ANTERIORE = 260,
INTRUSIONE_ANOMALA_BARRIERE = 265,
MACCHINA_NON_ATTIVA = 270,
ALLARME_AREA_TRASLAZIONE_NON_LIBERA = 275,
ANOMALIA_SALITA_PUNZONATORE = 301,
ANOMALIA_TRASLAZIONE_CARRO = 303,
ANOMALIA_ARRETRAMENTO_CONTRASTO = 305,
ANOMALIA_APERTURA_STAFFAGGIO = 307,
ANOMALIA_STAFFAGGIO_PEZZO = 403,
ANOMALIA_POSIZIONE_CONTRASTO = 405,
ANOMALIA_PUNZONATURA_1 = 407,
ANOMALI_TRASLAZIONE_IN_POSIZIONE_2 = 409,
ANOMALIA_PUNZONATURA_2 = 411,
ANOMALIA_ARRETRAMENTO_CONTRASTO_413 = 413,
ANOMALIA_SALITA_STAFFAGGIO = 415,
ANOMALI_TRASLAZIONE_IN_POSIZIONE_1 = 417,
ANOMALIA_DISATTIVAZIONE_DRIVE_POMPA = 419,
}
#endregion Public Enums
#region Public Methods
/// <summary>
@@ -168,10 +105,55 @@ 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();
string curState = "";
string curPosiz = "";
// rivedere da conf estesa decodifica?!?
if (FapeVers == 3)
{
// stato
curState = $"{valState}";
// cerco nella conf specifica...
if (DictState.Count > 0 && DictState.ContainsKey($"{valState}"))
{
curState = DictState[$"{valState}"];
}
// posizione
curPosiz = $"{valStepCic}";
// cerco nella conf specifica...
if (DictStCic.Count > 0 && DictStCic.ContainsKey($"{valStepCic}"))
{
curPosiz = DictStCic[$"{valStepCic}"];
}
}
// se non trovato ancora..
if (string.IsNullOrEmpty(curState) || string.IsNullOrEmpty(curPosiz))
{
if (FapeVers == 1)
{
curState = ((stMacc2018)valState).ToString();
curPosiz = ((posSeq2018)valStepCic).ToString();
//outVal.Add("CURR_STATO", ((stMacc2018)valState).ToString());
//outVal.Add("CURR_POSIT", ((posSeq2018)valStepCic).ToString());
}
else
{
curState = ((stMacc2024)valState).ToString();
curPosiz = ((posSeq2024)valStepCic).ToString();
//outVal.Add("CURR_STATO", ((stMacc2024)valState).ToString());
//outVal.Add("CURR_POSIT", ((posSeq2024)valStepCic).ToString());
}
}
// salvo valori!
outVal.Add("CURR_STATO", curState);
outVal.Add("CURR_POSIT", curPosiz);
// aggiungo main state se disponibile...
if (FapeVers > 2)
{
outVal.Add("CURR_LAMP", ((mainState)valMain).ToString());
}
return outVal;
}
@@ -184,6 +166,25 @@ namespace IOB_WIN_NEXT.IobSiemens
#endregion Public Methods
#region Protected Fields
/// <summary>
/// Stato impianto codificato come valore mainState
/// </summary>
protected ushort valMain = 0;
/// <summary>
/// Posizione corrente ciclo
/// </summary>
protected ushort valStepCic = 0;
/// <summary>
/// Stato Dettagliato macchina
/// </summary>
protected ushort valState = 0;
#endregion Protected Fields
#region Protected Methods
/// <summary>
@@ -194,10 +195,12 @@ 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();
#if false
mainState _stMain = ((mainState)valMain);
stMacc2024 _stMacch = ((stMacc2024)valStatus);
posSeq2024 _posSeq = ((posSeq2024)valPosit);
#endif
/* -----------------------------------------------------
* bitmap MAPO - 47
@@ -211,72 +214,22 @@ 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)
@@ -376,6 +329,352 @@ namespace IOB_WIN_NEXT.IobSiemens
}
}
/// <summary>
/// Esegue decodificada stati in modalità "classica" (2018)
/// </summary>
/// <returns></returns>
protected void DecodeV1(ref int B_input)
{
// Guardo SOLO stato macchina V1 (2018)
stMacc2018 _stMacch = ((stMacc2018)valState);
// controllo stato macchina x impostare altri bit...
switch (_stMacch)
{
case stMacc2018.EMERGENZA_INSERITA:
B_input += (1 << 5);
break;
case stMacc2018.AVARIA_ARIA:
case stMacc2018.AVARIA_PRESSIONE_OLIO:
case stMacc2018.AVARIA_LIVELLO_OLIO:
case stMacc2018.AVARIA_TEMPERATURA_OLIO:
B_input += (1 << 3);
B_input += (1 << 6);
break;
case stMacc2018.AVARIA_MOTORE_POMPA_IDRAULICA:
case stMacc2018.AVARIA_MOTORE_RAFFREDDO_IDRAULICA:
case stMacc2018.COMUNICAZIONE_ASSENTE:
case stMacc2018.AVARIA_SINCRONISMO_PORTE:
case stMacc2018.AVARIA_LIBERA:
case stMacc2018.ATTIVAZIONE_IN_CORSO:
B_input += (1 << 3);
break;
case stMacc2018.MODO_MANUALE_ATTREZZAGGIO:
B_input += (1 << 4);
break;
case stMacc2018.CICLO_IN_CORSO:
B_input += (1 << 1);
break;
case stMacc2018.MODO_AUTOMATICO_LOCALE:
case stMacc2018.MODO_AUTOMATICO_ROBOT:
B_input += (1 << 7);
break;
case stMacc2018.LIBERO:
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)valState);
// controllo stato macchina x impostare altri bit... semplificato sui VALORI interi val status...
// da 00..50 -> pronta NON faccio nulla
if (valState < 51)
{
//B_input = 1;
}
// lavora
else if (valState >= 51 && valState < 100)
{
B_input += (1 << 1);
}
// manuale/warning
else if (valState >= 100 && valState < 199)
{
B_input += (1 << 3);
}
// allarme
else if (valState >= 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)valState);
// 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);
}
}
#endregion Protected Methods
#region Private Fields
private int FapeVers = 1;
#endregion Private Fields
#region Private Enums
/// <summary>
/// Enum degli stati macchina (B0)
/// </summary>
private enum mainState
{
ND = 0,
Pronta = 1,
Lavora = 2,
Warning = 3,
Allarme = 4
}
/// <summary>
/// Posizione sequenza ciclo standard punzonatrice
/// </summary>
private enum posSeq2018
{
CICLO_AUTOMATICO_FERMO = 0,
CONTROLLO_MODO_OPERATIVO = 5,
MODO_ATTIVO_CON_ROBOT = 8,
SBLOCCAGGIO_PEZZO = 10,
APERTURA_PORTELLO_ROBOT = 11,
CONSENSO_ACCESSO_AL_ROBOT = 12,
CARICO_ROBOT_IN_CORSO = 14,
CARICO_ROBOT_CONCLUSO = 16,
CHIUSURA_PORTELLO_ROBOT = 18,
VERIFICA_POSIZIONE_CARRI = 20,
BLOCCAGGIO_PEZZO = 22,
ATTESA_CARRO_A_DESTRA = 24,
DISCESA_RAPIDO_BROCCIATURA = 25,
CICLO_DI_BROCCIATURA = 26,
RITORNO_BROCCIATRICE = 28,
COMANDO_CARRO_A_SINISTRA = 30,
CICLO_DI_ALESATURA = 32,
RITORNO_CARRO_ALESATURA = 34,
COMANDO_CARRO_A_DESTRA = 36,
INCREMENTO_CONTAPEZZI = 38,
CONTROLLO_TIME_OUT_CICLO = 40,
RILANCIO_CICLO_F42 = 42,
ATTESA_FINE_CICLO = 45
}
/// <summary>
/// Posizione sequenza ciclo standard punzonatrice
/// </summary>
private enum posSeq2024
{
CICLO_NON_ATTIVO_0 = 0,
CONTROLLO_TIPO_CARICO_5 = 5,
APERTURA_PORTELLO_ACCESSO_AREA_ROBOT_10 = 10,
ATTESA_SCARICO_CARICO_PEZZO_DA_ROBOT_15 = 15,
ATTESA_ROBOT_FUORI_AREA_20 = 20,
ATTESA_CADUTA_SEGNALE_ROBOT_FUORI_AREA_25 = 25,
CHIUSURA_PORTELLO_ACCESSO_AREA_ROBOT_30 = 30,
FASE_1_STAFFAGGIO_PEZZO_50 = 50,
FASE_2_POSIZIONAMENTO_CONTRASTO_PEZZO_60 = 60,
FASE_3_PUNZONATURA_1_LUBRIFICAZIONE_PUNZONE_69 = 69,
FASE_3_PUNZONATURA_1_DISCESA_RAPIDA_70 = 70,
FASE_3_PUNZONATURA_1_DISCESA_LENTA_74 = 74,
FASE_3_PUNZONATURA_1_DISCESA_LENTISSIMA_75 = 75,
FASE_3_PUNZONATURA_1_ARRESTO_AZIONAMENTO_79 = 79,
FASE_3_PUNZONATURA_1_RITARDO_PER_RISALITA_80 = 80,
FASE_3_PUNZONATURA_1_SALITA_LENTA_85 = 85,
FASE_3_PUNZONATURA_1_SALITA_RAPIDA_90 = 90,
FASE_3_PUNZONATURA_1_SALITA_FINALE_95 = 95,
FASE_3_PUNZONATURA_1_ARRESTO_AZIONAMENTO_96 = 96,
FASE_4_TRASLAZIONE_1_RITARDO_AVVIO_105 = 105,
FASE_4_TRASLAZIONE_1_MOVIMENTO_SU_PUNZONATURA_2_110 = 110,
FASE_4_TRASLAZIONE_1_ARRESTO_AZIONAMENTO_114 = 114,
FASE_5_PUNZONATURA_2_RITARDO_AVVIO_115 = 115,
FASE_5_PUNZONATURA_2_LUBRIFICAZIONE_PUNZONE_119 = 119,
FASE_5_PUNZONATURA_2_DISCESA_RAPIDA_120 = 120,
FASE_5_PUNZONATURA_2_DISCESA_LENTA_124 = 124,
FASE_5_PUNZONATURA_2_DISCESA_LENTISSIMA_125 = 125,
FASE_5_PUNZONATURA_2_ARRESTO_AZIONAMENTO_126 = 126,
FASE_5_PUNZONATURA_2_RITARDO_PER_RISALITA_130 = 130,
FASE_5_PUNZONATURA_2_SALITA_LENTA_135 = 135,
FASE_5_PUNZONATURA_2_SALITA_RAPIDA_140 = 140,
FASE_5_PUNZONATURA_2_SALITA_FINALE_145 = 145,
FASE_5_PUNZONATURA_2_ARRESTO_AZIONAMENTO_146 = 146,
INCREMENTO_CONTATORI_PEZZI_ESEGUITI_155 = 155,
FASE_6_TRASLAZIONE_2_RITARDO_AVVIO_156 = 156,
FASE_6_TRASLAZIONE_2_MOVIMENTO_SU_PUNZONATURA_1_160 = 160,
FASE_6_TRASLAZIONE_2_ARRESTO_AZIONAMENTO_161 = 161,
FASE_7_DISINSERIMENTO_CONTRASTO_165 = 165,
FASE_8_DESTAFFAGGIO_PEZZO_170 = 170,
DISATTIVAZIONE_AZIONAMENTO_180 = 180,
VERIFICA_RIAVVIO_CICLO_CON_CARICO_DA_ROBOT_190 = 190,
CICLO_TERMINATO_300 = 300
}
/// <summary>
/// Enum degli stati macchina (B0)
/// </summary>
private enum stMacc2018
{
COMUNICAZIONE_ASSENTE = 0,
EMERGENZA_INSERITA = 1,
AVARIA_ARIA = 2,
AVARIA_PRESSIONE_OLIO = 3,
AVARIA_LIVELLO_OLIO = 4,
AVARIA_TEMPERATURA_OLIO = 5,
AVARIA_MOTORE_POMPA_IDRAULICA = 6,
AVARIA_MOTORE_RAFFREDDO_IDRAULICA = 7,
AVARIA_SINCRONISMO_PORTE = 8,
AVARIA_LIBERA = 9,
ATTIVAZIONE_IN_CORSO = 10,
MODO_MANUALE_ATTREZZAGGIO = 11,
MODO_AUTOMATICO_LOCALE = 12,
MODO_AUTOMATICO_ROBOT = 13,
CICLO_IN_CORSO = 14,
LIBERO = 15
}
/// <summary>
/// Enum degli stati macchina (B0)
/// </summary>
private enum stMacc2024
{
COMUNICAZIONE_ASSENTE = 0,
EMERGENZA_RIPRISTINATA = 5,
MACCHINA_IN_POTENZA = 10,
MACCHINA_PRONTA_PER_CICLO_LOCALE = 15,
MACCHINA_PRONTA_PER_CICLO_CON_ROBOT = 20,
MACCHINA_IN_MANUALE = 25,
CICLO_RESET_ATTIVO = 50,
CICLO_AUTOMATICO_LOCALE_ATTIVO = 55,
CICLO_AUTOMATICO_CON_ROBOT_ATTIVO = 60,
MANCANZA_OLIO_LUBRIFICAZIONE_PEZZO = 100,
MANCANZA_OLIO_LUBRIFICAZIONE_CILINDRO = 105,
ATTESA_BARRIERE_LIBERE = 110,
ATTESA_BLOCCAGGIO_PORTELLO_ANTERIORE = 111,
ATTESA_RILASCIO_PULSANTE_RESET = 115,
ATTESA_ASSE_PUNZONATURA_ALTO = 120,
ATTESA_BLOCCAGGIO_PEZZO_ALTO = 125,
ATTESA_BLOCCAGGIO_PEZZO = 126,
ATTESA_CONTRASTO_PEZZO_DISINSERITO = 130,
ATTESA_CARRO_IN_POSIZIONE_1 = 135,
ATTESA_CHIUSURA_PORTELLO_ROBOT = 140,
ATTESA_ROBOT_FUORI_INGOMBRO = 145,
ATTESA_TERMINE_CICLO_RESET = 150,
TIMEOUT_LUBRIFICAZIONE_CILINDRO = 155,
LIVELLO_OLIO_BASSO_LUBRIFICA_PEZZO = 160,
LIVELLO_OLIO_BASSO_LUBRIFICA_CILINDRO = 165,
ATTESA_AREA_TRASLAZIONE_LIBERA = 170,
ANOMALIA_POSIZIONE_PER_CARICO_ROBOT = 205,
SOVRAPRESSIONE_PUNZONATURA_1 = 210,
OLTRE_QUOTA_MASSIMA_PUNZONATURA_1 = 215,
SOVRAPRESSIONE_PUNZONATURA_2 = 220,
OLTRE_QUOTA_MASSIMA_PUNZONATURA_2 = 225,
SOVRAPRESSIONE_TRASLAZIONE_CARRO = 230,
TIMEOUT_AVVIO_DRIVE_POMPA_IDRAULICA = 235,
SOVRAPRESSIONE_MOVIMENTO_PUNZONE = 240,
ALLARME_DRIVE_POMPA_IDRAULICA = 245,
ANOMALIA_ALIMENTAZIONE_PNEUMATICA = 250,
APERTURA_ANOMALA_PORTELLO_ROBOT = 255,
APERTURA_ANOMALA_PORTELLO_ANTERIORE = 260,
INTRUSIONE_ANOMALA_BARRIERE = 265,
MACCHINA_NON_ATTIVA = 270,
ALLARME_AREA_TRASLAZIONE_NON_LIBERA = 275,
ANOMALIA_SALITA_PUNZONATORE = 301,
ANOMALIA_TRASLAZIONE_CARRO = 303,
ANOMALIA_ARRETRAMENTO_CONTRASTO_305 = 305,
ANOMALIA_APERTURA_STAFFAGGIO = 307,
ANOMALIA_STAFFAGGIO_PEZZO = 403,
ANOMALIA_POSIZIONE_CONTRASTO = 405,
ANOMALIA_PUNZONATURA_1 = 407,
ANOMALI_TRASLAZIONE_IN_POSIZIONE_2 = 409,
ANOMALIA_PUNZONATURA_2 = 411,
ANOMALIA_ARRETRAMENTO_CONTRASTO_413 = 413,
ANOMALIA_SALITA_STAFFAGGIO = 415,
ANOMALI_TRASLAZIONE_IN_POSIZIONE_1 = 417,
ANOMALIA_DISATTIVAZIONE_DRIVE_POMPA = 419,
}
#endregion Private Enums
#region Private Methods
/// <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)
{
valState = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray());
valStepCic = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray());
}
else
{
valMain = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray());
valState = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray());
valStepCic = S7.Net.Types.Word.FromByteArray(RawInput.Skip(4).Take(2).ToArray());
}
}
#endregion Private Methods
}
}