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 00000000..4f0e0ad0
Binary files /dev/null and b/IOB-MAN/App_Readme/SteamWare_demo/example-favicon.ico differ
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
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
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/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();
}
}
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);
}
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