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