Merge branch 'IobMan' into develop

This commit is contained in:
Samuele E. Locatelli
2019-12-27 17:39:31 +01:00
17 changed files with 1166 additions and 832 deletions
+46 -6
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
@@ -6,14 +6,54 @@
<appSettings>
<add key="appName" value="IOB-MAN" />
<add key="checkPeriod" value="20" />
<add key="chekMult" value="25"/>
<add key="watchDogMult" value="500"/>
<add key="autoRestartTimeoutMin" value="15"/>
<add key="autoStartProc" value="true"/>
<add key="closeOnChildUpdate" value="true"/>
<add key="chekMult" value="25" />
<add key="watchDogMult" value="500" />
<add key="autoRestartTimeoutMin" value="15" />
<add key="autoStartProc" value="true" />
<add key="closeOnChildUpdate" value="true" />
<add key="targetExe" value="C:\Steamware\IOB-WIN\IOB-WIN.exe" />
<add key="BaseArg" value="MODE=MAN IOB=" />
<add key="ArgsList" value="SIMUL_00,SIMUL_00" />
<add key="ArgsConfFile" value="/CONF/process.json" />
</appSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.4.0" newVersion="4.1.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="SharpCompress" publicKeyToken="afb0a02973931d96" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-0.24.0.0" newVersion="0.24.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.IO.Pipelines" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Channels" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+12
View File
@@ -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.
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log" >
<!-- optional, add some variabeles
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue"/>
<!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets async="true">
<target xsi:type="File"
name="SteamWareLib"
fileName="${basedir}/logs/${shortdate}-SteamWare.log"
layout="${longdate} ${uppercase:${level}} ${message}"
/>
</targets>
<rules>
<logger name="SteamWare.*" minlevel="Debug" writeTo="SteamWareLib" />
</rules>
</nlog>
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<connectionStrings>
<add name="SteamWare.Properties.Settings.loggerConnectionString" connectionString="Data Source=SQL2012DEV;Initial Catalog=Flamma_SC;Persist Security Info=True;User ID=sa;Password=keyhammer16;" providerName="System.Data.SqlClient" />
<add name="SteamWare.Properties.Settings.SteamWare_VocabolarioConnectionString" connectionString="Data Source=SQL2012DEV;Initial Catalog=SteamWare_Vocabolario;Persist Security Info=True;User ID=sa;Password=keyhammer16;" providerName="System.Data.SqlClient" />
<add name="SteamWare.Properties.Settings.DS_AuthConnectionString" connectionString="Data Source=SQL2012DEV;Initial Catalog=SteamWare_Anagrafica;Persist Security Info=True;User ID=sa;Password=keyhammer16;" providerName="System.Data.SqlClient" />
<add name="SteamWare.Properties.Settings.AnagraficaBremboConnectionString" connectionString="Data Source=SQL2012DEV;Initial Catalog=AnagraficaBrembo;Persist Security Info=True;User ID=sa;Password=keyhammer16;" providerName="System.Data.SqlClient" />
<add name="SteamWare.Properties.Settings.SteamWare_BremboConnectionString" connectionString="Data Source=SQL2012DEV;Initial Catalog=SteamWare_Brembo;Persist Security Info=True;User ID=sa;Password=keyhammer16;" providerName="System.Data.SqlClient" />
<add name="SteamWare.Properties.Settings.Flamma_AnagraficaConnectionString" connectionString="Data Source=SQL2012DEV;Initial Catalog=Flamma_Anagrafica;Persist Security Info=True;User ID=sa;Password=keyhammer16;" providerName="System.Data.SqlClient" />
<add name="SteamWare.Properties.Settings.AnagraficaConnectionString" connectionString="Data Source=SQL2012DEV;Initial Catalog=SteamWare_Anagrafica;Persist Security Info=True;User ID=sa;Password=keyhammer16;" providerName="System.Data.SqlClient" />
<add name="SteamWare.Properties.Settings.SEL_fatture_SteamWareConnectionString" connectionString="Data Source=SQLSTEAM;Initial Catalog=SEL_fatture_SteamWare;User ID=sa;Password=keyhammer;Encrypt=False;TrustServerCertificate=True" providerName="System.Data.SqlClient" />
<add name="SteamWare.Properties.Settings.Equa_AnagraficaConnectionString" connectionString="Data Source=SQL2012DEV;Initial Catalog=Equa_Anagrafica;Persist Security Info=True;User ID=sa;Password=keyhammer16;" providerName="System.Data.SqlClient" />
<add name="SteamWare.Properties.Settings.GMWConnectionString" connectionString="Data Source=SQL2012DEV;Initial Catalog=GMW;Persist Security Info=True;User ID=sa;Password=keyhammer16;" providerName="System.Data.SqlClient" />
<add name="SteamWare.Properties.Settings.MoonProConnectionString" connectionString="Data Source=SQL2016DEV;Initial Catalog=MoonPro;Persist Security Info=True;User ID=sa;Password=keyhammer16" providerName="System.Data.SqlClient" />
<add name="SteamWare.Properties.Settings.DbConfConnectionString" connectionString="Data Source=SQL2016DEV;Initial Catalog=MoonPro;Persist Security Info=True;User ID=sa;Password=keyhammer16" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
@@ -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
Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

