From 6bb362ed197b29521adb5302ba156925eb2e3e16 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 27 Dec 2019 15:30:03 +0100 Subject: [PATCH 1/5] Eseguo reset ODL SOLO SE online... --- IOB-WIN/IobGeneric.cs | 121 +++++++++++++++++++++++------------------- IOB-WIN/IobSimula.cs | 2 +- 2 files changed, 66 insertions(+), 57 deletions(-) diff --git a/IOB-WIN/IobGeneric.cs b/IOB-WIN/IobGeneric.cs index a585bd82..a0f2366f 100644 --- a/IOB-WIN/IobGeneric.cs +++ b/IOB-WIN/IobGeneric.cs @@ -3389,71 +3389,80 @@ namespace IOB_WIN public bool forceSplitOdl() { bool fatto = false; - string fullUrl = ""; - string rawSplit = ""; - string IOB_MULTI_CNAME = ""; - string[] elencoMulti = null; - try + // eseguo SOLO SE sono online... + if (MPOnline && IobOnline) { - /*************************************************** - * Descrizione procedura (OK X SIMULATORI...) - * - * - chiamata su MP/IO - * - verifica che su DB sia abilitato AUTO ODL - * - il server inserisce un evento fine prod HW 1 minuto prima e inizio setup HW - * - viene duplicato e chiuso ODL corrente - * - viene fatto partire ODL nuovo ADESSO - * - num pezzi come ODL precedente (o da media 3 ODL precedenti) - * - conferme pezzi & co... gestione NULL (NON SERVONO si tratta di impianti SENZA gestione vera ODL) - * - reset contapezzi PLC locale... - * - * - * - * DA VALUTARE (x macchine tipo linea con + impianti... es valvital) SE - * - creare una gestione ALTERNATIVA sul server che preveda impianto LEADER e impianti follower (RIGIDAMENTE CONFIGURATI) - * - ogni volta che si fa setup LEADER --> si ripete su impianti FOLLOWER (eventi!!!) - * - viene fatto reset contapezzi sui follower (+ altre operazioni opzionali, ES imposstazione nome commessa, quantità, articolo...) - * - viene fatto reset + nuovo ODL (con stessi articoli e quantità) su follower, SENZA avere gestione x ODL di un codice esterno (quindi registra TUTTO ma NON RITORNERA' dati non avendo link verso esterno) - * - serve NUOVA TABELLA delle macchine LEADER | FOLLOWER (1:n) e gestione da MP/IO - * - * ***************************************************/ + string fullUrl = ""; + string rawSplit = ""; + string IOB_MULTI_CNAME = ""; + string[] elencoMulti = null; - if (isMulti) + try { - // devo chiamare cambio ODL x OGNI tavola: mi servono i parametri opzionali... - IOB_MULTI_CNAME = getOptPar("IOB_MULTI_CNAME"); - elencoMulti = IOB_MULTI_CNAME.Split(','); - } - // se normale splitto! - if (!isMulti) - { - // invio chiamata URL x reset ODL su macchina - rawSplit = callUrl(urlForceSplit, false); - fatto = (rawSplit == "OK") ? true : false; - } - // se multi gestisco il bit delle tavole... - else - { - foreach (string item in elencoMulti) + /*************************************************** + * Descrizione procedura (OK X SIMULATORI...) + * + * - chiamata su MP/IO + * - verifica che su DB sia abilitato AUTO ODL + * - il server inserisce un evento fine prod HW 1 minuto prima e inizio setup HW + * - viene duplicato e chiuso ODL corrente + * - viene fatto partire ODL nuovo ADESSO + * - num pezzi come ODL precedente (o da media 3 ODL precedenti) + * - conferme pezzi & co... gestione NULL (NON SERVONO si tratta di impianti SENZA gestione vera ODL) + * - reset contapezzi PLC locale... + * + * + * + * DA VALUTARE (x macchine tipo linea con + impianti... es valvital) SE + * - creare una gestione ALTERNATIVA sul server che preveda impianto LEADER e impianti follower (RIGIDAMENTE CONFIGURATI) + * - ogni volta che si fa setup LEADER --> si ripete su impianti FOLLOWER (eventi!!!) + * - viene fatto reset contapezzi sui follower (+ altre operazioni opzionali, ES imposstazione nome commessa, quantità, articolo...) + * - viene fatto reset + nuovo ODL (con stessi articoli e quantità) su follower, SENZA avere gestione x ODL di un codice esterno (quindi registra TUTTO ma NON RITORNERA' dati non avendo link verso esterno) + * - serve NUOVA TABELLA delle macchine LEADER | FOLLOWER (1:n) e gestione da MP/IO + * + * ***************************************************/ + + if (isMulti) { - // invio chiamata URL x reset ODL su macchina, ATTENZIONE scriviamo | al posto di "#" che in URL sarebbe filtrato... - fullUrl = $"{urlForceSplit}|{item}"; - rawSplit = callUrl(fullUrl, true); + // devo chiamare cambio ODL x OGNI tavola: mi servono i parametri opzionali... + IOB_MULTI_CNAME = getOptPar("IOB_MULTI_CNAME"); + elencoMulti = IOB_MULTI_CNAME.Split(','); + } + // se normale splitto! + if (!isMulti) + { + // invio chiamata URL x reset ODL su macchina + rawSplit = callUrl(urlForceSplit, false); + fatto = (rawSplit == "OK") ? true : false; + } + // se multi gestisco il bit delle tavole... + else + { + foreach (string item in elencoMulti) + { + // invio chiamata URL x reset ODL su macchina, ATTENZIONE scriviamo | al posto di "#" che in URL sarebbe filtrato... + fullUrl = $"{urlForceSplit}|{item}"; + rawSplit = callUrl(fullUrl, true); + } + fatto = (rawSplit == "OK") ? true : false; } - fatto = (rawSplit == "OK") ? true : false; - } + } + catch (Exception exc) + { + lgError($"Eccezione in forceSplitOdl{Environment.NewLine}{exc}"); + } + // se fatto --> resetto contapezzi!!! + if (fatto) + { + lastCountCNC = 0; + contapezzi = 0; + } } - catch (Exception exc) + else { - lgError($"Eccezione in forceSplitOdl{Environment.NewLine}{exc}"); - } - // se fatto --> resetto contapezzi!!! - if (fatto) - { - lastCountCNC = 0; - contapezzi = 0; + lgError("Richeisto forceSplitOdl ma MP/IOB offline --> NON eseguito"); } return fatto; } diff --git a/IOB-WIN/IobSimula.cs b/IOB-WIN/IobSimula.cs index 1571aba3..c4bf2327 100644 --- a/IOB-WIN/IobSimula.cs +++ b/IOB-WIN/IobSimula.cs @@ -416,7 +416,7 @@ namespace IOB_WIN DateTime.TryParse(rawDataInizio, out inizioOdl); if (DateTime.Now.Subtract(inizioOdl).TotalMinutes > minDurataODL) { - // invio reset ODL... + // invio reset ODL... forceSplitOdl(); } } From 72e605016b21b91168f0912a2d70d1c6b6e93d24 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 27 Dec 2019 17:38:30 +0100 Subject: [PATCH 2/5] Aggiunta dipendenza nuget x SteamWareLibs --- IOB-MAN/App.config | 52 ++++++++-- IOB-MAN/App_Readme/README_SteamWare.txt | 12 +++ .../SteamWare_demo/example-NLog.config | 31 ++++++ .../SteamWare_demo/example-app.config | 17 ++++ .../SteamWare_demo/example-config-table.txt | 30 ++++++ .../SteamWare_demo/example-favicon.ico | Bin 0 -> 31702 bytes IOB-MAN/IOB-MAN.csproj | 89 ++++++++++++++++++ IOB-MAN/packages.config | 27 ++++++ 8 files changed, 252 insertions(+), 6 deletions(-) create mode 100644 IOB-MAN/App_Readme/README_SteamWare.txt create mode 100644 IOB-MAN/App_Readme/SteamWare_demo/example-NLog.config create mode 100644 IOB-MAN/App_Readme/SteamWare_demo/example-app.config create mode 100644 IOB-MAN/App_Readme/SteamWare_demo/example-config-table.txt create mode 100644 IOB-MAN/App_Readme/SteamWare_demo/example-favicon.ico diff --git a/IOB-MAN/App.config b/IOB-MAN/App.config index 6c819836..ba662ffb 100644 --- a/IOB-MAN/App.config +++ b/IOB-MAN/App.config @@ -1,4 +1,4 @@ - + @@ -6,14 +6,54 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-MAN/App_Readme/README_SteamWare.txt b/IOB-MAN/App_Readme/README_SteamWare.txt new file mode 100644 index 00000000..bf60ed18 --- /dev/null +++ b/IOB-MAN/App_Readme/README_SteamWare.txt @@ -0,0 +1,12 @@ +--------------------------------------------------------------- +------- SteamWareLib SDK ------- +--------------------------------------------------------------- + +Libreria di utility base di SteamWare. + +Le dipendenze inserite sono necessarie al funzionamento dell'SDK. + +Sono inclusi a titolo di esempio vari files di conf: + * example-NLog.config + +Attenzione a configurare correttamente il file NLog.xml includendo il rule per la classe, vedere ad esempio il file example-NLog.config allegato. \ No newline at end of file diff --git a/IOB-MAN/App_Readme/SteamWare_demo/example-NLog.config b/IOB-MAN/App_Readme/SteamWare_demo/example-NLog.config new file mode 100644 index 00000000..a11a39e6 --- /dev/null +++ b/IOB-MAN/App_Readme/SteamWare_demo/example-NLog.config @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IOB-MAN/App_Readme/SteamWare_demo/example-app.config b/IOB-MAN/App_Readme/SteamWare_demo/example-app.config new file mode 100644 index 00000000..fb421650 --- /dev/null +++ b/IOB-MAN/App_Readme/SteamWare_demo/example-app.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/IOB-MAN/App_Readme/SteamWare_demo/example-config-table.txt b/IOB-MAN/App_Readme/SteamWare_demo/example-config-table.txt new file mode 100644 index 00000000..dd0ab8ef --- /dev/null +++ b/IOB-MAN/App_Readme/SteamWare_demo/example-config-table.txt @@ -0,0 +1,30 @@ +# chiave valore valoreStd note +_adminEmail samuele@steamware.net,info@steamware.net samuele@steamware.net,info@steamware.net info@steamware.net +_allowForceUser true true abilita login forzato +_commonPages menu menu pagina comune +_emailPwd drmfsls16 drmfsls16 drmfsls16 +_emailUser steamwarebot@gmail.com steamwarebot@gmail.com steamwarebot@gmail.com +_enableSSL true true true +_fromEmail webmaster@admodelling.org webmaster@admodelling.org email mittente eventuali msg +_righeDataGrid 30 30 Num righe datagrid std +_righeDataGridAnagr 20 20 Num righe datagrid anagrafiche +_righeDataGridLong 30 30 Num righe datagrid long +_righeDataGridMed 15 15 Num righe datagrid med +_righeDataGridShort 10 10 Num righe datagrid short +_smtpCli smtp.gmail.com smtp.gmail.com smtp.gmail.com +_useAIMSmtp false false impiego client posta elettronica alternativo +_useAuthSmtp true true true +AuthCookieName admodellingAuth admodellingAuth Cookie applicativo +autoConfCmd true true Conferma automatica comandi barcode +baseUrl http://site_name http://iis02/site_name URL base del sito +cacheValSec 60 60 Validità cache dati in gestore Barcode +cookieDayExp 365 365 Periodo validità cookie +cookieUsed admodellingAuth admodellingAuth,CTrack_CodOpr,CTrack_CodPost Elenco dei cookie impiegati +enableCookie true true Abilitazione uso cookie +enableLogOut true false Abilita button logout COMPLETO in alto a sx +enablePlain true true Abilitazione decode plain +maxAuth 1000 1000 num auth minimo per NON consumare tokens +serializeSession true true Serializzazione valori in sessione (REDIS) +SiteName iis02/site_name iis02/site_name Nome sito +enableDumpDiag false false abilitazione dumb diagnostico x eccezioni di default +doShrinkFolder true true Imposta compressione area LOGS \ No newline at end of file diff --git a/IOB-MAN/App_Readme/SteamWare_demo/example-favicon.ico b/IOB-MAN/App_Readme/SteamWare_demo/example-favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4f0e0ad0a8300d86881040676f2c05f93ec4c1a3 GIT binary patch literal 31702 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 BZR`L5 literal 0 HcmV?d00001 diff --git a/IOB-MAN/IOB-MAN.csproj b/IOB-MAN/IOB-MAN.csproj index 9579edff..bf07826e 100644 --- a/IOB-MAN/IOB-MAN.csproj +++ b/IOB-MAN/IOB-MAN.csproj @@ -38,22 +38,101 @@ IobManIcon.ico + + ..\packages\AIM.1.0.3\lib\AegisImplicitMail.dll + + + ..\packages\AjaxControlToolkit.19.1.0\lib\net40\AjaxControlToolkit.dll + ..\packages\Costura.Fody.4.1.0\lib\net40\Costura.dll + + ..\packages\Crc32C.NET.1.0.5.0\lib\net20\Crc32C.NET.dll + + + ..\packages\DnsClient.1.2.0\lib\net45\DnsClient.dll + + + ..\packages\SharpZipLib.1.2.0\lib\net45\ICSharpCode.SharpZipLib.dll + + + ..\packages\MapoSDK.6.9.1912.1271\lib\net40\MapoSDK.dll + + + ..\packages\MongoDB.Bson.2.10.0\lib\net452\MongoDB.Bson.dll + + + ..\packages\MongoDB.Driver.2.10.0\lib\net452\MongoDB.Driver.dll + + + ..\packages\MongoDB.Driver.Core.2.10.0\lib\net452\MongoDB.Driver.Core.dll + + + ..\packages\MongoDB.Libmongocrypt.1.0.0\lib\net452\MongoDB.Libmongocrypt.dll + ..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll ..\packages\NLog.4.6.8\lib\net45\NLog.dll + + ..\packages\PDFsharp.1.50.5147\lib\net20\PdfSharp.dll + + + ..\packages\PDFsharp.1.50.5147\lib\net20\PdfSharp.Charting.dll + + + ..\packages\Pipelines.Sockets.Unofficial.2.1.1\lib\net461\Pipelines.Sockets.Unofficial.dll + + + ..\packages\SharpCompress.0.24.0\lib\net45\SharpCompress.dll + + + ..\packages\Snappy.NET.1.1.1.8\lib\net45\Snappy.NET.dll + + + ..\packages\StackExchange.Redis.2.0.601\lib\net461\StackExchange.Redis.dll + + + ..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll + + + ..\packages\System.Diagnostics.PerformanceCounter.4.7.0\lib\net461\System.Diagnostics.PerformanceCounter.dll + + + ..\packages\System.IO.Pipelines.4.7.0\lib\netstandard2.0\System.IO.Pipelines.dll + + + ..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.7.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + True + True + + + ..\packages\System.Threading.Channels.4.7.0\lib\netstandard2.0\System.Threading.Channels.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll + + @@ -78,7 +157,11 @@ + + + + Always @@ -94,6 +177,8 @@ True Resources.resx + + Always @@ -132,6 +217,10 @@ + + + + \ No newline at end of file diff --git a/IOB-MAN/packages.config b/IOB-MAN/packages.config index 1556b24e..157942e9 100644 --- a/IOB-MAN/packages.config +++ b/IOB-MAN/packages.config @@ -1,9 +1,36 @@  + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From d898265254d59439fdeaab0849f28ef7a5ed2825 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 27 Dec 2019 17:38:52 +0100 Subject: [PATCH 3/5] Reorg tra baseutils ed enum + objects --- IOB-UT/Enums.cs | 319 ++++++++++++++++++ IOB-UT/IOB-UT.csproj | 2 + IOB-UT/Objects.cs | 510 ++++++++++++++++++++++++++++ IOB-UT/baseUtils.cs | 768 ------------------------------------------- 4 files changed, 831 insertions(+), 768 deletions(-) create mode 100644 IOB-UT/Enums.cs create mode 100644 IOB-UT/Objects.cs diff --git a/IOB-UT/Enums.cs b/IOB-UT/Enums.cs new file mode 100644 index 00000000..bdc570ba --- /dev/null +++ b/IOB-UT/Enums.cs @@ -0,0 +1,319 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IOB_UT +{ + + /// + /// Tipologie di DUMP memoria + /// + public enum dumpType + { + /// + /// Salvataggio all'avvio aree memoria (con sovrascrittura) + /// + STARTUP, + /// + /// Campionamento periodico + /// + SAMPLE + } + /// + /// Tipologia di adapters ammessi + /// + public enum tipoAdapter + { + /// + /// Adapter SIMULAZIONE + /// + SIMULA, + /// + /// adapter FANUC + /// + FANUC, + /// + /// adapter KAWASAKI e-controller + /// + KAWASAKI, + /// + /// Adapter non specificato + /// + ND, + /// + /// Adapter MTConnect + /// + MTConnect, + /// + /// Adapter OMRON + /// + OMRON, + /// + /// Adapter OSAI CNDEX (Cndex) + /// + OSAI_CNDEX, + /// + /// Adapter OSAI OPEN (ws) + /// + OSAI_OPEN, + /// + /// Adapter OSAI VB6 + /// + OSAI_VB6, + /// + /// Adapter SIEMENS + /// + SIEMENS, + /// + /// Adapter SIEMENS, interfaccia versione APROCHIM (filtro liquidi rettifiche) + /// + SIEMENS_APROCHIM, + /// + /// Adapter SIEMENS, interfaccia versione VIPA @2001 + /// + SIEMENS_AT2001, + /// + /// Adapter SIEMENS, interfaccia versione FAPE (punzonatrici) + /// + SIEMENS_FAPE, + /// + /// Adapter SIEMENS, interfaccia versione COMUR (dentatrice) + /// + SIEMENS_COMUR, + /// + /// Adapter SIEMENS, interfaccia versione INGENIA (Valvital, Automazione) + /// + SIEMENS_INGENIA, + /// + /// Adapter SIEMENS, interfaccia versione LASCO (Valvital, Pressa Bilancere) + /// + SIEMENS_LASCO, + /// + /// Adapter SIEMENS, interfaccia versione PRESSOIL + CEI (Valvital, Pressa Idraulica) + /// + SIEMENS_PRESSOIL_CEI, + /// + /// Adapter SIEMENS, interfaccia versione SAET (Valvital, forni / tempra) + /// + SIEMENS_SAET, + /// + /// Adapter SIEMENS, interfaccia versione Torri + /// + SIEMENS_TORRI, + /// + /// Metodi di WPS WebPageScraping (es x compressori Atlas Copco) + /// + WPS + } + /// + /// Tipo di ciclo da processare + /// + public enum gatherCycle + { + /// + /// Very High Frequency (solo x invii...) + /// + VHF, + /// + /// lettura dati ad alta frequenza + /// + HF, + /// + /// lettura dati standard + /// + MF, + /// + /// lettura dati bassa freq + /// + LF, + /// + /// lettura dati bassissima priorità (re-sync stato allarmi) + /// + VLF + } + + /// + /// StFlag8: set di 8 bit (1 word) contente semaforo di variabili + /// + [Flags] + public enum StFlag8 : int + { + NONE = 0, + B0 = 1 << 0, + B1 = 1 << 1, + B2 = 1 << 2, + B3 = 1 << 3, + B4 = 1 << 4, + B5 = 1 << 5, + B6 = 1 << 6, + B7 = 1 << 7 + } + /// + /// StFlag32: set di 32 bit (4 word) contente semaforo di variabili + /// + [Flags] + public enum StFlag32 : int + { + NONE = 0, + B00 = 1 << 0, + B01 = 1 << 1, + B02 = 1 << 2, + B03 = 1 << 3, + B04 = 1 << 4, + B05 = 1 << 5, + B06 = 1 << 6, + B07 = 1 << 7, + B08 = 1 << 8, + B09 = 1 << 9, + B10 = 1 << 10, + B11 = 1 << 11, + B12 = 1 << 12, + B13 = 1 << 13, + B14 = 1 << 14, + B15 = 1 << 15, + B16 = 1 << 16, + B17 = 1 << 17, + B18 = 1 << 18, + B19 = 1 << 19, + B20 = 1 << 20, + B21 = 1 << 21, + B22 = 1 << 22, + B23 = 1 << 23, + B24 = 1 << 24, + B25 = 1 << 25, + B26 = 1 << 26, + B27 = 1 << 27, + B28 = 1 << 28, + B29 = 1 << 29, + B30 = 1 << 30, + B31 = 1 << 31 + } + /// + /// Enumerazione tipi di semaforo + /// + public enum Semaforo + { + /// + /// Stato non definito + /// + ND, + /// + /// Verde + /// + SV, + /// + /// Giallo + /// + SG, + /// + /// Rosso + /// + SR, + /// + /// Grigio/Spento + /// + SS + } + /// + /// Enumerazione tipi di tipi di URL x invio + /// + public enum urlType + { + /// + /// Salvataggio FluxLog (valori estesi che non provocano calcoli di macchine a stati, eventi...) + /// + FLog, + /// + /// INPUT segnali in ingresso (standard base MAPO) + /// + SignIN + } + + /// + /// Elenco STATI CNC OSAI + /// + public enum CNC_STATUS_OSAI + { + IDLE = 1, + CYCLE, + HODA, + RUNH, + HRUN, + ERRO, + WAIT, + RESET, + EMERG, + INPUT + } + /// + /// Elenco MODI CNC + /// + public enum CNC_MODE + { + /// + /// Non definito + /// + ND = 0, + /// + /// AUTOMATICO + /// + AUTO, + /// + /// EDIT (MEMORY EDIT) + /// + EDIT, + /// + /// MEN (MEMORY OPERATION) + /// + MEN, + /// + /// MDI (MANUAL DATA INPUT) + /// + MDI, + /// + /// HANDLE/INC (MANUAL HANDLE / INCREMENTAL FEED) + /// + HANDLE_INC, + /// + /// HOME + /// + HOME, + /// + /// JOG (MANUAL CONTINUOUS FEED) + /// + JOG, + /// + /// JOG MAN + /// + JOG_MAN, + /// + /// JOG_INC + /// + JOG_INC, + /// + /// PROFILE + /// + PROFILE, + /// + /// SEMI + /// + SEMI, + /// + /// THND (TEACH IN HANDLE) + /// + THND, + /// + /// TJOG (TEACH IN JOG) + /// + TJOG, + /// + /// RMT (DNC OPERATION) + /// + RMT, + /// + /// REF (MANUAL REFERENCE POSITION RETURN) + /// + REF + } +} diff --git a/IOB-UT/IOB-UT.csproj b/IOB-UT/IOB-UT.csproj index bca7eb00..b968e371 100644 --- a/IOB-UT/IOB-UT.csproj +++ b/IOB-UT/IOB-UT.csproj @@ -100,8 +100,10 @@ Component + + diff --git a/IOB-UT/Objects.cs b/IOB-UT/Objects.cs new file mode 100644 index 00000000..1fe829cc --- /dev/null +++ b/IOB-UT/Objects.cs @@ -0,0 +1,510 @@ +using MapoSDK; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IOB_UT +{ + + /// + /// Oggetto timing x archiviazione dati perfomances + /// + public class TimeRec + { + /// + /// Classe chiamante della funzione (es codice univoco IOB) + /// + public string classCall; + /// + /// Codice univoco chiamata: tipo R4 (read 4 byte), W2 (write 2 Byte) + /// + public string codCall; + /// + /// Num chiamate totale + /// + public int numCall; + /// + /// Tempo medio chiamata + /// + public double avgMsec + { + get + { + return totMsec.TotalMilliseconds / numCall; + } + } + /// + /// Totale Msec accumulati + /// + public TimeSpan totMsec; + /// + /// Classe record timing + /// + public TimeRec() + { + codCall = ""; + numCall = 0; + totMsec = new TimeSpan(0); + } + /// + /// Classe record timing + /// + /// + /// + /// + public TimeRec(string caller, string codice, long nTicks) + { + classCall = caller; + codCall = codice; + numCall = 1; + totMsec = new TimeSpan(nTicks); + } + } + + /// + /// Classe gestione valori campionati su periodo + /// + public class sampleVect + { + /// + /// Dimensione finestra di campionamento (secondi) + /// + protected int windSize; + /// + /// vettore valori temporali della serie + /// + protected List lTime; + /// + /// vettore valoti puntuali della serie + /// + protected List lVal; + /// + /// Inizializzo l'oggetto + /// + public sampleVect() + { + // init valori default... + windSize = baseUtils.CRI("countWindSize") > 0 ? baseUtils.CRI("countWindSize") : 60; + lTime = new List(); + lVal = new List(); + } + /// + /// Conteggio elementi + /// + protected int numElem + { + get + { + int answ = 0; + try + { + answ = lTime.Count; + } + catch + { } + return answ; + } + } + /// + /// Verifica ampiezza finestra valori First-Last + /// + protected double flWindSize + { + get + { + double answ = 0; + if (numElem > 1) + { + answ = lTime.Last().Subtract(lTime[0]).TotalSeconds; + } + return answ; + } + } + /// + /// Verifica ampiezza finestra valori Second-Last + /// + protected double slWindSize + { + get + { + double answ = 0; + if (numElem > 2) // altrimenti SE non ne ho almeno 3 NON posso avere secondo/ultimo... + { + + answ = lTime.Last().Subtract(lTime[1]).TotalSeconds; + } + return answ; + } + } + /// + /// Aggiunge un valore alla serie ed eventualmente elimina i valori superflui a garantirne una finestra temporale valida + /// + /// + /// + public void addValue(DateTime tempo, int valore) + { + lTime.Add(tempo); + lVal.Add(valore); + // verifico se siano da accorciare le serie... ovvero i 2 intervalli ENTRAMBI sono superiori al periodo minimo (in tal caso riduco.. + while (flWindSize > windSize && slWindSize > windSize) + { + // elimino i 2 valori + vecchi + lTime.RemoveAt(0); + lVal.RemoveAt(0); + // ora ricontrollo... + } + } + /// + /// Calcola il valore mediano... + /// + public double vcMedian + { + get + { + double answ = 0; + // restituisce la mediana SE valida, altrimenti null... + if (numElem > 2 && flWindSize > windSize) + { + try + { + // calcolo mediana! + //answ = Statistics.Median(lVal.ToArray()); + + // rif: https://blogs.msmvps.com/deborahk/linq-mean-median-and-mode/ + var sortedNumbers = lVal.OrderBy(n => n); + int numCount = lVal.Count; + int indice50 = lVal.Count / 2; + if ((numCount % 2) == 0) + { + answ = ((sortedNumbers.ElementAt(indice50) + sortedNumbers.ElementAt(indice50 - 1)) / 2); + } + else + { + answ = sortedNumbers.ElementAt(indice50); + } + } + catch + { } + } + return answ; + } + } + /// + /// Verifica se la vc sia valida (ovvero almeno 2 valori e intervallo > window richiesta) + /// + public bool vcValid + { + get + { + return (flWindSize > windSize && numElem > 1); + } + } + + } + /// + /// GEstione dati di timing + /// + public static class TimingData + { + public static List results = new List(); + + /// + /// aggiorno vettore aggiungendo risultato + /// + /// Codice chiamante + /// Codice da registrare (univoco con chiamante) + /// Tempo esecuzione in ticks + public static void addResult(string caller, string codice, long ticks) + { + if (results.Count == 0) + { + results.Add(new TimeRec(caller, codice, ticks)); + } + int indice = -1; + for (int i = 0; i < results.Count; i++) + { + // se il codice è quello cercato... + if (results[i].codCall == codice && results[i].classCall == caller) + { + indice = i; + } + } + // se c'è aggiorno... + if (indice >= 0) + { + results[indice].numCall++; + results[indice].totMsec = results[indice].totMsec.Add(new TimeSpan(ticks)); + } + // altrimenti aggiungo... + else + { + results.Add(new TimeRec(caller, codice, ticks)); + } + } + /// + /// Resetta i dati registrati (ad avvio adapter...) + /// + public static void resetData() + { + results = new List(); + } + } + /// + /// Gestione Endianness + /// + public static class Endian + { + /// + /// Scambia MSB/LSB per 16bit + /// + /// + /// + public static UInt16 SwapUInt16(UInt16 inValue) + { + return (UInt16)(((inValue & 0xff00) >> 8) | + ((inValue & 0x00ff) << 8)); + } + + /// + /// Scambia MSB/LSB per 32bit + /// + /// + /// + public static UInt32 SwapUInt32(UInt32 inValue) + { + return ((inValue & 0xff000000) >> 24) | + ((inValue & 0x00ff0000) >> 8) | + ((inValue & 0x0000ff00) << 8) | + ((inValue & 0x000000ff) << 24); + } + } + /// + /// Classe conf x item DynData + /// + public class DynDataItem + { + public string key { get; set; } = ""; + public string name { get; set; } = ""; + public string val { get; set; } = ""; + public string unit { get; set; } = ""; + public string func { get; set; } = ""; + public int sPeriod { get; set; } = 60; + /// + /// Valore effettivo da salvare + /// + public string actVal { get; set; } = ""; + /// + /// DataOra scadenza invio forzato + /// + public DateTime DTScad = DateTime.Now; + } + /// + /// Classe conf x decodifica stsatus + /// + public class StatusItem : DynDataItem + { + public Dictionary codeMapping; + } + /// + /// Classe conf server html + /// + public class srvData + { + public string baseUri { get; set; } = ""; + public string driverName { get; set; } = ""; + } + /// + /// Elenco oggetti del monitoraggio (DynData, Status) + /// + public class MonitoredItemsConf + { + public srvData SrvData { get; set; } + public List DynData { get; set; } + public List Status { get; set; } + } + /// + /// Configurazione per Eventi/Variabili + /// + public class EVData + { + /// + /// Unità di misura + /// + public string UM { get; set; } = "num"; + /// + /// Valore salvato + /// + public string Val { get; set; } = ""; + /// + /// DataOra scadenza invio forzato + /// + public DateTime DTScad = DateTime.Now; + } + /// + /// Configurazione per Variabili Casuali + /// + public class VCData + { + /// + /// Periodo di riferimento + /// + public int Period { get; set; } = 60; + /// + /// Tipologia di funzione da applicare + /// + public VC_func Funzione { get; set; } = VC_func.POINT; + /// + /// DataOra inizio periodo di elaborazione + /// + public DateTime DTStart; + /// + /// Array dati per calcolo + /// + public List dataArray; + } + + /// + /// informazioni di produzione + /// + public struct prodData + { + public string Operator; + + public bool Status; + public int AccTime; + public int Power; + public string FuncMode; + public bool EmrStop; + public string MessageCode; + public string MessageText; + + } + + + /// + /// Dato generico (per decodifica) + /// + public class otherData + { + public string codNum; + public string memAddr; + public string varName; + public string dataType; + public otherData() + { + codNum = ""; + memAddr = ""; + varName = ""; + dataType = ""; + } + public otherData(string _codNum, string _memAddr, string _varName, string _dataType) + { + codNum = _codNum; + memAddr = _memAddr; + varName = _varName; + dataType = _dataType; + } + } + /// + /// Classe che contiene tutte le NUOVE informaizoni da aggiornare sulla form + /// + public class newDisplayData + { + /// + /// Dati tipo IN (RAW) + /// + public string newInData { get; set; } = ""; + /// + /// Dati tipo Signal + /// + public string newSignalData { get; set; } = ""; + /// + /// Dati tipo FluxLog + /// + public string newFLogData { get; set; } = ""; + /// + /// Dati tipo UrlCall + /// + public string newUrlCallData { get; set; } = ""; + /// + /// Dati tipo LiveLog + /// + public string newLiveLogData { get; set; } = ""; + /// + /// Oggetto COUTNER generico (pezzi, portata...) + /// + public int counter { get; set; } = -9999; + /// + /// Bitmap attuale segnali letti + /// + public string currBitmap { get; set; } = ""; + /// + /// Stato semaforo IN verso PLC + /// + public Semaforo semIn { get; set; } = Semaforo.ND; + /// + /// Stato semaforo OUT verso MES + /// + public Semaforo semOut { get; set; } = Semaforo.ND; + /// + /// Verifica se contenga valori (NON default/empty) + /// + public bool hasData + { + get + { + bool answ = false; + // true se qualcosa NON E' come default + if (!string.IsNullOrWhiteSpace(newInData) || !string.IsNullOrWhiteSpace(newSignalData) || !string.IsNullOrWhiteSpace(newFLogData) || !string.IsNullOrWhiteSpace(newUrlCallData) || !string.IsNullOrWhiteSpace(newLiveLogData) || counter > -9999 || !string.IsNullOrWhiteSpace(currBitmap) || semIn != Semaforo.ND || semOut != Semaforo.ND) + { + answ = true; + } + return answ; + } + } + } + + /// + /// Rappresentazione dello stato corrente dell'IOB + /// + public class IobWinCurrentState + { + /// + /// Semaforo IN (IOB-PLC) + /// + public Semaforo SemIn { get; set; } = Semaforo.ND; + /// + /// Semaforo OUT (IOB-MPserver) + /// + public Semaforo SemOut { get; set; } = Semaforo.ND; + /// + /// Contatore IOB + /// + public float counterIOB { get; set; } = 0; + /// + /// Contatore Macchina + /// + public float counterMAC { get; set; } = 0; + /// + /// Lunghezza coda EVENTI in uscita + /// + public int queueEvLen { get; set; } = 0; + /// + /// Lunghezza coda FluxLog in uscita + /// + public int queueFLogLen { get; set; } = 0; + /// + /// DataOra ultima comunicazione IN (con PLC) + /// + public DateTime lastDataIn { get; set; } = DateTime.Now.AddYears(-1); + /// + /// DataOra ultima comunicazione OUT (con MP Server) + /// + public DateTime lastDataOut { get; set; } = DateTime.Now.AddYears(-1); + /// + /// Ultimo stato noto dei parametri in memoria letti da PLC + /// + public Dictionary currParams { get; set; } = null; + } +} diff --git a/IOB-UT/baseUtils.cs b/IOB-UT/baseUtils.cs index 9a3b6007..e14b0461 100644 --- a/IOB-UT/baseUtils.cs +++ b/IOB-UT/baseUtils.cs @@ -648,772 +648,4 @@ namespace IOB_UT } } - - /// - /// Oggetto timing x archiviazione dati perfomances - /// - public class TimeRec - { - /// - /// Classe chiamante della funzione (es codice univoco IOB) - /// - public string classCall; - /// - /// Codice univoco chiamata: tipo R4 (read 4 byte), W2 (write 2 Byte) - /// - public string codCall; - /// - /// Num chiamate totale - /// - public int numCall; - /// - /// Tempo medio chiamata - /// - public double avgMsec - { - get - { - return totMsec.TotalMilliseconds / numCall; - } - } - /// - /// Totale Msec accumulati - /// - public TimeSpan totMsec; - /// - /// Classe record timing - /// - public TimeRec() - { - codCall = ""; - numCall = 0; - totMsec = new TimeSpan(0); - } - /// - /// Classe record timing - /// - /// - /// - /// - public TimeRec(string caller, string codice, long nTicks) - { - classCall = caller; - codCall = codice; - numCall = 1; - totMsec = new TimeSpan(nTicks); - } - } - - /// - /// Classe gestione valori campionati su periodo - /// - public class sampleVect - { - /// - /// Dimensione finestra di campionamento (secondi) - /// - protected int windSize; - /// - /// vettore valori temporali della serie - /// - protected List lTime; - /// - /// vettore valoti puntuali della serie - /// - protected List lVal; - /// - /// Inizializzo l'oggetto - /// - public sampleVect() - { - // init valori default... - windSize = baseUtils.CRI("countWindSize") > 0 ? baseUtils.CRI("countWindSize") : 60; - lTime = new List(); - lVal = new List(); - } - /// - /// Conteggio elementi - /// - protected int numElem - { - get - { - int answ = 0; - try - { - answ = lTime.Count; - } - catch - { } - return answ; - } - } - /// - /// Verifica ampiezza finestra valori First-Last - /// - protected double flWindSize - { - get - { - double answ = 0; - if (numElem > 1) - { - answ = lTime.Last().Subtract(lTime[0]).TotalSeconds; - } - return answ; - } - } - /// - /// Verifica ampiezza finestra valori Second-Last - /// - protected double slWindSize - { - get - { - double answ = 0; - if (numElem > 2) // altrimenti SE non ne ho almeno 3 NON posso avere secondo/ultimo... - { - - answ = lTime.Last().Subtract(lTime[1]).TotalSeconds; - } - return answ; - } - } - /// - /// Aggiunge un valore alla serie ed eventualmente elimina i valori superflui a garantirne una finestra temporale valida - /// - /// - /// - public void addValue(DateTime tempo, int valore) - { - lTime.Add(tempo); - lVal.Add(valore); - // verifico se siano da accorciare le serie... ovvero i 2 intervalli ENTRAMBI sono superiori al periodo minimo (in tal caso riduco.. - while (flWindSize > windSize && slWindSize > windSize) - { - // elimino i 2 valori + vecchi - lTime.RemoveAt(0); - lVal.RemoveAt(0); - // ora ricontrollo... - } - } - /// - /// Calcola il valore mediano... - /// - public double vcMedian - { - get - { - double answ = 0; - // restituisce la mediana SE valida, altrimenti null... - if (numElem > 2 && flWindSize > windSize) - { - try - { - // calcolo mediana! - //answ = Statistics.Median(lVal.ToArray()); - - // rif: https://blogs.msmvps.com/deborahk/linq-mean-median-and-mode/ - var sortedNumbers = lVal.OrderBy(n => n); - int numCount = lVal.Count; - int indice50 = lVal.Count / 2; - if ((numCount % 2) == 0) - { - answ = ((sortedNumbers.ElementAt(indice50) + sortedNumbers.ElementAt(indice50 - 1)) / 2); - } - else - { - answ = sortedNumbers.ElementAt(indice50); - } - } - catch - { } - } - return answ; - } - } - /// - /// Verifica se la vc sia valida (ovvero almeno 2 valori e intervallo > window richiesta) - /// - public bool vcValid - { - get - { - return (flWindSize > windSize && numElem > 1); - } - } - - } - /// - /// GEstione dati di timing - /// - public static class TimingData - { - public static List results = new List(); - - /// - /// aggiorno vettore aggiungendo risultato - /// - /// Codice chiamante - /// Codice da registrare (univoco con chiamante) - /// Tempo esecuzione in ticks - public static void addResult(string caller, string codice, long ticks) - { - if (results.Count == 0) - { - results.Add(new TimeRec(caller, codice, ticks)); - } - int indice = -1; - for (int i = 0; i < results.Count; i++) - { - // se il codice è quello cercato... - if (results[i].codCall == codice && results[i].classCall == caller) - { - indice = i; - } - } - // se c'è aggiorno... - if (indice >= 0) - { - results[indice].numCall++; - results[indice].totMsec = results[indice].totMsec.Add(new TimeSpan(ticks)); - } - // altrimenti aggiungo... - else - { - results.Add(new TimeRec(caller, codice, ticks)); - } - } - /// - /// Resetta i dati registrati (ad avvio adapter...) - /// - public static void resetData() - { - results = new List(); - } - } - /// - /// Gestione Endianness - /// - public static class Endian - { - /// - /// Scambia MSB/LSB per 16bit - /// - /// - /// - public static UInt16 SwapUInt16(UInt16 inValue) - { - return (UInt16)(((inValue & 0xff00) >> 8) | - ((inValue & 0x00ff) << 8)); - } - - /// - /// Scambia MSB/LSB per 32bit - /// - /// - /// - public static UInt32 SwapUInt32(UInt32 inValue) - { - return ((inValue & 0xff000000) >> 24) | - ((inValue & 0x00ff0000) >> 8) | - ((inValue & 0x0000ff00) << 8) | - ((inValue & 0x000000ff) << 24); - } - } - /// - /// Tipologie di DUMP memoria - /// - public enum dumpType - { - /// - /// Salvataggio all'avvio aree memoria (con sovrascrittura) - /// - STARTUP, - /// - /// Campionamento periodico - /// - SAMPLE - } - /// - /// Tipologia di adapters ammessi - /// - public enum tipoAdapter - { - /// - /// Adapter SIMULAZIONE - /// - SIMULA, - /// - /// adapter FANUC - /// - FANUC, - /// - /// adapter KAWASAKI e-controller - /// - KAWASAKI, - /// - /// Adapter non specificato - /// - ND, - /// - /// Adapter MTConnect - /// - MTConnect, - /// - /// Adapter OMRON - /// - OMRON, - /// - /// Adapter OSAI CNDEX (Cndex) - /// - OSAI_CNDEX, - /// - /// Adapter OSAI OPEN (ws) - /// - OSAI_OPEN, - /// - /// Adapter OSAI VB6 - /// - OSAI_VB6, - /// - /// Adapter SIEMENS - /// - SIEMENS, - /// - /// Adapter SIEMENS, interfaccia versione APROCHIM (filtro liquidi rettifiche) - /// - SIEMENS_APROCHIM, - /// - /// Adapter SIEMENS, interfaccia versione VIPA @2001 - /// - SIEMENS_AT2001, - /// - /// Adapter SIEMENS, interfaccia versione FAPE (punzonatrici) - /// - SIEMENS_FAPE, - /// - /// Adapter SIEMENS, interfaccia versione COMUR (dentatrice) - /// - SIEMENS_COMUR, - /// - /// Adapter SIEMENS, interfaccia versione INGENIA (Valvital, Automazione) - /// - SIEMENS_INGENIA, - /// - /// Adapter SIEMENS, interfaccia versione LASCO (Valvital, Pressa Bilancere) - /// - SIEMENS_LASCO, - /// - /// Adapter SIEMENS, interfaccia versione PRESSOIL + CEI (Valvital, Pressa Idraulica) - /// - SIEMENS_PRESSOIL_CEI, - /// - /// Adapter SIEMENS, interfaccia versione SAET (Valvital, forni / tempra) - /// - SIEMENS_SAET, - /// - /// Adapter SIEMENS, interfaccia versione Torri - /// - SIEMENS_TORRI, - /// - /// Metodi di WPS WebPageScraping (es x compressori Atlas Copco) - /// - WPS - } - /// - /// Tipo di ciclo da processare - /// - public enum gatherCycle - { - /// - /// Very High Frequency (solo x invii...) - /// - VHF, - /// - /// lettura dati ad alta frequenza - /// - HF, - /// - /// lettura dati standard - /// - MF, - /// - /// lettura dati bassa freq - /// - LF, - /// - /// lettura dati bassissima priorità (re-sync stato allarmi) - /// - VLF - } - /// - /// Classe conf x item DynData - /// - public class DynDataItem - { - public string key { get; set; } = ""; - public string name { get; set; } = ""; - public string val { get; set; } = ""; - public string unit { get; set; } = ""; - public string func { get; set; } = ""; - public int sPeriod { get; set; } = 60; - /// - /// Valore effettivo da salvare - /// - public string actVal { get; set; } = ""; - /// - /// DataOra scadenza invio forzato - /// - public DateTime DTScad = DateTime.Now; - } - /// - /// Classe conf x decodifica stsatus - /// - public class StatusItem : DynDataItem - { - public Dictionary codeMapping; - } - /// - /// Classe conf server html - /// - public class srvData - { - public string baseUri { get; set; } = ""; - public string driverName { get; set; } = ""; - } - /// - /// Elenco oggetti del monitoraggio (DynData, Status) - /// - public class MonitoredItemsConf - { - public srvData SrvData { get; set; } - public List DynData { get; set; } - public List Status { get; set; } - } - /// - /// Configurazione per Eventi/Variabili - /// - public class EVData - { - /// - /// Unità di misura - /// - public string UM { get; set; } = "num"; - /// - /// Valore salvato - /// - public string Val { get; set; } = ""; - /// - /// DataOra scadenza invio forzato - /// - public DateTime DTScad = DateTime.Now; - } - /// - /// Configurazione per Variabili Casuali - /// - public class VCData - { - /// - /// Periodo di riferimento - /// - public int Period { get; set; } = 60; - /// - /// Tipologia di funzione da applicare - /// - public VC_func Funzione { get; set; } = VC_func.POINT; - /// - /// DataOra inizio periodo di elaborazione - /// - public DateTime DTStart; - /// - /// Array dati per calcolo - /// - public List dataArray; - } - - /// - /// informazioni di produzione - /// - public struct prodData - { - public string Operator; - - public bool Status; - public int AccTime; - public int Power; - public string FuncMode; - public bool EmrStop; - public string MessageCode; - public string MessageText; - - } - - - /// - /// Dato generico (per decodifica) - /// - public class otherData - { - public string codNum; - public string memAddr; - public string varName; - public string dataType; - public otherData() - { - codNum = ""; - memAddr = ""; - varName = ""; - dataType = ""; - } - public otherData(string _codNum, string _memAddr, string _varName, string _dataType) - { - codNum = _codNum; - memAddr = _memAddr; - varName = _varName; - dataType = _dataType; - } - } - /// - /// Classe che contiene tutte le NUOVE informaizoni da aggiornare sulla form - /// - public class newDisplayData - { - /// - /// Dati tipo IN (RAW) - /// - public string newInData { get; set; } = ""; - /// - /// Dati tipo Signal - /// - public string newSignalData { get; set; } = ""; - /// - /// Dati tipo FluxLog - /// - public string newFLogData { get; set; } = ""; - /// - /// Dati tipo UrlCall - /// - public string newUrlCallData { get; set; } = ""; - /// - /// Dati tipo LiveLog - /// - public string newLiveLogData { get; set; } = ""; - /// - /// Oggetto COUTNER generico (pezzi, portata...) - /// - public int counter { get; set; } = -9999; - /// - /// Bitmap attuale segnali letti - /// - public string currBitmap { get; set; } = ""; - /// - /// Stato semaforo IN verso PLC - /// - public Semaforo semIn { get; set; } = Semaforo.ND; - /// - /// Stato semaforo OUT verso MES - /// - public Semaforo semOut { get; set; } = Semaforo.ND; - /// - /// Verifica se contenga valori (NON default/empty) - /// - public bool hasData - { - get - { - bool answ = false; - // true se qualcosa NON E' come default - if (!string.IsNullOrWhiteSpace(newInData) || !string.IsNullOrWhiteSpace(newSignalData) || !string.IsNullOrWhiteSpace(newFLogData) || !string.IsNullOrWhiteSpace(newUrlCallData) || !string.IsNullOrWhiteSpace(newLiveLogData) || counter > -9999 || !string.IsNullOrWhiteSpace(currBitmap) || semIn != Semaforo.ND || semOut != Semaforo.ND) - { - answ = true; - } - return answ; - } - } - } - - /// - /// StFlag8: set di 8 bit (1 word) contente semaforo di variabili - /// - [Flags] - public enum StFlag8 : int - { - NONE = 0, - B0 = 1 << 0, - B1 = 1 << 1, - B2 = 1 << 2, - B3 = 1 << 3, - B4 = 1 << 4, - B5 = 1 << 5, - B6 = 1 << 6, - B7 = 1 << 7 - } - /// - /// StFlag32: set di 32 bit (4 word) contente semaforo di variabili - /// - [Flags] - public enum StFlag32 : int - { - NONE = 0, - B00 = 1 << 0, - B01 = 1 << 1, - B02 = 1 << 2, - B03 = 1 << 3, - B04 = 1 << 4, - B05 = 1 << 5, - B06 = 1 << 6, - B07 = 1 << 7, - B08 = 1 << 8, - B09 = 1 << 9, - B10 = 1 << 10, - B11 = 1 << 11, - B12 = 1 << 12, - B13 = 1 << 13, - B14 = 1 << 14, - B15 = 1 << 15, - B16 = 1 << 16, - B17 = 1 << 17, - B18 = 1 << 18, - B19 = 1 << 19, - B20 = 1 << 20, - B21 = 1 << 21, - B22 = 1 << 22, - B23 = 1 << 23, - B24 = 1 << 24, - B25 = 1 << 25, - B26 = 1 << 26, - B27 = 1 << 27, - B28 = 1 << 28, - B29 = 1 << 29, - B30 = 1 << 30, - B31 = 1 << 31 - } - /// - /// Enumerazione tipi di semaforo - /// - public enum Semaforo - { - /// - /// Stato non definito - /// - ND, - /// - /// Verde - /// - SV, - /// - /// Giallo - /// - SG, - /// - /// Rosso - /// - SR, - /// - /// Grigio/Spento - /// - SS - } - /// - /// Enumerazione tipi di tipi di URL x invio - /// - public enum urlType - { - /// - /// Salvataggio FluxLog (valori estesi che non provocano calcoli di macchine a stati, eventi...) - /// - FLog, - /// - /// INPUT segnali in ingresso (standard base MAPO) - /// - SignIN - } - - /// - /// Elenco STATI CNC OSAI - /// - public enum CNC_STATUS_OSAI - { - IDLE = 1, - CYCLE, - HODA, - RUNH, - HRUN, - ERRO, - WAIT, - RESET, - EMERG, - INPUT - } - /// - /// Elenco MODI CNC - /// - public enum CNC_MODE - { - /// - /// Non definito - /// - ND = 0, - /// - /// AUTOMATICO - /// - AUTO, - /// - /// EDIT (MEMORY EDIT) - /// - EDIT, - /// - /// MEN (MEMORY OPERATION) - /// - MEN, - /// - /// MDI (MANUAL DATA INPUT) - /// - MDI, - /// - /// HANDLE/INC (MANUAL HANDLE / INCREMENTAL FEED) - /// - HANDLE_INC, - /// - /// HOME - /// - HOME, - /// - /// JOG (MANUAL CONTINUOUS FEED) - /// - JOG, - /// - /// JOG MAN - /// - JOG_MAN, - /// - /// JOG_INC - /// - JOG_INC, - /// - /// PROFILE - /// - PROFILE, - /// - /// SEMI - /// - SEMI, - /// - /// THND (TEACH IN HANDLE) - /// - THND, - /// - /// TJOG (TEACH IN JOG) - /// - TJOG, - /// - /// RMT (DNC OPERATION) - /// - RMT, - /// - /// REF (MANUAL REFERENCE POSITION RETURN) - /// - REF - } } \ No newline at end of file From d0d8b4ecdef4a6b3b705e0673fbda6f640b05061 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 27 Dec 2019 17:39:11 +0100 Subject: [PATCH 4/5] Fix errore naming in download installers (temp dir!) --- IOB-WIN/MainForm.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IOB-WIN/MainForm.cs b/IOB-WIN/MainForm.cs index d55e118e..a70057a0 100644 --- a/IOB-WIN/MainForm.cs +++ b/IOB-WIN/MainForm.cs @@ -280,7 +280,7 @@ namespace IOB_WIN AutoUpdater.ShowRemindLaterButton = false; AutoUpdater.RunUpdateAsAdmin = utils.CRB("AUpdAsAdm"); AutoUpdater.ReportErrors = false; - AutoUpdater.DownloadPath = @"C:\Steawmare\src\"; + AutoUpdater.DownloadPath = @"C:\Steamware\src\"; AutoUpdater.ApplicationExitEvent += AutoUpdater_ApplicationExitEvent; AutoUpdater.Start(updateUrl); } From c728195b0e442b08027a44e3a355f8b517566e3e Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 27 Dec 2019 17:39:26 +0100 Subject: [PATCH 5/5] inclusione preliminare classi x gestione redis con framwork 4 compact --- IOB-WIN/IOB-WIN.csproj | 12 ++++++++++++ IOB-WIN/packages.config | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/IOB-WIN/IOB-WIN.csproj b/IOB-WIN/IOB-WIN.csproj index 91fd537f..21255258 100644 --- a/IOB-WIN/IOB-WIN.csproj +++ b/IOB-WIN/IOB-WIN.csproj @@ -113,6 +113,18 @@ ..\packages\S7netplus.0.1.9\lib\net40\S7.Net.dll + + ..\packages\ServiceStack.Common.4.0.62\lib\net40\ServiceStack.Common.dll + + + ..\packages\ServiceStack.Interfaces.4.0.62\lib\portable-wp80+sl5+net40+win8+wpa81+monotouch+monoandroid+xamarin.ios10\ServiceStack.Interfaces.dll + + + ..\packages\ServiceStack.Redis.4.0.62\lib\net40\ServiceStack.Redis.dll + + + ..\packages\ServiceStack.Text.4.0.62\lib\net40\ServiceStack.Text.dll + diff --git a/IOB-WIN/packages.config b/IOB-WIN/packages.config index 93da5397..b9bf65c6 100644 --- a/IOB-WIN/packages.config +++ b/IOB-WIN/packages.config @@ -21,4 +21,8 @@ + + + + \ No newline at end of file