diff --git a/IOB-UT-NEXT/Objects.cs b/IOB-UT-NEXT/Objects.cs index 0578a8a9..2b182b95 100644 --- a/IOB-UT-NEXT/Objects.cs +++ b/IOB-UT-NEXT/Objects.cs @@ -698,7 +698,7 @@ namespace IOB_UT_NEXT } /// - /// Classe conf x decodifica stsatus + /// Classe conf x decodifica status /// public class StatusItem : DynDataItem { 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-UT-NEXT/plcMemMapExt.cs b/IOB-UT-NEXT/plcMemMapExt.cs index c06ff608..6101c67c 100644 --- a/IOB-UT-NEXT/plcMemMapExt.cs +++ b/IOB-UT-NEXT/plcMemMapExt.cs @@ -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) /// public Dictionary mMapWriteLink { get; set; } = new Dictionary(); - + + /// + /// 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+) + /// + public Dictionary> DataDecodMap { get; set; } = new Dictionary>(); + #if false /// /// Base del NameSpace usato per le funzionalità di translate (parametri ACT-SET), da inserire come PRE diff --git a/IOB-WIN-NEXT/DATA/CONF/GT693.ini b/IOB-WIN-NEXT/DATA/CONF/GT693.ini index 2fff0a15..904ff547 100644 --- a/IOB-WIN-NEXT/DATA/CONF/GT693.ini +++ b/IOB-WIN-NEXT/DATA/CONF/GT693.ini @@ -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 diff --git a/IOB-WIN-NEXT/DATA/CONF/GT693.json b/IOB-WIN-NEXT/DATA/CONF/GT693.json index 3f78d461..9da38cbb 100644 --- a/IOB-WIN-NEXT/DATA/CONF/GT693.json +++ b/IOB-WIN-NEXT/DATA/CONF/GT693.json @@ -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" + } } } \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/L020.json b/IOB-WIN-NEXT/DATA/CONF/L020.json index ce86c879..0f79f121 100644 --- a/IOB-WIN-NEXT/DATA/CONF/L020.json +++ b/IOB-WIN-NEXT/DATA/CONF/L020.json @@ -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" ] }, diff --git a/IOB-WIN-NEXT/DATA/CONF/MAIN.ini b/IOB-WIN-NEXT/DATA/CONF/MAIN.ini index 0492ac95..f8878734 100644 --- a/IOB-WIN-NEXT/DATA/CONF/MAIN.ini +++ b/IOB-WIN-NEXT/DATA/CONF/MAIN.ini @@ -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 \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobRest/Citizen.cs b/IOB-WIN-NEXT/IobRest/Citizen.cs index 1c5c44a5..301246b9 100644 --- a/IOB-WIN-NEXT/IobRest/Citizen.cs +++ b/IOB-WIN-NEXT/IobRest/Citizen.cs @@ -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) { diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensFape.cs b/IOB-WIN-NEXT/IobSiemens/SiemensFape.cs index 04544110..6cd13237 100644 --- a/IOB-WIN-NEXT/IobSiemens/SiemensFape.cs +++ b/IOB-WIN-NEXT/IobSiemens/SiemensFape.cs @@ -38,12 +38,12 @@ namespace IOB_WIN_NEXT.IobSiemens #endregion Public Constructors - #region Public Enums + #region private enums /// /// Posizione sequenza ciclo standard punzonatrice /// - public enum posizioneSequenza + private enum posSeq2018 { CICLO_AUTOMATICO_FERMO = 0, CONTROLLO_MODO_OPERATIVO = 5, @@ -73,7 +73,7 @@ namespace IOB_WIN_NEXT.IobSiemens /// /// Enum degli stati macchina (B0) /// - 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 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()); + 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; } diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs b/IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs index 50f09ea3..6d53d4f8 100644 --- a/IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs +++ b/IOB-WIN-NEXT/IobSiemens/SiemensFapeV2.cs @@ -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 /// 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 DictState = new Dictionary(); + private Dictionary DictStCic = new Dictionary(); + #endregion Public Constructors - #region Public Enums - - /// - /// Posizione sequenza ciclo standard punzonatrice - /// - 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 - } - - /// - /// Enum degli stati macchina (B0) - /// - 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 /// @@ -168,10 +105,55 @@ 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(); + 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 + + /// + /// Stato impianto codificato come valore mainState + /// + protected ushort valMain = 0; + + /// + /// Posizione corrente ciclo + /// + protected ushort valStepCic = 0; + + /// + /// Stato Dettagliato macchina + /// + protected ushort valState = 0; + + #endregion Protected Fields + #region Protected Methods /// @@ -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 } } + /// + /// Esegue decodificada stati in modalità "classica" (2018) + /// + /// + 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; + } + } + + /// + /// 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)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); + } + } + + /// + /// 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)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 + + /// + /// Enum degli stati macchina (B0) + /// + private enum mainState + { + ND = 0, + Pronta = 1, + Lavora = 2, + Warning = 3, + Allarme = 4 + } + + /// + /// Posizione sequenza ciclo standard punzonatrice + /// + 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 + } + + /// + /// Posizione sequenza ciclo standard punzonatrice + /// + 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 + } + + /// + /// Enum degli stati macchina (B0) + /// + 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 + } + + /// + /// Enum degli stati macchina (B0) + /// + 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 + + /// + /// 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) + { + 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 } } \ No newline at end of file