+89
View File
@@ -38,22 +38,101 @@
<ApplicationIcon>IobManIcon.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="AegisImplicitMail, Version=1.0.3.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\AIM.1.0.3\lib\AegisImplicitMail.dll</HintPath>
</Reference>
<Reference Include="AjaxControlToolkit, Version=19.1.0.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e, processorArchitecture=MSIL">
<HintPath>..\packages\AjaxControlToolkit.19.1.0\lib\net40\AjaxControlToolkit.dll</HintPath>
</Reference>
<Reference Include="Costura, Version=4.1.0.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL">
<HintPath>..\packages\Costura.Fody.4.1.0\lib\net40\Costura.dll</HintPath>
</Reference>
<Reference Include="Crc32C.NET, Version=1.0.5.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Crc32C.NET.1.0.5.0\lib\net20\Crc32C.NET.dll</HintPath>
</Reference>
<Reference Include="DnsClient, Version=1.2.0.0, Culture=neutral, PublicKeyToken=4574bb5573c51424, processorArchitecture=MSIL">
<HintPath>..\packages\DnsClient.1.2.0\lib\net45\DnsClient.dll</HintPath>
</Reference>
<Reference Include="ICSharpCode.SharpZipLib, Version=1.2.0.246, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
<HintPath>..\packages\SharpZipLib.1.2.0\lib\net45\ICSharpCode.SharpZipLib.dll</HintPath>
</Reference>
<Reference Include="MapoSDK, Version=6.9.1912.1271, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MapoSDK.6.9.1912.1271\lib\net40\MapoSDK.dll</HintPath>
</Reference>
<Reference Include="MongoDB.Bson, Version=2.10.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Bson.2.10.0\lib\net452\MongoDB.Bson.dll</HintPath>
</Reference>
<Reference Include="MongoDB.Driver, Version=2.10.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.2.10.0\lib\net452\MongoDB.Driver.dll</HintPath>
</Reference>
<Reference Include="MongoDB.Driver.Core, Version=2.10.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.Core.2.10.0\lib\net452\MongoDB.Driver.Core.dll</HintPath>
</Reference>
<Reference Include="MongoDB.Libmongocrypt, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Libmongocrypt.1.0.0\lib\net452\MongoDB.Libmongocrypt.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.4.6.8\lib\net45\NLog.dll</HintPath>
</Reference>
<Reference Include="PdfSharp, Version=1.50.5147.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
<HintPath>..\packages\PDFsharp.1.50.5147\lib\net20\PdfSharp.dll</HintPath>
</Reference>
<Reference Include="PdfSharp.Charting, Version=1.50.5147.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
<HintPath>..\packages\PDFsharp.1.50.5147\lib\net20\PdfSharp.Charting.dll</HintPath>
</Reference>
<Reference Include="Pipelines.Sockets.Unofficial, Version=1.0.0.0, Culture=neutral, PublicKeyToken=42ea0a778e13fbe2, processorArchitecture=MSIL">
<HintPath>..\packages\Pipelines.Sockets.Unofficial.2.1.1\lib\net461\Pipelines.Sockets.Unofficial.dll</HintPath>
</Reference>
<Reference Include="SharpCompress, Version=0.24.0.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL">
<HintPath>..\packages\SharpCompress.0.24.0\lib\net45\SharpCompress.dll</HintPath>
</Reference>
<Reference Include="Snappy.NET, Version=1.1.1.8, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Snappy.NET.1.1.1.8\lib\net45\Snappy.NET.dll</HintPath>
</Reference>
<Reference Include="StackExchange.Redis, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c219ff1ca8c2ce46, processorArchitecture=MSIL">
<HintPath>..\packages\StackExchange.Redis.2.0.601\lib\net461\StackExchange.Redis.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Diagnostics.PerformanceCounter, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.PerformanceCounter.4.7.0\lib\net461\System.Diagnostics.PerformanceCounter.dll</HintPath>
</Reference>
<Reference Include="System.IO.Compression" />
<Reference Include="System.IO.Pipelines, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Pipelines.4.7.0\lib\netstandard2.0\System.IO.Pipelines.dll</HintPath>
</Reference>
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.7.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Threading.Channels, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Channels.4.7.0\lib\netstandard2.0\System.Threading.Channels.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Transactions" />
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@@ -78,7 +157,11 @@
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="utils.cs" />
<Content Include="App_Readme\README_SteamWare.txt" />
<Content Include="App_Readme\SteamWare_demo\example-config-table.txt" />
<Content Include="App_Readme\SteamWare_demo\example-favicon.ico" />
<Content Include="IobManIcon.ico" />
<Content Include="mongocrypt.dll" />
<Content Include="Resources\IobManIcon.ico">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
@@ -94,6 +177,8 @@
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="App_Readme\SteamWare_demo\example-app.config" />
<None Include="App_Readme\SteamWare_demo\example-NLog.config" />
<None Include="CONF\.placeholder">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
@@ -132,6 +217,10 @@
</PropertyGroup>
<Error Condition="!Exists('..\packages\Costura.Fody.4.1.0\build\Costura.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.4.1.0\build\Costura.Fody.props'))" />
<Error Condition="!Exists('..\packages\Fody.6.0.5\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.0.5\build\Fody.targets'))" />
<Error Condition="!Exists('..\packages\MongoDB.Libmongocrypt.1.0.0\build\MongoDB.Libmongocrypt.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MongoDB.Libmongocrypt.1.0.0\build\MongoDB.Libmongocrypt.targets'))" />
<Error Condition="!Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
</Target>
<Import Project="..\packages\Fody.6.0.5\build\Fody.targets" Condition="Exists('..\packages\Fody.6.0.5\build\Fody.targets')" />
<Import Project="..\packages\MongoDB.Libmongocrypt.1.0.0\build\MongoDB.Libmongocrypt.targets" Condition="Exists('..\packages\MongoDB.Libmongocrypt.1.0.0\build\MongoDB.Libmongocrypt.targets')" />
<Import Project="..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
</Project>
+27
View File
@@ -1,9 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AIM" version="1.0.3" targetFramework="net461" />
<package id="AjaxControlToolkit" version="19.1.0" targetFramework="net461" />
<package id="Costura.Fody" version="4.1.0" targetFramework="net461" />
<package id="Crc32C.NET" version="1.0.5.0" targetFramework="net461" />
<package id="DnsClient" version="1.2.0" targetFramework="net461" />
<package id="Fody" version="6.0.5" targetFramework="net461" developmentDependency="true" />
<package id="MapoSDK" version="6.9.1912.1271" targetFramework="net461" />
<package id="Microsoft.NETCore.Platforms" version="3.1.0" targetFramework="net461" />
<package id="MongoDB.Bson" version="2.10.0" targetFramework="net461" />
<package id="MongoDB.Driver" version="2.10.0" targetFramework="net461" />
<package id="MongoDB.Driver.Core" version="2.10.0" targetFramework="net461" />
<package id="MongoDB.Libmongocrypt" version="1.0.0" targetFramework="net461" />
<package id="NETStandard.Library" version="2.0.3" targetFramework="net461" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net461" />
<package id="NLog" version="4.6.8" targetFramework="net461" />
<package id="NLog.Config" version="4.6.8" targetFramework="net461" />
<package id="NLog.Schema" version="4.6.8" targetFramework="net461" />
<package id="PDFsharp" version="1.50.5147" targetFramework="net461" />
<package id="Pipelines.Sockets.Unofficial" version="2.1.1" targetFramework="net461" />
<package id="SharpCompress" version="0.24.0" targetFramework="net461" />
<package id="SharpZipLib" version="1.2.0" targetFramework="net461" />
<package id="Snappy.NET" version="1.1.1.8" targetFramework="net461" />
<package id="StackExchange.Redis" version="2.0.601" targetFramework="net461" />
<package id="SteamWare" version="3.5.1912.708" targetFramework="net461" />
<package id="System.Buffers" version="4.5.0" targetFramework="net461" />
<package id="System.Diagnostics.PerformanceCounter" version="4.7.0" targetFramework="net461" />
<package id="System.IO.Pipelines" version="4.7.0" targetFramework="net461" />
<package id="System.Memory" version="4.5.3" targetFramework="net461" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net461" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.7.0" targetFramework="net461" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net461" />
<package id="System.Threading.Channels" version="4.7.0" targetFramework="net461" />
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net461" />
</packages>
+319
View File
@@ -0,0 +1,319 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace IOB_UT
{
/// <summary>
/// Tipologie di DUMP memoria
/// </summary>
public enum dumpType
{
/// <summary>
/// Salvataggio all'avvio aree memoria (con sovrascrittura)
/// </summary>
STARTUP,
/// <summary>
/// Campionamento periodico
/// </summary>
SAMPLE
}
/// <summary>
/// Tipologia di adapters ammessi
/// </summary>
public enum tipoAdapter
{
/// <summary>
/// Adapter SIMULAZIONE
/// </summary>
SIMULA,
/// <summary>
/// adapter FANUC
/// </summary>
FANUC,
/// <summary>
/// adapter KAWASAKI e-controller
/// </summary>
KAWASAKI,
/// <summary>
/// Adapter non specificato
/// </summary>
ND,
/// <summary>
/// Adapter MTConnect
/// </summary>
MTConnect,
/// <summary>
/// Adapter OMRON
/// </summary>
OMRON,
/// <summary>
/// Adapter OSAI CNDEX (Cndex)
/// </summary>
OSAI_CNDEX,
/// <summary>
/// Adapter OSAI OPEN (ws)
/// </summary>
OSAI_OPEN,
/// <summary>
/// Adapter OSAI VB6
/// </summary>
OSAI_VB6,
/// <summary>
/// Adapter SIEMENS
/// </summary>
SIEMENS,
/// <summary>
/// Adapter SIEMENS, interfaccia versione APROCHIM (filtro liquidi rettifiche)
/// </summary>
SIEMENS_APROCHIM,
/// <summary>
/// Adapter SIEMENS, interfaccia versione VIPA @2001
/// </summary>
SIEMENS_AT2001,
/// <summary>
/// Adapter SIEMENS, interfaccia versione FAPE (punzonatrici)
/// </summary>
SIEMENS_FAPE,
/// <summary>
/// Adapter SIEMENS, interfaccia versione COMUR (dentatrice)
/// </summary>
SIEMENS_COMUR,
/// <summary>
/// Adapter SIEMENS, interfaccia versione INGENIA (Valvital, Automazione)
/// </summary>
SIEMENS_INGENIA,
/// <summary>
/// Adapter SIEMENS, interfaccia versione LASCO (Valvital, Pressa Bilancere)
/// </summary>
SIEMENS_LASCO,
/// <summary>
/// Adapter SIEMENS, interfaccia versione PRESSOIL + CEI (Valvital, Pressa Idraulica)
/// </summary>
SIEMENS_PRESSOIL_CEI,
/// <summary>
/// Adapter SIEMENS, interfaccia versione SAET (Valvital, forni / tempra)
/// </summary>
SIEMENS_SAET,
/// <summary>
/// Adapter SIEMENS, interfaccia versione Torri
/// </summary>
SIEMENS_TORRI,
/// <summary>
/// Metodi di WPS WebPageScraping (es x compressori Atlas Copco)
/// </summary>
WPS
}
/// <summary>
/// Tipo di ciclo da processare
/// </summary>
public enum gatherCycle
{
/// <summary>
/// Very High Frequency (solo x invii...)
/// </summary>
VHF,
/// <summary>
/// lettura dati ad alta frequenza
/// </summary>
HF,
/// <summary>
/// lettura dati standard
/// </summary>
MF,
/// <summary>
/// lettura dati bassa freq
/// </summary>
LF,
/// <summary>
/// lettura dati bassissima priorità (re-sync stato allarmi)
/// </summary>
VLF
}
/// <summary>
/// StFlag8: set di 8 bit (1 word) contente semaforo di variabili
/// </summary>
[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
}
/// <summary>
/// StFlag32: set di 32 bit (4 word) contente semaforo di variabili
/// </summary>
[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
}
/// <summary>
/// Enumerazione tipi di semaforo
/// </summary>
public enum Semaforo
{
/// <summary>
/// Stato non definito
/// </summary>
ND,
/// <summary>
/// Verde
/// </summary>
SV,
/// <summary>
/// Giallo
/// </summary>
SG,
/// <summary>
/// Rosso
/// </summary>
SR,
/// <summary>
/// Grigio/Spento
/// </summary>
SS
}
/// <summary>
/// Enumerazione tipi di tipi di URL x invio
/// </summary>
public enum urlType
{
/// <summary>
/// Salvataggio FluxLog (valori estesi che non provocano calcoli di macchine a stati, eventi...)
/// </summary>
FLog,
/// <summary>
/// INPUT segnali in ingresso (standard base MAPO)
/// </summary>
SignIN
}
/// <summary>
/// Elenco STATI CNC OSAI
/// </summary>
public enum CNC_STATUS_OSAI
{
IDLE = 1,
CYCLE,
HODA,
RUNH,
HRUN,
ERRO,
WAIT,
RESET,
EMERG,
INPUT
}
/// <summary>
/// Elenco MODI CNC
/// </summary>
public enum CNC_MODE
{
/// <summary>
/// Non definito
/// </summary>
ND = 0,
/// <summary>
/// AUTOMATICO
/// </summary>
AUTO,
/// <summary>
/// EDIT (MEMORY EDIT)
/// </summary>
EDIT,
/// <summary>
/// MEN (MEMORY OPERATION)
/// </summary>
MEN,
/// <summary>
/// MDI (MANUAL DATA INPUT)
/// </summary>
MDI,
/// <summary>
/// HANDLE/INC (MANUAL HANDLE / INCREMENTAL FEED)
/// </summary>
HANDLE_INC,
/// <summary>
/// HOME
/// </summary>
HOME,
/// <summary>
/// JOG (MANUAL CONTINUOUS FEED)
/// </summary>
JOG,
/// <summary>
/// JOG MAN
/// </summary>
JOG_MAN,
/// <summary>
/// JOG_INC
/// </summary>
JOG_INC,
/// <summary>
/// PROFILE
/// </summary>
PROFILE,
/// <summary>
/// SEMI
/// </summary>
SEMI,
/// <summary>
/// THND (TEACH IN HANDLE)
/// </summary>
THND,
/// <summary>
/// TJOG (TEACH IN JOG)
/// </summary>
TJOG,
/// <summary>
/// RMT (DNC OPERATION)
/// </summary>
RMT,
/// <summary>
/// REF (MANUAL REFERENCE POSITION RETURN)
/// </summary>
REF
}
}
+2
View File
@@ -100,8 +100,10 @@
<SubType>Component</SubType>
</Compile>
<Compile Include="BinaryFormatter.cs" />
<Compile Include="Enums.cs" />
<Compile Include="fileMover.cs" />
<Compile Include="IniFile.cs" />
<Compile Include="Objects.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
+510
View File
@@ -0,0 +1,510 @@
using MapoSDK;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace IOB_UT
{
/// <summary>
/// Oggetto timing x archiviazione dati perfomances
/// </summary>
public class TimeRec
{
/// <summary>
/// Classe chiamante della funzione (es codice univoco IOB)
/// </summary>
public string classCall;
/// <summary>
/// Codice univoco chiamata: tipo R4 (read 4 byte), W2 (write 2 Byte)
/// </summary>
public string codCall;
/// <summary>
/// Num chiamate totale
/// </summary>
public int numCall;
/// <summary>
/// Tempo medio chiamata
/// </summary>
public double avgMsec
{
get
{
return totMsec.TotalMilliseconds / numCall;
}
}
/// <summary>
/// Totale Msec accumulati
/// </summary>
public TimeSpan totMsec;
/// <summary>
/// Classe record timing
/// </summary>
public TimeRec()
{
codCall = "";
numCall = 0;
totMsec = new TimeSpan(0);
}
/// <summary>
/// Classe record timing
/// </summary>
/// <param name="caller"></param>
/// <param name="codice"></param>
/// <param name="ticks"></param>
public TimeRec(string caller, string codice, long nTicks)
{
classCall = caller;
codCall = codice;
numCall = 1;
totMsec = new TimeSpan(nTicks);
}
}
/// <summary>
/// Classe gestione valori campionati su periodo
/// </summary>
public class sampleVect
{
/// <summary>
/// Dimensione finestra di campionamento (secondi)
/// </summary>
protected int windSize;
/// <summary>
/// vettore valori temporali della serie
/// </summary>
protected List<DateTime> lTime;
/// <summary>
/// vettore valoti puntuali della serie
/// </summary>
protected List<int> lVal;
/// <summary>
/// Inizializzo l'oggetto
/// </summary>
public sampleVect()
{
// init valori default...
windSize = baseUtils.CRI("countWindSize") > 0 ? baseUtils.CRI("countWindSize") : 60;
lTime = new List<DateTime>();
lVal = new List<int>();
}
/// <summary>
/// Conteggio elementi
/// </summary>
protected int numElem
{
get
{
int answ = 0;
try
{
answ = lTime.Count;
}
catch
{ }
return answ;
}
}
/// <summary>
/// Verifica ampiezza finestra valori First-Last
/// </summary>
protected double flWindSize
{
get
{
double answ = 0;
if (numElem > 1)
{
answ = lTime.Last().Subtract(lTime[0]).TotalSeconds;
}
return answ;
}
}
/// <summary>
/// Verifica ampiezza finestra valori Second-Last
/// </summary>
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;
}
}
/// <summary>
/// Aggiunge un valore alla serie ed eventualmente elimina i valori superflui a garantirne una finestra temporale valida
/// </summary>
/// <param name="tempo"></param>
/// <param name="valore"></param>
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...
}
}
/// <summary>
/// Calcola il valore mediano...
/// </summary>
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;
}
}
/// <summary>
/// Verifica se la vc sia valida (ovvero almeno 2 valori e intervallo > window richiesta)
/// </summary>
public bool vcValid
{
get
{
return (flWindSize > windSize && numElem > 1);
}
}
}
/// <summary>
/// GEstione dati di timing
/// </summary>
public static class TimingData
{
public static List<TimeRec> results = new List<TimeRec>();
/// <summary>
/// aggiorno vettore aggiungendo risultato
/// </summary>
/// <param name="caller">Codice chiamante</param>
/// <param name="codice">Codice da registrare (univoco con chiamante)</param>
/// <param name="ticks">Tempo esecuzione in ticks</param>
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));
}
}
/// <summary>
/// Resetta i dati registrati (ad avvio adapter...)
/// </summary>
public static void resetData()
{
results = new List<TimeRec>();
}
}
/// <summary>
/// Gestione Endianness
/// </summary>
public static class Endian
{
/// <summary>
/// Scambia MSB/LSB per 16bit
/// </summary>
/// <param name="inValue"></param>
/// <returns></returns>
public static UInt16 SwapUInt16(UInt16 inValue)
{
return (UInt16)(((inValue & 0xff00) >> 8) |
((inValue & 0x00ff) << 8));
}
/// <summary>
/// Scambia MSB/LSB per 32bit
/// </summary>
/// <param name="inValue"></param>
/// <returns></returns>
public static UInt32 SwapUInt32(UInt32 inValue)
{
return ((inValue & 0xff000000) >> 24) |
((inValue & 0x00ff0000) >> 8) |
((inValue & 0x0000ff00) << 8) |
((inValue & 0x000000ff) << 24);
}
}
/// <summary>
/// Classe conf x item DynData
/// </summary>
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;
/// <summary>
/// Valore effettivo da salvare
/// </summary>
public string actVal { get; set; } = "";
/// <summary>
/// DataOra scadenza invio forzato
/// </summary>
public DateTime DTScad = DateTime.Now;
}
/// <summary>
/// Classe conf x decodifica stsatus
/// </summary>
public class StatusItem : DynDataItem
{
public Dictionary<string, string> codeMapping;
}
/// <summary>
/// Classe conf server html
/// </summary>
public class srvData
{
public string baseUri { get; set; } = "";
public string driverName { get; set; } = "";
}
/// <summary>
/// Elenco oggetti del monitoraggio (DynData, Status)
/// </summary>
public class MonitoredItemsConf
{
public srvData SrvData { get; set; }
public List<DynDataItem> DynData { get; set; }
public List<StatusItem> Status { get; set; }
}
/// <summary>
/// Configurazione per Eventi/Variabili
/// </summary>
public class EVData
{
/// <summary>
/// Unità di misura
/// </summary>
public string UM { get; set; } = "num";
/// <summary>
/// Valore salvato
/// </summary>
public string Val { get; set; } = "";
/// <summary>
/// DataOra scadenza invio forzato
/// </summary>
public DateTime DTScad = DateTime.Now;
}
/// <summary>
/// Configurazione per Variabili Casuali
/// </summary>
public class VCData
{
/// <summary>
/// Periodo di riferimento
/// </summary>
public int Period { get; set; } = 60;
/// <summary>
/// Tipologia di funzione da applicare
/// </summary>
public VC_func Funzione { get; set; } = VC_func.POINT;
/// <summary>
/// DataOra inizio periodo di elaborazione
/// </summary>
public DateTime DTStart;
/// <summary>
/// Array dati per calcolo
/// </summary>
public List<double> dataArray;
}
/// <summary>
/// informazioni di produzione
/// </summary>
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;
}
/// <summary>
/// Dato generico (per decodifica)
/// </summary>
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;
}
}
/// <summary>
/// Classe che contiene tutte le NUOVE informaizoni da aggiornare sulla form
/// </summary>
public class newDisplayData
{
/// <summary>
/// Dati tipo IN (RAW)
/// </summary>
public string newInData { get; set; } = "";
/// <summary>
/// Dati tipo Signal
/// </summary>
public string newSignalData { get; set; } = "";
/// <summary>
/// Dati tipo FluxLog
/// </summary>
public string newFLogData { get; set; } = "";
/// <summary>
/// Dati tipo UrlCall
/// </summary>
public string newUrlCallData { get; set; } = "";
/// <summary>
/// Dati tipo LiveLog
/// </summary>
public string newLiveLogData { get; set; } = "";
/// <summary>
/// Oggetto COUTNER generico (pezzi, portata...)
/// </summary>
public int counter { get; set; } = -9999;
/// <summary>
/// Bitmap attuale segnali letti
/// </summary>
public string currBitmap { get; set; } = "";
/// <summary>
/// Stato semaforo IN verso PLC
/// </summary>
public Semaforo semIn { get; set; } = Semaforo.ND;
/// <summary>
/// Stato semaforo OUT verso MES
/// </summary>
public Semaforo semOut { get; set; } = Semaforo.ND;
/// <summary>
/// Verifica se contenga valori (NON default/empty)
/// </summary>
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;
}
}
}
/// <summary>
/// Rappresentazione dello stato corrente dell'IOB
/// </summary>
public class IobWinCurrentState
{
/// <summary>
/// Semaforo IN (IOB-PLC)
/// </summary>
public Semaforo SemIn { get; set; } = Semaforo.ND;
/// <summary>
/// Semaforo OUT (IOB-MPserver)
/// </summary>
public Semaforo SemOut { get; set; } = Semaforo.ND;
/// <summary>
/// Contatore IOB
/// </summary>
public float counterIOB { get; set; } = 0;
/// <summary>
/// Contatore Macchina
/// </summary>
public float counterMAC { get; set; } = 0;
/// <summary>
/// Lunghezza coda EVENTI in uscita
/// </summary>
public int queueEvLen { get; set; } = 0;
/// <summary>
/// Lunghezza coda FluxLog in uscita
/// </summary>
public int queueFLogLen { get; set; } = 0;
/// <summary>
/// DataOra ultima comunicazione IN (con PLC)
/// </summary>
public DateTime lastDataIn { get; set; } = DateTime.Now.AddYears(-1);
/// <summary>
/// DataOra ultima comunicazione OUT (con MP Server)
/// </summary>
public DateTime lastDataOut { get; set; } = DateTime.Now.AddYears(-1);
/// <summary>
/// Ultimo stato noto dei parametri in memoria letti da PLC
/// </summary>
public Dictionary<string, string> currParams { get; set; } = null;
}
}
-768
View File
@@ -648,772 +648,4 @@ namespace IOB_UT
}
}
/// <summary>
/// Oggetto timing x archiviazione dati perfomances
/// </summary>
public class TimeRec
{
/// <summary>
/// Classe chiamante della funzione (es codice univoco IOB)
/// </summary>
public string classCall;
/// <summary>
/// Codice univoco chiamata: tipo R4 (read 4 byte), W2 (write 2 Byte)
/// </summary>
public string codCall;
/// <summary>
/// Num chiamate totale
/// </summary>
public int numCall;
/// <summary>
/// Tempo medio chiamata
/// </summary>
public double avgMsec
{
get
{
return totMsec.TotalMilliseconds / numCall;
}
}
/// <summary>
/// Totale Msec accumulati
/// </summary>
public TimeSpan totMsec;
/// <summary>
/// Classe record timing
/// </summary>
public TimeRec()
{
codCall = "";
numCall = 0;
totMsec = new TimeSpan(0);
}
/// <summary>
/// Classe record timing
/// </summary>
/// <param name="caller"></param>
/// <param name="codice"></param>
/// <param name="ticks"></param>
public TimeRec(string caller, string codice, long nTicks)
{
classCall = caller;
codCall = codice;
numCall = 1;
totMsec = new TimeSpan(nTicks);
}
}
/// <summary>
/// Classe gestione valori campionati su periodo
/// </summary>
public class sampleVect
{
/// <summary>
/// Dimensione finestra di campionamento (secondi)
/// </summary>
protected int windSize;
/// <summary>
/// vettore valori temporali della serie
/// </summary>
protected List<DateTime> lTime;
/// <summary>
/// vettore valoti puntuali della serie
/// </summary>
protected List<int> lVal;
/// <summary>
/// Inizializzo l'oggetto
/// </summary>
public sampleVect()
{
// init valori default...
windSize = baseUtils.CRI("countWindSize") > 0 ? baseUtils.CRI("countWindSize") : 60;
lTime = new List<DateTime>();
lVal = new List<int>();
}
/// <summary>
/// Conteggio elementi
/// </summary>
protected int numElem
{
get
{
int answ = 0;
try
{
answ = lTime.Count;
}
catch
{ }
return answ;
}
}
/// <summary>
/// Verifica ampiezza finestra valori First-Last
/// </summary>
protected double flWindSize
{
get
{
double answ = 0;
if (numElem > 1)
{
answ = lTime.Last().Subtract(lTime[0]).TotalSeconds;
}
return answ;
}
}
/// <summary>
/// Verifica ampiezza finestra valori Second-Last
/// </summary>
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;
}
}
/// <summary>
/// Aggiunge un valore alla serie ed eventualmente elimina i valori superflui a garantirne una finestra temporale valida
/// </summary>
/// <param name="tempo"></param>
/// <param name="valore"></param>
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...
}
}
/// <summary>
/// Calcola il valore mediano...
/// </summary>
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;
}
}
/// <summary>
/// Verifica se la vc sia valida (ovvero almeno 2 valori e intervallo > window richiesta)
/// </summary>
public bool vcValid
{
get
{
return (flWindSize > windSize && numElem > 1);
}
}
}
/// <summary>
/// GEstione dati di timing
/// </summary>
public static class TimingData
{
public static List<TimeRec> results = new List<TimeRec>();
/// <summary>
/// aggiorno vettore aggiungendo risultato
/// </summary>
/// <param name="caller">Codice chiamante</param>
/// <param name="codice">Codice da registrare (univoco con chiamante)</param>
/// <param name="ticks">Tempo esecuzione in ticks</param>
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));
}
}
/// <summary>
/// Resetta i dati registrati (ad avvio adapter...)
/// </summary>
public static void resetData()
{
results = new List<TimeRec>();
}
}
/// <summary>
/// Gestione Endianness
/// </summary>
public static class Endian
{
/// <summary>
/// Scambia MSB/LSB per 16bit
/// </summary>
/// <param name="inValue"></param>
/// <returns></returns>
public static UInt16 SwapUInt16(UInt16 inValue)
{
return (UInt16)(((inValue & 0xff00) >> 8) |
((inValue & 0x00ff) << 8));
}
/// <summary>
/// Scambia MSB/LSB per 32bit
/// </summary>
/// <param name="inValue"></param>
/// <returns></returns>
public static UInt32 SwapUInt32(UInt32 inValue)
{
return ((inValue & 0xff000000) >> 24) |
((inValue & 0x00ff0000) >> 8) |
((inValue & 0x0000ff00) << 8) |
((inValue & 0x000000ff) << 24);
}
}
/// <summary>
/// Tipologie di DUMP memoria
/// </summary>
public enum dumpType
{
/// <summary>
/// Salvataggio all'avvio aree memoria (con sovrascrittura)
/// </summary>
STARTUP,
/// <summary>
/// Campionamento periodico
/// </summary>
SAMPLE
}
/// <summary>
/// Tipologia di adapters ammessi
/// </summary>
public enum tipoAdapter
{
/// <summary>
/// Adapter SIMULAZIONE
/// </summary>
SIMULA,
/// <summary>
/// adapter FANUC
/// </summary>
FANUC,
/// <summary>
/// adapter KAWASAKI e-controller
/// </summary>
KAWASAKI,
/// <summary>
/// Adapter non specificato
/// </summary>
ND,
/// <summary>
/// Adapter MTConnect
/// </summary>
MTConnect,
/// <summary>
/// Adapter OMRON
/// </summary>
OMRON,
/// <summary>
/// Adapter OSAI CNDEX (Cndex)
/// </summary>
OSAI_CNDEX,
/// <summary>
/// Adapter OSAI OPEN (ws)
/// </summary>
OSAI_OPEN,
/// <summary>
/// Adapter OSAI VB6
/// </summary>
OSAI_VB6,
/// <summary>
/// Adapter SIEMENS
/// </summary>
SIEMENS,
/// <summary>
/// Adapter SIEMENS, interfaccia versione APROCHIM (filtro liquidi rettifiche)
/// </summary>
SIEMENS_APROCHIM,
/// <summary>
/// Adapter SIEMENS, interfaccia versione VIPA @2001
/// </summary>
SIEMENS_AT2001,
/// <summary>
/// Adapter SIEMENS, interfaccia versione FAPE (punzonatrici)
/// </summary>
SIEMENS_FAPE,
/// <summary>
/// Adapter SIEMENS, interfaccia versione COMUR (dentatrice)
/// </summary>
SIEMENS_COMUR,
/// <summary>
/// Adapter SIEMENS, interfaccia versione INGENIA (Valvital, Automazione)
/// </summary>
SIEMENS_INGENIA,
/// <summary>
/// Adapter SIEMENS, interfaccia versione LASCO (Valvital, Pressa Bilancere)
/// </summary>
SIEMENS_LASCO,
/// <summary>
/// Adapter SIEMENS, interfaccia versione PRESSOIL + CEI (Valvital, Pressa Idraulica)
/// </summary>
SIEMENS_PRESSOIL_CEI,
/// <summary>
/// Adapter SIEMENS, interfaccia versione SAET (Valvital, forni / tempra)
/// </summary>
SIEMENS_SAET,
/// <summary>
/// Adapter SIEMENS, interfaccia versione Torri
/// </summary>
SIEMENS_TORRI,
/// <summary>
/// Metodi di WPS WebPageScraping (es x compressori Atlas Copco)
/// </summary>
WPS
}
/// <summary>
/// Tipo di ciclo da processare
/// </summary>
public enum gatherCycle
{
/// <summary>
/// Very High Frequency (solo x invii...)
/// </summary>
VHF,
/// <summary>
/// lettura dati ad alta frequenza
/// </summary>
HF,
/// <summary>
/// lettura dati standard
/// </summary>
MF,
/// <summary>
/// lettura dati bassa freq
/// </summary>
LF,
/// <summary>
/// lettura dati bassissima priorità (re-sync stato allarmi)
/// </summary>
VLF
}
/// <summary>
/// Classe conf x item DynData
/// </summary>
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;
/// <summary>
/// Valore effettivo da salvare
/// </summary>
public string actVal { get; set; } = "";
/// <summary>
/// DataOra scadenza invio forzato
/// </summary>
public DateTime DTScad = DateTime.Now;
}
/// <summary>
/// Classe conf x decodifica stsatus
/// </summary>
public class StatusItem : DynDataItem
{
public Dictionary<string, string> codeMapping;
}
/// <summary>
/// Classe conf server html
/// </summary>
public class srvData
{
public string baseUri { get; set; } = "";
public string driverName { get; set; } = "";
}
/// <summary>
/// Elenco oggetti del monitoraggio (DynData, Status)
/// </summary>
public class MonitoredItemsConf
{
public srvData SrvData { get; set; }
public List<DynDataItem> DynData { get; set; }
public List<StatusItem> Status { get; set; }
}
/// <summary>
/// Configurazione per Eventi/Variabili
/// </summary>
public class EVData
{
/// <summary>
/// Unità di misura
/// </summary>
public string UM { get; set; } = "num";
/// <summary>
/// Valore salvato
/// </summary>
public string Val { get; set; } = "";
/// <summary>
/// DataOra scadenza invio forzato
/// </summary>
public DateTime DTScad = DateTime.Now;
}
/// <summary>
/// Configurazione per Variabili Casuali
/// </summary>
public class VCData
{
/// <summary>
/// Periodo di riferimento
/// </summary>
public int Period { get; set; } = 60;
/// <summary>
/// Tipologia di funzione da applicare
/// </summary>
public VC_func Funzione { get; set; } = VC_func.POINT;
/// <summary>
/// DataOra inizio periodo di elaborazione
/// </summary>
public DateTime DTStart;
/// <summary>
/// Array dati per calcolo
/// </summary>
public List<double> dataArray;
}
/// <summary>
/// informazioni di produzione
/// </summary>
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;
}
/// <summary>
/// Dato generico (per decodifica)
/// </summary>
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;
}
}
/// <summary>
/// Classe che contiene tutte le NUOVE informaizoni da aggiornare sulla form
/// </summary>
public class newDisplayData
{
/// <summary>
/// Dati tipo IN (RAW)
/// </summary>
public string newInData { get; set; } = "";
/// <summary>
/// Dati tipo Signal
/// </summary>
public string newSignalData { get; set; } = "";
/// <summary>
/// Dati tipo FluxLog
/// </summary>
public string newFLogData { get; set; } = "";
/// <summary>
/// Dati tipo UrlCall
/// </summary>
public string newUrlCallData { get; set; } = "";
/// <summary>
/// Dati tipo LiveLog
/// </summary>
public string newLiveLogData { get; set; } = "";
/// <summary>
/// Oggetto COUTNER generico (pezzi, portata...)
/// </summary>
public int counter { get; set; } = -9999;
/// <summary>
/// Bitmap attuale segnali letti
/// </summary>
public string currBitmap { get; set; } = "";
/// <summary>
/// Stato semaforo IN verso PLC
/// </summary>
public Semaforo semIn { get; set; } = Semaforo.ND;
/// <summary>
/// Stato semaforo OUT verso MES
/// </summary>
public Semaforo semOut { get; set; } = Semaforo.ND;
/// <summary>
/// Verifica se contenga valori (NON default/empty)
/// </summary>
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;
}
}
}
/// <summary>
/// StFlag8: set di 8 bit (1 word) contente semaforo di variabili
/// </summary>
[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
}
/// <summary>
/// StFlag32: set di 32 bit (4 word) contente semaforo di variabili
/// </summary>
[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
}
/// <summary>
/// Enumerazione tipi di semaforo
/// </summary>
public enum Semaforo
{
/// <summary>
/// Stato non definito
/// </summary>
ND,
/// <summary>
/// Verde
/// </summary>
SV,
/// <summary>
/// Giallo
/// </summary>
SG,
/// <summary>
/// Rosso
/// </summary>
SR,
/// <summary>
/// Grigio/Spento
/// </summary>
SS
}
/// <summary>
/// Enumerazione tipi di tipi di URL x invio
/// </summary>
public enum urlType
{
/// <summary>
/// Salvataggio FluxLog (valori estesi che non provocano calcoli di macchine a stati, eventi...)
/// </summary>
FLog,
/// <summary>
/// INPUT segnali in ingresso (standard base MAPO)
/// </summary>
SignIN
}
/// <summary>
/// Elenco STATI CNC OSAI
/// </summary>
public enum CNC_STATUS_OSAI
{
IDLE = 1,
CYCLE,
HODA,
RUNH,
HRUN,
ERRO,
WAIT,
RESET,
EMERG,
INPUT
}
/// <summary>
/// Elenco MODI CNC
/// </summary>
public enum CNC_MODE
{
/// <summary>
/// Non definito
/// </summary>
ND = 0,
/// <summary>
/// AUTOMATICO
/// </summary>
AUTO,
/// <summary>
/// EDIT (MEMORY EDIT)
/// </summary>
EDIT,
/// <summary>
/// MEN (MEMORY OPERATION)
/// </summary>
MEN,
/// <summary>
/// MDI (MANUAL DATA INPUT)
/// </summary>
MDI,
/// <summary>
/// HANDLE/INC (MANUAL HANDLE / INCREMENTAL FEED)
/// </summary>
HANDLE_INC,
/// <summary>
/// HOME
/// </summary>
HOME,
/// <summary>
/// JOG (MANUAL CONTINUOUS FEED)
/// </summary>
JOG,
/// <summary>
/// JOG MAN
/// </summary>
JOG_MAN,
/// <summary>
/// JOG_INC
/// </summary>
JOG_INC,
/// <summary>
/// PROFILE
/// </summary>
PROFILE,
/// <summary>
/// SEMI
/// </summary>
SEMI,
/// <summary>
/// THND (TEACH IN HANDLE)
/// </summary>
THND,
/// <summary>
/// TJOG (TEACH IN JOG)
/// </summary>
TJOG,
/// <summary>
/// RMT (DNC OPERATION)
/// </summary>
RMT,
/// <summary>
/// REF (MANUAL REFERENCE POSITION RETURN)
/// </summary>
REF
}
}
+12
View File
@@ -113,6 +113,18 @@
<Reference Include="S7.Net, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d5812d469e84c693, processorArchitecture=MSIL">
<HintPath>..\packages\S7netplus.0.1.9\lib\net40\S7.Net.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Common, Version=4.0.62.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ServiceStack.Common.4.0.62\lib\net40\ServiceStack.Common.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Interfaces, Version=4.0.0.0, Culture=neutral, PublicKeyToken=e06fbc6124f57c43, processorArchitecture=MSIL">
<HintPath>..\packages\ServiceStack.Interfaces.4.0.62\lib\portable-wp80+sl5+net40+win8+wpa81+monotouch+monoandroid+xamarin.ios10\ServiceStack.Interfaces.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Redis, Version=4.0.62.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ServiceStack.Redis.4.0.62\lib\net40\ServiceStack.Redis.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Text, Version=4.0.62.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ServiceStack.Text.4.0.62\lib\net40\ServiceStack.Text.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
+65 -56
View File
@@ -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;
}
+1 -1
View File
@@ -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();
}
}
+1 -1
View File
@@ -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);
}
+4
View File
@@ -21,4 +21,8 @@
<package id="Selenium.Firefox.WebDriver" version="0.26.0" targetFramework="net40-client" />
<package id="Selenium.WebDriver" version="3.141.0" targetFramework="net40-client" />
<package id="Selenium.WebDriver.ChromeDriver" version="79.0.3945.3600" targetFramework="net40-client" />
<package id="ServiceStack.Common" version="4.0.62" targetFramework="net40-client" />
<package id="ServiceStack.Interfaces" version="4.0.62" targetFramework="net40-client" />
<package id="ServiceStack.Redis" version="4.0.62" targetFramework="net40-client" />
<package id="ServiceStack.Text" version="4.0.62" targetFramework="net40-client" />
</packages>