From 020dffa11acf6b0609728e5fa4d9d3b962baab6b Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 24 Mar 2017 11:04:39 +0100 Subject: [PATCH] acquisizione modifiche FANUC x file persistenza in OSAI --- MTC_Adapter/MTC_Adapter/AdapterDemo.cs | 4 -- MTC_Adapter/MTC_Adapter/AdapterGeneric.cs | 4 ++ MTC_Adapter/MTC_Adapter/App.config | 1 + .../DATA/CONF/Adapter_ItemList.xml | 4 +- .../MTC_Adapter/DATA/CONF/AlarmList.map | 4 +- .../MTC_Adapter/DATA/DAT/PersistData.dat | Bin 0 -> 628 bytes .../MTC_Adapter/ExtLib/DotNetAdapterSDK.dll | Bin 24576 -> 26624 bytes MTC_Adapter/MTC_Adapter/MTC-Adapter.csproj | 2 +- MTC_Adapter/MTC_Adapter/MainForm.cs | 61 ++++++++++++++---- MaterialeSetup/FANUC/2017/2017-03-02.mtc | 29 +++++++++ MaterialeSetup/FANUC/2017/2017-03-19.dat | 29 +++++++++ MaterialeSetup/FANUC/2017/2017-03-20.dat | 0 MaterialeSetup/FANUC/2017/2017-03-21.dat | Bin 0 -> 628 bytes MaterialeSetup/FANUC/2017/2017-03-22.dat | Bin 0 -> 628 bytes MaterialeSetup/FANUC/2017/2017-03-23.dat | Bin 0 -> 628 bytes MaterialeSetup/FANUC/PersistData.dat | 29 +++++++++ MaterialeSetup/FANUC/PersistData_KO.dat | Bin 0 -> 628 bytes MaterialeSetup/FANUC/PersistData_OK.dat | 0 18 files changed, 145 insertions(+), 22 deletions(-) create mode 100644 MaterialeSetup/FANUC/2017/2017-03-02.mtc create mode 100644 MaterialeSetup/FANUC/2017/2017-03-19.dat create mode 100644 MaterialeSetup/FANUC/2017/2017-03-20.dat create mode 100644 MaterialeSetup/FANUC/2017/2017-03-21.dat create mode 100644 MaterialeSetup/FANUC/2017/2017-03-22.dat create mode 100644 MaterialeSetup/FANUC/2017/2017-03-23.dat create mode 100644 MaterialeSetup/FANUC/PersistData.dat create mode 100644 MaterialeSetup/FANUC/PersistData_KO.dat create mode 100644 MaterialeSetup/FANUC/PersistData_OK.dat diff --git a/MTC_Adapter/MTC_Adapter/AdapterDemo.cs b/MTC_Adapter/MTC_Adapter/AdapterDemo.cs index bca0939..fb512c8 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterDemo.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterDemo.cs @@ -1,9 +1,5 @@ using MTConnect; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace MTC_Adapter { diff --git a/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs b/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs index d5e126e..95217ab 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs @@ -523,6 +523,10 @@ namespace MTC_Adapter /// public bool adpRunning = false; /// + /// valore booleano di check se l'adapter STIA SALVANDO + /// + public bool adpSaving = false; + /// /// valore booleano (richiesta di riavvio automatico) /// public bool adpTryRestart; diff --git a/MTC_Adapter/MTC_Adapter/App.config b/MTC_Adapter/MTC_Adapter/App.config index 0eb9557..afd0386 100644 --- a/MTC_Adapter/MTC_Adapter/App.config +++ b/MTC_Adapter/MTC_Adapter/App.config @@ -58,6 +58,7 @@ + diff --git a/MTC_Adapter/MTC_Adapter/DATA/CONF/Adapter_ItemList.xml b/MTC_Adapter/MTC_Adapter/DATA/CONF/Adapter_ItemList.xml index 27c7257..2fc088a 100644 --- a/MTC_Adapter/MTC_Adapter/DATA/CONF/Adapter_ItemList.xml +++ b/MTC_Adapter/MTC_Adapter/DATA/CONF/Adapter_ItemList.xml @@ -1,8 +1,8 @@ 1 - ADAPTER_OSAI - OSAI + ADAPTER_FANUC + FANUC 0 0 diff --git a/MTC_Adapter/MTC_Adapter/DATA/CONF/AlarmList.map b/MTC_Adapter/MTC_Adapter/DATA/CONF/AlarmList.map index 6698345..c799ba6 100644 --- a/MTC_Adapter/MTC_Adapter/DATA/CONF/AlarmList.map +++ b/MTC_Adapter/MTC_Adapter/DATA/CONF/AlarmList.map @@ -377,7 +377,7 @@ 000376|PLC|FAULT|[COD 002107] - 530 PULSANTIERA ESTERNA ABILITATA 000377|PLC|FAULT|[COD 002108] - 504 CAMBIO UTENSILE INTERROTTO 000378|PLC|FAULT|[COD 002109] - 363 MONTANTE CENTRALE ALTO -000379|PLC|FAULT|[COD 002110] - =--- PREALLARME TERMICO TORQUE A +000379|PLC|FAULT|[COD 002110] - --- PREALLARME TERMICO TORQUE A 000380|PLC|FAULT|[COD 002111] - 498 CARICO MASSIMO SUL MANDRINO SUPERATO SOGLIA S1 000381|PLC|FAULT|[COD 002112] - --- PREALLARME TERMICO TORQUE C 000382|PLC|FAULT|[COD 002113] - 432 UTENSILE NON SGANCIATO @@ -431,7 +431,7 @@ 000430|PLC|FAULT|[COD 002161] - 289 ATTREZZAGGIO CAMBIO UTENSILE 2 IN CORSO 000431|PLC|FAULT|[COD 002162] - 584 PORTA DI SICUREZZA MAGAZZINO DISCO 2 NON CHIUSA 000432|PLC|FAULT|[COD 002163] - 514 PROTEZIONE MAGAZZINO DISCO 2 NON IN POSIZIONE -000433|PLC|FAULT|[COD 002164] - +000433|PLC|FAULT|[COD 002164] - ... 000434|PLC|FAULT|[COD 002165] - 550 GRUPPO DI FORATURA NON IN POSIZIONE 000435|PLC|FAULT|[COD 002166] - ... 000436|PLC|FAULT|[COD 002167] - ... diff --git a/MTC_Adapter/MTC_Adapter/DATA/DAT/PersistData.dat b/MTC_Adapter/MTC_Adapter/DATA/DAT/PersistData.dat index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ea7fd6225384719fc161dea78ccf7e487bb4ab57 100644 GIT binary patch literal 628 QcmZQz7zLvtK;IAm00MLX0RR91 literal 0 HcmV?d00001 diff --git a/MTC_Adapter/MTC_Adapter/ExtLib/DotNetAdapterSDK.dll b/MTC_Adapter/MTC_Adapter/ExtLib/DotNetAdapterSDK.dll index 9d8591444cef9ad876960bd47ae33d76334a51f6..6dd7bde7a5b77faf3bd4d4611f246e85a68cf7c7 100644 GIT binary patch literal 26624 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 literal 24576 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 - + False ExtLib\DotNetAdapterSDK.dll diff --git a/MTC_Adapter/MTC_Adapter/MainForm.cs b/MTC_Adapter/MTC_Adapter/MainForm.cs index 068b7e5..1c29cf2 100644 --- a/MTC_Adapter/MTC_Adapter/MainForm.cs +++ b/MTC_Adapter/MTC_Adapter/MainForm.cs @@ -149,7 +149,7 @@ namespace MTC_Adapter var sentinalRule = new LoggingRule("*", LogLevel.Trace, sentinalTarget); LogManager.Configuration.AddTarget("sentinal", sentinalTarget); LogManager.Configuration.LoggingRules.Add(sentinalRule); - + #endif LogManager.ReconfigExistingLoggers(); @@ -633,6 +633,15 @@ namespace MTC_Adapter } } /// + /// file persistenza generale data attuale ANTICIPATA di xx giorni + /// + /// num DD di anticipo + /// + public string prevPersLayerFile(int numDD) + { + return string.Format(@"{0}\{1:yyyy}\{1:yyyy-MM-dd}.mtc", utils.dataDatDir, DateTime.Now.AddDays(-numDD)); + } + /// /// salva i valori attuali del file di conf sia in file corrente che in cartella valori storici /// public void persistData() @@ -653,7 +662,7 @@ namespace MTC_Adapter private void checkNormTask() { - + // decremento... normCount--; // se il counter è a zero eseguo... @@ -1169,21 +1178,29 @@ namespace MTC_Adapter /// public void savePersistLayer(string filePath) { - // se HO dei dati... - if (agObj.persistenceLayer != null) + // in primis check semaforo salvataggio... + if (!agObj.adpSaving) { - try + // alzo semaforo salvataggio + agObj.adpSaving = true; + // se HO dei dati... + if (agObj.persistenceLayer != null) { - utils.WritePlain(agObj.persistenceLayer, filePath); + try + { + utils.WritePlain(agObj.persistenceLayer, filePath); + } + catch (Exception exc) + { + lg.Error(string.Format("Errore salvataggio file{0}{1}", Environment.NewLine, exc)); + } } - catch (Exception exc) + else { - lg.Error(string.Format("Errore salvataggio file{0}{1}", Environment.NewLine, exc)); + lg.Info("persistenceLayer null, non salvato..."); } - } - else - { - lg.Info("persistenceLayer null, non salvato..."); + // abbasso semaforo salvataggio + agObj.adpSaving = false; } } /// @@ -1195,6 +1212,24 @@ namespace MTC_Adapter // inizializzo prima di leggere... agObj.persistenceLayer = new Dictionary(); agObj.persistenceLayer = utils.ReadPlain(filePath); + + // 2017.03.23 check problema files corrotti... + if (agObj.persistenceLayer.Count == 0) + { + // se avesse letto un valore NON coerente (senza righe) PROVA a leggere a ritroso vecchi files... da histPersLayerFile e precedenti... + int numDD = 0; + int maxNumDD = utils.CRI("maxNumDD"); + Dictionary lastRead = new Dictionary(); + // continuo fino a che non leggo almeno 1 riga valida e non ho raggiunto maxDD + while (numDD < maxNumDD && lastRead.Count == 0) + { + // leggo il file storico alla data anticipata... + lastRead = utils.ReadPlain(prevPersLayerFile(numDD)); + numDD++; + } + // se sono uscito PROVO a passare il file storico letto buono (oppure vuoto...) + agObj.persistenceLayer = lastRead; + } } #endregion @@ -1615,6 +1650,6 @@ namespace MTC_Adapter agObj.tryDisconnect(); } } - + } } diff --git a/MaterialeSetup/FANUC/2017/2017-03-02.mtc b/MaterialeSetup/FANUC/2017/2017-03-02.mtc new file mode 100644 index 0000000..b0b3de9 --- /dev/null +++ b/MaterialeSetup/FANUC/2017/2017-03-02.mtc @@ -0,0 +1,29 @@ +ACC_TIME:18 +ACC_TIME_WORK:0 +Axis_01_AccTime:0 +Axis_01_DistDone:11 +Axis_01_InvDDone:15 +Axis_02_AccTime:0 +Axis_02_DistDone:10 +Axis_02_InvDDone:17 +Axis_03_AccTime:0 +Axis_03_DistDone:3 +Axis_03_InvDDone:11 +Axis_04_AccTime:0 +Axis_04_DistDone:2 +Axis_04_InvDDone:7 +Axis_05_AccTime:1 +Axis_05_DistDone:0 +Axis_05_InvDDone:0 +Axis_06_AccTime:0 +Axis_06_DistDone:11 +Axis_06_InvDDone:15 +Lubro_01_Count:0 +Lubro_02_Count:0 +Path_01_PartId:P000123 +UnOp_01_AccTime:155 +UnOp_01_NumCU:6 +VacAct_01_Count:10 +VacAct_02_Count:10 +VacPump_01_WrkTime:4 +VacPump_02_WrkTime:5 diff --git a/MaterialeSetup/FANUC/2017/2017-03-19.dat b/MaterialeSetup/FANUC/2017/2017-03-19.dat new file mode 100644 index 0000000..b0b3de9 --- /dev/null +++ b/MaterialeSetup/FANUC/2017/2017-03-19.dat @@ -0,0 +1,29 @@ +ACC_TIME:18 +ACC_TIME_WORK:0 +Axis_01_AccTime:0 +Axis_01_DistDone:11 +Axis_01_InvDDone:15 +Axis_02_AccTime:0 +Axis_02_DistDone:10 +Axis_02_InvDDone:17 +Axis_03_AccTime:0 +Axis_03_DistDone:3 +Axis_03_InvDDone:11 +Axis_04_AccTime:0 +Axis_04_DistDone:2 +Axis_04_InvDDone:7 +Axis_05_AccTime:1 +Axis_05_DistDone:0 +Axis_05_InvDDone:0 +Axis_06_AccTime:0 +Axis_06_DistDone:11 +Axis_06_InvDDone:15 +Lubro_01_Count:0 +Lubro_02_Count:0 +Path_01_PartId:P000123 +UnOp_01_AccTime:155 +UnOp_01_NumCU:6 +VacAct_01_Count:10 +VacAct_02_Count:10 +VacPump_01_WrkTime:4 +VacPump_02_WrkTime:5 diff --git a/MaterialeSetup/FANUC/2017/2017-03-20.dat b/MaterialeSetup/FANUC/2017/2017-03-20.dat new file mode 100644 index 0000000..e69de29 diff --git a/MaterialeSetup/FANUC/2017/2017-03-21.dat b/MaterialeSetup/FANUC/2017/2017-03-21.dat new file mode 100644 index 0000000000000000000000000000000000000000..ea7fd6225384719fc161dea78ccf7e487bb4ab57 GIT binary patch literal 628 QcmZQz7zLvtK;IAm00MLX0RR91 literal 0 HcmV?d00001 diff --git a/MaterialeSetup/FANUC/2017/2017-03-22.dat b/MaterialeSetup/FANUC/2017/2017-03-22.dat new file mode 100644 index 0000000000000000000000000000000000000000..ea7fd6225384719fc161dea78ccf7e487bb4ab57 GIT binary patch literal 628 QcmZQz7zLvtK;IAm00MLX0RR91 literal 0 HcmV?d00001 diff --git a/MaterialeSetup/FANUC/2017/2017-03-23.dat b/MaterialeSetup/FANUC/2017/2017-03-23.dat new file mode 100644 index 0000000000000000000000000000000000000000..ea7fd6225384719fc161dea78ccf7e487bb4ab57 GIT binary patch literal 628 QcmZQz7zLvtK;IAm00MLX0RR91 literal 0 HcmV?d00001 diff --git a/MaterialeSetup/FANUC/PersistData.dat b/MaterialeSetup/FANUC/PersistData.dat new file mode 100644 index 0000000..b0b3de9 --- /dev/null +++ b/MaterialeSetup/FANUC/PersistData.dat @@ -0,0 +1,29 @@ +ACC_TIME:18 +ACC_TIME_WORK:0 +Axis_01_AccTime:0 +Axis_01_DistDone:11 +Axis_01_InvDDone:15 +Axis_02_AccTime:0 +Axis_02_DistDone:10 +Axis_02_InvDDone:17 +Axis_03_AccTime:0 +Axis_03_DistDone:3 +Axis_03_InvDDone:11 +Axis_04_AccTime:0 +Axis_04_DistDone:2 +Axis_04_InvDDone:7 +Axis_05_AccTime:1 +Axis_05_DistDone:0 +Axis_05_InvDDone:0 +Axis_06_AccTime:0 +Axis_06_DistDone:11 +Axis_06_InvDDone:15 +Lubro_01_Count:0 +Lubro_02_Count:0 +Path_01_PartId:P000123 +UnOp_01_AccTime:155 +UnOp_01_NumCU:6 +VacAct_01_Count:10 +VacAct_02_Count:10 +VacPump_01_WrkTime:4 +VacPump_02_WrkTime:5 diff --git a/MaterialeSetup/FANUC/PersistData_KO.dat b/MaterialeSetup/FANUC/PersistData_KO.dat new file mode 100644 index 0000000000000000000000000000000000000000..ea7fd6225384719fc161dea78ccf7e487bb4ab57 GIT binary patch literal 628 QcmZQz7zLvtK;IAm00MLX0RR91 literal 0 HcmV?d00001 diff --git a/MaterialeSetup/FANUC/PersistData_OK.dat b/MaterialeSetup/FANUC/PersistData_OK.dat new file mode 100644 index 0000000..e69de29