inizio separazione adapter SIEMENS
This commit is contained in:
@@ -112,6 +112,7 @@ namespace IOB_WIN_NEXT
|
|||||||
btnStart.Enabled = true;
|
btnStart.Enabled = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if false
|
||||||
case tipoAdapter.SIEMENS:
|
case tipoAdapter.SIEMENS:
|
||||||
iobObj = new IobSiemens.Siemens(this, IOBConf);
|
iobObj = new IobSiemens.Siemens(this, IOBConf);
|
||||||
btnStart.Enabled = true;
|
btnStart.Enabled = true;
|
||||||
@@ -190,7 +191,8 @@ namespace IOB_WIN_NEXT
|
|||||||
case tipoAdapter.SIEMENS_TORRI:
|
case tipoAdapter.SIEMENS_TORRI:
|
||||||
iobObj = new IobSiemens.SiemensTorri(this, IOBConf);
|
iobObj = new IobSiemens.SiemensTorri(this, IOBConf);
|
||||||
btnStart.Enabled = true;
|
btnStart.Enabled = true;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case tipoAdapter.SOAP_GOMBA:
|
case tipoAdapter.SOAP_GOMBA:
|
||||||
iobObj = new IobSoap.Gomba(this, IOBConf);
|
iobObj = new IobSoap.Gomba(this, IOBConf);
|
||||||
|
|||||||
@@ -748,7 +748,6 @@
|
|||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="IobModbusTCP\" />
|
|
||||||
<Folder Include="prog\" />
|
<Folder Include="prog\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -135,6 +135,7 @@ namespace IOB_WIN_NEXT
|
|||||||
#endregion Public Fields
|
#endregion Public Fields
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if false
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Definizione area memoria SIEMENS
|
/// Definizione area memoria SIEMENS
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -188,5 +189,6 @@ namespace IOB_WIN_NEXT
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion Public Constructors
|
#endregion Public Constructors
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="EasyModbusTCP" version="5.6.0" targetFramework="net462" />
|
|
||||||
<package id="EgwProxy.Ftp" version="3.6.2410.816" targetFramework="net462" />
|
<package id="EgwProxy.Ftp" version="3.6.2410.816" targetFramework="net462" />
|
||||||
<package id="EgwProxy.Gomba" version="3.6.2309.1416" targetFramework="net462" />
|
<package id="EgwProxy.Gomba" version="3.6.2309.1416" targetFramework="net462" />
|
||||||
<package id="EgwProxy.Icoel" version="3.6.2309.708" targetFramework="net462" />
|
<package id="EgwProxy.Icoel" version="3.6.2309.708" targetFramework="net462" />
|
||||||
|
|||||||
+13
-13
@@ -14,7 +14,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOB-UT-NEXT", "IOB-UT-NEXT\
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOB-WIN-FORM", "IOB-WIN-FORM\IOB-WIN-FORM.csproj", "{9BA331BB-9BF1-40E0-AC03-74B43D73A097}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOB-WIN-FORM", "IOB-WIN-FORM\IOB-WIN-FORM.csproj", "{9BA331BB-9BF1-40E0-AC03-74B43D73A097}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOB-WIN-PING", "IOB-WIN-PING\IOB-WIN-PING.csproj", "{6ADF1E82-124C-489C-99EF-A857C933D362}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOB-WIN-SIEMENS", "IOB-WIN-SIEMENS\IOB-WIN-SIEMENS.csproj", "{26D891EF-C115-420A-B240-05F099E13853}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@@ -61,18 +61,18 @@ Global
|
|||||||
{9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Remote_DEBUG|Any CPU.Build.0 = Debug|Any CPU
|
{9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Remote_DEBUG|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Remote_DEBUG|x86.ActiveCfg = Release|Any CPU
|
{9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Remote_DEBUG|x86.ActiveCfg = Release|Any CPU
|
||||||
{9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Remote_DEBUG|x86.Build.0 = Release|Any CPU
|
{9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Remote_DEBUG|x86.Build.0 = Release|Any CPU
|
||||||
{6ADF1E82-124C-489C-99EF-A857C933D362}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{26D891EF-C115-420A-B240-05F099E13853}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{6ADF1E82-124C-489C-99EF-A857C933D362}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{26D891EF-C115-420A-B240-05F099E13853}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{6ADF1E82-124C-489C-99EF-A857C933D362}.Debug|x86.ActiveCfg = Debug|Any CPU
|
{26D891EF-C115-420A-B240-05F099E13853}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{6ADF1E82-124C-489C-99EF-A857C933D362}.Debug|x86.Build.0 = Debug|Any CPU
|
{26D891EF-C115-420A-B240-05F099E13853}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{6ADF1E82-124C-489C-99EF-A857C933D362}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{26D891EF-C115-420A-B240-05F099E13853}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{6ADF1E82-124C-489C-99EF-A857C933D362}.Release|Any CPU.Build.0 = Release|Any CPU
|
{26D891EF-C115-420A-B240-05F099E13853}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{6ADF1E82-124C-489C-99EF-A857C933D362}.Release|x86.ActiveCfg = Release|Any CPU
|
{26D891EF-C115-420A-B240-05F099E13853}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{6ADF1E82-124C-489C-99EF-A857C933D362}.Release|x86.Build.0 = Release|Any CPU
|
{26D891EF-C115-420A-B240-05F099E13853}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{6ADF1E82-124C-489C-99EF-A857C933D362}.Remote_DEBUG|Any CPU.ActiveCfg = Release|Any CPU
|
{26D891EF-C115-420A-B240-05F099E13853}.Remote_DEBUG|Any CPU.ActiveCfg = Remote_DEBUG|Any CPU
|
||||||
{6ADF1E82-124C-489C-99EF-A857C933D362}.Remote_DEBUG|Any CPU.Build.0 = Release|Any CPU
|
{26D891EF-C115-420A-B240-05F099E13853}.Remote_DEBUG|Any CPU.Build.0 = Remote_DEBUG|Any CPU
|
||||||
{6ADF1E82-124C-489C-99EF-A857C933D362}.Remote_DEBUG|x86.ActiveCfg = Release|Any CPU
|
{26D891EF-C115-420A-B240-05F099E13853}.Remote_DEBUG|x86.ActiveCfg = Release|Any CPU
|
||||||
{6ADF1E82-124C-489C-99EF-A857C933D362}.Remote_DEBUG|x86.Build.0 = Release|Any CPU
|
{26D891EF-C115-420A-B240-05F099E13853}.Remote_DEBUG|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -0,0 +1,131 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using IOB_WIN_SIEMENS.Iob;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS
|
||||||
|
{
|
||||||
|
public class AdapterFormNext: IOB_WIN_FORM.AdapterForm
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Avvio MainForm
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="codIOB"></param>
|
||||||
|
public AdapterFormNext(string codIOB): base(codIOB)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// carica IOB richiesto
|
||||||
|
/// </summary>
|
||||||
|
protected override void loadIobType()
|
||||||
|
{
|
||||||
|
if (IOBConf != null)
|
||||||
|
{
|
||||||
|
switch (tipoScelto)
|
||||||
|
{
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS:
|
||||||
|
iobObj = new IobSiemens.Siemens(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_APROCHIM:
|
||||||
|
iobObj = new IobSiemens.SiemensAprochim(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_AT2001:
|
||||||
|
iobObj = new IobSiemens.SiemensAt2001(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_COMECA:
|
||||||
|
iobObj = new IobSiemens.SiemensComeca(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_COMUR:
|
||||||
|
iobObj = new IobSiemens.SiemensComur(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_COSMAP:
|
||||||
|
iobObj = new IobSiemens.SiemensCosmap(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_FAPE:
|
||||||
|
iobObj = new IobSiemens.SiemensFape(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_FAPE_2:
|
||||||
|
iobObj = new IobSiemens.SiemensFapeV2(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_INGENIA:
|
||||||
|
iobObj = new IobSiemens.SiemensIngenia(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_LASCO:
|
||||||
|
iobObj = new IobSiemens.SiemensLasco(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_NWSE:
|
||||||
|
iobObj = new IobSiemens.SiemensNWSE(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_PRESSOIL_CEI:
|
||||||
|
iobObj = new IobSiemens.SiemensPressoilCei(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_ROBOTSERVICE:
|
||||||
|
iobObj = new IobSiemens.SiemensRobotService(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_SAET:
|
||||||
|
iobObj = new IobSiemens.SiemensSaet(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_SIMEC:
|
||||||
|
iobObj = new IobSiemens.SiemensSimec(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIEMENS_TORRI:
|
||||||
|
iobObj = new IobSiemens.SiemensTorri(this, IOBConf);
|
||||||
|
btnStart.Enabled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tipoAdapter.SIMULA:
|
||||||
|
case tipoAdapter.ND:
|
||||||
|
default:
|
||||||
|
iobObj = new IOB_WIN_FORM.Iob.Simula(this, IOBConf);
|
||||||
|
btnStart.Enabled = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
lblCncText = $"CNC: {IOBConf.tipoIob} [{IOBConf.cncIpAddr}:{IOBConf.cncPort}]";
|
||||||
|
lblSrvUrlText = $"SRV: {IOBConf.serverData.MPIP} | URL: {IOBConf.serverData.MPURL}{IOBConf.serverData.CMDBASE}";
|
||||||
|
|
||||||
|
// aggancio evento refresh
|
||||||
|
iobObj.eh_refreshed += IobObj_eh_refreshed;
|
||||||
|
|
||||||
|
// carico i default values su interfaccia
|
||||||
|
setDefaults();
|
||||||
|
|
||||||
|
displayTaskAndLog($"Caricata conf per adapter {tipoScelto}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<!-- For more information on using transformations
|
||||||
|
see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
|
||||||
|
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
|
||||||
|
<appSettings>
|
||||||
|
<add key="autoLoadConf" value="true" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
|
||||||
|
<!--<add key="DemoIn" value="true" xdt:Transform="Replace" xdt:Locator="Match(key)"/>-->
|
||||||
|
<!--<add key="DemoOut" value="true" xdt:Transform="Replace" xdt:Locator="Match(key)"/>-->
|
||||||
|
</appSettings>
|
||||||
|
</configuration>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<!-- For more information on using transformations
|
||||||
|
see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
|
||||||
|
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
|
||||||
|
<appSettings>
|
||||||
|
<add key="autoLoadConf" value="true" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
|
||||||
|
<add key="DemoIn" value="false" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
|
||||||
|
<add key="DemoOut" value="false" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
|
||||||
|
<add key="verbose" value="false" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
|
||||||
|
</appSettings>
|
||||||
|
</configuration>
|
||||||
@@ -0,0 +1,182 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
|
||||||
|
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||||
|
</configSections>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
|
||||||
|
</startup>
|
||||||
|
<appSettings>
|
||||||
|
<add key="appName" value="IOB-WIN-PING" />
|
||||||
|
<add key="enableTest" value="false" />
|
||||||
|
<add key="enableContapezzi" value="true" />
|
||||||
|
<add key="enableMode" value="true" />
|
||||||
|
<add key="enableOverrides" value="false" />
|
||||||
|
<add key="enableTSVC" value="true" />
|
||||||
|
<add key="enableDynData" value="false" />
|
||||||
|
<add key="enableSysInfo" value="false" />
|
||||||
|
<add key="enableAlarms" value="true" />
|
||||||
|
<add key="doStartMemDump" value="false" />
|
||||||
|
<add key="doSampleMemory" value="false" />
|
||||||
|
<add key="basePrgMemPath" value="CNCMEMUSER" />
|
||||||
|
<add key="pingMsTimeout" value="1500" />
|
||||||
|
<add key="serverPingDisabled" value="false" />
|
||||||
|
<add key="urlCallTOut" value="9999" />
|
||||||
|
<add key="urlRandWait" value="200" />
|
||||||
|
<!-- ciclo corto x invio a server: ms -->
|
||||||
|
<add key="timerIntMs" value="10" />
|
||||||
|
<add key="fastCount" value="20" />
|
||||||
|
<add key="normCount" value="200" />
|
||||||
|
<add key="slowCount" value="500" />
|
||||||
|
<add key="verySlowCount" value="3000" />
|
||||||
|
<add key="sampleMemCount" value="6000" />
|
||||||
|
<add key="waitEndCycle" value="0" />
|
||||||
|
<add key="comCheckTOut" value="10" />
|
||||||
|
<!-- watchdog, ping, check disconnesso -->
|
||||||
|
<add key="nMaxSend" value="10" />
|
||||||
|
<add key="pingTestSec" value="5" />
|
||||||
|
<add key="watchdogMaxSec" value="90" />
|
||||||
|
<add key="disconMaxSec" value="30" />
|
||||||
|
<add key="defIOB" value="2999" />
|
||||||
|
<add key="pauseSendMSec" value="2000" />
|
||||||
|
<add key="sendStartFLog" value="false" />
|
||||||
|
<!--gestione coda-->
|
||||||
|
<add key="maxQueueFLog" value="16384" />
|
||||||
|
<add key="maxQueueRawTransf" value="1024" />
|
||||||
|
<!--gestione max num errori-->
|
||||||
|
<add key="maxAliveErrors" value="1000" />
|
||||||
|
<add key="maxErroriCheck" value="300" />
|
||||||
|
<add key="maxSendErrors" value="100" />
|
||||||
|
<add key="maxReadErrors" value="20" />
|
||||||
|
<!--parametri SIM-->
|
||||||
|
<add key="waitSimPar" value="30" />
|
||||||
|
<!--<add key="waitSimPar" value="45" />-->
|
||||||
|
<!--gestione REDIS-->
|
||||||
|
<add key="RedisConn" value="localhost,abortConnect=false,ssl=false" />
|
||||||
|
<add key="RedisConnAdmin" value="localhost,abortConnect=false,ssl=false" />
|
||||||
|
<add key="redisDb" value="10" />
|
||||||
|
<!--gestione invio dati in blocchi Json-->
|
||||||
|
<add key="minJsonData" value="2" />
|
||||||
|
<add key="maxJsonData" value="100" />
|
||||||
|
<add key="maxJsonDataEv" value="25" />
|
||||||
|
<!--gestione multithread-->
|
||||||
|
<add key="sendDataByThread" value="false" />
|
||||||
|
<!--Modalità DEMO: DemoOUT indica che NON invia davvero al server e DemoIN che simula e NON legge da PLC-->
|
||||||
|
<add key="DemoIn" value="false" />
|
||||||
|
<add key="DemoInSample" value="false" />
|
||||||
|
<add key="DemoOut" value="false" />
|
||||||
|
<!--definizione invio dati molto variabili-->
|
||||||
|
<add key="SendAxPos" value="false" />
|
||||||
|
<add key="SendFeedSpeed" value="false" />
|
||||||
|
<!--Definizione avvio Adapter-->
|
||||||
|
<add key="autoLoadConf" value="true" />
|
||||||
|
<add key="autoStartOnLoad" value="true" />
|
||||||
|
<add key="startMinimized" value="false" />
|
||||||
|
<add key="windowCanMax" value="true" />
|
||||||
|
<add key="trayClose" value="true" />
|
||||||
|
<add key="autoSaveSec" value="60" />
|
||||||
|
<add key="waitRecMSec" value="60000" />
|
||||||
|
<add key="testCharSep" value="|" />
|
||||||
|
<add key="delayShowLogMs" value="500" />
|
||||||
|
<add key="vetoSeconds" value="5" />
|
||||||
|
<!--conf file-->
|
||||||
|
<add key="dataPath" value="DATA" />
|
||||||
|
<add key="dataConfPath" value="DATA\CONF" />
|
||||||
|
<add key="dataDatPath" value="DATA\DAT" />
|
||||||
|
<add key="resxPath" value="Resources" />
|
||||||
|
<add key="mainConfFile" value="MAIN.ini" />
|
||||||
|
<add key="defaultPersLayerFile" value="PersistData.dat" />
|
||||||
|
<!--<add key="simDataFile" value="SimData.dat" />-->
|
||||||
|
<!--<add key="memDumpFile" value="MemoryDump.dat" />-->
|
||||||
|
<add key="numSim" value="1" />
|
||||||
|
<add key="AUpdAsAdm" value="true" />
|
||||||
|
<add key="ConfToCloud" value="false" />
|
||||||
|
<add key="CacheConfToCloudDuratHour" value="24" />
|
||||||
|
<!--logging-->
|
||||||
|
<add key="recTime" value="true" />
|
||||||
|
<add key="verbose" value="false" />
|
||||||
|
<add key="logEvery" value="100" />
|
||||||
|
<add key="zipLogOldDay" value="1" />
|
||||||
|
<add key="maxLogDirSize" value="300" />
|
||||||
|
<add key="maxLogDays" value="400" />
|
||||||
|
<add key="numRowConsole" value="50" />
|
||||||
|
<add key="verboseLogTOut" value="60" />
|
||||||
|
<!--conf x FANUC-->
|
||||||
|
<add key="ClientSettingsProvider.ServiceUri" value="" />
|
||||||
|
<add key="pzCountDelay" value="2000" />
|
||||||
|
</appSettings>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<probing privatePath="lib;libs" xmlns="urn:schemas-microsoft-com:asm.v1" />
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-6.0.1.0" newVersion="6.0.1.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.IO.Pipelines" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Microsoft.Web.WebView2.WinForms" publicKeyToken="2a8ab48044d2601e" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-1.0.2903.40" newVersion="1.0.2903.40" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Microsoft.Web.WebView2.Core" publicKeyToken="2a8ab48044d2601e" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-1.0.2903.40" newVersion="1.0.2903.40" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.ValueTuple" 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.5.0" newVersion="4.1.5.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Threading.Channels" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
<system.web>
|
||||||
|
<membership defaultProvider="ClientAuthenticationMembershipProvider">
|
||||||
|
<providers>
|
||||||
|
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
|
||||||
|
</providers>
|
||||||
|
</membership>
|
||||||
|
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
|
||||||
|
<providers>
|
||||||
|
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
|
||||||
|
</providers>
|
||||||
|
</roleManager>
|
||||||
|
</system.web>
|
||||||
|
</configuration>
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
;Configurazione IOB-WIN GENERALE
|
||||||
|
[BRANCH]
|
||||||
|
NAME=master
|
||||||
|
|
||||||
|
[SERVER]
|
||||||
|
|
||||||
|
; Server Steamware
|
||||||
|
MPIP=10.74.82.218
|
||||||
|
MPURL=/MP/IO
|
||||||
|
CMDREBO=/IOB/sendRebootGateway?GWIP=
|
||||||
|
CMDIOB2CALL=/IOB/getIob2call?GWIP=
|
||||||
|
|
||||||
|
;Client Install
|
||||||
|
CLI_INST=SteamWareSim
|
||||||
|
|
||||||
|
[IOB]
|
||||||
|
;--- TEST sul campo
|
||||||
|
; SIMULAZIONE verso server ufficio
|
||||||
|
;STARTLIST=SIMUL_01,SIMUL_02,SIMUL_03,SIMUL_04
|
||||||
|
;STARTLIST=PIZ09
|
||||||
|
;STARTLIST=VL25
|
||||||
|
;STARTLIST=SIMUL_03
|
||||||
|
;STARTLIST=GIACO_CEDAX_001
|
||||||
|
;STARTLIST=GIACO_ICOEL_002
|
||||||
|
;STARTLIST=GIACO_CENTERFRIGO
|
||||||
|
;STARTLIST=GIACO_NWSE
|
||||||
|
;STARTLIST=SIM_DP_01
|
||||||
|
;STARTLIST=WPS
|
||||||
|
;STARTLIST=FINASSI_HELPI_01
|
||||||
|
;STARTLIST=FINASSI_OMP_01
|
||||||
|
;STARTLIST=BAGLIETTO_CIMOLAI_01
|
||||||
|
;STARTLIST=GIACO_SAIM_003
|
||||||
|
;STARTLIST=PIZ09
|
||||||
|
;STARTLIST=IMI_RIMOR_SAB_01
|
||||||
|
;STARTLIST=IMI_RIMOR_SAB_02
|
||||||
|
;STARTLIST=IMI_RIMOR_VER_01
|
||||||
|
;STARTLIST=IMI_RIMOR_VER_02
|
||||||
|
;STARTLIST=IMI_PAMA_392
|
||||||
|
;STARTLIST=Tend_FIMAT_01
|
||||||
|
;STARTLIST=PIZ10
|
||||||
|
;STARTLIST=IMI_SOITAAB_Z2342_02
|
||||||
|
;STARTLIST=IMI_GOMBA
|
||||||
|
;STARTLIST=SIMUL_02
|
||||||
|
;STARTLIST=SIM_DP_01
|
||||||
|
;STARTLIST=FTP_SONATEST
|
||||||
|
;STARTLIST=L020
|
||||||
|
;STARTLIST=PING
|
||||||
|
;STARTLIST=VL27
|
||||||
|
|
||||||
|
;NB: mettere copy always ai file di conf x fare test...
|
||||||
|
STARTLIST=PIZ08
|
||||||
|
|
||||||
|
|
||||||
|
MAXCNC=10
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
;Configurazione IOB-WIN
|
||||||
|
[IOB]
|
||||||
|
;Impianto COMECA Pilastrello per Pizzaferri
|
||||||
|
CNCTYPE=SIEMENS_COMECA
|
||||||
|
PING_MS_TIMEOUT=500
|
||||||
|
|
||||||
|
[MACHINE]
|
||||||
|
VENDOR=COMECA
|
||||||
|
MODEL=01
|
||||||
|
|
||||||
|
[CNC]
|
||||||
|
IP=192.168.100.1
|
||||||
|
CPUTYPE=S71500
|
||||||
|
RACK=0
|
||||||
|
SLOT=0
|
||||||
|
|
||||||
|
[SERVER]
|
||||||
|
;MPIP=https://localhost:44339
|
||||||
|
MPIP=https://gwms.egalware.com
|
||||||
|
MPURL=/pizzaferri/api
|
||||||
|
CMDBASE=/IOB/input/
|
||||||
|
CMDFLOG=/IOB/flog/
|
||||||
|
CMDALIVE=/IOB
|
||||||
|
CMDENABLED=/IOB/enabled/
|
||||||
|
CMDADV1=?valore=
|
||||||
|
CMDREBO=/IOB/sendReboot?idxMacchina=
|
||||||
|
|
||||||
|
[MEMORY]
|
||||||
|
ADDR_READ=DB85.DBB0
|
||||||
|
ADDR_WRITE=DB85.DBB280
|
||||||
|
SIZE_READ=280
|
||||||
|
SIZE_WRITE=32
|
||||||
|
|
||||||
|
|
||||||
|
[BLINK]
|
||||||
|
;MAX_COUNTER_BLINK = 30
|
||||||
|
MAX_COUNTER_BLINK = 15
|
||||||
|
;bit0 = 0
|
||||||
|
;bit1 = 0
|
||||||
|
;bit2 = 1
|
||||||
|
;bit3 = 1
|
||||||
|
;bit4 = 1
|
||||||
|
;bit5 = 0
|
||||||
|
;bit6 = 0
|
||||||
|
;bit7 = 0
|
||||||
|
BLINK_FILT=0
|
||||||
|
;BLINK_FILT=28
|
||||||
|
|
||||||
|
[OPTPAR]
|
||||||
|
;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice
|
||||||
|
PZCOUNT_MODE=STD.DB85.DBRE16
|
||||||
|
DISABLE_PZCOUNT=FALSE
|
||||||
|
ENABLE_SEND_PZC_BLOCK=TRUE
|
||||||
|
MIN_SEND_PZC_BLOCK=0
|
||||||
|
MAX_SEND_PZC_BLOCK=100
|
||||||
|
; GEST DATI DYN
|
||||||
|
ENABLE_DYN_DATA=TRUE
|
||||||
|
FORCE_DYN_DATA=TRUE
|
||||||
|
|
||||||
|
; clock base (da 10ms)
|
||||||
|
timerIntMs=20
|
||||||
|
|
||||||
|
; conf parametri memoria READ/WRITE
|
||||||
|
PARAM_CONF=PIZ08.json
|
||||||
|
|
||||||
|
NO_PING=TRUE
|
||||||
|
; conf aree allarme
|
||||||
|
ALARM_CONF=PIZ08_alarm.json
|
||||||
|
|
||||||
|
[BRANCH]
|
||||||
|
NAME=master
|
||||||
@@ -0,0 +1,252 @@
|
|||||||
|
{
|
||||||
|
"mMapWrite": {
|
||||||
|
"MinTemp01": {
|
||||||
|
"name": "MinTemp01",
|
||||||
|
"description": "Impostazione temperatura min TE04 Linea sfiato Gas",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"memAddr": "DB85.DBB280",
|
||||||
|
"index": 280,
|
||||||
|
"size": 4,
|
||||||
|
"unit": "C"
|
||||||
|
},
|
||||||
|
"MinTemp02": {
|
||||||
|
"name": "MinTemp02",
|
||||||
|
"description": "Impostazione temperatura min TT17 Linea sfiato Gas Torcia Serbatoio",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"memAddr": "DB85.DBB284",
|
||||||
|
"index": 284,
|
||||||
|
"size": 4,
|
||||||
|
"unit": "C"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mMapRead": {
|
||||||
|
"TE2A": {
|
||||||
|
"name": "TE2A",
|
||||||
|
"description": "Temperatura Controllo Tenute Pompa A (TE2A)",
|
||||||
|
"memAddr": "DB85.DBB0",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 0,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "C"
|
||||||
|
},
|
||||||
|
"TE1A": {
|
||||||
|
"name": "TE1A",
|
||||||
|
"description": "Temperatura Raffreddamento Pompa A (TE1A)",
|
||||||
|
"memAddr": "DB85.DBB4",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 4,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "C"
|
||||||
|
},
|
||||||
|
"TE3A": {
|
||||||
|
"name": "TE3A",
|
||||||
|
"description": "Temperatura Cavitazione Pompa A (TE3A)",
|
||||||
|
"memAddr": "DB85.DBB8",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 8,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "C"
|
||||||
|
},
|
||||||
|
"Temp01": {
|
||||||
|
"name": "Temp01",
|
||||||
|
"description": "Temperatura Torcia Aria Fredda (TE04)",
|
||||||
|
"memAddr": "DB85.DBB12",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 12,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "C"
|
||||||
|
},
|
||||||
|
"Level": {
|
||||||
|
"name": "Level",
|
||||||
|
"description": "Livello Serbatoio (LT15)",
|
||||||
|
"memAddr": "DB85.DBB16",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 16,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "Kg"
|
||||||
|
},
|
||||||
|
"PressBH": {
|
||||||
|
"name": "PressBH",
|
||||||
|
"description": "Pressione Linea CNG (PT01)",
|
||||||
|
"memAddr": "DB85.DBB20",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 20,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "bar"
|
||||||
|
},
|
||||||
|
"PressBL": {
|
||||||
|
"name": "PressBL",
|
||||||
|
"description": "Pressione Riduttrice (PT100)",
|
||||||
|
"memAddr": "DB85.DBB24",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 24,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "bar"
|
||||||
|
},
|
||||||
|
"MainPress": {
|
||||||
|
"name": "MainPress",
|
||||||
|
"description": "Pressione Serbatoio (PT16)",
|
||||||
|
"memAddr": "DB85.DBB28",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 28,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "bar"
|
||||||
|
},
|
||||||
|
"Temp02": {
|
||||||
|
"name": "Temp02",
|
||||||
|
"description": "Temperatura Spurgo Torcia Serbatoio (TT17)",
|
||||||
|
"memAddr": "DB85.DBB36",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 36,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "C"
|
||||||
|
},
|
||||||
|
"TE06": {
|
||||||
|
"name": "TE06",
|
||||||
|
"description": "Temperatura Uscita Vaporizzatore (TE06)",
|
||||||
|
"memAddr": "DB85.DBB40",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 40,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "C"
|
||||||
|
},
|
||||||
|
"TE05": {
|
||||||
|
"name": "TE05",
|
||||||
|
"description": "Temperatura Carica Fredda (TE05)",
|
||||||
|
"memAddr": "DB85.DBB60",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 60,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "C"
|
||||||
|
},
|
||||||
|
"TE2B": {
|
||||||
|
"name": "TE2B",
|
||||||
|
"description": "Temperatura Controllo Tenute Pompa B (TE2B)",
|
||||||
|
"memAddr": "DB85.DBB64",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 64,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "C"
|
||||||
|
},
|
||||||
|
"TE1B": {
|
||||||
|
"name": "TE1B",
|
||||||
|
"description": "Temperatura Raffreddamento Pompa B (TE1B)",
|
||||||
|
"memAddr": "DB85.DBB68",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 68,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "C"
|
||||||
|
},
|
||||||
|
"TE3B": {
|
||||||
|
"name": "TE3B",
|
||||||
|
"description": "Temperatura Cavitazione Pompa B (TE3B)",
|
||||||
|
"memAddr": "DB85.DBB72",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 72,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "C"
|
||||||
|
},
|
||||||
|
"PressH": {
|
||||||
|
"name": "PressH",
|
||||||
|
"description": "Alta Pressione (PT300A)",
|
||||||
|
"memAddr": "DB85.DBB120",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 120,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "bar"
|
||||||
|
},
|
||||||
|
"PressM": {
|
||||||
|
"name": "PressM",
|
||||||
|
"description": "Media Pressione (PT300M)",
|
||||||
|
"memAddr": "DB85.DBB124",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 124,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "bar"
|
||||||
|
},
|
||||||
|
"LivelloPerc": {
|
||||||
|
"name": "LivelloPerc",
|
||||||
|
"description": "Livello Serbatorio % (LT15%)",
|
||||||
|
"memAddr": "DB85.DBB148",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 148,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "%"
|
||||||
|
},
|
||||||
|
"MinTemp01": {
|
||||||
|
"name": "MinTemp01",
|
||||||
|
"description": "Minima Temperatura Linea Sfiato Gas (TE04)",
|
||||||
|
"memAddr": "DB85.DBB152",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 152,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "C"
|
||||||
|
},
|
||||||
|
"MinTemp02": {
|
||||||
|
"name": "MinTemp02",
|
||||||
|
"description": "Minima Temperatura Linea Sfiato Gas Torcia Serbatoio (TT17)",
|
||||||
|
"memAddr": "DB85.DBB156",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"index": 156,
|
||||||
|
"size": 4,
|
||||||
|
"func": "MAX",
|
||||||
|
"period": 60,
|
||||||
|
"factor": 1,
|
||||||
|
"unit": "C"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "Allarmi Impianto",
|
||||||
|
"tipoMem": "Boolean",
|
||||||
|
"memAddr": "DB85.DBB232",
|
||||||
|
"index": 232,
|
||||||
|
"size": 6,
|
||||||
|
"messages": [
|
||||||
|
"Emergenza Non Ripristinata",
|
||||||
|
"Emergenza QE Intervenuta",
|
||||||
|
"Emergenza Puls. Dispencer B Intervenuta",
|
||||||
|
"Emergenza Puls. Dispencer A Intervenuta",
|
||||||
|
"Stato Interruttore Erogatore Liquido B",
|
||||||
|
"Allarme Controllo Tensione di Rete",
|
||||||
|
"Allarme Controllo Tensione Antincendio",
|
||||||
|
"Stato Interruttore Erogatore Liquido A",
|
||||||
|
"Stato Sezionatore Generale",
|
||||||
|
"Stato Interruttore Protezione SPD",
|
||||||
|
"Stato Interruttore Sirena e Rotoalarm",
|
||||||
|
"Stato Interruttore Luci Emergenza",
|
||||||
|
"Stato Interruttore Pompa PC1A",
|
||||||
|
"Stato Interruttore Pompa PC1B",
|
||||||
|
"Stato Interruttore Pompa Sommersa C",
|
||||||
|
"Stato Termica Boil-Off",
|
||||||
|
"##234.0",
|
||||||
|
"Preallarme Centralina Metano",
|
||||||
|
"Allarme Centralina Metano",
|
||||||
|
"Emergenza Puls. Dispencer C Invervenuta",
|
||||||
|
"Mancaza Pressione Aria",
|
||||||
|
"Minima Temperatura Linea Sfiato Gas TE04",
|
||||||
|
"Minima Temperatura Linea Sfiato Gas Torcia Serbatoio TT17",
|
||||||
|
"Massima Temperatura Linea Sfiato Gas Torcia Serbatoio TT17",
|
||||||
|
"Almeno Un Emergenza Intervenuta",
|
||||||
|
"Arresto Operativo da PT1(predisposizione)",
|
||||||
|
"Stato Interruttore Alimentazione Punto Zero",
|
||||||
|
"##234.11",
|
||||||
|
"##234.12",
|
||||||
|
"##234.13",
|
||||||
|
"##234.14",
|
||||||
|
"Configurazione Incongruente",
|
||||||
|
"Pulsante Emergenza 2 SB17.3A Premuto",
|
||||||
|
"Pulsante Emergenza 1 SB17.3B Premuto",
|
||||||
|
"Pulsante Emergenza SB17.3C Premuto",
|
||||||
|
"Pulsante Emergenza 3 SB17.5 Premuto",
|
||||||
|
"Pulsante Emergenza 4 SB17.7 Premuto",
|
||||||
|
"##236.5",
|
||||||
|
"##236.6",
|
||||||
|
"##236.7",
|
||||||
|
"GT_TE2A",
|
||||||
|
"GT_TE1A",
|
||||||
|
"GT_TE3A",
|
||||||
|
"GT_TE04",
|
||||||
|
"GT_LT15",
|
||||||
|
"GT_PT01",
|
||||||
|
"GT_PT300R",
|
||||||
|
"GT_PT16"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Allarmi Serbatoio",
|
||||||
|
"tipoMem": "Boolean",
|
||||||
|
"memAddr": "DB85.DBB248",
|
||||||
|
"index": 248,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"Serbatoio Troppo Pieno",
|
||||||
|
"Serbatoio Pieno_HH",
|
||||||
|
"Serbatoio Pieno_H",
|
||||||
|
"Serbatoio Vuoto_LL",
|
||||||
|
"H Pressione Serbatoio",
|
||||||
|
"HH Pressione Serbatoio",
|
||||||
|
"LL Temperatura Ingresso BoilOff TE08",
|
||||||
|
"Minima Pressione Serbatoio per Partenza Pompe",
|
||||||
|
"Timeout Apertura Valvola PV1",
|
||||||
|
"Timeout Chiusura Valvola PV1",
|
||||||
|
"Timeout Apertura Valvola PV70",
|
||||||
|
"Timeout Chiusura Valvola PV70",
|
||||||
|
"##248.12",
|
||||||
|
"##248.13",
|
||||||
|
"##248.14",
|
||||||
|
"##248.15"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Allarmi Pompa Alta Pressione A",
|
||||||
|
"tipoMem": "Boolean",
|
||||||
|
"memAddr": "DB85.DBB252",
|
||||||
|
"index": 252,
|
||||||
|
"size": 4,
|
||||||
|
"messages": [
|
||||||
|
"Ritardo Avvio Pompa PC1B",
|
||||||
|
"##252.1",
|
||||||
|
"Temperatura Freddo TE1B NON Raggiunta",
|
||||||
|
"HH Temperatura Cavitazione TE3B",
|
||||||
|
"Allarme Temperatura Tenute Pompa TE2B",
|
||||||
|
"LL Temperatura Ingresso Stoccaggio TE06",
|
||||||
|
"Allarme Temperatura Ingresso Stoccaggio TE07",
|
||||||
|
"Aumento Pressione PT01",
|
||||||
|
"Max Pressione PT01",
|
||||||
|
"##256.9",
|
||||||
|
"##256.10",
|
||||||
|
"##256.11",
|
||||||
|
"##256.12",
|
||||||
|
"##256.13",
|
||||||
|
"##256.14",
|
||||||
|
"##256.15",
|
||||||
|
"Timeout Apertura PV3B",
|
||||||
|
"Timeout Apertura PV5B",
|
||||||
|
"Timeout Apertura PV6B",
|
||||||
|
"Timeout Apertura PV7",
|
||||||
|
"##258.4",
|
||||||
|
"##258.5",
|
||||||
|
"##258.6",
|
||||||
|
"##258.7",
|
||||||
|
"##258.8",
|
||||||
|
"##258.9",
|
||||||
|
"##258.10",
|
||||||
|
"##258.11",
|
||||||
|
"##258.12",
|
||||||
|
"##258.13",
|
||||||
|
"##258.14",
|
||||||
|
"##258.15"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
;Configurazione IOB-WIN
|
||||||
|
[IOB]
|
||||||
|
CNCTYPE=SIMULA
|
||||||
|
PING_MS_TIMEOUT=500
|
||||||
|
MinDeltaSec=5
|
||||||
|
EnableRedisQueue=true
|
||||||
|
;IOB_NAME=TFT_RAMA_001
|
||||||
|
|
||||||
|
[MACHINE]
|
||||||
|
VENDOR=STEAMWARE
|
||||||
|
MODEL=DEMO_SIMULATOR
|
||||||
|
|
||||||
|
[CNC]
|
||||||
|
IP=127.0.0.1
|
||||||
|
PORT=0000
|
||||||
|
|
||||||
|
[SERVER]
|
||||||
|
MPIP=http://10.74.82.218
|
||||||
|
MPURL=/MP/IO
|
||||||
|
CMDBASE=/IOB/input/
|
||||||
|
CMDFLOG=/IOB/flog/
|
||||||
|
CMDALIVE=/IOB
|
||||||
|
CMDENABLED=/IOB/enabled/
|
||||||
|
CMDADV1=?valore=
|
||||||
|
CMDREBO=/sendReboot.aspx?idxMacchina=
|
||||||
|
CMD_ODL_STARTED=/IOB/getCurrOdlStart/
|
||||||
|
CMD_FORCLE_SPLIT_ODL=/IOB/forceSplitOdlFull/
|
||||||
|
CMD_IDLE_TIME=/IOB/getIdlePeriod/
|
||||||
|
|
||||||
|
[MEMORY]
|
||||||
|
|
||||||
|
[BLINK]
|
||||||
|
MAX_COUNTER_BLINK = 15
|
||||||
|
BLINK_FILT=0
|
||||||
|
|
||||||
|
[OPTPAR]
|
||||||
|
DISABLE_SEND_WDST=TRUE
|
||||||
|
AUTO_CHANGE_ODL=true
|
||||||
|
AUTO_SNAPSHOT_DOSSIER=true
|
||||||
|
CHANGE_ODL_HOURS=24
|
||||||
|
CHANGE_ODL_IDLE_MIN=0
|
||||||
|
CHANGE_ODL_MODE=SIMUL
|
||||||
|
; gestione custom timer
|
||||||
|
timerIntMs=100
|
||||||
|
;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice
|
||||||
|
PZCOUNT_MODE=BIT
|
||||||
|
ENABLE_PZ_RESET=TRUE
|
||||||
|
;gestione invio pezzi in blocco
|
||||||
|
ENABLE_SEND_PZC_BLOCK=TRUE
|
||||||
|
MIN_SEND_PZC_BLOCK=0
|
||||||
|
MAX_SEND_PZC_BLOCK=100
|
||||||
|
; gestione cambio ODL automatico (minuti minimi durata)
|
||||||
|
MIN_DURATA_ODL=960
|
||||||
|
; per il simulatore: 50|1 = WAIT 50, DURATION 1 con riferimento al PERIODO base (PER_BASE in ms, default 10 secondi)
|
||||||
|
PER_BASE=10100
|
||||||
|
SIM_PZCNT=5|1
|
||||||
|
SIM_ALARM=100|10
|
||||||
|
SIM_MANU=50|6
|
||||||
|
; indica gestione e simulazione bit 5 --> slow
|
||||||
|
SIM_SLOW=3600|20
|
||||||
|
; indica gestione e simulazione bit 6 --> warmup/cooldown
|
||||||
|
SIM_WUCD=8000|20
|
||||||
|
; indica gestione e simulazione bit 7 --> emergenza
|
||||||
|
SIM_EMRG=4000|10
|
||||||
|
; indica simulazione delle funzionalità power ON/ OFF
|
||||||
|
SIM_POW_ON_OFF=true
|
||||||
|
T_ON=7
|
||||||
|
T_OFF=22
|
||||||
|
; indica simulazione controlli utente
|
||||||
|
SIM_RC=81|1
|
||||||
|
; indica simulazione registro scarti
|
||||||
|
SIM_RS=161|1
|
||||||
|
; indica simulazione dichiarazioni (note) utente
|
||||||
|
SIM_DICH=261|1
|
||||||
|
; indica matricola opr simulata
|
||||||
|
SIM_MATR_OPR=1
|
||||||
|
|
||||||
|
; test x datasync...
|
||||||
|
DATA_SYNC_AT_START=true
|
||||||
|
; test sim dossiers tipo Kepware
|
||||||
|
SIM_KWP=true
|
||||||
|
|
||||||
|
; gestione DynData simulati
|
||||||
|
ENABLE_DYN_DATA=TRUE
|
||||||
|
FORCE_DYN_DATA=TRUE
|
||||||
|
NEW_DYN_DATA=TRUE
|
||||||
|
; indica parametri gestione TcMan
|
||||||
|
TC_MAX_TC_FACTOR=3.9
|
||||||
|
TC_LAMBDA=0.4
|
||||||
|
TC_MAX_INCR=5
|
||||||
|
MAX_PZ_INCR_PERC=1000
|
||||||
|
; conf parametri memoria READ/WRITE
|
||||||
|
PARAM_CONF=SIMUL_01.json
|
||||||
|
ALARM_CONF=SIMUL_01_alarm.json
|
||||||
|
;test gestione logfile (eg: soitaab)
|
||||||
|
EnabelPodlManFull=true
|
||||||
|
CodGruppoIob=STEAMWARE-SIM-FASE-01
|
||||||
|
; invio flux alla lettura file
|
||||||
|
sendFluxOnRead=true
|
||||||
|
|
||||||
|
;conf test FTP
|
||||||
|
FTP_SERVER=ftp.steamware.net
|
||||||
|
FTP_USER=testftpuser
|
||||||
|
FTP_PWD=we4reFromB3rghem!
|
||||||
|
FTP_CERT=
|
||||||
|
FTP_SKIP=TRUE
|
||||||
|
FTP_LOC_DIR=temp\csv
|
||||||
|
FTP_REM_DIR=
|
||||||
|
CSV_ADD_HEADER=true
|
||||||
|
|
||||||
|
|
||||||
|
[BRANCH]
|
||||||
|
NAME=master
|
||||||
|
|
||||||
|
; Tags manuali
|
||||||
|
[TAGS]
|
||||||
|
Customer=Steamware
|
||||||
|
HostOS=WIN
|
||||||
|
HostName=IOB-WIN-SIMULA
|
||||||
|
HostAddr=10.74.82.76
|
||||||
@@ -0,0 +1,410 @@
|
|||||||
|
{
|
||||||
|
"mMapWrite": {
|
||||||
|
"setArt": {
|
||||||
|
"name": "setArt",
|
||||||
|
"description": "Articolo",
|
||||||
|
"memAddr": "DB150.DBB12",
|
||||||
|
"tipoMem": "String",
|
||||||
|
"index": 12,
|
||||||
|
"size": 20,
|
||||||
|
"displOrdinal": 1
|
||||||
|
},
|
||||||
|
"setArtNum": {
|
||||||
|
"name": "setArtNum",
|
||||||
|
"description": "# Num Articolo",
|
||||||
|
"memAddr": "DB150.DBB112",
|
||||||
|
"tipoMem": "Int",
|
||||||
|
"index": 112,
|
||||||
|
"size": 4,
|
||||||
|
"displOrdinal": 1
|
||||||
|
},
|
||||||
|
"setComm": {
|
||||||
|
"name": "setComm",
|
||||||
|
"description": "Commessa",
|
||||||
|
"memAddr": "DB150.DBB32",
|
||||||
|
"tipoMem": "String",
|
||||||
|
"index": 32,
|
||||||
|
"size": 20,
|
||||||
|
"displOrdinal": 2
|
||||||
|
},
|
||||||
|
"setCommNum": {
|
||||||
|
"name": "setCommNum",
|
||||||
|
"description": "# NumCommessa",
|
||||||
|
"memAddr": "DB150.DBB132",
|
||||||
|
"tipoMem": "Int",
|
||||||
|
"index": 132,
|
||||||
|
"size": 4,
|
||||||
|
"displOrdinal": 2
|
||||||
|
},
|
||||||
|
"setPzComm": {
|
||||||
|
"name": "setPzComm",
|
||||||
|
"description": "Qta Richiesta",
|
||||||
|
"memAddr": "DB150.DBB8",
|
||||||
|
"tipoMem": "Int",
|
||||||
|
"index": 8,
|
||||||
|
"size": 4,
|
||||||
|
"displOrdinal": 3
|
||||||
|
},
|
||||||
|
"forceSetPzCount": {
|
||||||
|
"name": "forceSetPzCount",
|
||||||
|
"description": "Imposta Qta",
|
||||||
|
"memAddr": "DB150.DBB8",
|
||||||
|
"tipoMem": "Int",
|
||||||
|
"index": 8,
|
||||||
|
"size": 4,
|
||||||
|
"displOrdinal": 11
|
||||||
|
},
|
||||||
|
//"OPC_Set Point.Chain Spped": {
|
||||||
|
// "name": "OPC_Set Point.Chain Spped",
|
||||||
|
// "description": "Chain Spped",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Chain Spped",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Top Overfeeding": {
|
||||||
|
// "name": "OPC_Set Point.Top Overfeeding",
|
||||||
|
// "description": "Top Overfeeding",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Top Overfeeding",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Bottom Overfeeding": {
|
||||||
|
// "name": "OPC_Set Point.Bottom Overfeeding",
|
||||||
|
// "description": "Bottom Overfeeding",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Bottom Overfeeding",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Width Master": {
|
||||||
|
// "name": "OPC_Set Point.Width Master",
|
||||||
|
// "description": "Width Master",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Width Master",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Thermoset Time": {
|
||||||
|
// "name": "OPC_Set Point.Thermoset Time",
|
||||||
|
// "description": "Thermoset Time",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Thermoset Time",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Thermoset Temperature": {
|
||||||
|
// "name": "OPC_Set Point.Thermoset Temperature",
|
||||||
|
// "description": "Thermoset Temperature",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Thermoset Temperature",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Take Off Overfeeding": {
|
||||||
|
// "name": "OPC_Set Point.Take Off Overfeeding",
|
||||||
|
// "description": "Take Off Overfeeding",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Take Off Overfeeding",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Small Roller Overfeeding": {
|
||||||
|
// "name": "OPC_Set Point.Small Roller Overfeeding",
|
||||||
|
// "description": "Small Roller Overfeeding",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Small Roller Overfeeding",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Scroll Roller Overfeeding": {
|
||||||
|
// "name": "OPC_Set Point.Scroll Roller Overfeeding",
|
||||||
|
// "description": "Scroll Roller Overfeeding",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Scroll Roller Overfeeding",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Right Whell Overfeeding": {
|
||||||
|
// "name": "OPC_Set Point.Right Whell Overfeeding",
|
||||||
|
// "description": "Right Whell Overfeeding",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Right Whell Overfeeding",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Plaiter Overfeeding": {
|
||||||
|
// "name": "OPC_Set Point.Plaiter Overfeeding",
|
||||||
|
// "description": "Plaiter Overfeeding",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Plaiter Overfeeding",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Load cell Weight": {
|
||||||
|
// "name": "OPC_Set Point.Load cell Weight",
|
||||||
|
// "description": "Load cell Weight",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Load cell Weight",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Left Wheel Overfeeding": {
|
||||||
|
// "name": "OPC_Set Point.Left Wheel Overfeeding",
|
||||||
|
// "description": "Left Wheel Overfeeding",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Left Wheel Overfeeding",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Fan 105A Speed": {
|
||||||
|
// "name": "OPC_Set Point.Fan 105A Speed",
|
||||||
|
// "description": "Fan 105A Speed",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Fan 105A Speed",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Fan 105 Speed": {
|
||||||
|
// "name": "OPC_Set Point.Fan 105 Speed",
|
||||||
|
// "description": "Fan 105 Speed",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Fan 105 Speed",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Fan 103A Speed": {
|
||||||
|
// "name": "OPC_Set Point.Fan 103A Speed",
|
||||||
|
// "description": "Fan 103A Speed",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Fan 103A Speed",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Fan 103 Speed": {
|
||||||
|
// "name": "OPC_Set Point.Fan 103 Speed",
|
||||||
|
// "description": "Fan 103 Speed",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Fan 103 Speed",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Fan 101A Speed": {
|
||||||
|
// "name": "OPC_Set Point.Fan 101A Speed",
|
||||||
|
// "description": "Fan 101A Speed",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Fan 101A Speed",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Fan 101 Speed": {
|
||||||
|
// "name": "OPC_Set Point.Fan 101 Speed",
|
||||||
|
// "description": "Fan 101 Speed",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Fan 101 Speed",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Exhaust Fan 1 Speed": {
|
||||||
|
// "name": "OPC_Set Point.Exhaust Fan 1 Speed",
|
||||||
|
// "description": "Exhaust Fan 1 Speed",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Exhaust Fan 1 Speed",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Differentiation Spindle 5": {
|
||||||
|
// "name": "OPC_Set Point.Differentiation Spindle 5",
|
||||||
|
// "description": "Differentiation Spindle 5",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Differentiation Spindle 5",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Differentiation Spindle 4": {
|
||||||
|
// "name": "OPC_Set Point.Differentiation Spindle 4",
|
||||||
|
// "description": "Differentiation Spindle 4",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Differentiation Spindle 4",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Differentiation Spindle 3": {
|
||||||
|
// "name": "OPC_Set Point.Differentiation Spindle 3",
|
||||||
|
// "description": "Differentiation Spindle 3",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Differentiation Spindle 3",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Differentiation Spindle 2": {
|
||||||
|
// "name": "OPC_Set Point.Differentiation Spindle 2",
|
||||||
|
// "description": "Differentiation Spindle 2",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Differentiation Spindle 2",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Differentiation Spindle 1": {
|
||||||
|
// "name": "OPC_Set Point.Differentiation Spindle 1",
|
||||||
|
// "description": "Differentiation Spindle 1",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Differentiation Spindle 1",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Cooling Cell 1 Speed": {
|
||||||
|
// "name": "OPC_Set Point.Cooling Cell 1 Speed",
|
||||||
|
// "description": "Cooling Cell 1 Speed",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Cooling Cell 1 Speed",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Burner 6 Temperature": {
|
||||||
|
// "name": "OPC_Set Point.Burner 6 Temperature",
|
||||||
|
// "description": "Burner 6 Temperature",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Burner 6 Temperature",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Burner 5 Temperature": {
|
||||||
|
// "name": "OPC_Set Point.Burner 5 Temperature",
|
||||||
|
// "description": "Burner 5 Temperature",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Burner 5 Temperature",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Burner 4 Temperature": {
|
||||||
|
// "name": "OPC_Set Point.Burner 4 Temperature",
|
||||||
|
// "description": "Burner 4 Temperature",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Burner 4 Temperature",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Burner 3 Temperature": {
|
||||||
|
// "name": "OPC_Set Point.Burner 3 Temperature",
|
||||||
|
// "description": "Burner 3 Temperature",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Burner 3 Temperature",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Burner 2 Temperature": {
|
||||||
|
// "name": "OPC_Set Point.Burner 2 Temperature",
|
||||||
|
// "description": "Burner 2 Temperature",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Burner 2 Temperature",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Burner 1 Temperature": {
|
||||||
|
// "name": "OPC_Set Point.Burner 1 Temperature",
|
||||||
|
// "description": "Burner 1 Temperature",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Burner 1 Temperature",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//},
|
||||||
|
//"OPC_Set Point.Air Humidity Preset Esa 1": {
|
||||||
|
// "name": "OPC_Set Point.Air Humidity Preset Esa 1",
|
||||||
|
// "description": "Air Humidity Preset Esa 1",
|
||||||
|
// "tipoMem": "String",
|
||||||
|
// "memAddr": "ns=2;s=RamosaETN21.RamosaCJ2.Recipe.Air Humidity Preset Esa 1",
|
||||||
|
// "index": 0,
|
||||||
|
// "size": 0
|
||||||
|
//}
|
||||||
|
},
|
||||||
|
"mMapRead": {
|
||||||
|
"TEMP_01": {
|
||||||
|
"name": "TEMP_01",
|
||||||
|
"description": "Temperatura 01",
|
||||||
|
"tipoMem": "Real",
|
||||||
|
"minVal": 18,
|
||||||
|
"maxVal": 24,
|
||||||
|
"displOrdinal": 4
|
||||||
|
},
|
||||||
|
"POWER_01": {
|
||||||
|
"name": "POWER_01",
|
||||||
|
"description": "Potenza impianto",
|
||||||
|
"tipoMem": "Int",
|
||||||
|
"minVal": 40,
|
||||||
|
"maxVal": 80,
|
||||||
|
"displOrdinal": 5
|
||||||
|
},
|
||||||
|
"FEED_OVER": {
|
||||||
|
"name": "FEED_OVER",
|
||||||
|
"description": "FEED override",
|
||||||
|
"tipoMem": "Int",
|
||||||
|
"minVal": 0,
|
||||||
|
"maxVal": 100,
|
||||||
|
"displOrdinal": 6
|
||||||
|
},
|
||||||
|
"RAPID_OVER": {
|
||||||
|
"name": "RAPID_OVER",
|
||||||
|
"description": "RAPID override",
|
||||||
|
"tipoMem": "Int",
|
||||||
|
"minVal": 50,
|
||||||
|
"maxVal": 120,
|
||||||
|
"displOrdinal": 7
|
||||||
|
},
|
||||||
|
"POS_X": {
|
||||||
|
"name": "POS_X",
|
||||||
|
"description": "Asse X",
|
||||||
|
"tipoMem": "Int",
|
||||||
|
"minVal": -2000,
|
||||||
|
"maxVal": 2000,
|
||||||
|
"displOrdinal": 8
|
||||||
|
},
|
||||||
|
"POS_Y": {
|
||||||
|
"name": "POS_Y",
|
||||||
|
"description": "Asse Y",
|
||||||
|
"tipoMem": "Int",
|
||||||
|
"minVal": 0,
|
||||||
|
"maxVal": 2000,
|
||||||
|
"displOrdinal": 9
|
||||||
|
},
|
||||||
|
"POS_Z": {
|
||||||
|
"name": "POS_Z",
|
||||||
|
"description": "Asse Z",
|
||||||
|
"tipoMem": "Int",
|
||||||
|
"minVal": 0,
|
||||||
|
"maxVal": 1500,
|
||||||
|
"displOrdinal": 10
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"optKVP": {
|
||||||
|
"fluxLogReduce": true,
|
||||||
|
"fluxLogRedDeadBand": 1.5,
|
||||||
|
"fluxLogResendPeriod": 15,
|
||||||
|
"hasRecipe": true,
|
||||||
|
"maxPodlQty": 530,
|
||||||
|
"useLocalRecipe": true,
|
||||||
|
"path-locBase": "C:\\MesData\\",
|
||||||
|
"path-00-Arch": "ArchivioRicette\\FIMAT",
|
||||||
|
"path-01-Temp": "01-Temp\\FIMAT",
|
||||||
|
"path-02-Sent": "02-Inviate\\FIMAT",
|
||||||
|
"path-03-Recv": "03-Ricevute\\FIMAT",
|
||||||
|
"path-04-remReq": "Y:\\",
|
||||||
|
"path-05-remExe": "C:\\MesData\\Remote\\Dosed",
|
||||||
|
"path-06-remRec": "R:\\",
|
||||||
|
"path-outReport": "C:\\MesData\\Report",
|
||||||
|
"path-confSetup": "C:\\MesData\\Setup\\setupConsumi.json",
|
||||||
|
"replace-<Variant>": "<Variant>{{PODL}}",
|
||||||
|
"replace-<Info1>": "<Info1>Kg{{Qty}} | {{Note}}"
|
||||||
|
}, //,
|
||||||
|
//"BaseKeyTranslate": "ns=2;s=RamosaETN21.RamosaCJ2",
|
||||||
|
//"RecipeKeyTranslate": {
|
||||||
|
// "Present Value.General Fan": "Recipe.Chain Spped",
|
||||||
|
// "Present Value.Bottom Overfeeding": "Recipe.Bottom Overfeeding",
|
||||||
|
// "Present Value.Top Overfeeding": "Recipe.Top Overfeeding"
|
||||||
|
//}
|
||||||
|
"mMapWriteLink": {
|
||||||
|
"setArt": "setArtNum",
|
||||||
|
"setComm": "setCommNum"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
;Configurazione IOB-WIN
|
||||||
|
[IOB]
|
||||||
|
CNCTYPE=PingWatchdog
|
||||||
|
PING_MS_TIMEOUT=500
|
||||||
|
; attenzione che alcuni eventi vengo scritti cmq nel log di SIMUL_01 invece di SIMUL_01_WD
|
||||||
|
IOB_NAME=SIMUL_01
|
||||||
|
|
||||||
|
[MACHINE]
|
||||||
|
VENDOR=STEAMWARE
|
||||||
|
MODEL=WATCHDOG
|
||||||
|
|
||||||
|
[CNC]
|
||||||
|
; ping vs WIN10-VPN-03 per test
|
||||||
|
IP=10.74.83.203
|
||||||
|
PORT=0000
|
||||||
|
|
||||||
|
[SERVER]
|
||||||
|
MPIP=http://10.74.82.218
|
||||||
|
MPURL=/MP/IO
|
||||||
|
CMDBASE=/IOB/input/
|
||||||
|
CMDFLOG=/IOB/flog/
|
||||||
|
CMDALIVE=/IOB
|
||||||
|
CMDENABLED=/IOB/enabled/
|
||||||
|
CMDADV1=?valore=
|
||||||
|
CMDREBO=/sendReboot.aspx?idxMacchina=
|
||||||
|
CMD_ODL_STARTED=/IOB/getCurrOdlStart/
|
||||||
|
CMD_FORCLE_SPLIT_ODL=/IOB/forceSplitOdlFull/
|
||||||
|
CMD_IDLE_TIME=/IOB/getIdlePeriod/
|
||||||
|
|
||||||
|
[MEMORY]
|
||||||
|
|
||||||
|
[BLINK]
|
||||||
|
MAX_COUNTER_BLINK = 15
|
||||||
|
BLINK_FILT=0
|
||||||
|
|
||||||
|
[OPTPAR]
|
||||||
|
AUTO_CHANGE_ODL=false
|
||||||
|
POWEROFF_TIMEOUT_SEC=60
|
||||||
|
ENABLE_SEND_PZC_BLOCK=TRUE
|
||||||
|
MIN_SEND_PZC_BLOCK=0
|
||||||
|
MAX_SEND_PZC_BLOCK=100
|
||||||
|
|
||||||
|
[BRANCH]
|
||||||
|
NAME=master
|
||||||
|
|
||||||
|
; Tags manuali
|
||||||
|
[TAGS]
|
||||||
|
Customer=Steamware
|
||||||
|
HostOS=WIN
|
||||||
|
HostName=IOB-WIN-SIMULA
|
||||||
|
HostAddr=10.74.82.76
|
||||||
@@ -0,0 +1,859 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 0 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 0",
|
||||||
|
"index": 0,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"1,ALLARME INVERTER CATENA TRASP. TESSUTO",
|
||||||
|
"2,ALLARME INVERTER CILINDRO SOVRALIMENTAZIONE SUPERIORE",
|
||||||
|
"3,ALLARME INVERTER CILINDRO SOVRALIMENTAZIONE INFERIORE",
|
||||||
|
"4,ALLARME INVERTER RUOTA SOVRALIMENTAZIONE SINISTRA",
|
||||||
|
"5,ALLARME INVERTER RUOTA SOVRALIMENTAZIONE DESTRA",
|
||||||
|
"6,ALLARME INVERTER STACCAPEZZA",
|
||||||
|
"7,ALLARME INVERTER FALDAROTOLATORE",
|
||||||
|
"8,ALLARME INVERTER FALDERUOLE",
|
||||||
|
"9,ALLARME INVERTER ESAUSTORE 1 ",
|
||||||
|
"10,ALLARME FUNE SICUREZZA USCITA",
|
||||||
|
"11,ALLARME VENTILATORE 1 (BASSO)",
|
||||||
|
"12, ALLARME VENTILATORE 2 (BASSO)",
|
||||||
|
"13,ALLARME F.C. MINIMO CAMPO MASTER",
|
||||||
|
"14,ALLARME F.C. MASSIMO CAMPO MASTER",
|
||||||
|
"15,ALLARME PROTEZIONE TAPPETO INGRESSO",
|
||||||
|
"16,RIFERIMENTO POTENZIOMETRI CAMPI ASSENTE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 1 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 1",
|
||||||
|
"index": 1,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"17,ALLARME CONDIZIONATORI",
|
||||||
|
"18,EMERGENZA IN CORSO !!!",
|
||||||
|
"19,ALLARME PROTEZIONE RECUPERO CALORE - GRUPPO 2 POMPA 1",
|
||||||
|
"20,ALLARME POMPA RECUPERO CALORE 3",
|
||||||
|
"21,CONTROLLO UMIDITA' : FUORI CAMPO",
|
||||||
|
"22,ALLARME RILEVATORE ALTEZZA TESSUTO",
|
||||||
|
"23,ALLARME NON RILASCIO TESSUTO SINISTRO",
|
||||||
|
"24,ALLARME NON RILASCIO TESSUTO DESTRO",
|
||||||
|
"25,ALLARME ALIMENTAZIONE 24VAC QUADRO",
|
||||||
|
"26,ALLARME APRICIMOSSE",
|
||||||
|
"27,ALLARME ASCIUGACIMOSSE A INFRAROSSI",
|
||||||
|
"28,ALLARME PROTEZIONE CELLA DI RAFFREDDAMENTO 1",
|
||||||
|
"29,CAMPO PARALLELO 2 ALLARME PROTEZIONE",
|
||||||
|
"30,ALLARME VENTILATORE 3 (BASSO)",
|
||||||
|
"31,ALLARME VENTILATORE 4 (BASSO)",
|
||||||
|
"32,CAMPO PARALLELO 1 ALLARME PROTEZIONE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 2 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 2",
|
||||||
|
"index": 2,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"33,CAMPO PARALLELO 3 ALLARME PROTEZIONE",
|
||||||
|
"34,RAGGIUNTO MASSIMO CARICO CELLA DI CARICO TAPPETO",
|
||||||
|
"35,ALLARME FALLOPEZZA SINISTRO",
|
||||||
|
"36,ALLARME FALLOPEZZA DESTRO",
|
||||||
|
"37,PARATIE ANTERIORI APERTE",
|
||||||
|
"38,ALLARME AZIONAMENTO CAMPO CONICO",
|
||||||
|
"39,BLOCCO BRUCIATORE 9",
|
||||||
|
"40,CAMPO MASTER ALLARME PROTEZIONE ",
|
||||||
|
"41,ALLARME PRESSOSTATO TENDICATENA SINISTRO",
|
||||||
|
"42,ALLARME PRESSOSTATO TENDICATENA DESTRO",
|
||||||
|
"43,ALLARME MASSIMO ALLUNGAMENTO CATENA",
|
||||||
|
"44,ALLARME TIPO LAVORO USCITA NON SELEZIONATO",
|
||||||
|
"45,ALLARME RADDRIZZATRAMA",
|
||||||
|
"46,ALLARME SPREMITORE 1",
|
||||||
|
"47,BLOCCO BRUCIATORE 10",
|
||||||
|
"48,BLOCCO BRUCIATORE 11"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 3 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 3",
|
||||||
|
"index": 3,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"49,BLOCCO BRUCIATORE 12",
|
||||||
|
"50,BLOCCO BRUCIATORE 1",
|
||||||
|
"51,BLOCCO BRUCIATORE 2",
|
||||||
|
"52,BLOCCO BRUCIATORE 3",
|
||||||
|
"53,BLOCCO BRUCIATORE 4",
|
||||||
|
"54,BIELLE FUORI POSIZIONE",
|
||||||
|
"55,GRUPPO FALDATORE FUORI POSIZIONE",
|
||||||
|
"56,SERIE ARRESTI APERTA",
|
||||||
|
"57,MANCANZA LUBRIFICANTE CATENA TRASP. TESSUTO",
|
||||||
|
"58,ALLARME INVERTER PICCOLO ROTOLO",
|
||||||
|
"59,ALLARME PROTEZIONE ALLARGATORI",
|
||||||
|
"60,ALLARME PROTEZIONE ASPIRACIMOSSE",
|
||||||
|
"61,ALLARME TAGLIACIMOSSE SINISTRA",
|
||||||
|
"62,ALLARME TAGLIACIMOSSE DESTRA",
|
||||||
|
"63,ALLARME INVERTER VENTILATORI INV101",
|
||||||
|
"64,ALLARME INVERTER VENTILATORI INV103"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 4 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 4",
|
||||||
|
"index": 4,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"65,ALLARME TIMEOUT VITE CAMPO MASTER",
|
||||||
|
"66,ALLARME TIMEOUT VITE CAMPO PARALLELO 1",
|
||||||
|
"67,ALLARME TIMEOUT VITE CAMPO PARALLELO 2",
|
||||||
|
"68,ALLARME TIMEOUT VITE CAMPO PARALLELO 3",
|
||||||
|
"69,ALLARME TIMEOUT VITE CAMPO PARALLELO 4",
|
||||||
|
"70,ALLARME TIMEOUT VITE CAMPO PARALLELO 5",
|
||||||
|
"71,ALLARME TIMEOUT VITE CAMPO PARALLELO 6",
|
||||||
|
"72,ALLARME TIMEOUT VITE CAMPO PARALLELO 7",
|
||||||
|
"73,ALLARME TIMEOUT VITE CAMPO PARALLELO 8",
|
||||||
|
"74,ALLARME TIMEOUT VITE CAMPO PARALLELO 9",
|
||||||
|
"75,ALLARME DEVICE_NET ADDR. 32 DA BANCHETTO DI SPALMATURA",
|
||||||
|
"76,ALLARME INVERTER DOGAL ",
|
||||||
|
"77,ALLARME FOTOCELLULA TAPPETO USCITA PIENO",
|
||||||
|
"78,TEMPO DI CICLO PLC SOPRA MASSIMO IMPOSTATO",
|
||||||
|
"79,ERRORE INDIRIZZI SONDE BRUCIATORI",
|
||||||
|
"80,ALLARME VENTILATORE 4 (ALTO)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 5 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 5",
|
||||||
|
"index": 5,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"81,ALLARME VENTILATORE 5 (ALTO)",
|
||||||
|
"82,ALLARME VENTILATORE 6 (ALTO)",
|
||||||
|
"83,ALLARME VENTILATORE 7 (ALTO)",
|
||||||
|
"84,SONDA BRUCIATORE 1 INTERROTTA",
|
||||||
|
"85,SONDA BRUCIATORE 2 INTERROTTA",
|
||||||
|
"86,SONDA BRUCIATORE 3 INTERROTTA",
|
||||||
|
"87,SONDA BRUCIATORE 4 INTERROTTA",
|
||||||
|
"88,ALLARME DEVICE_NET ADDR. 0",
|
||||||
|
"89,ALLARME DEVICE_NET ADDR. 1",
|
||||||
|
"90,ALLARME DEVICE_NET ADDR. 2",
|
||||||
|
"91,ALLARME DEVICE_NET ADDR. 3",
|
||||||
|
"92,ALLARME DEVICE_NET ADDR. 4",
|
||||||
|
"93,ALLARME DEVICE_NET ADDR. 5",
|
||||||
|
"94,ALLARME DEVICE_NET ADDR. 6",
|
||||||
|
"95,ALLARME DEVICE_NET ADDR. 7",
|
||||||
|
"96,ALLARME DEVICE_NET ADDR. 8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 6 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 6",
|
||||||
|
"index": 6,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"97,ALLARME DEVICE_NET ADDR. 9",
|
||||||
|
"98,ALLARME DEVICE_NET ADDR. 10",
|
||||||
|
"99,ALLARME DEVICE_NET ADDR. 11",
|
||||||
|
"100,ALLARME DEVICE_NET ADDR. 12",
|
||||||
|
"101,ALLARME DEVICE_NET ADDR. 13",
|
||||||
|
"102,ALLARME DEVICE_NET ADDR. 14",
|
||||||
|
"103,ALLARME DEVICE_NET ADDR. 15",
|
||||||
|
"104,ALLARME DEVICE_NET ADDR. 16",
|
||||||
|
"105,ALLARME DEVICE_NET ADDR. 17",
|
||||||
|
"106,ALLARME DEVICE_NET ADDR. 18",
|
||||||
|
"107,ALLARME DEVICE_NET ADDR. 19",
|
||||||
|
"108,ALLARME DEVICE_NET ADDR. 20",
|
||||||
|
"109,ALLARME DEVICE_NET ADDR. 21",
|
||||||
|
"110,ALLARME DEVICE_NET ADDR. 22",
|
||||||
|
"111,ALLARME DEVICE_NET ADDR. 23",
|
||||||
|
"112,ALLARME DEVICE_NET ADDR. 24"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 7 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 7",
|
||||||
|
"index": 7,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"113,ALLARME DEVICE_NET ADDR. 25",
|
||||||
|
"114,ALLARME DEVICE_NET ADDR. 26",
|
||||||
|
"115,BLOCCO BRUCIATORE 5",
|
||||||
|
"116,BLOCCO BRUCIATORE 6",
|
||||||
|
"117,BLOCCO BRUCIATORE 7",
|
||||||
|
"118,BLOCCO BRUCIATORE 8",
|
||||||
|
"119,SOVRATEMPERATURA BRUCIATORE 1",
|
||||||
|
"120,SOVRATEMPERATURA BRUCIATORE 2",
|
||||||
|
"121,SOVRATEMPERATURA BRUCIATORE 3",
|
||||||
|
"122,SOVRATEMPERATURA BRUCIATORE 4",
|
||||||
|
"123,SOVRATEMPERATURA BRUCIATORE 5",
|
||||||
|
"124,SOVRATEMPERATURA BRUCIATORE 6",
|
||||||
|
"125,SOVRATEMPERATURA BRUCIATORE 7",
|
||||||
|
"126,SOVRATEMPERATURA BRUCIATORE 8",
|
||||||
|
"127,SONDA BRUCIATORE 5 INTERROTTA",
|
||||||
|
"128,SONDA BRUCIATORE 6 INTERROTTA"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 8 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 8",
|
||||||
|
"index": 8,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"129,SONDA BRUCIATORE 7 INTERROTTA",
|
||||||
|
"130,SONDA BRUCIATORE 8 INTERROTTA",
|
||||||
|
"131,SONDA BRUCIATORE 9 INTERROTTA",
|
||||||
|
"132,SONDA BRUCIATORE 10 INTERROTTA",
|
||||||
|
"133,SONDA BRUCIATORE 11 INTERROTTA",
|
||||||
|
"134,SONDA BRUCIATORE 12 INTERROTTA",
|
||||||
|
"135,SOVRATEMPERATURA BRUCIATORE 9",
|
||||||
|
"136,SOVRATEMPERATURA BRUCIATORE 10",
|
||||||
|
"137,SOVRATEMPERATURA BRUCIATORE 11",
|
||||||
|
"138,SOVRATEMPERATURA BRUCIATORE 12",
|
||||||
|
"139,ALLARME INVERTER VENTILATORI INV105",
|
||||||
|
"140,ALLARME INVERTER VENTILATORI INV107",
|
||||||
|
"141,ALLARME INVERTER VENTILATORI INV109",
|
||||||
|
"142,ALLARME INVERTER VENTILATORI INV111",
|
||||||
|
"143,ALLARME VENTILATORE 5 (BASSO)",
|
||||||
|
"144,ALLARME VENTILATORE 6 (BASSO)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 9 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 9",
|
||||||
|
"index": 9,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"145,ALLARME VENTILATORE 7 (BASSO)",
|
||||||
|
"146,ALLARME VENTILATORE 8 (BASSO)",
|
||||||
|
"147,ALLARME VENTILATORE 9 (BASSO)",
|
||||||
|
"148,ALLARME VENTILATORE 10 (BASSO)",
|
||||||
|
"149,ALLARME VENTILATORE 11 (BASSO)",
|
||||||
|
"150,ALLARME VENTILATORE 12 (BASSO)",
|
||||||
|
"151,ALLARME INVERTER ESAUSTORE 2",
|
||||||
|
"152,CAMPO PARALLELO 4 ALLARME PROTEZIONE",
|
||||||
|
"153,CAMPO PARALLELO 5 ALLARME PROTEZIONE",
|
||||||
|
"154,CAMPO PARALLELO 6 ALLARME PROTEZIONE",
|
||||||
|
"155,CAMPO PARALLELO 7 ALLARME PROTEZIONE",
|
||||||
|
"156,CAMPO PARALLELO 8 ALLARME PROTEZIONE",
|
||||||
|
"157,ALLARME INSEGUIMENTO VITE MASTER AGGIUNTA",
|
||||||
|
"158,ALLARME INVERTER CILINDRO RAFFREDDAMENTO",
|
||||||
|
"159,ALLARME TEMPERATURA ESAUSTORI",
|
||||||
|
"160,ALLARME INVERTER RECUPERO CALORE GRUPPO 1 "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 10 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 10",
|
||||||
|
"index": 10,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"161,ALLARME FINECORSA SX TAPPETO USCITA",
|
||||||
|
"162,ALLARME FINECORSA DX TAPPETO USCITA",
|
||||||
|
"163,ALLARME INVERTER RECUPERO CALORE GRUPPO 2",
|
||||||
|
"164,ALLARME DEVICE_NET ADDR. 31",
|
||||||
|
"165,ALLARME CENTRATORE USCITA",
|
||||||
|
"166,COMPATTATORE NON PRONTO",
|
||||||
|
"167,ALLARME CONTROLLO PIROMETRI",
|
||||||
|
"168,ALLARME ALLARGATORE SU TAPPETO USCITA",
|
||||||
|
"169,ALLARME CONTROLLO FUMI",
|
||||||
|
"170,ALLARME FINECORSA BALLERINO ALTO",
|
||||||
|
"171,ALLARME FINECORSA BALLERINO BASSO",
|
||||||
|
"172,ALLARME PROTEZIONE ASPIRATORE VAPORIZZO INTENSIVO",
|
||||||
|
"173,ALLARME PROTEZIONE BRUCIATORE 1",
|
||||||
|
"174,ALLARME PROTEZIONE BRUCIATORE 2",
|
||||||
|
"175,ALLARME PROTEZIONE BRUCIATORE 3",
|
||||||
|
"176,ALLARME PROTEZIONE BRUCIATORE 4"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 11 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 11",
|
||||||
|
"index": 11,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"177,ALLARME PROTEZIONE BRUCIATORE 5",
|
||||||
|
"178,ALLARME PROTEZIONE BRUCIATORE 6",
|
||||||
|
"179,ALLARME PROTEZIONE BRUCIATORE 7",
|
||||||
|
"180,ALLARME PROTEZIONE BRUCIATORE 8",
|
||||||
|
"181,ALLARME PROTEZIONE BRUCIATORE 9",
|
||||||
|
"182,ALLARME PROTEZIONE BRUCIATORE 10",
|
||||||
|
"183,ALLARME PROTEZIONE BRUCIATORE 11",
|
||||||
|
"184,ALLARME PROTEZIONE BRUCIATORE 12",
|
||||||
|
"185,TERMOFISSAGGIO O ESSICCAZIONE: TEMPERATURA FUORI CAMPO",
|
||||||
|
"186,TERMOFISSAGGIO O ESSICCAZIONE: VELOCITA' FUORI CAMPO",
|
||||||
|
"187,TERMOFISSAGGIO O ESSICCAZIONE: TEMPO FUORI CAMPO",
|
||||||
|
"188,SISTEMA CAMPI PARALLELI NON TARATO",
|
||||||
|
"189,ALLARME PROTEZIONE VENTOLE BRUCIATORI",
|
||||||
|
"190,CAMPO CONICO SINISTRO SU LIMITE CHIUSURA",
|
||||||
|
"191,CAMPO CONICO SINISTRO SU LIMITE APERTURA",
|
||||||
|
"192,CAMPO CONICO DESTRO SU LIMITE APERTURA"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 12 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 12",
|
||||||
|
"index": 12,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"193,CAMPO CONICO DESTRO SU LIMITE CHIUSURA",
|
||||||
|
"194,FINECORSA CAMPO CONICO DESTRO SU TRAVERSA",
|
||||||
|
"195,FINECORSA CAMPO CONICO SINISTRO SU TRAVERSA",
|
||||||
|
"196,ALLARME PROTEZIONE INVERTER CAMPO CONICO SINISTRO",
|
||||||
|
"197,ALLARME PROTEZIONE INVERTER CAMPO CONICO DESTRO",
|
||||||
|
"198,ALLARME DEVICE_NET ADDR. 27",
|
||||||
|
"199,ALLARME VENTILATORE 8 (ALTO)",
|
||||||
|
"200,ALLARME VENTILATORE 9 (ALTO)",
|
||||||
|
"201,ALLARME VENTILATORE 10 (ALTO)",
|
||||||
|
"202,ALLARME VENTILATORE 11 (ALTO)",
|
||||||
|
"203,ALLARME VENTILATORE 12 (ALTO)",
|
||||||
|
"204,ALLARME VENTILATORE 1 (ALTO)",
|
||||||
|
"205,ALLARME VENTILATORE 2 (ALTO)",
|
||||||
|
"206,ALLARME VENTILATORE 3 (ALTO)",
|
||||||
|
"207,ALLARME PROTEZIONE CELLA DI RAFFREDDAMENTO 2",
|
||||||
|
"208,ALLARME FINECORSA TANDEM CONTROLLO ANSA TESSUTO"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 13 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 13",
|
||||||
|
"index": 13,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"209,ALLARME FUNE SICUREZZA / PROTEZIONE RIBALTABILE ANTERIORE",
|
||||||
|
"210,ALLARME INVERTER VENTILATORI INV101A",
|
||||||
|
"211,ALLARME INVERTER VENTILATORI INV103A",
|
||||||
|
"212,ALLARME INVERTER VENTILATORI INV105A",
|
||||||
|
"213,ALLARME INVERTER VENTILATORI INV107A",
|
||||||
|
"214,ALLARME INVERTER VENTILATORI INV109A",
|
||||||
|
"215,ALLARME INVERTER VENTILATORI INV111A",
|
||||||
|
"216,ALLARME DA BANCHETTO DI SPALMATURA",
|
||||||
|
"217,ALLARME DEVICE_NET ADDR. 28",
|
||||||
|
"218,STOP JOG USCITA PER PESO RAGGIUNTO SU CELLA DI CARICO",
|
||||||
|
"219,DOGAL NON PRONTO",
|
||||||
|
"220,ALLARME PROTEZIONE CELLA RAFFREDDAMENTO 91A",
|
||||||
|
"221,MALFUNZIONAMENTO RECUPERO CALORE GRUPPO 1",
|
||||||
|
"222,ALLARME PROTEZIONE SOSTEGNO TESSUTO",
|
||||||
|
"223,TARATURA CAMPI CONICI NON EFFETTUATA!",
|
||||||
|
"224,ALLARME TIMEOUT VITE CAMPO PARALLELO 10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 14 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 14",
|
||||||
|
"index": 14,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"225,CAMPO PARALLELO 9 ALLARME PROTEZIONE",
|
||||||
|
"226,CAMPO PARALLELO 10 ALLARME PROTEZIONE",
|
||||||
|
"227,CAMPO PARALLELO 11 ALLARME PROTEZIONE",
|
||||||
|
"228,CAMPO PARALLELO 12 ALLARME PROTEZIONE",
|
||||||
|
"229,ALLARME FLUSSOSTATO RECUPERO CALORE 1",
|
||||||
|
"230,ALLARME FLUSSOSTATO RECUPERO CALORE 2",
|
||||||
|
"231,ALLARME FLUSSOSTATO RECUPERO CALORE 3",
|
||||||
|
"232,ALLARME PROTEZIONE VENTILATORE ASCIUGACIMOSSE",
|
||||||
|
"233,ALLARME PROTEZIONE RESISTENZE ASCIUGACIMOSSE",
|
||||||
|
"234,ALLARME PROTEZIONE RECUPERO CALORE - GRUPPO 1 POMPA 1 ",
|
||||||
|
"235,ALLARME INCENDIO",
|
||||||
|
"236,ATTENZIONE ! ALLARME PRESENTE SU BANCHETTO DI SPALMATURA",
|
||||||
|
"237,MALFUNZIONAMENTO RECUPERO CALORE GRUPPO 2",
|
||||||
|
"238,ALLARME PROTEZIONE CELLA RAFFREDDAMENTO 91B",
|
||||||
|
"239,ALLARME PROTEZIONE PULISCISPILLI",
|
||||||
|
"240,BATTERIA PLC - LIVELLO BASSO"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 15 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 15",
|
||||||
|
"index": 15,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"241,ALLARME CONTEMPORANEIT? TERMOSTATI SICUREZZA BRUCIATORI",
|
||||||
|
"242,BLOCCO VERSIONE SOFTWARE",
|
||||||
|
"243,SROTOLATORE NON PRONTO",
|
||||||
|
"244,ERRORE DI COMUNICAZIONE PROTOCOL MACRO",
|
||||||
|
"245,ALLARME TAGLIERINA URBAN",
|
||||||
|
"246,FINE TESSUTO IN INGRESSO",
|
||||||
|
"247,ALLARME PROTEZIONE SERVOVENTILAZIONI MOTORI",
|
||||||
|
"248,ALLARME INVERTER ARROTOLATORE TANGENZIALE",
|
||||||
|
"249,ALLARME SPREMITORE 2",
|
||||||
|
"250,ALLARME FS-91ER PLEVA",
|
||||||
|
"251,ALLARME LINEA EMERGENZA ARROTOLATORE",
|
||||||
|
"252,ALLARME FOTOCELLULE ARROTOLATORE",
|
||||||
|
"253,PORTA CASSETTA USCITA RAMOSA APERTA",
|
||||||
|
"254,ALLARME FINECORSA CILINDRO PROTEZIONE ARROTOLATORE ASSIALE",
|
||||||
|
"255,ALLARME PRESSOSTATI GRUPPO VALVOLE USCITA",
|
||||||
|
"256,ARROTOLATORE NON PRONTO"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 16 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 16",
|
||||||
|
"index": 16,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"257,FINECORSA GRUPPO FALDATORE AVANTI",
|
||||||
|
"258,FINECORSA GRUPPO FALDATORE INDIETRO",
|
||||||
|
"259,ALLARME BATTERIA ELETTRICA 1",
|
||||||
|
"260,SOVRATEMPERATURA BATTERIA ELETTRICA 5",
|
||||||
|
"261,ALLARME BATTERIA ELETTRICA 2",
|
||||||
|
"262,RISCALDAMENTO QUADRO SPENTO",
|
||||||
|
"263,SOVRATEMPERATURA BATTERIA ELETTRICA 1",
|
||||||
|
"264,SOVRATEMPERATURA BATTERIA ELETTRICA 2",
|
||||||
|
"265,ALLARME BATTERIA ELETTRICA 3",
|
||||||
|
"266,EMERGENZA DA SPALMATRICE",
|
||||||
|
"267,ALLARME BATTERIA ELETTRICA 4",
|
||||||
|
"268,ALLARME BATTERIA ELETTRICA 5",
|
||||||
|
"269,SOVRATEMPERATURA BATTERIA ELETTRICA 3",
|
||||||
|
"270,SOVRATEMPERATURA BATTERIA ELETTRICA 4",
|
||||||
|
"271,ALLARME IDROSTATO RECUPERO CALORE 1",
|
||||||
|
"272,ALLARME SENSORE LIVELLO RECUPERO CALORE 1 : AGGIUNGERE LIQUIDO !"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 17 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 17",
|
||||||
|
"index": 17,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"273,ALLARME RELE' CONTROLLO FASI",
|
||||||
|
"274,ALLARME DEVICE NET ADDR. 40 - MODULO GRT1-DRT USCITA RAMOSA",
|
||||||
|
"275,ALLARME PRESSOSTATO LINEA ENTRATA MACCHINA",
|
||||||
|
"276,ALLARME PRESSOSTATO LINEA USCITA MACCHINA",
|
||||||
|
"277,CAMPO CANNOCCHIALI 1 BLOCCATO",
|
||||||
|
"278,CAMPO CANNOCCHIALI 2 BLOCCATO",
|
||||||
|
"279,ALLARME DISCONTINUITA' CAMPI PARALLELI",
|
||||||
|
"280,ALLARME INSEGUIMENTO CAMPI PARALLELI - VITE LENTA",
|
||||||
|
"281,ALLARME LIMITE VITI",
|
||||||
|
"282,RAGGIUNTO MASSIMO CARICO SU CELLA DI CARICO",
|
||||||
|
"283,ALLARME PRESSOSTATO ESAUSTORE",
|
||||||
|
"284,EMERGENZA MOVIMENTO TESSUTO",
|
||||||
|
"285,EMERGENZA DA SPREMITORE 1",
|
||||||
|
"286,EMERGENZA DA RADDRIZZATRAMA",
|
||||||
|
"287,EMERGENZA DA SROTOLATORE",
|
||||||
|
"288,EMERGENZA DA ARROTOLATORE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 18 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 18",
|
||||||
|
"index": 18,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"289,ALLARME SICUREZZA BRUCIATORE 1",
|
||||||
|
"290,ALLARME SICUREZZA BRUCIATORE 2",
|
||||||
|
"291,ALLARME SICUREZZA BRUCIATORE 3",
|
||||||
|
"292,ALLARME SICUREZZA BRUCIATORE 4",
|
||||||
|
"293,ALLARME SICUREZZA BRUCIATORE 5",
|
||||||
|
"294,ALLARME SICUREZZA BRUCIATORE 6",
|
||||||
|
"295,ALLARME SICUREZZA BRUCIATORE 7",
|
||||||
|
"296,ALLARME SICUREZZA BRUCIATORE 8",
|
||||||
|
"297,ALLARME SICUREZZA BRUCIATORE 9",
|
||||||
|
"298,ALLARME SICUREZZA BRUCIATORE 10",
|
||||||
|
"299,ALLARME SICUREZZA BRUCIATORE 11",
|
||||||
|
"300,ALLARME SICUREZZA BRUCIATORE 12",
|
||||||
|
"301,ALLARME BRUCIATORE 1 SPENTO",
|
||||||
|
"302,ALLARME BRUCIATORE 2 SPENTO",
|
||||||
|
"303,ALLARME BRUCIATORE 3 SPENTO",
|
||||||
|
"304,ALLARME BRUCIATORE 4 SPENTO"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 19 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 19",
|
||||||
|
"index": 19,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"305,ALLARME BRUCIATORE 5 SPENTO",
|
||||||
|
"306,ALLARME BRUCIATORE 6 SPENTO",
|
||||||
|
"307,ALLARME BRUCIATORE 7 SPENTO",
|
||||||
|
"308,ALLARME BRUCIATORE 8 SPENTO",
|
||||||
|
"309,ALLARME BRUCIATORE 9 SPENTO",
|
||||||
|
"310,ALLARME BRUCIATORE 10 SPENTO",
|
||||||
|
"311,ALLARME BRUCIATORE 11 SPENTO",
|
||||||
|
"312,ALLARME BRUCIATORE 12 SPENTO",
|
||||||
|
"313,ALLARME SENSORE LIVELLO RECUPERO CALORE 2 : AGGIUNGERE LIQUIDO !",
|
||||||
|
"314,ALLARME DA MIXER",
|
||||||
|
"315,ALLARME PRESSOSTATI LUBRIFICAZIONE",
|
||||||
|
"316,ALLARME ABBATTITORE FUMI",
|
||||||
|
"317,MACCHINA 1 NON IN LINEA",
|
||||||
|
"318,MACCHINA 2 NON IN LINEA",
|
||||||
|
"319,MACCHINA 3 NON IN LINEA",
|
||||||
|
"320,MACCHINA 4 NON IN LINEA"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 20 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 20",
|
||||||
|
"index": 20,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"321,MACCHINA 5 NON IN LINEA",
|
||||||
|
"322,MACCHINA 6 NON IN LINEA",
|
||||||
|
"323,MACCHINA 7 NON IN LINEA",
|
||||||
|
"324,MACCHINA 8 NON IN LINEA",
|
||||||
|
"325,NON STOP NON PRONTO",
|
||||||
|
"326,EMERGENZA DA NON STOP",
|
||||||
|
"327,ALLARME DISCONTINUITA' CAMPO MASTER",
|
||||||
|
"328,ALLARME DISCONTINUITA' CAMPO PARALLELO 1",
|
||||||
|
"329,ALLARME DISCONTINUITA' CAMPO PARALLELO 2",
|
||||||
|
"330,ALLARME DISCONTINUITA' CAMPO PARALLELO 3",
|
||||||
|
"331,ALLARME DISCONTINUITA' CAMPO PARALLELO 4",
|
||||||
|
"332,ALLARME DISCONTINUITA' CAMPO PARALLELO 5",
|
||||||
|
"333,ALLARME DISCONTINUITA' CAMPO PARALLELO 6",
|
||||||
|
"334,ALLARME DISCONTINUITA' CAMPO PARALLELO 7",
|
||||||
|
"335,ALLARME DISCONTINUITA' CAMPO PARALLELO 8",
|
||||||
|
"336,ALLARME DISCONTINUITA' CAMPO PARALLELO 9"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 21 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 21",
|
||||||
|
"index": 21,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"337,ALLARME DISCONTINUITA' CAMPO PARALLELO 10",
|
||||||
|
"338,PROTEZIONI INGRESSO APERTE",
|
||||||
|
"339,PROTEZIONI USCITA APERTE",
|
||||||
|
"340,ALLARME PROTEZIONE ESTRATTORE FUMI 1",
|
||||||
|
"341,ALLARME PROTEZIONE ESTRATTORE FUMI 2",
|
||||||
|
"342,MANCANZA PRESSOSTATO ESTRATTORE FUMI 1",
|
||||||
|
"343,MANCANZA PRESSOSTATO ESTRATTORE FUMI 2",
|
||||||
|
"344,EMERGENZA DA MIXER",
|
||||||
|
"345,EMERGENZA DA SPREMITORE 2",
|
||||||
|
"346,ALLARME PROTEZIONE VENTILATORE RECUPERO CALORE 1",
|
||||||
|
"347,ALLARME PROTEZIONE VENTILATORE RECUPERO CALORE 2",
|
||||||
|
"348,ALLARME MODULO VELOCITA? ZERO CATENA TRASP. TESSUTO",
|
||||||
|
"349,ALLARME RILEVAMENTO TESSUTO SINISTRO USCITA",
|
||||||
|
"350,ALLARME RILEVAMENTO TESSUTO DESTRO USCITA",
|
||||||
|
"351,ALLARME FINECORSA SOLLEVAMENTO CAMPI CONICI",
|
||||||
|
"352,ALLARME IDROSTATO RECUPERO CALORE 2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 22 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 22",
|
||||||
|
"index": 22,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"353,ALLARME FUNE DI PROTEZIONE IN USCITA",
|
||||||
|
"354,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 1",
|
||||||
|
"355,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 2",
|
||||||
|
"356,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 3",
|
||||||
|
"357,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 4",
|
||||||
|
"358,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 5",
|
||||||
|
"359,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 6",
|
||||||
|
"360,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 7",
|
||||||
|
"361,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 8",
|
||||||
|
"362,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 9",
|
||||||
|
"363,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 10",
|
||||||
|
"364,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 11",
|
||||||
|
"365,ALLARME PROTEZIONE VENTOLA BRUCIATORE MAXON 12",
|
||||||
|
"366,OLIO CATENA - PRESSIONE MINIMA",
|
||||||
|
"367,POMPA OLIO CATENA - ALLARME PROTEZIONE",
|
||||||
|
"368,JBOX INGRESSO - BALLERINO BASSO"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 23 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 23",
|
||||||
|
"index": 23,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"369,JBOX INGRESSO - FINE TESSUTO",
|
||||||
|
"370,JBOX INGRESSO - PIENO",
|
||||||
|
"371,JBOX INGRESSO - BALLERINO ALTO",
|
||||||
|
"372,JBOX INGRESSO - VUOTO",
|
||||||
|
"373,JBOX USCITA - BALLERINO BASSO",
|
||||||
|
"374,JBOX USCITA - FINE TESSUTO",
|
||||||
|
"375,JBOX USCITA - PIENO",
|
||||||
|
"376,JBOX USCITA - BALLERINO ALTO",
|
||||||
|
"377,JBOX USCITA - VUOTO",
|
||||||
|
"378,JBOX USCITA - ALLARME PRESSOSTATO",
|
||||||
|
"379,JBOX ENTRATA - ALLARME PRESSOSTATO",
|
||||||
|
"380,ALLARME PROTEZIONE CARRELLO FALDATORE",
|
||||||
|
"381,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 1",
|
||||||
|
"382,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 2",
|
||||||
|
"383,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 3",
|
||||||
|
"384,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 4"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 24 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 24",
|
||||||
|
"index": 24,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"385,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 5",
|
||||||
|
"386,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 6",
|
||||||
|
"387,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 7",
|
||||||
|
"388,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 8",
|
||||||
|
"389,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 9",
|
||||||
|
"390,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 10",
|
||||||
|
"391,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 11",
|
||||||
|
"392,RISCALDAMENTO INDIRETTO - ALLARME FEEDBACK SERRANDA BR. 12",
|
||||||
|
"393,ESTRATTORE FUMI RISC. INDIRETTO 1 - ALLARME PROTEZIONE",
|
||||||
|
"394,ESTRATTORE FUMI RISC. INDIRETTO 2 - ALLARME PROTEZIONE",
|
||||||
|
"395,ESTRATTORE FUMI RISC. INDIRETTO 3 - ALLARME PROTEZIONE",
|
||||||
|
"396,ESTRATTORE FUMI RISC. INDIRETTO 4 - ALLARME PROTEZIONE",
|
||||||
|
"397,ESTRATTORE FUMI RISC. INDIRETTO 5 - ALLARME PROTEZIONE",
|
||||||
|
"398,ESTRATTORE FUMI RISC. INDIRETTO 6 - ALLARME PROTEZIONE",
|
||||||
|
"399,TAGLIERINA SINISTRA - FUORI POSIZIONE",
|
||||||
|
"400,TAGLIERINA DESTRA - FUORI POSIZIONE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 25 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 25",
|
||||||
|
"index": 25,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"401,ALLARME PROTEZIONE CILINDRO CONTRASTO TAGLIERINE",
|
||||||
|
"402,JBOX INGRESSO - TESSUTO INCROCIATO",
|
||||||
|
"403,JBOX USCITA - TESSUTO INCROCIATO",
|
||||||
|
"404,ALLARME DEVICE_NET STAZIONE ADDR.38 - JBOX INGRESSO",
|
||||||
|
"405,ALLARME DEVICE_NET STAZIONE ADDR.39 - JBOX USCITA",
|
||||||
|
"406,JBOX INGRESSO - ALLARME INVERTER",
|
||||||
|
"407,JBOX USCITA - ALLARME INVERTER",
|
||||||
|
"408,ALLARGA/CENTRATORE A/B SU IMBARRAGGIO - ALLARME PROTEZIONE",
|
||||||
|
"409,ALLARME TIMEOUT VITE CAMPO PARALLELO 11",
|
||||||
|
"410,ALLARME TIMEOUT VITE CAMPO PARALLELO 12",
|
||||||
|
"411,FRENO JBOX INGRESSO - ALLARME PROTEZIONE",
|
||||||
|
"412,FRENO JBOX USCITA - ALLARME PROTEZIONE",
|
||||||
|
"413,ALLARME PROTEZIONE FRENO CAMPO CONICO SINISTRO",
|
||||||
|
"414,ALLARME PROTEZIONE FRENO CAMPO CONICO DESTRO",
|
||||||
|
"415,VERIFICA PRESSOSTATO 1 FALLITA",
|
||||||
|
"416,VERIFICA PRESSOSTATO 2 FALLITA"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 26 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 26",
|
||||||
|
"index": 26,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"417,ALLARME TERMOSTATO INTERNO QUADRO",
|
||||||
|
"418,ALLARME PROTEZIONE RECUPERO CALORE - GRUPPO 1 POMPA 2",
|
||||||
|
"419,ALLARME PROTEZIONE RECUPERO CALORE - GRUPPO 2 POMPA 2",
|
||||||
|
"420,PROTEZIONE RIBALTABILE INGRESSO",
|
||||||
|
"421,FUNE EMERGENZA INGRESSO",
|
||||||
|
"422,PARATIA SCORREVOLE INGRESSO SINISTRA",
|
||||||
|
"423,PARATIA SCORREVOLE INGRESSO DESTRA",
|
||||||
|
"424,CANCELLO SINISTRO ENTRATA ANTERIORE",
|
||||||
|
"425,CANCELLO SINISTRO ENTRATA POSTERIORE",
|
||||||
|
"426,CANCELLO DESTRO ENTRATA ANTERIORE",
|
||||||
|
"427,CANCELLO DESTRO ENTRATA POSTERIORE",
|
||||||
|
"428,CANCELLO SINISTRO USCITA",
|
||||||
|
"429,CANCELLO DESTRO USCITA",
|
||||||
|
"430,TENSIONATORE FUNE EMERGENZA SINISTRA ZONA FORNO",
|
||||||
|
"431,TENSIONATORE FUNE EMERGENZA DESTRA ZONA FORNO",
|
||||||
|
"432,FUNE EMERGENZA SINISTRA ZONA FORNO"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 27 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 27",
|
||||||
|
"index": 27,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"433,FUNE EMERGENZA DESTRA ZONA FORNO",
|
||||||
|
"434,ALLARME FEEDBACK SCARICO ARIA ENTRATA MACCHINA (1)",
|
||||||
|
"435,ALLARME FEEDBACK SCARICO ARIA ENTRATA MACCHINA (2)",
|
||||||
|
"436,ALLARME FEEDBACK SCARICO ARIA USCITA MACCHINA (1)",
|
||||||
|
"437,ALLARME FEEDBACK SCARICO ARIA USCITA MACCHINA (2)",
|
||||||
|
"438,ALLARME FEEDBACK EMERGENZA GENERALE DA SCARICO ARIA",
|
||||||
|
"439,BYPASS SPORTELLI ARMADIO ATTIVO",
|
||||||
|
"440,TIMEOUT ENCODER CAMPO CONICO SINISTRO",
|
||||||
|
"441,TIMEOUT ENCODER CAMPO CONICO DESTRO",
|
||||||
|
"442,ALLARME BALLERINO ALTO SPREMITORE 1",
|
||||||
|
"443,ALLARME BALLERINO ALTO SPREMITORE 2",
|
||||||
|
"444,",
|
||||||
|
"445,",
|
||||||
|
"446,",
|
||||||
|
"447,",
|
||||||
|
"448,"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 28 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 28",
|
||||||
|
"index": 28,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"449,",
|
||||||
|
"450,",
|
||||||
|
"451,",
|
||||||
|
"452,",
|
||||||
|
"453,",
|
||||||
|
"454,",
|
||||||
|
"455,",
|
||||||
|
"456,",
|
||||||
|
"457,",
|
||||||
|
"458,",
|
||||||
|
"459,",
|
||||||
|
"460,ALLARME PROTEZIONE BARRE ANTISTATICHE",
|
||||||
|
"461,ALLARME PROTEZIONE VENTILAZIONE INTERNO QUADRO",
|
||||||
|
"462,BORDO SENSIBILE ",
|
||||||
|
"463,FALDAROTOLATORE_SICUREZZA SX/DX ",
|
||||||
|
"464,FALDAROTOLATORE_EMERGENZA TESSUTO "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 29 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 29",
|
||||||
|
"index": 29,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"465,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.1",
|
||||||
|
"466,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.2",
|
||||||
|
"467,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.3",
|
||||||
|
"468,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.4",
|
||||||
|
"469,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.5",
|
||||||
|
"470,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.6",
|
||||||
|
"471,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.7",
|
||||||
|
"472,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.8",
|
||||||
|
"473,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.9",
|
||||||
|
"474,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.10",
|
||||||
|
"475,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.11",
|
||||||
|
"476,ALLARME DEPRESSIONE RISCALDAMENTO INDIRETTO BR.12",
|
||||||
|
"477,MALFUNZIONAMNETO PRESSOSTATO ESTRATTORE FUMI 1/2",
|
||||||
|
"478,MALFUNZIONAMNETO PRESSOSTATO ESTRATTORE FUMI 3/4",
|
||||||
|
"479,MALFUNZIONAMNETO PRESSOSTATO ESTRATTORE FUMI 5/6",
|
||||||
|
"480,MALFUNZIONAMNETO PRESSOSTATO ESTRATTORE FUMI 7/8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 30 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 30",
|
||||||
|
"index": 30,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"481,MALFUNZIONAMNETO PRESSOSTATO ESTRATTORE FUMI 9/10",
|
||||||
|
"482,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 1",
|
||||||
|
"483,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 2",
|
||||||
|
"484,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 3",
|
||||||
|
"485,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 4",
|
||||||
|
"486,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 5",
|
||||||
|
"487,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 6",
|
||||||
|
"488,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 7",
|
||||||
|
"489,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 8",
|
||||||
|
"490,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 9",
|
||||||
|
"491,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 10",
|
||||||
|
"492,TRASDUTTORE PRESSIONE BR 1 INTERROTTO",
|
||||||
|
"493,TRASDUTTORE PRESSIONE BR 2 INTERROTTO",
|
||||||
|
"494,TRASDUTTORE PRESSIONE BR 3 INTERROTTO",
|
||||||
|
"495,TRASDUTTORE PRESSIONE BR 4 INTERROTTO",
|
||||||
|
"496,TRASDUTTORE PRESSIONE BR 5 INTERROTTO"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 31 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 31",
|
||||||
|
"index": 31,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"497,TRASDUTTORE PRESSIONE BR 6 INTERROTTO",
|
||||||
|
"498,TRASDUTTORE PRESSIONE BR 7 INTERROTTO",
|
||||||
|
"499,TRASDUTTORE PRESSIONE BR 8 INTERROTTO",
|
||||||
|
"500,TRASDUTTORE PRESSIONE BR 9 INTERROTTO",
|
||||||
|
"501,TRASDUTTORE PRESSIONE BR 10 INTERROTTO",
|
||||||
|
"502,TRASDUTTORE PRESSIONE BR 11 INTERROTTO",
|
||||||
|
"503,TRASDUTTORE PRESSIONE BR 12 INTERROTTO",
|
||||||
|
"504,ERRORE TRASDUTTORE DI PRESSIONE RC1",
|
||||||
|
"505,ERRORE TRASDUTTORE DI PRESSIONE RC2",
|
||||||
|
"506,ALLARME INVERTER RIPRISTINO PRESSIONE GRUPPO 1 RC",
|
||||||
|
"507,ALLARME INVERTER RIPRISTINO PRESSIONE GRUPPO 2 RC",
|
||||||
|
"508,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 11",
|
||||||
|
"509,MALFUNZIONAMENTO PRESSOSTATO SICUREZZA BRUCIATORE 12",
|
||||||
|
"510,ALLARME PRESSOSTATO TAGLIERINE",
|
||||||
|
"511,BALLERINO ALTO - SROTOLATORE - ALLARME",
|
||||||
|
"512,EMERGENZA DA LINEA ENTRATA RAMOSA"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Alarm Word 32 ",
|
||||||
|
"tipoMem": "Byte",
|
||||||
|
"memAddr": "Alarm Word 32",
|
||||||
|
"index": 32,
|
||||||
|
"size": 2,
|
||||||
|
"messages": [
|
||||||
|
"513,LINEA ENTRATA RAMOSA NON PRONTA",
|
||||||
|
"514,EMERGENZA DA LINEA USCITA RAMOSA",
|
||||||
|
"515,LINEA USCITA RAMOSA NON PRONTA",
|
||||||
|
"516,TAGLIERINA CENTRALE FUORI POSIZIONE",
|
||||||
|
"517,TIRACIMOSSE NON PRONTO",
|
||||||
|
"518,JBOX INGRESSO IN EMERGENZA",
|
||||||
|
"519,JBOX INGRESSO NON PRONTO",
|
||||||
|
"520,JBOX USCITA IN EMERGENZA",
|
||||||
|
"521,JBOX USCITA NON PRONTO",
|
||||||
|
"522,ALLARME D-NET 41 RISCALDAMENTO INDIRETTO",
|
||||||
|
"523,SPAZZOLATRICE IN EMERGENZA",
|
||||||
|
"524,SPAZZOLATRICE NON PRONTA",
|
||||||
|
"525,ALLARME FUNE DI SICUREZZA USCITA STACCAPEZZA",
|
||||||
|
"526,ALLARME FUNE DI SICUREZZA USCITA FALDAROTOLATORE",
|
||||||
|
"527,ALLARME FUNE DI SICUREZZA CAMPO CONICO SINISTRO",
|
||||||
|
"528,ALLARME FUNE DI SICUREZZA CAMPO CONICO DESTRO"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -0,0 +1,209 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{26D891EF-C115-420A-B240-05F099E13853}</ProjectGuid>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<RootNamespace>IOB_WIN_SIEMENS</RootNamespace>
|
||||||
|
<AssemblyName>IOB-WIN-SIEMENS</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote_DEBUG|AnyCPU'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\Remote_DEBUG\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<LangVersion>7.3</LangVersion>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="MapoSDK, Version=6.14.2411.518, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\MapoSDK.6.14.2411.518\lib\MapoSDK.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="S7.Net, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d5812d469e84c693, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\S7netplus.0.1.9\lib\net45\S7.Net.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Deployment" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\VersGen\VersGen.cs">
|
||||||
|
<Link>VersGen.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="AdapterFormNext.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="connParamS7.cs" />
|
||||||
|
<Compile Include="IobSiemens\Siemens.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensAprochim.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensAt2001.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensComeca.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensComur.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensCosmap.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensFape.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensFapeV2.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensIngenia.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensLasco.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensNWSE.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensPressoilCei.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensRobotService.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensSaet.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensSimec.cs" />
|
||||||
|
<Compile Include="IobSiemens\SiemensTorri.cs" />
|
||||||
|
<Compile Include="Iob\GenericNext.cs" />
|
||||||
|
<Compile Include="MainFormNext.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="memAreaSiemens.cs" />
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Content Include="Resources\STEAM-IOB-WIN.xml">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="Resources\SteamWare.ico">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<None Include="App.Debug.config">
|
||||||
|
<DependentUpon>App.config</DependentUpon>
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="App.Release.config">
|
||||||
|
<DependentUpon>App.config</DependentUpon>
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="DATA\CONF\FTP-PING.ini">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="DATA\CONF\IOB.ini">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="DATA\CONF\MAIN.ini">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="DATA\CONF\PING.ini">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="DATA\CONF\SIMUL_01.ini">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="DATA\CONF\SIMUL_01.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="DATA\CONF\SIMUL_01_alarm.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="DATA\CONF\SIMUL_01_WD.ini">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="DATA\DAT\PersistData.dat">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="DATA\DAT\SimData.dat">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="DATA\HIST\.placeholder">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="NLog.config">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
<None Include="postBuildTgt.bat" />
|
||||||
|
<None Include="Properties\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<Compile Include="Properties\Settings.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
<Content Include="Resources\Start-IOB-WIN.bat">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<None Include="setupTgt.bat" />
|
||||||
|
<None Include="temp\.placeholder">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="logs\.placeholder.txt">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="Resources\ChangeLog.html">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="Resources\Circuit.ico" />
|
||||||
|
<Content Include="Resources\logoSteamware.png">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="Resources\manifest.xml">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="Resources\Net.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\IOB-UT-NEXT\IOB-UT-NEXT.csproj">
|
||||||
|
<Project>{90512e12-29fc-460d-94cc-648c2a072dbd}</Project>
|
||||||
|
<Name>IOB-UT-NEXT</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\IOB-WIN-FORM\IOB-WIN-FORM.csproj">
|
||||||
|
<Project>{9ba331bb-9bf1-40e0-ac03-74b43d73a097}</Project>
|
||||||
|
<Name>IOB-WIN-FORM</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.Iob
|
||||||
|
{
|
||||||
|
public class GenericNext : IOB_WIN_FORM.Iob.Generic
|
||||||
|
{
|
||||||
|
|
||||||
|
public GenericNext(AdapterFormNext caller, IobConfiguration IOBConf): base((IOB_WIN_FORM.AdapterForm)caller, IOBConf)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,222 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Controllo Siemens specifico x impianti Aprochim /MacDermid
|
||||||
|
/// </summary>
|
||||||
|
public class SiemensAprochim : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS Aprochim (impianti filtrazione in Jetco, gruppo macDermid)
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1500
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB60:
|
||||||
|
* - parametri processo
|
||||||
|
* - DB60.DBD6: pressione camera filtrante (salvataggio del MAX ogni minuto) | var testVal = S7.Net.Types.Double.FromByteArray(memByteRead.Skip(0).Take(4).ToArray());
|
||||||
|
* - DB60.DBD10: pressione linea utenze (salvataggio del MAX ogni minuto)
|
||||||
|
* - DB60.DBD14: temperatura acqua pulita (salvataggio del MAX ogni minuto)
|
||||||
|
*
|
||||||
|
* - BIT di stato
|
||||||
|
* - DB60.DBX3.0: AUSILIARI INSERITI = NO EMERGENZA
|
||||||
|
* - DB60.DBX3.1: Filtro (macchina) in LAVORAZIONE
|
||||||
|
* - DB60.DBX3.2: Selettore in AUTOMATICO (sennò GIALLO)
|
||||||
|
* - DB60.DBX3.3: WARNING MIN LIV VASCA (arancio)
|
||||||
|
* - DB60.DBX3.4: WARNING MIN LIV CELLULOSA (blu)
|
||||||
|
* - DB60.DBX3.5: LAMPADA ROSSA (allarmi almeno 1 attivo)
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensAprochim(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione APROCHIM");
|
||||||
|
// imposto i parametri speciali x calcolo...
|
||||||
|
var chiaviTSVC = findOptPar("TSVC");
|
||||||
|
if (chiaviTSVC.Count > 0)
|
||||||
|
{
|
||||||
|
lgInfo($"Trovate {chiaviTSVC.Count} chiavi TSVC");
|
||||||
|
string[] codVal;
|
||||||
|
VCData currConf;
|
||||||
|
int periodo = 0;
|
||||||
|
VC_func funz = VC_func.POINT;
|
||||||
|
// accodo nella conf...
|
||||||
|
foreach (var item in chiaviTSVC)
|
||||||
|
{
|
||||||
|
codVal = item.Value.Split(':');
|
||||||
|
Enum.TryParse(codVal[0], out funz);
|
||||||
|
int.TryParse(codVal[1], out periodo);
|
||||||
|
currConf = new VCData()
|
||||||
|
{
|
||||||
|
Funzione = funz,
|
||||||
|
Period = periodo,
|
||||||
|
DTStart = DateTime.Now.AddHours(-1),
|
||||||
|
dataArray = new List<double>()
|
||||||
|
};
|
||||||
|
TSVC_Data.Add(item.Key.Replace("TSVC_", ""), currConf);
|
||||||
|
}
|
||||||
|
// documento...
|
||||||
|
foreach (var item in TSVC_Data)
|
||||||
|
{
|
||||||
|
lgTrace($"TSVC: {item.Key} | periodo: {item.Value.Period} | funz: {item.Value.Funzione}");
|
||||||
|
// salvo i valori PREC...
|
||||||
|
LastTSVC.Add(item.Key, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupero dati dinamici in formato dictionary
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override Dictionary<string, string> getDynData()
|
||||||
|
{
|
||||||
|
Dictionary<string, string> outVal = new Dictionary<string, string>();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
/* ----------------------------------------------------------
|
||||||
|
* DB60.DBD6: pressione camera filtrante (salvataggio del MAX ogni minuto) | var testVal = S7.Net.Types.Double.FromByteArray(memByteRead.Skip(0).Take(4).ToArray());
|
||||||
|
* DB60.DBD10: pressione linea utenze (salvataggio del MAX ogni minuto)
|
||||||
|
* DB60.DBD14: temperatura acqua pulita (salvataggio del MAX ogni minuto)
|
||||||
|
* */
|
||||||
|
double pressCamFilt = S7.Net.Types.Double.FromByteArray(RawInput.Skip(6).Take(4).ToArray());
|
||||||
|
double pressLinUt = S7.Net.Types.Double.FromByteArray(RawInput.Skip(10).Take(4).ToArray());
|
||||||
|
double tempH2O = S7.Net.Types.Double.FromByteArray(RawInput.Skip(14).Take(4).ToArray());
|
||||||
|
|
||||||
|
if (utils.CRB("enableTSVC"))
|
||||||
|
{
|
||||||
|
DateTime adesso = DateTime.Now;
|
||||||
|
// salvo in stack le VC rilevate
|
||||||
|
bool scad01 = stackVal_TSVC("pressCamFilt", pressCamFilt, adesso);
|
||||||
|
bool scad02 = stackVal_TSVC("pressLinUt", pressLinUt, adesso);
|
||||||
|
bool scad03 = stackVal_TSVC("tempH2O", tempH2O, adesso);
|
||||||
|
|
||||||
|
// verifico SE devo riportare dati VC
|
||||||
|
if (scad01 || scad02 || scad03)
|
||||||
|
{
|
||||||
|
pressCamFilt = getVal_TSVC("pressCamFilt", scad01);
|
||||||
|
pressLinUt = getVal_TSVC("pressLinUt", scad02);
|
||||||
|
tempH2O = getVal_TSVC("tempH2O", scad03);
|
||||||
|
outVal.Add("DYNDATA", $"pressCamFilt {pressCamFilt:N6} | pressLinUt {pressLinUt:N6} | tempH2O {tempH2O:N3}");
|
||||||
|
outVal.Add("pressCamFilt", $"{pressCamFilt:N6}");
|
||||||
|
outVal.Add("pressLinUt", $"{pressLinUt:N6}");
|
||||||
|
outVal.Add("tempH2O", $"{tempH2O:N3}");
|
||||||
|
// salvo!
|
||||||
|
LastTSVC["pressCamFilt"] = pressCamFilt;
|
||||||
|
LastTSVC["pressLinUt"] = pressLinUt;
|
||||||
|
LastTSVC["tempH2O"] = tempH2O;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
outVal.Add("DYNDATA", $"pressCamFilt {LastTSVC["pressCamFilt"]:N6} | pressLinUt {LastTSVC["pressLinUt"]:N6} | tempH2O {LastTSVC["tempH2O"]:N3}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
outVal.Add("pressCamFilt", $"{pressCamFilt:N6}");
|
||||||
|
outVal.Add("pressLinUt", $"{pressLinUt:N6}");
|
||||||
|
outVal.Add("tempH2O", $"{tempH2O:N3}");
|
||||||
|
outVal.Add("DYNDATA", $"pressCamFilt {pressCamFilt:N3} | pressLinUt {pressLinUt:N3} | tempH2O {tempH2O:N3}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
lgError(exc, "Errore in getDynData x Siemens Aprochim");
|
||||||
|
}
|
||||||
|
return outVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid)
|
||||||
|
/// </summary>
|
||||||
|
public override void processOverride()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO STANDARD
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
* B4: manuale
|
||||||
|
* B5: emergenza
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* - BIT di stato
|
||||||
|
* - DB60.DBX3.0: AUSILIARI INSERITI = NO EMERGENZA
|
||||||
|
* - DB60.DBX3.1: Filtro (macchina) in LAVORAZIONE
|
||||||
|
* - DB60.DBX3.2: Selettore in AUTOMATICO (sennò GIALLO)
|
||||||
|
* - DB60.DBX3.3: WARNING MIN LIV VASCA (arancio)
|
||||||
|
* - DB60.DBX3.4: WARNING MIN LIV CELLULOSA (blu)
|
||||||
|
* - DB60.DBX3.5: LAMPADA ROSSA (allarmi almeno 1 attivo)
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO FILTRO Aprochim
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: AUTOMATICO
|
||||||
|
* B3: WARN_MIN_VASCA
|
||||||
|
* B4: WARN_MIN_CELL
|
||||||
|
* B5: ALARM
|
||||||
|
* B6: EMERGENZA
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
B_input = currPLC.IsConnected ? 1 : 0;
|
||||||
|
|
||||||
|
// recupero byte segnali...
|
||||||
|
int byteSignals = RawInput[3];
|
||||||
|
// aggiungo "in coda" primo bit emergenza...essendo un bit negato (NON emergenza) lo
|
||||||
|
// cambio di segno
|
||||||
|
if ((byteSignals & (1 << 0)) == 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 6);
|
||||||
|
}
|
||||||
|
// cancello primo bit (faccio uno shift a dx e poi a sx di 1...)
|
||||||
|
byteSignals = ((byteSignals >> 1) << 1);
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
if (currPLC.IsConnected)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 0);
|
||||||
|
}
|
||||||
|
// salvo!
|
||||||
|
B_input = byteSignals;
|
||||||
|
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo(string.Format($"Trasformazione dati: RawInput:{RawInput[3]} --> B_input: {B_input}"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,291 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Controllo Siemens specifico x impianti SAET
|
||||||
|
/// </summary>
|
||||||
|
public class SiemensAt2001 : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli VIPA/SIEMENS (Interclays) di @2001
|
||||||
|
* - VIPA, COMPATIBILE SIEMENS
|
||||||
|
* - S7 vers 300
|
||||||
|
*
|
||||||
|
*
|
||||||
|
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensAt2001(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione VIPA AT2001");
|
||||||
|
lastPLCWatchDog = DateTime.Now.AddMinutes(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processo i task richiesti e li elimino dalla coda 1:1
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task2exe"></param>
|
||||||
|
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
|
||||||
|
{
|
||||||
|
// Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti...
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
bool taskOk = false;
|
||||||
|
string taskVal = "";
|
||||||
|
// inizio VUOTO
|
||||||
|
byte[] MemBlock = new byte[1];
|
||||||
|
string memAddrWrite = "";
|
||||||
|
if (task2exe != null)
|
||||||
|
{
|
||||||
|
// cerco task specifici: se ho startSetup --> imposto bit DBB701.DBB0.4
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
memAddrWrite = "";
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.nihil:
|
||||||
|
case taskType.fixStopSetup:
|
||||||
|
case taskType.forceSetPzCount:
|
||||||
|
case taskType.stopSetup:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
case taskType.startSetup:
|
||||||
|
// alzo il bit x registrare richiesta reset contapezzi... POI quando ha
|
||||||
|
// eseguito abbassa il PLC il bit a zero...
|
||||||
|
MemBlock[0] = 1;
|
||||||
|
memAddrWrite = "DB1001.DBB88";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setArt:
|
||||||
|
case taskType.setComm:
|
||||||
|
case taskType.setProg:
|
||||||
|
|
||||||
|
int byteSize = 0;
|
||||||
|
upsertKey(item.Key, item.Value);
|
||||||
|
// recupero dati da memMap... altrimenti NULLA
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
dataConf currMem = memMap.mMapWrite[item.Key];
|
||||||
|
byteSize = currMem.size;
|
||||||
|
memAddrWrite = currMem.memAddr;
|
||||||
|
MemBlock = new byte[byteSize];
|
||||||
|
switch (currMem.tipoMem)
|
||||||
|
{
|
||||||
|
case plcDataType.Boolean:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case plcDataType.Int:
|
||||||
|
saveIntOnMemBlock(ref MemBlock, item.Key, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case plcDataType.DInt:
|
||||||
|
saveDIntOnMemBlock(ref MemBlock, item.Key, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case plcDataType.Real:
|
||||||
|
saveRealOnMemBlock(ref MemBlock, item.Key, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case plcDataType.String:
|
||||||
|
saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskVal = item.Value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setParameter:
|
||||||
|
// richiedo da URL i parametri WRITE da popolare
|
||||||
|
lgInfo("Chiamata processMemWriteRequests");
|
||||||
|
taskVal = processMemWriteRequests();
|
||||||
|
// se restituiscce "" faccio altra prova...
|
||||||
|
if (!string.IsNullOrEmpty(taskVal))
|
||||||
|
{
|
||||||
|
taskOk = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// i parametri me li aspetto come stringa composta paramName|paramvalue
|
||||||
|
if (item.Value.Contains("|"))
|
||||||
|
{
|
||||||
|
string[] paramsJob = item.Value.Split('|');
|
||||||
|
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// alzo il bit x registrare RICHEISTA modifica (secondo BIT)... POI
|
||||||
|
// quando ha eseguito abbassa il PLC il bit a zero...
|
||||||
|
MemBlock[0] = 2;
|
||||||
|
memAddrWrite = "DB1001.DBB88";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.sendWatchDogMes2Plc:
|
||||||
|
//// compogo in byte... primo bit è setup/run, ultimo è watchdog
|
||||||
|
//int valore = inSetup ? 1 : 0;
|
||||||
|
int valore = counterMes2Plc;
|
||||||
|
MemBlock[68] = (byte)valore;
|
||||||
|
taskVal = $"VALUE DB1001.68 --> {counterMes2Plc}";
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = "SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// aggiungo task!
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
if (!string.IsNullOrEmpty(memAddrWrite))
|
||||||
|
{
|
||||||
|
// scrivo!
|
||||||
|
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
}
|
||||||
|
if (!taskOk)
|
||||||
|
{
|
||||||
|
lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return taskDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid)
|
||||||
|
/// </summary>
|
||||||
|
public override void processOverride()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void processWhatchDog()
|
||||||
|
{
|
||||||
|
//NON SERVE!!!!
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected int counterMes2Plc = 0;
|
||||||
|
protected int counterPlc2Mes = 0;
|
||||||
|
protected DateTime lastPLCWatchDog;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO STANDARD
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
* B4: manuale
|
||||||
|
* B5: avvio/spegnimento
|
||||||
|
* B6: emergenza
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* - BYTE di stato
|
||||||
|
* - +0.0 AutoStatus BYTE B#16#0 Valore 0=Fermo/1->3=Avviamento/4=Avviato/5=Pausa/6->8spegnimento/9->10 allarme
|
||||||
|
* - +1.0 Dosatore BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on)
|
||||||
|
* - +2.0 V_Dosatore BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on)
|
||||||
|
* - +3.0 Nas_Lancio BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on)
|
||||||
|
* - +4.0 Cilindro BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on)
|
||||||
|
* - +5.0 Bruciatore BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on)
|
||||||
|
* - +6.0 Aspiratore BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on)
|
||||||
|
* - +7.0 Nas_Raccolta BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on)
|
||||||
|
* - +8.0 Nas_Brandeg BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on)
|
||||||
|
* - +9.0 Coclea_Filtro BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on)
|
||||||
|
* - +10.0 Ciclico_Filtro BYTE B#16#0 Stato (bit0=in avviamento/1=marcia sx/2=marcia dx/3=in allarme/4=by-pass on)
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
// recupero byte segnali...
|
||||||
|
int byteSignals = RawInput[0];
|
||||||
|
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
B_input = currPLC.IsConnected ? 1 : 0;
|
||||||
|
|
||||||
|
// avviamento --> manuale
|
||||||
|
switch (byteSignals)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
B_input = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
B_input += (1 << 5);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
B_input += (1 << 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
B_input += (1 << 4);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
case 7:
|
||||||
|
case 8:
|
||||||
|
B_input += (1 << 5);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 9:
|
||||||
|
B_input += (1 << 3);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 10:
|
||||||
|
B_input += (1 << 6);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo(string.Format($"Trasformazione dati: RawInput:{RawInput[0]} --> B_input: {B_input}"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,234 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Controllo Siemens specifico x impianti COMECA (gestione GNL x Pizzaferri)
|
||||||
|
/// </summary>
|
||||||
|
public class SiemensComeca : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS COMECA
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1500
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB85:
|
||||||
|
* lettura: 260 byte,
|
||||||
|
* scrittura 32 byte
|
||||||
|
* G:\Drive condivisi\30_Clienti\Pizzaferri\Impianti\Comeca
|
||||||
|
*
|
||||||
|
* Si intende lettura/scrittura con DB85.DBxx
|
||||||
|
*
|
||||||
|
* READ
|
||||||
|
* Si leggono parametri impianti + eventuali allarmi
|
||||||
|
* 000...151 R --> Variabili ANALOGICHE
|
||||||
|
* 152...183 R --> parametri
|
||||||
|
* 232...259 R --> allarmi
|
||||||
|
*
|
||||||
|
* WRITE
|
||||||
|
* 268...271 R --> Word conferma comandi (ACK)
|
||||||
|
* 280...288 W --> parametri inviati (WRITE)
|
||||||
|
* 308...309 W --> conferma invio (STR)
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensComeca(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione Comeca");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processo i task richiesti e li elimino dalla coda 1:1
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task2exe"></param>
|
||||||
|
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
|
||||||
|
{
|
||||||
|
lgInfo($"Chiamata executeTasks specifica IobSiemensComeca: {task2exe.Count} task ricevuti");
|
||||||
|
// Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti...
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
bool taskOk = false;
|
||||||
|
string taskVal = "";
|
||||||
|
// inizio con 1 byte di default
|
||||||
|
byte[] MemBlock = new byte[1];
|
||||||
|
string memAddrWrite = "";
|
||||||
|
if (task2exe != null)
|
||||||
|
{
|
||||||
|
// cerco task specifici
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.nihil:
|
||||||
|
case taskType.fixStopSetup:
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
case taskType.forceSetPzCount:
|
||||||
|
case taskType.setProg:
|
||||||
|
case taskType.sendWatchDogMes2Plc:
|
||||||
|
case taskType.startSetup:
|
||||||
|
case taskType.stopSetup:
|
||||||
|
case taskType.setPzComm:
|
||||||
|
case taskType.setArt:
|
||||||
|
case taskType.setComm:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setParameter:
|
||||||
|
// richiedo da URL i parametri WRITE da popolare
|
||||||
|
lgInfo("Chiamata processMemWriteRequests");
|
||||||
|
|
||||||
|
taskVal = processMemWriteRequests();
|
||||||
|
// se restituiscce "" faccio altra prova...
|
||||||
|
if (string.IsNullOrEmpty(taskVal))
|
||||||
|
{
|
||||||
|
// i parametri me li aspetto come stringa composta paramName|paramvalue
|
||||||
|
if (item.Value.Contains("|"))
|
||||||
|
{
|
||||||
|
string[] paramsJob = item.Value.Split('|');
|
||||||
|
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// aggiunta finale bit a 1 x richiesta processing..
|
||||||
|
MemBlock = S7.Net.Types.Int.ToByteArray(1);
|
||||||
|
memAddrWrite = "DB85.DBB308";
|
||||||
|
// imposto valore strobe x check successivi
|
||||||
|
strobeVal = 1;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = "SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// aggiungo task!
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
if (!string.IsNullOrEmpty(memAddrWrite))
|
||||||
|
{
|
||||||
|
// scrivo!
|
||||||
|
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
}
|
||||||
|
if (!taskOk)
|
||||||
|
{
|
||||||
|
lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return taskDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected int strobeVal = 0;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// - per lo scopo specifico IN REALTA' non conta lo stato macchina.... ma lo inviamo lo stesso
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO STANDARD
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
*
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
//bool fatto = false;
|
||||||
|
//ushort valW = 0;
|
||||||
|
|
||||||
|
var MemInt = new byte[2];
|
||||||
|
|
||||||
|
int byteSignals = 0;
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
if (currPLC.IsConnected)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// processo dagli stati + gravi...
|
||||||
|
if (hasAlarms())
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 3);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// verifico SE ho strobe/hack da chiudere
|
||||||
|
if (strobeVal != 0)
|
||||||
|
{
|
||||||
|
checkStrobeHack();
|
||||||
|
}
|
||||||
|
// salvo!
|
||||||
|
B_input = byteSignals;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
|
||||||
|
#region Private Methods
|
||||||
|
|
||||||
|
private void checkStrobeHack()
|
||||||
|
{
|
||||||
|
// verifico SE ho un hack sulla var DB85.DB268
|
||||||
|
byte[] byteCtrlW = new byte[2];
|
||||||
|
bool fatto = S7ReadBB(ref byteCtrlW, "DB85.DBB268", 2);
|
||||||
|
ushort valCtrlW = S7.Net.Types.Word.FromByteArray(byteCtrlW.ToArray());
|
||||||
|
// se vale 1 --> resetto strobe!
|
||||||
|
if (valCtrlW == 1)
|
||||||
|
{
|
||||||
|
// aggiunta finale bit a 0 x chiusura processing..
|
||||||
|
var MemBlock = S7.Net.Types.Int.ToByteArray(0);
|
||||||
|
var memAddrWrite = "DB85.DBB308";
|
||||||
|
// imposto valore strobe x check successivi
|
||||||
|
var taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
if (taskOk)
|
||||||
|
{
|
||||||
|
strobeVal = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lgInfo("SiemensComeca: Strobe attivo su DBB308, ack non rilevato su DBB268");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Private Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,282 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Controllo Siemens specifico x impianti COMUR
|
||||||
|
/// </summary>
|
||||||
|
public class SiemensComur : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS COMUR
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1500
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB150: 56 byte lettura, di cui 4 byte scrittura (4..7), vedere doc allegato
|
||||||
|
* G:\Drive condivisi\30_Clienti\Valvital\Comunicazione PLC\COMUR Dentatrice
|
||||||
|
*
|
||||||
|
* Si intende tutto con DB150.DBxx
|
||||||
|
*
|
||||||
|
* - parametri processo PLC --> MES
|
||||||
|
* - DBX0.0 - Macchina On: Segnale pulito di informazione sullo stato della macchina. 0->Aux OFF, 1->Aux ON
|
||||||
|
* - DBX0.1 – Macchina in Allarme: Segnale pulito di macchina in allarme. 0->Nessun Allarme, 1->E’ presente almeno un allarme/anomalia
|
||||||
|
* - DBX0.2 – Macchina in Ciclo: Segnale pulito sullo stato di funzionamento. 0->La macchina NON sta eseguendo un ciclo automatico, 1->La macchina sta eseguendo un ciclo automatico.
|
||||||
|
* - DBX0.3 – Macchina Non in Produzione: Segnale pulito sullo stato della macchina. 0->Macchina accesa e in lavorazione automatica, 1->Macchina accesa ma NON sta eseguendo un ciclo automatico.
|
||||||
|
* - DBX0.4 – Macchina In Ciclo Continuità: Segnale pulito sullo stato di funzionamento. 1->La macchina sta eseguendo un ciclo automatico con carico/scarico pezzo autonomo, 0->Altrimenti.
|
||||||
|
* - DBX0.7 – Assi In Moto: Segnale pulito sullo stato di movimento Assi. 0->Tutti gli assi della macchina sono fermi, 1->Almeno un asse si sta muovendo.
|
||||||
|
* - DBX1.0 – Impulso Start Ciclo: Impulso a fronte positivo (0->1) della durata di 1’’ che rappresenta l’evento di Start Ciclo.
|
||||||
|
* - DBX1.1 – Impulso Fine Ciclo: Impulso a fronte positivo (0->1) della durata di 1’’ che rappresenta l’evento di Fine Ciclo. Attenzione! Questo impulso viene generato solo se il Ciclo Automatico finisce correttamente. Non viene generato nel caso in cui il Ciclo Automatico venga interrotto da allarmi.
|
||||||
|
* - DBX1.3 – Impulso Conta Pezzi: Impulso a fronte positivo (0->1) della durata di 1’’ generato al completamento di ogni programma pezzo.
|
||||||
|
* - DBX2.0 – Preallarmi Pezzi: Segnale pulito di segnalazione Preallarme Pezzi impostabile su CN. 0->Preallarme Disattivo, 1->Preallarme Attivo
|
||||||
|
* - DBX2.1 – Allarme Pezzi: Segnale pulito di segnalazione Allarme Pezzi impostabile su CN. 0->Allarme Disattivo, 1->Allarme Attivo.
|
||||||
|
* - DBX2.3 – Fine Vita Utensile: Segnale pulito di segnalazione Allarme Fine Vita Creatore. 0->Allarme Disattivo, 1->Allarme Attivo.
|
||||||
|
* - DBX2.7 – Ciclo In Attesa: Segnale pulito sullo stato di funzionamento. 1->Ciclo Automatico attivo ma tutti assi fermi, 0->Altrimenti.
|
||||||
|
*
|
||||||
|
* - DBD52 - Codice Pezzo In Lavorazione (4byte, REAL)
|
||||||
|
* - DBD56 - Codice Utensile In Uso (4byte, REAL)
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* - parametri processo MES --> PLC
|
||||||
|
* - DBX4.0 – Reset Contapezzi Parziale: Segnale per resettare il valore del contatore “Contapezzi parziale”. Impostare il bit a 1 per attivare la funzione (il PLC riporterà a 0 il valore quando completa l’operazione).
|
||||||
|
*
|
||||||
|
* - DB150.DBD8 - Numero di Pezzi da produrre per il lotto (4byte, DInt)
|
||||||
|
* - DB150.[12.0 .. 31.7] - Codice articolo (stringa da 18 char)
|
||||||
|
* - DB150.[32.0 .. 51.7] - Codice commessa (stringa da 18 char)
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* - DB111.DBD24: PartCounter INT 2.0 Conteggio Parziale di pezzi prodotti dalla macchina
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensComur(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione COMUR");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processo i task richiesti e li elimino dalla coda 1:1
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task2exe"></param>
|
||||||
|
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
|
||||||
|
{
|
||||||
|
// Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti...
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
bool taskOk = false;
|
||||||
|
string taskVal = "";
|
||||||
|
// inizio con 1 byte di default
|
||||||
|
byte[] MemBlock = new byte[1];
|
||||||
|
string memAddrWrite = "";
|
||||||
|
if (task2exe != null)
|
||||||
|
{
|
||||||
|
// cerco task specifici
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// init valori
|
||||||
|
int byteSize = 0;
|
||||||
|
int valDInt = 0;
|
||||||
|
short valShort = 0;
|
||||||
|
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.nihil:
|
||||||
|
case taskType.fixStopSetup:
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
case taskType.forceSetPzCount:
|
||||||
|
case taskType.setProg:
|
||||||
|
case taskType.sendWatchDogMes2Plc:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setArt:
|
||||||
|
case taskType.setComm:
|
||||||
|
case taskType.setPzComm:
|
||||||
|
upsertKey(item.Key, item.Value);
|
||||||
|
// recupero dati da memMap... altrimenti NULLA
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
dataConf currMem = memMap.mMapWrite[item.Key];
|
||||||
|
byteSize = currMem.size;
|
||||||
|
memAddrWrite = currMem.memAddr;
|
||||||
|
MemBlock = new byte[byteSize];
|
||||||
|
if (currMem.tipoMem == plcDataType.String)
|
||||||
|
{
|
||||||
|
saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.DInt)
|
||||||
|
{
|
||||||
|
int.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.Int)
|
||||||
|
{
|
||||||
|
short.TryParse(item.Value, out valShort);
|
||||||
|
MemBlock = S7.Net.Types.Int.ToByteArray(valShort);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskVal = item.Value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.startSetup:
|
||||||
|
// resetto IN PRIMIS il contapezzi...
|
||||||
|
valDInt = 0;
|
||||||
|
int.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt);
|
||||||
|
memAddrWrite = "DB150.DBB24";
|
||||||
|
S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
|
||||||
|
// processo scrittura BIT su DB150.DBX4.0
|
||||||
|
MemBlock = new byte[1];
|
||||||
|
MemBlock[0] = (byte)1;
|
||||||
|
memAddrWrite = "DB150.DBB4";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.stopSetup:
|
||||||
|
// resetto IN PRIMIS il contapezzi...
|
||||||
|
valDInt = 0;
|
||||||
|
int.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt);
|
||||||
|
memAddrWrite = "DB150.DBB24";
|
||||||
|
S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
|
||||||
|
// processo scrittura BIT su DB150.DBX4.0
|
||||||
|
MemBlock = new byte[1];
|
||||||
|
MemBlock[0] = (byte)0;
|
||||||
|
memAddrWrite = "DB150.DBB4";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setParameter:
|
||||||
|
// richiedo da URL i parametri WRITE da popolare
|
||||||
|
lgInfo("Chiamata processMemWriteRequests");
|
||||||
|
taskVal = processMemWriteRequests();
|
||||||
|
// se restituiscce "" faccio altra prova...
|
||||||
|
if (string.IsNullOrEmpty(taskVal))
|
||||||
|
{
|
||||||
|
// i parametri me li aspetto come stringa composta paramName|paramvalue
|
||||||
|
if (item.Value.Contains("|"))
|
||||||
|
{
|
||||||
|
string[] paramsJob = item.Value.Split('|');
|
||||||
|
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = "SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// aggiungo task!
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
if (!string.IsNullOrEmpty(memAddrWrite))
|
||||||
|
{
|
||||||
|
// scrivo!
|
||||||
|
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
}
|
||||||
|
if (!taskOk)
|
||||||
|
{
|
||||||
|
lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value} | taskOk {taskOk}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return taskDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO STANDARD
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
* B4: manuale
|
||||||
|
* B5: allarme creatore
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* - BIT di stato
|
||||||
|
* - DBX0.0 - Macchina On: Segnale pulito di informazione sullo stato della macchina. 0->Aux OFF, 1->Aux ON
|
||||||
|
* - DBX0.1 – Macchina in Allarme: Segnale pulito di macchina in allarme. 0->Nessun Allarme, 1->E’ presente almeno un allarme/anomalia
|
||||||
|
* - DBX0.2 – Macchina in Ciclo: Segnale pulito sullo stato di funzionamento. 0->La macchina NON sta eseguendo un ciclo automatico, 1->La macchina sta eseguendo un ciclo automatico.
|
||||||
|
* - DBX0.3 – Macchina Non in Produzione: Segnale pulito sullo stato della macchina. 0->Macchina accesa e in lavorazione automatica, 1->Macchina accesa ma NON sta eseguendo un ciclo automatico.
|
||||||
|
* - DBX0.4 – Macchina In Ciclo Continuità: Segnale pulito sullo stato di funzionamento. 1->La macchina sta eseguendo un ciclo automatico con carico/scarico pezzo autonomo, 0-> Altrimenti. NON HA SENSO perché NON HANNO il robot...
|
||||||
|
* - DBX0.7 – Assi In Moto: Segnale pulito sullo stato di movimento Assi. 0->Tutti gli assi della macchina sono fermi, 1->Almeno un asse si sta muovendo.
|
||||||
|
* - DBX1.0 – Impulso Start Ciclo: Impulso a fronte positivo (0->1) della durata di 1’’ che rappresenta l’evento di Start Ciclo.
|
||||||
|
* - DBX1.1 – Impulso Fine Ciclo: Impulso a fronte positivo (0->1) della durata di 1’’ che rappresenta l’evento di Fine Ciclo. Attenzione! Questo impulso viene generato solo se il Ciclo Automatico finisce correttamente. Non viene generato nel caso in cui il Ciclo Automatico venga interrotto da allarmi.
|
||||||
|
* - DBX1.3 – Impulso Conta Pezzi: Impulso a fronte positivo (0->1) della durata di 1’’ generato al completamento di ogni programma pezzo.
|
||||||
|
* - DBX2.0 – Preallarmi Pezzi: Segnale pulito di segnalazione Preallarme Pezzi impostabile su CN. 0->Preallarme Disattivo, 1->Preallarme Attivo
|
||||||
|
* - DBX2.1 – Allarme Pezzi: Segnale pulito di segnalazione Allarme Pezzi impostabile su CN. 0->Allarme Disattivo, 1->Allarme Attivo.
|
||||||
|
* - DBX2.3 – Fine Vita Utensile: Segnale pulito di segnalazione Allarme Fine Vita Creatore. 0->Allarme Disattivo, 1->Allarme Attivo.
|
||||||
|
* - DBX2.7 – Ciclo In Attesa: Segnale pulito sullo stato di funzionamento. 1->Ciclo Automatico attivo ma tutti assi fermi, 0->Altrimenti.
|
||||||
|
*
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
byte mainData = RawInput[0];
|
||||||
|
|
||||||
|
int byteSignals = 0;
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
if (currPLC.IsConnected)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 0);
|
||||||
|
}
|
||||||
|
if ((mainData & (1 << 2)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// controllo il bit MAIN dello status
|
||||||
|
if ((mainData & (1 << 1)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// considero come MANUALE NON ciclo in continuo...
|
||||||
|
if ((mainData & (1 << 3)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
// salvo!
|
||||||
|
B_input = byteSignals;
|
||||||
|
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo($"Trasformazione dati: RawInput:{RawInput[0]} --> B_input: {B_input}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,284 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Controllo Siemens specifico x impianti Cosmap
|
||||||
|
/// </summary>
|
||||||
|
public class SiemensCosmap : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS Cosmap
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1500
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB29: (lettura) 10byte,
|
||||||
|
* G:\Drive condivisi\30_Clienti\Donati\Schemi IOB-WIN\COSMAP
|
||||||
|
*
|
||||||
|
* Si intende lettura/scrittura con DB6.DBxx
|
||||||
|
*
|
||||||
|
* DB6
|
||||||
|
* CodOdl Array[000..049] of Char DBB0..49
|
||||||
|
* RicettaRich Array[050..099] of Char DBB50..99
|
||||||
|
* CodArt Array[100..150] of Char DBB100..149
|
||||||
|
* RicettaCorr Array[100..150] of Char DBB150..199
|
||||||
|
* QtaRich DInt 200
|
||||||
|
* Stato Int 204 (0 = ferma, 1 = produzione, 2 = manuale, 3 = emergenza)
|
||||||
|
* Allarme Int 206 (0 = ok, 1 = macchina in allarme)
|
||||||
|
* Contapezzi DInt 208
|
||||||
|
* PzCountSet DInt 212 valore che si vuole impostare sul contapezzi
|
||||||
|
* PzCountRes DInt 216 comando di set contapezzi: al fronte di salita (0-->1) imposta contapezzi al valore prec
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensCosmap(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione Cosmap");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processo i task richiesti e li elimino dalla coda 1:1
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task2exe"></param>
|
||||||
|
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
|
||||||
|
{
|
||||||
|
lgInfo($"Chiamata executeTasks specifica IobSiemensCosmap: {task2exe.Count} task ricevuti");
|
||||||
|
// Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti...
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
bool taskOk = false;
|
||||||
|
string taskVal = "";
|
||||||
|
// inizio con 1 byte di default
|
||||||
|
byte[] MemBlock = new byte[1];
|
||||||
|
string memAddrWrite = "";
|
||||||
|
if (task2exe != null)
|
||||||
|
{
|
||||||
|
// cerco task specifici
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.nihil:
|
||||||
|
case taskType.fixStopSetup:
|
||||||
|
case taskType.forceSetPzCount:
|
||||||
|
case taskType.setProg:
|
||||||
|
case taskType.sendWatchDogMes2Plc:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setPzComm:
|
||||||
|
case taskType.setArt:
|
||||||
|
case taskType.setComm:
|
||||||
|
upsertKey(item.Key, item.Value);
|
||||||
|
int byteSize = 0;
|
||||||
|
// recupero dati da memMap... altrimenti NULLA
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
dataConf currMem = memMap.mMapWrite[item.Key];
|
||||||
|
byteSize = currMem.size;
|
||||||
|
memAddrWrite = currMem.memAddr;
|
||||||
|
MemBlock = new byte[byteSize];
|
||||||
|
if (currMem.tipoMem == plcDataType.String)
|
||||||
|
{
|
||||||
|
saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.DInt)
|
||||||
|
{
|
||||||
|
int valDInt = 0;
|
||||||
|
int.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.Int)
|
||||||
|
{
|
||||||
|
short valInt = 0;
|
||||||
|
short.TryParse(item.Value, out valInt);
|
||||||
|
MemBlock = S7.Net.Types.Int.ToByteArray(valInt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string rawMemConf = JsonConvert.SerializeObject(memMap, Formatting.Indented);
|
||||||
|
lgError($"Errore: non trovata chiave write in memMap.mMapWrite per {item.Key}{Environment.NewLine}Configurazione memoria R/W:{Environment.NewLine}{rawMemConf}");
|
||||||
|
}
|
||||||
|
taskVal = item.Value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
// processo scrittura BIT su DB6.DBDW216
|
||||||
|
MemBlock = new byte[4];
|
||||||
|
MemBlock = S7.Net.Types.DInt.ToByteArray(1);
|
||||||
|
memAddrWrite = "DB6.DBDW216";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.startSetup:
|
||||||
|
// processo scrittura BIT su DB6.DBDW216
|
||||||
|
MemBlock = new byte[4];
|
||||||
|
MemBlock = S7.Net.Types.DInt.ToByteArray(1);
|
||||||
|
memAddrWrite = "DB6.DBDW216";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.stopSetup:
|
||||||
|
// processo scrittura BIT su DB6.DBDW216
|
||||||
|
MemBlock = new byte[4];
|
||||||
|
MemBlock = S7.Net.Types.DInt.ToByteArray(0);
|
||||||
|
memAddrWrite = "DB6.DBDW216";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setParameter:
|
||||||
|
// richiedo da URL i parametri WRITE da popolare
|
||||||
|
lgInfo("setParameter --> processMemWriteRequests");
|
||||||
|
taskVal = processMemWriteRequests();
|
||||||
|
// se restituiscce "" faccio altra prova...
|
||||||
|
if (string.IsNullOrEmpty(taskVal))
|
||||||
|
{
|
||||||
|
// i parametri me li aspetto come stringa composta paramName|paramvalue
|
||||||
|
if (item.Value.Contains("|"))
|
||||||
|
{
|
||||||
|
string[] paramsJob = item.Value.Split('|');
|
||||||
|
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = "SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
lgInfo($"executeTask: {tName} | {taskVal}");
|
||||||
|
// aggiungo task!
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
if (!string.IsNullOrEmpty(memAddrWrite))
|
||||||
|
{
|
||||||
|
// scrivo!
|
||||||
|
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
}
|
||||||
|
if (taskOk)
|
||||||
|
{
|
||||||
|
// aggiorno valore memoria... SE presente
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
memMap.mMapWrite[item.Key].value = item.Value;
|
||||||
|
lgInfo($"Aggiornato valore in mMapWrite per {item.Key}");
|
||||||
|
}
|
||||||
|
lgInfo($"Eseguita con successo S7WriteBB per executeTasks: {item.Key} | {item.Value}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return taskDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO STANDARD
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
* B4: manuale
|
||||||
|
* B5: emergenza (1=attiva/premuta, 0=armed)
|
||||||
|
*
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
//bool fatto = false;
|
||||||
|
ushort currStatus = 0;
|
||||||
|
ushort allarme = 0;
|
||||||
|
//ushort valW = 0;
|
||||||
|
|
||||||
|
var MemInt = new byte[2];
|
||||||
|
|
||||||
|
// recupero
|
||||||
|
//fatto = S7ReadBB(ref MemInt, "DB6.DBW204", 2);
|
||||||
|
//valW = S7.Net.Types.Word.FromByteArray(MemInt.ToArray());
|
||||||
|
//var testalW = S7.Net.Types.Word.FromByteArray(RawInput.Skip(204).Take(2).ToArray());
|
||||||
|
currStatus = S7.Net.Types.Word.FromByteArray(RawInput.Skip(204).Take(2).ToArray());
|
||||||
|
|
||||||
|
//fatto = S7ReadBB(ref MemInt, "DB6.DBW206", 2);
|
||||||
|
//valW = S7.Net.Types.Word.FromByteArray(MemInt.ToArray());
|
||||||
|
//allarme = valW;
|
||||||
|
allarme = S7.Net.Types.Word.FromByteArray(RawInput.Skip(206).Take(2).ToArray());
|
||||||
|
|
||||||
|
int byteSignals = 0;
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
if (currPLC.IsConnected)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// processo dagli stati + gravi...
|
||||||
|
if (allarme > 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (currStatus)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
byteSignals += (1 << 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
byteSignals += (1 << 4);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
byteSignals += (1 << 5);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// salvo!
|
||||||
|
B_input = byteSignals;
|
||||||
|
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo($"Trasformazione dati: Status:{currStatus} | alarm:{allarme} --> B_input: {B_input}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,293 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
public class SiemensFape : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS FAPE (es punzonatrice Tecnomeccanica di LVF)
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1200
|
||||||
|
* - V1.0 (2018): abilitata 1 area in lettura DB15 ed 1 in scrittura DB16 (NON la usano)
|
||||||
|
* - x poter funzionare --> protezione: meccanismi di collegamento / consenti put/get
|
||||||
|
* - lettura/scrittura primi 48 byte (240 max x le due DB)
|
||||||
|
*
|
||||||
|
* Versione 2018
|
||||||
|
* DB15 | Read seguenti byte:
|
||||||
|
* - B0, WORD, Stato Macchina Generale
|
||||||
|
* - B2, WORD, Posizione sequenza contatore
|
||||||
|
* - B4, WORD, contatore cicli eseguiti per lubrifica
|
||||||
|
* - B40, DWORD, contapezzi azzerabile da operatore
|
||||||
|
* - B44, DWORD, contapezzi ASSOLUTO
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensFape(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione FAPE 1.0 - 2018");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region private enums
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Posizione sequenza ciclo standard punzonatrice
|
||||||
|
/// </summary>
|
||||||
|
private enum posSeq2018
|
||||||
|
{
|
||||||
|
CICLO_AUTOMATICO_FERMO = 0,
|
||||||
|
CONTROLLO_MODO_OPERATIVO = 5,
|
||||||
|
MODO_ATTIVO_CON_ROBOT = 8,
|
||||||
|
SBLOCCAGGIO_PEZZO = 10,
|
||||||
|
APERTURA_PORTELLO_ROBOT = 11,
|
||||||
|
CONSENSO_ACCESSO_AL_ROBOT = 12,
|
||||||
|
CARICO_ROBOT_IN_CORSO = 14,
|
||||||
|
CARICO_ROBOT_CONCLUSO = 16,
|
||||||
|
CHIUSURA_PORTELLO_ROBOT = 18,
|
||||||
|
VERIFICA_POSIZIONE_CARRI = 20,
|
||||||
|
BLOCCAGGIO_PEZZO = 22,
|
||||||
|
ATTESA_CARRO_A_DESTRA = 24,
|
||||||
|
DISCESA_RAPIDO_BROCCIATURA = 25,
|
||||||
|
CICLO_DI_BROCCIATURA = 26,
|
||||||
|
RITORNO_BROCCIATRICE = 28,
|
||||||
|
COMANDO_CARRO_A_SINISTRA = 30,
|
||||||
|
CICLO_DI_ALESATURA = 32,
|
||||||
|
RITORNO_CARRO_ALESATURA = 34,
|
||||||
|
COMANDO_CARRO_A_DESTRA = 36,
|
||||||
|
INCREMENTO_CONTAPEZZI = 38,
|
||||||
|
CONTROLLO_TIME_OUT_CICLO = 40,
|
||||||
|
RILANCIO_CICLO_F42 = 42,
|
||||||
|
ATTESA_FINE_CICLO = 45
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enum degli stati macchina (B0)
|
||||||
|
/// </summary>
|
||||||
|
private enum stMacc2018
|
||||||
|
{
|
||||||
|
COMUNICAZIONE_ASSENTE = 0,
|
||||||
|
EMERGENZA_INSERITA = 1,
|
||||||
|
AVARIA_ARIA = 2,
|
||||||
|
AVARIA_PRESSIONE_OLIO = 3,
|
||||||
|
AVARIA_LIVELLO_OLIO = 4,
|
||||||
|
AVARIA_TEMPERATURA_OLIO = 5,
|
||||||
|
AVARIA_MOTORE_POMPA_IDRAULICA = 6,
|
||||||
|
AVARIA_MOTORE_RAFFREDDO_IDRAULICA = 7,
|
||||||
|
AVARIA_SINCRONISMO_PORTE = 8,
|
||||||
|
AVARIA_LIBERA = 9,
|
||||||
|
ATTIVAZIONE_IN_CORSO = 10,
|
||||||
|
MODO_MANUALE_ATTREZZAGGIO = 11,
|
||||||
|
MODO_AUTOMATICO_LOCALE = 12,
|
||||||
|
MODO_AUTOMATICO_ROBOT = 13,
|
||||||
|
CICLO_IN_CORSO = 14,
|
||||||
|
LIBERO = 15
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion private enums
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupero dati override in formato dictionary
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override Dictionary<string, string> getDynData()
|
||||||
|
{
|
||||||
|
Dictionary<string, string> outVal = new Dictionary<string, string>();
|
||||||
|
ushort valStatus = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray());
|
||||||
|
ushort valPosit = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray());
|
||||||
|
outVal.Add("CURR_STATO", ((stMacc2018)valStatus).ToString());
|
||||||
|
outVal.Add("CURR_POSIT", ((posSeq2018)valPosit).ToString());
|
||||||
|
return outVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid)
|
||||||
|
/// </summary>
|
||||||
|
public override void processOverride()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
// FAPE: leggo i primi 2 WORD x decodifica stato e posizione...
|
||||||
|
ushort valStatus = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray());
|
||||||
|
ushort valPosit = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray());
|
||||||
|
stMacc2018 _stMacch = ((stMacc2018)valStatus);
|
||||||
|
posSeq2018 _posSeq = ((posSeq2018)valPosit);
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
* B4: manuale
|
||||||
|
* B5: emergenza
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
B_input = currPLC.IsConnected ? 1 : 0;
|
||||||
|
// controllo stato macchina x impostare altri bit...
|
||||||
|
switch (_stMacch)
|
||||||
|
{
|
||||||
|
case stMacc2018.EMERGENZA_INSERITA:
|
||||||
|
B_input += (1 << 5);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case stMacc2018.AVARIA_ARIA:
|
||||||
|
case stMacc2018.AVARIA_PRESSIONE_OLIO:
|
||||||
|
case stMacc2018.AVARIA_LIVELLO_OLIO:
|
||||||
|
case stMacc2018.AVARIA_TEMPERATURA_OLIO:
|
||||||
|
B_input += (1 << 3);
|
||||||
|
B_input += (1 << 6);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case stMacc2018.AVARIA_MOTORE_POMPA_IDRAULICA:
|
||||||
|
case stMacc2018.AVARIA_MOTORE_RAFFREDDO_IDRAULICA:
|
||||||
|
case stMacc2018.COMUNICAZIONE_ASSENTE:
|
||||||
|
case stMacc2018.AVARIA_SINCRONISMO_PORTE:
|
||||||
|
case stMacc2018.AVARIA_LIBERA:
|
||||||
|
case stMacc2018.ATTIVAZIONE_IN_CORSO:
|
||||||
|
B_input += (1 << 3);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case stMacc2018.MODO_MANUALE_ATTREZZAGGIO:
|
||||||
|
B_input += (1 << 4);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case stMacc2018.CICLO_IN_CORSO:
|
||||||
|
B_input += (1 << 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case stMacc2018.MODO_AUTOMATICO_LOCALE:
|
||||||
|
case stMacc2018.MODO_AUTOMATICO_ROBOT:
|
||||||
|
B_input += (1 << 7);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case stMacc2018.LIBERO:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// procedo SOLO SE è enabled IOB
|
||||||
|
if (IobOnline)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
currODL = utils.callUrl(urlGetCurrODL);
|
||||||
|
// solo SE HO un ODL...
|
||||||
|
if (string.IsNullOrWhiteSpace(currODL) || currODL == "0")
|
||||||
|
{
|
||||||
|
if (periodicLog)
|
||||||
|
{
|
||||||
|
lgInfo(string.Format("SiemensFape | Lettura ODL andata a vuoto: currODL: {0}", currODL));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// se variato o scaduto timeout log...
|
||||||
|
if (periodicLog || (currIdxODL.ToString() != currODL))
|
||||||
|
{
|
||||||
|
lgInfo(string.Format("SiemensFape | Lettura ODL, currODL: {0} --> currIdxODL prec: {1}", currODL, currIdxODL));
|
||||||
|
}
|
||||||
|
// provo a salvare nuovo ODL
|
||||||
|
int.TryParse(currODL, out currIdxODL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
if (DateTime.Now.Subtract(lastWarnODL).TotalSeconds > 15)
|
||||||
|
{
|
||||||
|
lgError(exc, "Errore in fase di chiamata URL x ODL corrente | URL chiamato: {0}", urlGetCurrODL);
|
||||||
|
lastWarnODL = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// imposto currODL a vuoto!
|
||||||
|
currODL = "";
|
||||||
|
if (periodicLog)
|
||||||
|
{
|
||||||
|
lgInfo($"Fanuc | Lettura ODL non effettuata: IobOnline: {IobOnline} | currODL impostato a vuoto");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrWhiteSpace(currODL) && currODL != "0")
|
||||||
|
{
|
||||||
|
// ora processo il contapezzi... controllo se è passato intervallo minimo tra 2
|
||||||
|
// controlli/elaborazioni x distanziare invio e ridurre letture
|
||||||
|
if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay))
|
||||||
|
{
|
||||||
|
// se sono differenti MOSTRO...
|
||||||
|
if (contapezziPLC != contapezziIOB)
|
||||||
|
{
|
||||||
|
// registro contapezzi
|
||||||
|
lgInfo($"Differenza Contapezzi: contapezziPLC: {contapezziPLC} | contapezziIOB {contapezziIOB}");
|
||||||
|
}
|
||||||
|
// verifico se variato contapezzi... e se passato ritardo minimo...
|
||||||
|
if (contapezziPLC > contapezziIOB)
|
||||||
|
{
|
||||||
|
// salvo nuovo contapezzi (incremento di 1...) + richiesta refresh conteggio
|
||||||
|
contapezziIOB++;
|
||||||
|
needRefreshPzCount = true;
|
||||||
|
// salvo in semaforo!
|
||||||
|
B_input += (1 << 2);
|
||||||
|
// registro contapezzi
|
||||||
|
lgInfo($"contapezziPLC SIEMENS: {contapezziPLC} | contapezziIOB {contapezziIOB}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// invio a server contapezzi (aggiornato)
|
||||||
|
string retVal = utils.callUrl(urlSetPzCount + contapezziIOB.ToString());
|
||||||
|
// verifica se tutto OK
|
||||||
|
if (retVal != contapezziIOB.ToString())
|
||||||
|
{
|
||||||
|
// errore salvataggio contapezzi
|
||||||
|
lgInfo($"Errore salvataggio Contapezzi SIEMENS: contapezziPLC {contapezziPLC} | contapezziIOB {contapezziIOB} | risposta: {retVal}");
|
||||||
|
// rileggo il counter pezzi da server
|
||||||
|
pzCntReload(true);
|
||||||
|
}
|
||||||
|
// resetto timer...
|
||||||
|
lastPzCountSend = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay))
|
||||||
|
{
|
||||||
|
lgInfo($"Attenzione: mancanza ODL non procedo con gestione contapezzi. contapezziPLC SIEMENS {contapezziPLC} | contapezziIOB {contapezziIOB}");
|
||||||
|
// resetto timer...
|
||||||
|
lastPzCountSend = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo(string.Format("Trasformazione B_input: {0}", B_input));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,681 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
public class SiemensFapeV2 : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS FAPE (es punzonatrice Tecnomeccanica di LVF)
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1200
|
||||||
|
* - x poter funzionare --> protezione: meccanismi di collegamento / consenti put/get
|
||||||
|
*
|
||||||
|
* V1.0 (2018):
|
||||||
|
* - abilitata 1 area in lettura DB15
|
||||||
|
* DB15 | Read seguenti byte:
|
||||||
|
* - B0, WORD, Stato Macchina Generale
|
||||||
|
* - B2, WORD, Posizione sequenza contatore
|
||||||
|
* - B4, WORD, contatore cicli eseguiti per lubrifica
|
||||||
|
* - B40, DWORD, contapezzi azzerabile da operatore
|
||||||
|
* - B44, DWORD, contapezzi ASSOLUTO
|
||||||
|
* - abilitata 1 area in scrittura DB16 (NON la usano)
|
||||||
|
*
|
||||||
|
* V2.0 (2024):
|
||||||
|
* - abilitata 1 area in lettura DB17
|
||||||
|
* DB17 v.2 | Read seguenti byte:
|
||||||
|
* - B0, WORD, Stato Macchina Generale
|
||||||
|
* - B2, WORD, Posizione sequenza contatore
|
||||||
|
* - B4, WORD, contatore cicli eseguiti per lubrifica
|
||||||
|
* - B6, DWORD, contapezzi azzerabile da operatore
|
||||||
|
* - B10, DWORD, contapezzi ASSOLUTO
|
||||||
|
*
|
||||||
|
* DB17 v.3 | Read seguenti byte:
|
||||||
|
* - B0, WORD, Semaforo Macchina
|
||||||
|
* - B2, WORD, Stato Macchina Generale
|
||||||
|
* - B4, WORD, Posizione sequenza contatore
|
||||||
|
* - B6, WORD, contatore cicli eseguiti per lubrifica
|
||||||
|
* - B8, DWORD, contapezzi azzerabile da operatore
|
||||||
|
* - B12, DWORD, contapezzi ASSOLUTO
|
||||||
|
*
|
||||||
|
* - abilitata 1 area in scrittura DB16
|
||||||
|
* DB16 | Write seguenti byte:
|
||||||
|
* - B0, STRING(30), Commessa
|
||||||
|
* - B32, STRING(30), Articolo
|
||||||
|
* - B64, DWORD, NumPezzi
|
||||||
|
* - B68, BOOL, Reset Contapezzi Parziale(autoresetta)
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensFapeV2(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
string sFapeVers = getOptPar("FAPE_VERS");
|
||||||
|
if (!string.IsNullOrEmpty(sFapeVers))
|
||||||
|
{
|
||||||
|
int.TryParse(sFapeVers, out FapeVers);
|
||||||
|
}
|
||||||
|
int yRef = FapeVers == 1 ? 2018 : 2024;
|
||||||
|
// inizializzo dizionari decodifica da conf json...
|
||||||
|
// cerco nella conf specifica...
|
||||||
|
if (memMap.DataDecodMap != null && memMap.DataDecodMap.Count > 0)
|
||||||
|
{
|
||||||
|
if (memMap.DataDecodMap.ContainsKey("StatoMacchina"))
|
||||||
|
{
|
||||||
|
DictState = memMap.DataDecodMap["StatoMacchina"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lgError("Errore: missing DataDecodMap.StatoMacchina dict");
|
||||||
|
}
|
||||||
|
if (memMap.DataDecodMap.ContainsKey("StepCiclo"))
|
||||||
|
{
|
||||||
|
DictStCic = memMap.DataDecodMap["StepCiclo"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lgError("Errore: missing DataDecodMap.StepCiclo dict");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lgInfo("Attenzione. non ho trovcato dizionari di decodifica (DataDecodMap) nel file json!");
|
||||||
|
}
|
||||||
|
lgInfo($"NEW IOB SIEMENS versione FAPE v.{FapeVers} - {yRef}");
|
||||||
|
}
|
||||||
|
|
||||||
|
private Dictionary<string, string> DictState = new Dictionary<string, string>();
|
||||||
|
private Dictionary<string, string> DictStCic = new Dictionary<string, string>();
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupero dati override in formato dictionary
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override Dictionary<string, string> getDynData()
|
||||||
|
{
|
||||||
|
Dictionary<string, string> outVal = new Dictionary<string, string>();
|
||||||
|
ExtractFapeData();
|
||||||
|
string curState = "";
|
||||||
|
string curPosiz = "";
|
||||||
|
// rivedere da conf estesa decodifica?!?
|
||||||
|
if (FapeVers == 3)
|
||||||
|
{
|
||||||
|
// stato
|
||||||
|
curState = $"{valState}";
|
||||||
|
// cerco nella conf specifica...
|
||||||
|
if (DictState.Count > 0 && DictState.ContainsKey($"{valState}"))
|
||||||
|
{
|
||||||
|
curState = DictState[$"{valState}"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// posizione
|
||||||
|
curPosiz = $"{valStepCic}";
|
||||||
|
// cerco nella conf specifica...
|
||||||
|
if (DictStCic.Count > 0 && DictStCic.ContainsKey($"{valStepCic}"))
|
||||||
|
{
|
||||||
|
curPosiz = DictStCic[$"{valStepCic}"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// se non trovato ancora..
|
||||||
|
if (string.IsNullOrEmpty(curState) || string.IsNullOrEmpty(curPosiz))
|
||||||
|
{
|
||||||
|
if (FapeVers == 1)
|
||||||
|
{
|
||||||
|
curState = ((stMacc2018)valState).ToString();
|
||||||
|
curPosiz = ((posSeq2018)valStepCic).ToString();
|
||||||
|
//outVal.Add("CURR_STATO", ((stMacc2018)valState).ToString());
|
||||||
|
//outVal.Add("CURR_POSIT", ((posSeq2018)valStepCic).ToString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
curState = ((stMacc2024)valState).ToString();
|
||||||
|
curPosiz = ((posSeq2024)valStepCic).ToString();
|
||||||
|
//outVal.Add("CURR_STATO", ((stMacc2024)valState).ToString());
|
||||||
|
//outVal.Add("CURR_POSIT", ((posSeq2024)valStepCic).ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// salvo valori!
|
||||||
|
outVal.Add("CURR_STATO", curState);
|
||||||
|
outVal.Add("CURR_POSIT", curPosiz);
|
||||||
|
|
||||||
|
// aggiungo main state se disponibile...
|
||||||
|
if (FapeVers > 2)
|
||||||
|
{
|
||||||
|
outVal.Add("CURR_LAMP", ((mainState)valMain).ToString());
|
||||||
|
}
|
||||||
|
return outVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid)
|
||||||
|
/// </summary>
|
||||||
|
public override void processOverride()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Stato impianto codificato come valore mainState
|
||||||
|
/// </summary>
|
||||||
|
protected ushort valMain = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Posizione corrente ciclo
|
||||||
|
/// </summary>
|
||||||
|
protected ushort valStepCic = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Stato Dettagliato macchina
|
||||||
|
/// </summary>
|
||||||
|
protected ushort valState = 0;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
// FAPE: leggo i primi 2 WORD x decodifica stato e posizione...
|
||||||
|
ExtractFapeData();
|
||||||
|
#if false
|
||||||
|
mainState _stMain = ((mainState)valMain);
|
||||||
|
stMacc2024 _stMacch = ((stMacc2024)valStatus);
|
||||||
|
posSeq2024 _posSeq = ((posSeq2024)valPosit);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO - 47
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
* B4: manuale
|
||||||
|
* B5: emergenza
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
B_input = currPLC.IsConnected ? 1 : 0;
|
||||||
|
|
||||||
|
// verifico versione decodifica da + recente a + vecchia...
|
||||||
|
if (FapeVers == 3)
|
||||||
|
{
|
||||||
|
DecodeV3(ref B_input);
|
||||||
|
}
|
||||||
|
else if (FapeVers == 2)
|
||||||
|
{
|
||||||
|
DecodeV2(ref B_input);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DecodeV1(ref B_input);
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME ToDo !!! verificare da qui...
|
||||||
|
|
||||||
|
// procedo SOLO SE è enabled IOB
|
||||||
|
if (IobOnline)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
currODL = utils.callUrl(urlGetCurrODL);
|
||||||
|
// solo SE HO un ODL...
|
||||||
|
if (string.IsNullOrWhiteSpace(currODL) || currODL == "0")
|
||||||
|
{
|
||||||
|
if (periodicLog)
|
||||||
|
{
|
||||||
|
lgInfo(string.Format("SiemensFape | Lettura ODL andata a vuoto: currODL: {0}", currODL));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// se variato o scaduto timeout log...
|
||||||
|
if (periodicLog || (currIdxODL.ToString() != currODL))
|
||||||
|
{
|
||||||
|
lgInfo(string.Format("SiemensFape | Lettura ODL, currODL: {0} --> currIdxODL prec: {1}", currODL, currIdxODL));
|
||||||
|
}
|
||||||
|
// provo a salvare nuovo ODL
|
||||||
|
int.TryParse(currODL, out currIdxODL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
if (DateTime.Now.Subtract(lastWarnODL).TotalSeconds > 15)
|
||||||
|
{
|
||||||
|
lgError(exc, "Errore in fase di chiamata URL x ODL corrente | URL chiamato: {0}", urlGetCurrODL);
|
||||||
|
lastWarnODL = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// imposto currODL a vuoto!
|
||||||
|
currODL = "";
|
||||||
|
if (periodicLog)
|
||||||
|
{
|
||||||
|
lgInfo($"Fanuc | Lettura ODL non effettuata: IobOnline: {IobOnline} | currODL impostato a vuoto");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrWhiteSpace(currODL) && currODL != "0")
|
||||||
|
{
|
||||||
|
// ora processo il contapezzi... controllo se è passato intervallo minimo tra 2
|
||||||
|
// controlli/elaborazioni x distanziare invio e ridurre letture
|
||||||
|
if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay))
|
||||||
|
{
|
||||||
|
// se sono differenti MOSTRO...
|
||||||
|
if (contapezziPLC != contapezziIOB)
|
||||||
|
{
|
||||||
|
// registro contapezzi
|
||||||
|
lgInfo($"Differenza Contapezzi: contapezziPLC: {contapezziPLC} | contapezziIOB {contapezziIOB}");
|
||||||
|
}
|
||||||
|
// verifico se variato contapezzi... e se passato ritardo minimo...
|
||||||
|
if (contapezziPLC > contapezziIOB)
|
||||||
|
{
|
||||||
|
// salvo nuovo contapezzi (incremento di 1...) + richiesta refresh conteggio
|
||||||
|
contapezziIOB++;
|
||||||
|
needRefreshPzCount = true;
|
||||||
|
// salvo in semaforo!
|
||||||
|
B_input += (1 << 2);
|
||||||
|
// registro contapezzi
|
||||||
|
lgInfo($"contapezziPLC SIEMENS: {contapezziPLC} | contapezziIOB {contapezziIOB}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// invio a server contapezzi (aggiornato)
|
||||||
|
string retVal = utils.callUrl(urlSetPzCount + contapezziIOB.ToString());
|
||||||
|
// verifica se tutto OK
|
||||||
|
if (retVal != contapezziIOB.ToString())
|
||||||
|
{
|
||||||
|
// errore salvataggio contapezzi
|
||||||
|
lgInfo($"Errore salvataggio Contapezzi SIEMENS: contapezziPLC {contapezziPLC} | contapezziIOB {contapezziIOB} | risposta: {retVal}");
|
||||||
|
// rileggo il counter pezzi da server
|
||||||
|
pzCntReload(true);
|
||||||
|
}
|
||||||
|
// resetto timer...
|
||||||
|
lastPzCountSend = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay))
|
||||||
|
{
|
||||||
|
lgInfo($"Attenzione: mancanza ODL non procedo con gestione contapezzi. contapezziPLC SIEMENS {contapezziPLC} | contapezziIOB {contapezziIOB}");
|
||||||
|
// resetto timer...
|
||||||
|
lastPzCountSend = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo(string.Format("Trasformazione B_input: {0}", B_input));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Esegue decodificada stati in modalità "classica" (2018)
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected void DecodeV1(ref int B_input)
|
||||||
|
{
|
||||||
|
// Guardo SOLO stato macchina V1 (2018)
|
||||||
|
stMacc2018 _stMacch = ((stMacc2018)valState);
|
||||||
|
// controllo stato macchina x impostare altri bit...
|
||||||
|
switch (_stMacch)
|
||||||
|
{
|
||||||
|
case stMacc2018.EMERGENZA_INSERITA:
|
||||||
|
B_input += (1 << 5);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case stMacc2018.AVARIA_ARIA:
|
||||||
|
case stMacc2018.AVARIA_PRESSIONE_OLIO:
|
||||||
|
case stMacc2018.AVARIA_LIVELLO_OLIO:
|
||||||
|
case stMacc2018.AVARIA_TEMPERATURA_OLIO:
|
||||||
|
B_input += (1 << 3);
|
||||||
|
B_input += (1 << 6);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case stMacc2018.AVARIA_MOTORE_POMPA_IDRAULICA:
|
||||||
|
case stMacc2018.AVARIA_MOTORE_RAFFREDDO_IDRAULICA:
|
||||||
|
case stMacc2018.COMUNICAZIONE_ASSENTE:
|
||||||
|
case stMacc2018.AVARIA_SINCRONISMO_PORTE:
|
||||||
|
case stMacc2018.AVARIA_LIBERA:
|
||||||
|
case stMacc2018.ATTIVAZIONE_IN_CORSO:
|
||||||
|
B_input += (1 << 3);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case stMacc2018.MODO_MANUALE_ATTREZZAGGIO:
|
||||||
|
B_input += (1 << 4);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case stMacc2018.CICLO_IN_CORSO:
|
||||||
|
B_input += (1 << 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case stMacc2018.MODO_AUTOMATICO_LOCALE:
|
||||||
|
case stMacc2018.MODO_AUTOMATICO_ROBOT:
|
||||||
|
B_input += (1 << 7);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case stMacc2018.LIBERO:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Esegue decodificada stati in modalità "v2" (2024) con 2 valori senza macro stato
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected void DecodeV2(ref int B_input)
|
||||||
|
{
|
||||||
|
// Guardo SOLO stato macchina V2 (2024)
|
||||||
|
stMacc2024 _stMacch = ((stMacc2024)valState);
|
||||||
|
|
||||||
|
// controllo stato macchina x impostare altri bit... semplificato sui VALORI interi val status...
|
||||||
|
|
||||||
|
// da 00..50 -> pronta NON faccio nulla
|
||||||
|
if (valState < 51)
|
||||||
|
{
|
||||||
|
//B_input = 1;
|
||||||
|
}
|
||||||
|
// lavora
|
||||||
|
else if (valState >= 51 && valState < 100)
|
||||||
|
{
|
||||||
|
B_input += (1 << 1);
|
||||||
|
}
|
||||||
|
// manuale/warning
|
||||||
|
else if (valState >= 100 && valState < 199)
|
||||||
|
{
|
||||||
|
B_input += (1 << 3);
|
||||||
|
}
|
||||||
|
// allarme
|
||||||
|
else if (valState >= 200)
|
||||||
|
{
|
||||||
|
B_input += (1 << 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
// controllo COMUNQUE emergenza premuta...
|
||||||
|
if (_stMacch == stMacc2024.MACCHINA_NON_ATTIVA)
|
||||||
|
{
|
||||||
|
B_input += (1 << 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Esegue decodificada stati in modalità "v3" (2024) con 3 valori guardando SOLO macro stato
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected void DecodeV3(ref int B_input)
|
||||||
|
{
|
||||||
|
// Guardo SOLO stato MAIN V3 (2024)
|
||||||
|
mainState _stMain = ((mainState)valMain);
|
||||||
|
stMacc2024 _stMacch = ((stMacc2024)valState);
|
||||||
|
|
||||||
|
// controllo stato macchina x impostare altri bit...
|
||||||
|
switch (_stMain)
|
||||||
|
{
|
||||||
|
case mainState.Pronta:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case mainState.Lavora:
|
||||||
|
B_input += (1 << 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case mainState.Warning:
|
||||||
|
B_input += (1 << 4);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case mainState.Allarme:
|
||||||
|
B_input += (1 << 3);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case mainState.ND:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// controllo COMUNQUE emergenza premuta...
|
||||||
|
if (_stMacch == stMacc2024.MACCHINA_NON_ATTIVA)
|
||||||
|
{
|
||||||
|
B_input += (1 << 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
private int FapeVers = 1;
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Private Enums
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enum degli stati macchina (B0)
|
||||||
|
/// </summary>
|
||||||
|
private enum mainState
|
||||||
|
{
|
||||||
|
ND = 0,
|
||||||
|
Pronta = 1,
|
||||||
|
Lavora = 2,
|
||||||
|
Warning = 3,
|
||||||
|
Allarme = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Posizione sequenza ciclo standard punzonatrice
|
||||||
|
/// </summary>
|
||||||
|
private enum posSeq2018
|
||||||
|
{
|
||||||
|
CICLO_AUTOMATICO_FERMO = 0,
|
||||||
|
CONTROLLO_MODO_OPERATIVO = 5,
|
||||||
|
MODO_ATTIVO_CON_ROBOT = 8,
|
||||||
|
SBLOCCAGGIO_PEZZO = 10,
|
||||||
|
APERTURA_PORTELLO_ROBOT = 11,
|
||||||
|
CONSENSO_ACCESSO_AL_ROBOT = 12,
|
||||||
|
CARICO_ROBOT_IN_CORSO = 14,
|
||||||
|
CARICO_ROBOT_CONCLUSO = 16,
|
||||||
|
CHIUSURA_PORTELLO_ROBOT = 18,
|
||||||
|
VERIFICA_POSIZIONE_CARRI = 20,
|
||||||
|
BLOCCAGGIO_PEZZO = 22,
|
||||||
|
ATTESA_CARRO_A_DESTRA = 24,
|
||||||
|
DISCESA_RAPIDO_BROCCIATURA = 25,
|
||||||
|
CICLO_DI_BROCCIATURA = 26,
|
||||||
|
RITORNO_BROCCIATRICE = 28,
|
||||||
|
COMANDO_CARRO_A_SINISTRA = 30,
|
||||||
|
CICLO_DI_ALESATURA = 32,
|
||||||
|
RITORNO_CARRO_ALESATURA = 34,
|
||||||
|
COMANDO_CARRO_A_DESTRA = 36,
|
||||||
|
INCREMENTO_CONTAPEZZI = 38,
|
||||||
|
CONTROLLO_TIME_OUT_CICLO = 40,
|
||||||
|
RILANCIO_CICLO_F42 = 42,
|
||||||
|
ATTESA_FINE_CICLO = 45
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Posizione sequenza ciclo standard punzonatrice
|
||||||
|
/// </summary>
|
||||||
|
private enum posSeq2024
|
||||||
|
{
|
||||||
|
CICLO_NON_ATTIVO_0 = 0,
|
||||||
|
CONTROLLO_TIPO_CARICO_5 = 5,
|
||||||
|
APERTURA_PORTELLO_ACCESSO_AREA_ROBOT_10 = 10,
|
||||||
|
ATTESA_SCARICO_CARICO_PEZZO_DA_ROBOT_15 = 15,
|
||||||
|
ATTESA_ROBOT_FUORI_AREA_20 = 20,
|
||||||
|
ATTESA_CADUTA_SEGNALE_ROBOT_FUORI_AREA_25 = 25,
|
||||||
|
CHIUSURA_PORTELLO_ACCESSO_AREA_ROBOT_30 = 30,
|
||||||
|
FASE_1_STAFFAGGIO_PEZZO_50 = 50,
|
||||||
|
FASE_2_POSIZIONAMENTO_CONTRASTO_PEZZO_60 = 60,
|
||||||
|
FASE_3_PUNZONATURA_1_LUBRIFICAZIONE_PUNZONE_69 = 69,
|
||||||
|
FASE_3_PUNZONATURA_1_DISCESA_RAPIDA_70 = 70,
|
||||||
|
FASE_3_PUNZONATURA_1_DISCESA_LENTA_74 = 74,
|
||||||
|
FASE_3_PUNZONATURA_1_DISCESA_LENTISSIMA_75 = 75,
|
||||||
|
FASE_3_PUNZONATURA_1_ARRESTO_AZIONAMENTO_79 = 79,
|
||||||
|
FASE_3_PUNZONATURA_1_RITARDO_PER_RISALITA_80 = 80,
|
||||||
|
FASE_3_PUNZONATURA_1_SALITA_LENTA_85 = 85,
|
||||||
|
FASE_3_PUNZONATURA_1_SALITA_RAPIDA_90 = 90,
|
||||||
|
FASE_3_PUNZONATURA_1_SALITA_FINALE_95 = 95,
|
||||||
|
FASE_3_PUNZONATURA_1_ARRESTO_AZIONAMENTO_96 = 96,
|
||||||
|
FASE_4_TRASLAZIONE_1_RITARDO_AVVIO_105 = 105,
|
||||||
|
FASE_4_TRASLAZIONE_1_MOVIMENTO_SU_PUNZONATURA_2_110 = 110,
|
||||||
|
FASE_4_TRASLAZIONE_1_ARRESTO_AZIONAMENTO_114 = 114,
|
||||||
|
FASE_5_PUNZONATURA_2_RITARDO_AVVIO_115 = 115,
|
||||||
|
FASE_5_PUNZONATURA_2_LUBRIFICAZIONE_PUNZONE_119 = 119,
|
||||||
|
FASE_5_PUNZONATURA_2_DISCESA_RAPIDA_120 = 120,
|
||||||
|
FASE_5_PUNZONATURA_2_DISCESA_LENTA_124 = 124,
|
||||||
|
FASE_5_PUNZONATURA_2_DISCESA_LENTISSIMA_125 = 125,
|
||||||
|
FASE_5_PUNZONATURA_2_ARRESTO_AZIONAMENTO_126 = 126,
|
||||||
|
FASE_5_PUNZONATURA_2_RITARDO_PER_RISALITA_130 = 130,
|
||||||
|
FASE_5_PUNZONATURA_2_SALITA_LENTA_135 = 135,
|
||||||
|
FASE_5_PUNZONATURA_2_SALITA_RAPIDA_140 = 140,
|
||||||
|
FASE_5_PUNZONATURA_2_SALITA_FINALE_145 = 145,
|
||||||
|
FASE_5_PUNZONATURA_2_ARRESTO_AZIONAMENTO_146 = 146,
|
||||||
|
INCREMENTO_CONTATORI_PEZZI_ESEGUITI_155 = 155,
|
||||||
|
FASE_6_TRASLAZIONE_2_RITARDO_AVVIO_156 = 156,
|
||||||
|
FASE_6_TRASLAZIONE_2_MOVIMENTO_SU_PUNZONATURA_1_160 = 160,
|
||||||
|
FASE_6_TRASLAZIONE_2_ARRESTO_AZIONAMENTO_161 = 161,
|
||||||
|
FASE_7_DISINSERIMENTO_CONTRASTO_165 = 165,
|
||||||
|
FASE_8_DESTAFFAGGIO_PEZZO_170 = 170,
|
||||||
|
DISATTIVAZIONE_AZIONAMENTO_180 = 180,
|
||||||
|
VERIFICA_RIAVVIO_CICLO_CON_CARICO_DA_ROBOT_190 = 190,
|
||||||
|
CICLO_TERMINATO_300 = 300
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enum degli stati macchina (B0)
|
||||||
|
/// </summary>
|
||||||
|
private enum stMacc2018
|
||||||
|
{
|
||||||
|
COMUNICAZIONE_ASSENTE = 0,
|
||||||
|
EMERGENZA_INSERITA = 1,
|
||||||
|
AVARIA_ARIA = 2,
|
||||||
|
AVARIA_PRESSIONE_OLIO = 3,
|
||||||
|
AVARIA_LIVELLO_OLIO = 4,
|
||||||
|
AVARIA_TEMPERATURA_OLIO = 5,
|
||||||
|
AVARIA_MOTORE_POMPA_IDRAULICA = 6,
|
||||||
|
AVARIA_MOTORE_RAFFREDDO_IDRAULICA = 7,
|
||||||
|
AVARIA_SINCRONISMO_PORTE = 8,
|
||||||
|
AVARIA_LIBERA = 9,
|
||||||
|
ATTIVAZIONE_IN_CORSO = 10,
|
||||||
|
MODO_MANUALE_ATTREZZAGGIO = 11,
|
||||||
|
MODO_AUTOMATICO_LOCALE = 12,
|
||||||
|
MODO_AUTOMATICO_ROBOT = 13,
|
||||||
|
CICLO_IN_CORSO = 14,
|
||||||
|
LIBERO = 15
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enum degli stati macchina (B0)
|
||||||
|
/// </summary>
|
||||||
|
private enum stMacc2024
|
||||||
|
{
|
||||||
|
COMUNICAZIONE_ASSENTE = 0,
|
||||||
|
EMERGENZA_RIPRISTINATA = 5,
|
||||||
|
MACCHINA_IN_POTENZA = 10,
|
||||||
|
MACCHINA_PRONTA_PER_CICLO_LOCALE = 15,
|
||||||
|
MACCHINA_PRONTA_PER_CICLO_CON_ROBOT = 20,
|
||||||
|
MACCHINA_IN_MANUALE = 25,
|
||||||
|
CICLO_RESET_ATTIVO = 50,
|
||||||
|
CICLO_AUTOMATICO_LOCALE_ATTIVO = 55,
|
||||||
|
CICLO_AUTOMATICO_CON_ROBOT_ATTIVO = 60,
|
||||||
|
MANCANZA_OLIO_LUBRIFICAZIONE_PEZZO = 100,
|
||||||
|
MANCANZA_OLIO_LUBRIFICAZIONE_CILINDRO = 105,
|
||||||
|
ATTESA_BARRIERE_LIBERE = 110,
|
||||||
|
ATTESA_BLOCCAGGIO_PORTELLO_ANTERIORE = 111,
|
||||||
|
ATTESA_RILASCIO_PULSANTE_RESET = 115,
|
||||||
|
ATTESA_ASSE_PUNZONATURA_ALTO = 120,
|
||||||
|
ATTESA_BLOCCAGGIO_PEZZO_ALTO = 125,
|
||||||
|
ATTESA_BLOCCAGGIO_PEZZO = 126,
|
||||||
|
ATTESA_CONTRASTO_PEZZO_DISINSERITO = 130,
|
||||||
|
ATTESA_CARRO_IN_POSIZIONE_1 = 135,
|
||||||
|
ATTESA_CHIUSURA_PORTELLO_ROBOT = 140,
|
||||||
|
ATTESA_ROBOT_FUORI_INGOMBRO = 145,
|
||||||
|
ATTESA_TERMINE_CICLO_RESET = 150,
|
||||||
|
TIMEOUT_LUBRIFICAZIONE_CILINDRO = 155,
|
||||||
|
LIVELLO_OLIO_BASSO_LUBRIFICA_PEZZO = 160,
|
||||||
|
LIVELLO_OLIO_BASSO_LUBRIFICA_CILINDRO = 165,
|
||||||
|
ATTESA_AREA_TRASLAZIONE_LIBERA = 170,
|
||||||
|
ANOMALIA_POSIZIONE_PER_CARICO_ROBOT = 205,
|
||||||
|
SOVRAPRESSIONE_PUNZONATURA_1 = 210,
|
||||||
|
OLTRE_QUOTA_MASSIMA_PUNZONATURA_1 = 215,
|
||||||
|
SOVRAPRESSIONE_PUNZONATURA_2 = 220,
|
||||||
|
OLTRE_QUOTA_MASSIMA_PUNZONATURA_2 = 225,
|
||||||
|
SOVRAPRESSIONE_TRASLAZIONE_CARRO = 230,
|
||||||
|
TIMEOUT_AVVIO_DRIVE_POMPA_IDRAULICA = 235,
|
||||||
|
SOVRAPRESSIONE_MOVIMENTO_PUNZONE = 240,
|
||||||
|
ALLARME_DRIVE_POMPA_IDRAULICA = 245,
|
||||||
|
ANOMALIA_ALIMENTAZIONE_PNEUMATICA = 250,
|
||||||
|
APERTURA_ANOMALA_PORTELLO_ROBOT = 255,
|
||||||
|
APERTURA_ANOMALA_PORTELLO_ANTERIORE = 260,
|
||||||
|
INTRUSIONE_ANOMALA_BARRIERE = 265,
|
||||||
|
MACCHINA_NON_ATTIVA = 270,
|
||||||
|
ALLARME_AREA_TRASLAZIONE_NON_LIBERA = 275,
|
||||||
|
ANOMALIA_SALITA_PUNZONATORE = 301,
|
||||||
|
ANOMALIA_TRASLAZIONE_CARRO = 303,
|
||||||
|
ANOMALIA_ARRETRAMENTO_CONTRASTO_305 = 305,
|
||||||
|
ANOMALIA_APERTURA_STAFFAGGIO = 307,
|
||||||
|
ANOMALIA_STAFFAGGIO_PEZZO = 403,
|
||||||
|
ANOMALIA_POSIZIONE_CONTRASTO = 405,
|
||||||
|
ANOMALIA_PUNZONATURA_1 = 407,
|
||||||
|
ANOMALI_TRASLAZIONE_IN_POSIZIONE_2 = 409,
|
||||||
|
ANOMALIA_PUNZONATURA_2 = 411,
|
||||||
|
ANOMALIA_ARRETRAMENTO_CONTRASTO_413 = 413,
|
||||||
|
ANOMALIA_SALITA_STAFFAGGIO = 415,
|
||||||
|
ANOMALI_TRASLAZIONE_IN_POSIZIONE_1 = 417,
|
||||||
|
ANOMALIA_DISATTIVAZIONE_DRIVE_POMPA = 419,
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Private Enums
|
||||||
|
|
||||||
|
#region Private Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// recupero dati specifici FAPE da struttura array memoria e versione adapter
|
||||||
|
/// </summary>
|
||||||
|
private void ExtractFapeData()
|
||||||
|
{
|
||||||
|
/* ----------------------------------------------
|
||||||
|
* NOTA:
|
||||||
|
* - v1 (2018): 2 blocchi memoria, area DB15
|
||||||
|
* - v2 (2024): 2 blocchi area DB17
|
||||||
|
* - v3 (2024): 3 blocchi area DB17 (MacroStato, stato, ciclo)
|
||||||
|
*
|
||||||
|
* decodifico secondo conf
|
||||||
|
* ----------------------------------------------*/
|
||||||
|
// leggo secondo versione adapter 1/2/3...
|
||||||
|
if (FapeVers <= 2)
|
||||||
|
{
|
||||||
|
valState = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray());
|
||||||
|
valStepCic = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
valMain = S7.Net.Types.Word.FromByteArray(RawInput.Skip(0).Take(2).ToArray());
|
||||||
|
valState = S7.Net.Types.Word.FromByteArray(RawInput.Skip(2).Take(2).ToArray());
|
||||||
|
valStepCic = S7.Net.Types.Word.FromByteArray(RawInput.Skip(4).Take(2).ToArray());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Private Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,306 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Controllo Siemens specifico x impianti Ingenia (Automazione Valvital)
|
||||||
|
/// </summary>
|
||||||
|
public class SiemensIngenia : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS INGENIA (system integrator gestione robot impianto PRESSA in VALVITAL)
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1500
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB700
|
||||||
|
*
|
||||||
|
* Le informazioni di cui abbiamo bisogno (lettura) sono le seguenti :
|
||||||
|
* Macchina Lavora (DB700.DBX0.0)
|
||||||
|
* Macchina in ciclo (DB700.DBX0.1)
|
||||||
|
* Macchina in manuale (DB700.DBX0.2)
|
||||||
|
* Macchina in allarme (DB700.DBX0.3)
|
||||||
|
* Macchina in emergenza (DB700.DBX0.4)
|
||||||
|
* Macchina in timeout -> NON GESTIBILE in quanto attualmente gestito come ALLARME o SCARTO.
|
||||||
|
* Contapezzi
|
||||||
|
* Gestione scarti
|
||||||
|
*
|
||||||
|
* Sul tema del contapezzi ovviamente ci adattiamo a come gestite la cosa e quindi vanno bene sia 2 (o più) contapezzi (contapezzi_buono, contapezzi_scarto_forno, contapezzi_scarto_pressa, contapezzi_scarto_bilancere) -> VITA ISOLA (DB700.DBD24), BUONI (DB700.DBD28), SCARTO SAET (DB700.DBD32), SCARTO PEZZI FREDDI (DB700.DBD36).
|
||||||
|
*
|
||||||
|
* in scrittura vorremmo indicare al PLC
|
||||||
|
* - codice articolo(DB701.DBD20)
|
||||||
|
* - codice commessa(DB701.DBD24)
|
||||||
|
* - quantità produzione(DB701.DBD28)
|
||||||
|
*
|
||||||
|
* Questi 3 dati devono essere visualizzati in una qualche schermata per poter asseverare il requisito della 4.0, non è necessario ci siano vincoli per cui se ad esempio la richiesta fosse superata il robot continua a lavorare comunque.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NB: Si intende tutto con DB700.DBxx
|
||||||
|
*
|
||||||
|
* - BIT di stato
|
||||||
|
* - DBX0.0: Macchina in LAVORAZIONE
|
||||||
|
* - DBX0.1: Macchina in CICLO
|
||||||
|
* - DBX0.2: Macchina in MANUALE
|
||||||
|
* - DBX0.3: Macchina in ALLARME
|
||||||
|
* - DBX0.4: Macchina in EMERGENZA
|
||||||
|
*
|
||||||
|
* - DBD24: Vita isola (!!!???) Contapezzi TOTALISSIMO?
|
||||||
|
* - DBD28: BUONI
|
||||||
|
* - DBD32: pezzi prelevati per controllo qualità (era SCARTO SAET)
|
||||||
|
* - DBD36: SCARTO pezzi freddi
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* SCRITTURA
|
||||||
|
* - DBD701.DBD20: codice articolo
|
||||||
|
* - DBD701.DBD24: codice commessa
|
||||||
|
* - DBD701.DBD28: qta produzione
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensIngenia(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione VIPA INGENIA");
|
||||||
|
lastPLCWatchDog = DateTime.Now.AddMinutes(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processo i task richiesti e li elimino dalla coda 1:1
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task2exe"></param>
|
||||||
|
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
|
||||||
|
{
|
||||||
|
// Verificare il protocollo: dovrebbe togliere SOLO i task eseguiti...
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
bool taskOk = false;
|
||||||
|
string taskVal = "";
|
||||||
|
// inizio con 1 byte VUOTO
|
||||||
|
byte[] MemBlock = new byte[1];
|
||||||
|
string memAddrWrite = "";
|
||||||
|
if (task2exe != null)
|
||||||
|
{
|
||||||
|
// cerco task specifici: se ho startSetup --> imposto bit DBB701.DBB0.4
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
memAddrWrite = "";
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.nihil:
|
||||||
|
case taskType.fixStopSetup:
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
case taskType.forceSetPzCount:
|
||||||
|
case taskType.setProg:
|
||||||
|
case taskType.startSetup:
|
||||||
|
case taskType.stopSetup:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.sendWatchDogMes2Plc:
|
||||||
|
memAddrWrite = "DB701.DBB12";
|
||||||
|
upsertKey(item.Key, item.Value);
|
||||||
|
MemBlock = dwordToByte(counterMes2Plc.ToString());
|
||||||
|
taskVal = $"VALUE DB701.DBB12 --> {counterMes2Plc} ({MemBlock})";
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo(taskVal);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setArt:
|
||||||
|
case taskType.setComm:
|
||||||
|
case taskType.setPzComm:
|
||||||
|
case taskType.setParameter:
|
||||||
|
upsertKey(item.Key, item.Value);
|
||||||
|
// verifico se posso aggiornare valori in memoria...
|
||||||
|
if (memMap != null && memMap.mMapWrite != null)
|
||||||
|
{
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
dataConf currMem = memMap.mMapWrite[item.Key];
|
||||||
|
string addr = currMem.memAddr;
|
||||||
|
taskVal = $"SET task: {item.Key} --> {item.Value} | mem: {currMem.memAddr} - {currMem.size} byte";
|
||||||
|
// salvo il nuovo valore nella memoria... così prox invio lo trasmetterà
|
||||||
|
memMap.mMapWrite[item.Key].value = item.Value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"NO DATA MEM, SET task: {item.Key} --> {item.Value}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"NO MemMap found, SET task: {item.Key} --> {item.Value}";
|
||||||
|
}
|
||||||
|
// richiedo da URL i parametri WRITE da popolare
|
||||||
|
lgInfo("Chiamata processMemWriteRequests");
|
||||||
|
taskVal = processMemWriteRequests();
|
||||||
|
// se restituiscce "" faccio altra prova...
|
||||||
|
if (string.IsNullOrEmpty(taskVal))
|
||||||
|
{
|
||||||
|
// i parametri me li aspetto come stringa composta paramName|paramvalue
|
||||||
|
if (item.Value.Contains("|"))
|
||||||
|
{
|
||||||
|
string[] paramsJob = item.Value.Split('|');
|
||||||
|
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskOk = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = "SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// aggiungo task!
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
if (!string.IsNullOrEmpty(memAddrWrite))
|
||||||
|
{
|
||||||
|
// scrivo!
|
||||||
|
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
}
|
||||||
|
if (!taskOk)
|
||||||
|
{
|
||||||
|
lgError($"Ingenia: errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value} | memAddrWrite: {memAddrWrite} | {taskVal}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return taskDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid)
|
||||||
|
/// </summary>
|
||||||
|
public override void processOverride()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void processWhatchDog()
|
||||||
|
{
|
||||||
|
// scrivo 1 volta al secondo il contatore incrementale su area apposita
|
||||||
|
DateTime adesso = DateTime.Now;
|
||||||
|
if (adesso.Subtract(lastPLCWatchDog).TotalSeconds > watchDogPeriod)
|
||||||
|
{
|
||||||
|
// incremento
|
||||||
|
counterMes2Plc++;
|
||||||
|
// se > 999'999'999 --> 0
|
||||||
|
if (counterMes2Plc > 999999999) counterMes2Plc = 0;
|
||||||
|
// salvo su DB
|
||||||
|
Dictionary<string, string> task2exe = new Dictionary<string, string>();
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
task2exe.Add("sendWatchDogMes2Plc", counterMes2Plc.ToString());
|
||||||
|
taskDone = executeTasks(task2exe);
|
||||||
|
lgInfo($"Scritto watchdog: {counterMes2Plc}");
|
||||||
|
// salvo watchdog PLC
|
||||||
|
lastPLCWatchDog = adesso;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected int counterMes2Plc = 0;
|
||||||
|
|
||||||
|
protected int counterPlc2Mes = 0;
|
||||||
|
|
||||||
|
protected DateTime lastPLCWatchDog;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO STANDARD
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
* B4: manuale
|
||||||
|
* B5: emergenza
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* - BIT di stato
|
||||||
|
* - DBX0.0: Macchina in LAVORAZIONE
|
||||||
|
* - DBX0.1: Macchina in CICLO
|
||||||
|
* - DBX0.2: Macchina in MANUALE
|
||||||
|
* - DBX0.3: Macchina in ALLARME
|
||||||
|
* - DBX0.4: Macchina in EMERGENZA
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
B_input = currPLC.IsConnected ? 1 : 0;
|
||||||
|
|
||||||
|
// recupero byte segnali...
|
||||||
|
byte mainData = RawInput[0];
|
||||||
|
int byteSignals = 0;
|
||||||
|
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
if (currPLC.IsConnected)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// RUN se lavora ed in ciclo
|
||||||
|
if ((mainData & (1 << 0)) != 0 && (mainData & (1 << 1)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 1);
|
||||||
|
}
|
||||||
|
// manuale
|
||||||
|
if ((mainData & (1 << 2)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 4);
|
||||||
|
}
|
||||||
|
// allarme
|
||||||
|
if ((mainData & (1 << 3)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 3);
|
||||||
|
}
|
||||||
|
// emergenza
|
||||||
|
if ((mainData & (1 << 4)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
// salvo!
|
||||||
|
B_input = byteSignals;
|
||||||
|
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo(string.Format($"Trasformazione dati: RawInput:{RawInput[3]} --> B_input: {B_input}"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,640 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Controllo Siemens specifico x impianti Lasco (Pressa bilancere Valvital)
|
||||||
|
/// </summary>
|
||||||
|
public class SiemensLasco : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS LASCO (Pressa principale in VALVITAL)
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1500
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB1001 READ: 68 byte lettura, DB1002 68 byte byte scrittura, vedere doc allegato
|
||||||
|
* F:\Drive condivisi\30_Clienti\Valvital\Comunicazione PLC\22 - LASCO Bilancere
|
||||||
|
*
|
||||||
|
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensLasco(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione LASCO");
|
||||||
|
lastPLCWatchDog = DateTime.Now.AddMinutes(-1);
|
||||||
|
useNewSend = string.IsNullOrWhiteSpace(getOptPar("USE_NEW_EXE_TASK")) ? false : true;
|
||||||
|
// imposto i parametri speciali x calcolo...
|
||||||
|
var chiaviTSVC = findOptPar("TSVC");
|
||||||
|
if (chiaviTSVC.Count > 0)
|
||||||
|
{
|
||||||
|
lgInfo($"Trovate {chiaviTSVC.Count} chiavi TSVC");
|
||||||
|
string[] codVal;
|
||||||
|
VCData currConf;
|
||||||
|
int periodo = 0;
|
||||||
|
VC_func funz = VC_func.POINT;
|
||||||
|
// accodo nella conf...
|
||||||
|
foreach (var item in chiaviTSVC)
|
||||||
|
{
|
||||||
|
codVal = item.Value.Split(':');
|
||||||
|
Enum.TryParse(codVal[0], out funz);
|
||||||
|
int.TryParse(codVal[1], out periodo);
|
||||||
|
currConf = new VCData()
|
||||||
|
{
|
||||||
|
Funzione = funz,
|
||||||
|
Period = periodo,
|
||||||
|
DTStart = DateTime.Now.AddHours(-1),
|
||||||
|
dataArray = new List<double>()
|
||||||
|
};
|
||||||
|
// cerco se esiste eda ggiongo o aggiorno...
|
||||||
|
string currKey = item.Key.Replace("TSVC_", "");
|
||||||
|
if (TSVC_Data.ContainsKey(currKey))
|
||||||
|
{
|
||||||
|
TSVC_Data[currKey] = currConf;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TSVC_Data.Add(currKey, currConf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// documento...
|
||||||
|
foreach (var item in TSVC_Data)
|
||||||
|
{
|
||||||
|
lgTrace($"TSVC: {item.Key} | periodo: {item.Value.Period} | funz: {item.Value.Funzione}");
|
||||||
|
// salvo i valori PREC...
|
||||||
|
if (LastTSVC.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
LastTSVC[item.Key] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LastTSVC.Add(item.Key, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processo i task richiesti e li elimino dalla coda 1:1
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task2exe"></param>
|
||||||
|
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
|
||||||
|
{
|
||||||
|
// Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti...
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
bool taskOk = false;
|
||||||
|
string taskVal = "";
|
||||||
|
string memAddrWrite = "";
|
||||||
|
if (task2exe != null)
|
||||||
|
{
|
||||||
|
// inizio VUOTO
|
||||||
|
byte[] MemBlock = new byte[parametri.memSizeWrite];
|
||||||
|
|
||||||
|
// controllo su OPT_PAR se usare nuovo metodo exe task...
|
||||||
|
if (useNewSend)
|
||||||
|
{
|
||||||
|
// cerco task specifici
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
int valore = 0;
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.nihil:
|
||||||
|
case taskType.forceSetPzCount:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setArt:
|
||||||
|
case taskType.setComm:
|
||||||
|
case taskType.setPzComm:
|
||||||
|
case taskType.setProg:
|
||||||
|
upsertKey(item.Key, item.Value);
|
||||||
|
// verifico se posso aggiornare valori in memoria...
|
||||||
|
if (memMap != null && memMap.mMapWrite != null)
|
||||||
|
{
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
dataConf currMem = memMap.mMapWrite[item.Key];
|
||||||
|
string addr = currMem.memAddr;
|
||||||
|
taskVal = $"SET task: {item.Key} --> {item.Value} | mem: {currMem.memAddr} - {currMem.size} byte";
|
||||||
|
// salvo il nuovo valore nella memoria... così prox invio lo trasmetterà
|
||||||
|
memMap.mMapWrite[item.Key].value = item.Value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"NO DATA MEM, SET task: {item.Key} --> {item.Value}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"NO MemMap found, SET task: {item.Key} --> {item.Value}";
|
||||||
|
}
|
||||||
|
int byteSize = 0;
|
||||||
|
// recupero dati da memMap... altrimenti NULLA
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
dataConf currMem = memMap.mMapWrite[item.Key];
|
||||||
|
byteSize = currMem.size;
|
||||||
|
memAddrWrite = currMem.memAddr;
|
||||||
|
MemBlock = new byte[byteSize];
|
||||||
|
if (currMem.tipoMem == plcDataType.String)
|
||||||
|
{
|
||||||
|
saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.DInt)
|
||||||
|
{
|
||||||
|
int valDInt = 0;
|
||||||
|
int.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.Int)
|
||||||
|
{
|
||||||
|
short valDInt = 0;
|
||||||
|
short.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.Int.ToByteArray(valDInt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskVal = item.Value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.sendWatchDogMes2Plc:
|
||||||
|
// processo scrittura BIT su DB1002.DBB0.0
|
||||||
|
MemBlock = new byte[1];
|
||||||
|
memAddrWrite = "DB1002.DBB0";
|
||||||
|
// compogo in byte... primo bit è setup/run, ultimo è watchdog
|
||||||
|
valore = inSetup ? 1 : 0;
|
||||||
|
// verifica SE aggiungere il veto reset contapezzi
|
||||||
|
if (forcePzReset)
|
||||||
|
{
|
||||||
|
// reset shift counter
|
||||||
|
valore += 2;
|
||||||
|
// reset type counter
|
||||||
|
valore += 4;
|
||||||
|
// controlla se resettare il pz reset...
|
||||||
|
forcePzReset = forcePzResetUntil >= DateTime.Now;
|
||||||
|
}
|
||||||
|
valore += (byte)(counterMes2Plc << 7);
|
||||||
|
MemBlock[0] = (byte)valore;
|
||||||
|
taskVal = $"VALUE DB1002.92 --> {valore} | counter interno {counterMes2Plc}";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
// forzo reset contapezzi
|
||||||
|
forcePzReset = true;
|
||||||
|
forcePzResetUntil = DateTime.Now.AddSeconds(3);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setParameter:
|
||||||
|
// richiedo da URL i parametri WRITE da popolare
|
||||||
|
lgInfo("Chiamata processMemWriteRequests");
|
||||||
|
taskVal = processMemWriteRequests();
|
||||||
|
// se restituiscce "" faccio altra prova...
|
||||||
|
if (string.IsNullOrEmpty(taskVal))
|
||||||
|
{
|
||||||
|
// i parametri me li aspetto come stringa composta paramName|paramvalue
|
||||||
|
if (item.Value.Contains("|"))
|
||||||
|
{
|
||||||
|
string[] paramsJob = item.Value.Split('|');
|
||||||
|
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.startSetup:
|
||||||
|
// salvo che SONO IN SETUP!
|
||||||
|
inSetup = true;
|
||||||
|
lgInfo("!!! Richiesta startSetup - BLOCCO contapezzi LASCO !!!");
|
||||||
|
// forzo reset contapezzi
|
||||||
|
forcePzReset = true;
|
||||||
|
forcePzResetUntil = DateTime.Now.AddSeconds(3);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.stopSetup:
|
||||||
|
// salvo che SONO FUORI DAL SETUP!
|
||||||
|
inSetup = false;
|
||||||
|
lgInfo("!!! Richiesta stopSetup - SBLOCCO contapezzi LASCO!!!");
|
||||||
|
// forzo reset contapezzi
|
||||||
|
forcePzReset = true;
|
||||||
|
forcePzResetUntil = DateTime.Now.AddSeconds(3);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.fixStopSetup:
|
||||||
|
// salvo che SONO FUORI DAL SETUP!
|
||||||
|
inSetup = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = "SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// aggiungo task!
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
// scrivo comunque!
|
||||||
|
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
if (!taskOk)
|
||||||
|
{
|
||||||
|
lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lgInfo("Use old send");
|
||||||
|
// cerco task specifici: se ho startSetup --> imposto bit DBB701.DBB0.4
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.nihil:
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
case taskType.forceSetPzCount:
|
||||||
|
case taskType.startSetup:
|
||||||
|
case taskType.stopSetup:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setArt:
|
||||||
|
case taskType.setComm:
|
||||||
|
case taskType.setPzComm:
|
||||||
|
case taskType.setProg:
|
||||||
|
//saveProdData(item);
|
||||||
|
upsertKey(item.Key, item.Value);
|
||||||
|
taskVal = item.Value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.sendWatchDogMes2Plc:
|
||||||
|
// compogo in byte... primo bit è setup/run, ultimo è watchdog
|
||||||
|
int valore = inSetup ? 1 : 0;
|
||||||
|
valore += (byte)(counterMes2Plc << 7);
|
||||||
|
MemBlock[0] = (byte)valore;
|
||||||
|
taskVal = $"VALUE DB1002.92 --> {counterMes2Plc}";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setParameter:
|
||||||
|
// richiedo da URL i parametri WRITE da popolare
|
||||||
|
lgInfo("Chiamata processMemWriteRequests");
|
||||||
|
taskVal = processMemWriteRequests();
|
||||||
|
// se restituiscce "" faccio altra prova...
|
||||||
|
if (string.IsNullOrEmpty(taskVal))
|
||||||
|
{
|
||||||
|
// i parametri me li aspetto come stringa composta paramName|paramvalue
|
||||||
|
if (item.Value.Contains("|"))
|
||||||
|
{
|
||||||
|
string[] paramsJob = item.Value.Split('|');
|
||||||
|
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.fixStopSetup:
|
||||||
|
// salvo che SONO FUORI DAL SETUP!
|
||||||
|
inSetup = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = "SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// aggiungo task!
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
}
|
||||||
|
// controllo SE HO da scrivere articolo/commessa/programma
|
||||||
|
saveStringOnMemBlock(ref MemBlock, "setArt", 2, 22);
|
||||||
|
saveStringOnMemBlock(ref MemBlock, "setComm", 24, 22);
|
||||||
|
saveStringOnMemBlock(ref MemBlock, "setProg", 46, 22);
|
||||||
|
|
||||||
|
// scrivo comunque!
|
||||||
|
taskOk = S7WriteBB(ref MemBlock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return taskDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupero dati dinamici in formato dictionary
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override Dictionary<string, string> getDynData()
|
||||||
|
{
|
||||||
|
bool disableDynData = true;
|
||||||
|
Dictionary<string, string> outVal = new Dictionary<string, string>();
|
||||||
|
// processing
|
||||||
|
try
|
||||||
|
{
|
||||||
|
disableDynData = (getOptPar("DISABLE_DYN_DATA") == "TRUE");
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
lgError(exc, "Errore in getOptPar x DISABLE_DYN_DATA");
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// le 3 posizioni sono in 1/10 mm x cui vanno divise x 10... x avere MM
|
||||||
|
double RamPosition = S7.Net.Types.Int.FromByteArray(RawInput.Skip(18).Take(2).ToArray()) / 10;
|
||||||
|
double LowerEjectorPosition = S7.Net.Types.Int.FromByteArray(RawInput.Skip(20).Take(2).ToArray()) / 10;
|
||||||
|
double UpperTool = S7.Net.Types.Int.FromByteArray(RawInput.Skip(22).Take(2).ToArray()) / 10;
|
||||||
|
// temp in °C
|
||||||
|
int TempMainMotorU = S7.Net.Types.Int.FromByteArray(RawInput.Skip(24).Take(2).ToArray());
|
||||||
|
int TempMainMotorV = S7.Net.Types.Int.FromByteArray(RawInput.Skip(26).Take(2).ToArray());
|
||||||
|
int TempMainMotorW = S7.Net.Types.Int.FromByteArray(RawInput.Skip(28).Take(2).ToArray());
|
||||||
|
int TempSpindleNut = S7.Net.Types.Int.FromByteArray(RawInput.Skip(30).Take(2).ToArray());
|
||||||
|
int TempMotoModule = S7.Net.Types.Int.FromByteArray(RawInput.Skip(32).Take(2).ToArray());
|
||||||
|
int TempOilCirculation = S7.Net.Types.Int.FromByteArray(RawInput.Skip(34).Take(2).ToArray());
|
||||||
|
int TempHydraulicUnit = S7.Net.Types.Int.FromByteArray(RawInput.Skip(36).Take(2).ToArray());
|
||||||
|
// press in BAR
|
||||||
|
int PressHydraulicPump = S7.Net.Types.Int.FromByteArray(RawInput.Skip(38).Take(2).ToArray());
|
||||||
|
int PressHydraulicAccumulator = S7.Net.Types.Int.FromByteArray(RawInput.Skip(40).Take(2).ToArray());
|
||||||
|
int PressCounterforceOil = S7.Net.Types.Int.FromByteArray(RawInput.Skip(42).Take(2).ToArray());
|
||||||
|
int PressCounterforceGas = S7.Net.Types.Int.FromByteArray(RawInput.Skip(44).Take(2).ToArray());
|
||||||
|
// forze in kN (10^3 Newton)
|
||||||
|
int ForcePressureActual = S7.Net.Types.DInt.FromByteArray(RawInput.Skip(46).Take(4).ToArray());
|
||||||
|
int ForceOnBushing = S7.Net.Types.Int.FromByteArray(RawInput.Skip(50).Take(2).ToArray());
|
||||||
|
|
||||||
|
if (utils.CRB("enableTSVC"))
|
||||||
|
{
|
||||||
|
// per sicurezza prendo 1 sec avanti così da prendere tutti i valori insieme
|
||||||
|
DateTime adesso = DateTime.Now.AddSeconds(1);
|
||||||
|
bool[] scaduti = new bool[16];
|
||||||
|
// salvo in stack le VC rilevate
|
||||||
|
scaduti[0] = stackVal_TSVC("RamPosition", RamPosition, adesso);
|
||||||
|
scaduti[1] = stackVal_TSVC("LowerEjectorPosition", LowerEjectorPosition, adesso);
|
||||||
|
scaduti[2] = stackVal_TSVC("UpperTool", UpperTool, adesso);
|
||||||
|
scaduti[3] = stackVal_TSVC("TempMainMotorU", TempMainMotorU, adesso);
|
||||||
|
scaduti[4] = stackVal_TSVC("TempMainMotorV", TempMainMotorV, adesso);
|
||||||
|
scaduti[5] = stackVal_TSVC("TempMainMotorW", TempMainMotorW, adesso);
|
||||||
|
scaduti[6] = stackVal_TSVC("TempSpindleNut", TempSpindleNut, adesso);
|
||||||
|
scaduti[7] = stackVal_TSVC("TempMotoModule", TempMotoModule, adesso);
|
||||||
|
scaduti[8] = stackVal_TSVC("TempOilCirculation", TempOilCirculation, adesso);
|
||||||
|
scaduti[9] = stackVal_TSVC("TempHydraulicUnit", TempHydraulicUnit, adesso);
|
||||||
|
scaduti[10] = stackVal_TSVC("PressHydraulicPump", PressHydraulicPump, adesso);
|
||||||
|
scaduti[11] = stackVal_TSVC("PressHydraulicAccumulator", PressHydraulicAccumulator, adesso);
|
||||||
|
scaduti[12] = stackVal_TSVC("PressCounterforceOil", PressCounterforceOil, adesso);
|
||||||
|
scaduti[13] = stackVal_TSVC("PressCounterforceGas", PressCounterforceGas, adesso);
|
||||||
|
scaduti[14] = stackVal_TSVC("ForcePressureActual", ForcePressureActual, adesso);
|
||||||
|
scaduti[15] = stackVal_TSVC("ForceOnBushing", ForceOnBushing, adesso);
|
||||||
|
|
||||||
|
// verifico SE devo riportare dati VC
|
||||||
|
if (baseUtils.CountTrue(scaduti) > 0)
|
||||||
|
{
|
||||||
|
RamPosition = (int)getVal_TSVC("RamPosition", scaduti[0]);
|
||||||
|
LowerEjectorPosition = (int)getVal_TSVC("LowerEjectorPosition", scaduti[1]);
|
||||||
|
UpperTool = (int)getVal_TSVC("UpperTool", scaduti[2]);
|
||||||
|
TempMainMotorU = (int)getVal_TSVC("TempMainMotorU", scaduti[3]);
|
||||||
|
TempMainMotorV = (int)getVal_TSVC("TempMainMotorV", scaduti[4]);
|
||||||
|
TempMainMotorW = (int)getVal_TSVC("TempMainMotorW", scaduti[5]);
|
||||||
|
TempSpindleNut = (int)getVal_TSVC("TempSpindleNut", scaduti[6]);
|
||||||
|
TempMotoModule = (int)getVal_TSVC("TempMotoModule", scaduti[7]);
|
||||||
|
TempOilCirculation = (int)getVal_TSVC("TempOilCirculation", scaduti[8]);
|
||||||
|
TempHydraulicUnit = (int)getVal_TSVC("TempHydraulicUnit", scaduti[9]);
|
||||||
|
PressHydraulicPump = (int)getVal_TSVC("PressHydraulicPump", scaduti[10]);
|
||||||
|
PressHydraulicAccumulator = (int)getVal_TSVC("PressHydraulicAccumulator", scaduti[11]);
|
||||||
|
PressCounterforceOil = (int)getVal_TSVC("PressCounterforceOil", scaduti[12]);
|
||||||
|
PressCounterforceGas = (int)getVal_TSVC("PressCounterforceGas", scaduti[13]);
|
||||||
|
ForcePressureActual = (int)getVal_TSVC("ForcePressureActual", scaduti[14]);
|
||||||
|
ForceOnBushing = (int)getVal_TSVC("ForceOnBushing", scaduti[15]);
|
||||||
|
|
||||||
|
//vecchia gestione valori INT
|
||||||
|
//RamPosition = getVal_TSVC_int("RamPosition", scaduti[0]);
|
||||||
|
//LowerEjectorPosition = getVal_TSVC_int("LowerEjectorPosition", scaduti[1]);
|
||||||
|
//UpperTool = getVal_TSVC_int("UpperTool", scaduti[2]);
|
||||||
|
//TempMainMotorU = getVal_TSVC_int("TempMainMotorU", scaduti[3]);
|
||||||
|
//TempMainMotorV = getVal_TSVC_int("TempMainMotorV", scaduti[4]);
|
||||||
|
//TempMainMotorW = getVal_TSVC_int("TempMainMotorW", scaduti[5]);
|
||||||
|
//TempSpindleNut = getVal_TSVC_int("TempSpindleNut", scaduti[6]);
|
||||||
|
//TempMotoModule = getVal_TSVC_int("TempMotoModule", scaduti[7]);
|
||||||
|
//TempOilCirculation = getVal_TSVC_int("TempOilCirculation", scaduti[8]);
|
||||||
|
//TempHydraulicUnit = getVal_TSVC_int("TempHydraulicUnit", scaduti[9]);
|
||||||
|
//PressHydraulicPump = getVal_TSVC_int("PressHydraulicPump", scaduti[10]);
|
||||||
|
//PressHydraulicAccumulator = getVal_TSVC_int("PressHydraulicAccumulator", scaduti[11]);
|
||||||
|
//PressCounterforceOil = getVal_TSVC_int("PressCounterforceOil", scaduti[12]);
|
||||||
|
//PressCounterforceGas = getVal_TSVC_int("PressCounterforceGas", scaduti[13]);
|
||||||
|
//ForcePressureActual = getVal_TSVC_int("ForcePressureActual", scaduti[14]);
|
||||||
|
//ForceOnBushing = getVal_TSVC_int("ForceOnBushing", scaduti[15]);
|
||||||
|
|
||||||
|
outVal.Add("RamPosition", $"{RamPosition:N1}");
|
||||||
|
outVal.Add("LowerEjectorPosition", $"{LowerEjectorPosition:N1}");
|
||||||
|
outVal.Add("UpperTool", $"{UpperTool:N1}");
|
||||||
|
outVal.Add("TempMainMotorU", $"{TempMainMotorU}");
|
||||||
|
outVal.Add("TempMainMotorV", $"{TempMainMotorV}");
|
||||||
|
outVal.Add("TempMainMotorW", $"{TempMainMotorW}");
|
||||||
|
outVal.Add("TempSpindleNut", $"{TempSpindleNut}");
|
||||||
|
outVal.Add("TempMotoModule", $"{TempMotoModule}");
|
||||||
|
outVal.Add("TempOilCirculation", $"{TempOilCirculation}");
|
||||||
|
outVal.Add("TempHydraulicUnit", $"{TempHydraulicUnit}");
|
||||||
|
outVal.Add("PressHydraulicPump", $"{PressHydraulicPump}");
|
||||||
|
outVal.Add("PressHydraulicAccumulator", $"{PressHydraulicAccumulator}");
|
||||||
|
outVal.Add("PressCounterforceOil", $"{PressCounterforceOil}");
|
||||||
|
outVal.Add("PressCounterforceGas", $"{PressCounterforceGas}");
|
||||||
|
outVal.Add("ForcePressureActual", $"{ForcePressureActual}");
|
||||||
|
outVal.Add("ForceOnBushing", $"{ForceOnBushing}");
|
||||||
|
|
||||||
|
// salvo!
|
||||||
|
LastTSVC["RamPosition"] = RamPosition;
|
||||||
|
LastTSVC["LowerEjectorPosition"] = LowerEjectorPosition;
|
||||||
|
LastTSVC["UpperTool"] = UpperTool;
|
||||||
|
LastTSVC["TempMainMotorU"] = TempMainMotorU;
|
||||||
|
LastTSVC["TempMainMotorV"] = TempMainMotorV;
|
||||||
|
LastTSVC["TempMainMotorW"] = TempMainMotorW;
|
||||||
|
LastTSVC["TempSpindleNut"] = TempSpindleNut;
|
||||||
|
LastTSVC["TempMotoModule"] = TempMotoModule;
|
||||||
|
LastTSVC["TempOilCirculation"] = TempOilCirculation;
|
||||||
|
LastTSVC["TempHydraulicUnit"] = TempHydraulicUnit;
|
||||||
|
LastTSVC["PressHydraulicPump"] = PressHydraulicPump;
|
||||||
|
LastTSVC["PressHydraulicAccumulator"] = PressHydraulicAccumulator;
|
||||||
|
LastTSVC["PressCounterforceOil"] = PressCounterforceOil;
|
||||||
|
LastTSVC["PressCounterforceGas"] = PressCounterforceGas;
|
||||||
|
LastTSVC["ForcePressureActual"] = ForcePressureActual;
|
||||||
|
LastTSVC["ForceOnBushing"] = ForceOnBushing;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// se i dynData non sono disabilitati...
|
||||||
|
if (!disableDynData)
|
||||||
|
{
|
||||||
|
outVal.Add("DYNDATA", $"RamPosition {LastTSVC["RamPosition"]:N1} | ForcePressureActual {LastTSVC["ForcePressureActual"]} | ForceOnBushing {LastTSVC["ForceOnBushing"]}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// se i dynData non sono disabilitati...
|
||||||
|
if (!disableDynData)
|
||||||
|
{
|
||||||
|
outVal.Add("DYNDATA", $"RamPosition {LastTSVC["RamPosition"]:N1} | ForcePressureActual {LastTSVC["ForcePressureActual"]} | ForceOnBushing {LastTSVC["ForceOnBushing"]}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
lgError(exc, "Errore in getDynData x Siemens LASCO");
|
||||||
|
}
|
||||||
|
return outVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string getPrgName()
|
||||||
|
{
|
||||||
|
string answ = "";
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string rawProdCode = S7.Net.Types.String.FromByteArray(RawInput.Skip(54).Take(12).ToArray());
|
||||||
|
// primi due char sono \f e \n avanzamento carta e nuova linea...
|
||||||
|
answ = Regex.Replace(rawProdCode, @"\t|\n|\r|\f", "");
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
lgError($"Errore in decodifica product code{Environment.NewLine}{exc}");
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid)
|
||||||
|
/// </summary>
|
||||||
|
public override void processOverride()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void processWhatchDog()
|
||||||
|
{
|
||||||
|
// scrivo 1 volta al secondo il contatore incrementale su area apposita scrive nel primo
|
||||||
|
// byte, ultimo bit, il watchdog, mentre scrive nel primo 1 = setup, 0 = run
|
||||||
|
DateTime adesso = DateTime.Now;
|
||||||
|
if (adesso.Subtract(lastPLCWatchDog).TotalSeconds > watchDogPeriod)
|
||||||
|
{
|
||||||
|
// incremento
|
||||||
|
counterMes2Plc++;
|
||||||
|
// se > 1 --> 0 (balla solo 0..1)
|
||||||
|
if (counterMes2Plc > 1) counterMes2Plc = 0;
|
||||||
|
// salvo su DB
|
||||||
|
Dictionary<string, string> task2exe = new Dictionary<string, string>();
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
task2exe.Add("sendWatchDogMes2Plc", counterMes2Plc.ToString());
|
||||||
|
taskDone = executeTasks(task2exe);
|
||||||
|
// salvo watchdog PLC
|
||||||
|
lastPLCWatchDog = adesso;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected int counterMes2Plc = 0;
|
||||||
|
|
||||||
|
protected int counterPlc2Mes = 0;
|
||||||
|
|
||||||
|
protected int counterPlc2MesWrote = 0;
|
||||||
|
|
||||||
|
protected DateTime lastPLCWatchDog;
|
||||||
|
|
||||||
|
protected bool useNewSend = false;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO STANDARD
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
* B4: manuale
|
||||||
|
* B5: emergenza
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* - BIT di stato
|
||||||
|
* - DBX0.0: RUN STATE
|
||||||
|
* - DBX0.1: CYCLE
|
||||||
|
* - DBX0.2: MANUAL MODE
|
||||||
|
* - DBX0.3: GENERAL ALARM
|
||||||
|
* - DBX0.4: ESTOP (1=OK, 0 = emergency)
|
||||||
|
* - DBX0.5: SAFETY DOORS
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
byte mainData = RawInput[0];
|
||||||
|
|
||||||
|
int byteSignals = 0;
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
if (currPLC.IsConnected)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 0);
|
||||||
|
}
|
||||||
|
if ((mainData & (1 << 0)) == 1)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// EMERGENZA
|
||||||
|
if ((mainData & (1 << 5)) == 1)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 5);
|
||||||
|
}
|
||||||
|
// ALLARME
|
||||||
|
if ((mainData & (1 << 3)) == 1)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// MANUALE ...
|
||||||
|
if ((mainData & (1 << 2)) == 1)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
// salvo!
|
||||||
|
B_input = byteSignals;
|
||||||
|
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo(string.Format($"Trasformazione dati: RawInput:{RawInput[3]} --> B_input: {B_input}"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,221 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Controllo Siemens specifico x impianti RobotSerice (es Smerigliature DONATI)
|
||||||
|
/// </summary>
|
||||||
|
public class SiemensNWSE : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS NWS
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1200
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB100: (lettura) 50byte,
|
||||||
|
* G:\Drive condivisi\30_Clienti\Giacovelli - WIL\NWS
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* DB100
|
||||||
|
* B00..B15 --> 16 byte di allarmi (osmosi, depurazione, 6 x filtri)
|
||||||
|
* B20..B35 --> 16 byte di stati (osmosi, depurazione, 6 x filtri)
|
||||||
|
* B40..B49 --> 5 valori uint lettura parametri
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB101: (scrittura) 14byte, solo 2 impiegati x ora
|
||||||
|
* NB: segnali da tenere attivi ALMENO 3 secondi x farli recepire
|
||||||
|
*
|
||||||
|
* B0.0 Num Azzeramento volume acqua OSMOSI
|
||||||
|
* B0.1 Num Azzeramento volume acqua DEPURAZIONE
|
||||||
|
*
|
||||||
|
* B1.7 Num Attivazione modo DEMO (0 = disattivato)
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensNWSE(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione NWS");
|
||||||
|
|
||||||
|
if (IOBConf.optPar.ContainsKey("EMERGENCY_BYPASS"))
|
||||||
|
{
|
||||||
|
bool.TryParse(IOBConf.optPar["EMERGENCY_BYPASS"], out EmergencyBypass);
|
||||||
|
lgInfo($"Override EmergencyBypass da conf: {IOBConf.optPar["EMERGENCY_BYPASS"]} --> {EmergencyBypass}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processo i task richiesti e li elimino dalla coda 1:1
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task2exe"></param>
|
||||||
|
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
|
||||||
|
{
|
||||||
|
lgInfo($"Chiamata executeTasks specifica IobSiemensNWS: {task2exe.Count} task ricevuti");
|
||||||
|
// Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti...
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
bool taskOk = false;
|
||||||
|
string taskVal = "";
|
||||||
|
// inizio con 1 byte di default
|
||||||
|
byte[] MemBlock = new byte[1];
|
||||||
|
string memAddrWrite = "";
|
||||||
|
if (task2exe != null)
|
||||||
|
{
|
||||||
|
// cerco task specifici
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
// usato x resettare i contatori osmosi inversa e depurazione processo
|
||||||
|
// scrittura BIT su DB101.DBB0 per
|
||||||
|
MemBlock = new byte[1];
|
||||||
|
// scrivo 3 x resettare entrambi i contatori
|
||||||
|
MemBlock = S7.Net.Types.Byte.ToByteArray(3);
|
||||||
|
memAddrWrite = "DB101.DB0";
|
||||||
|
// scrivo!
|
||||||
|
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
// attesa 3.5 sec sec
|
||||||
|
Thread.Sleep(3500);
|
||||||
|
// predispongo x reset valore 0...
|
||||||
|
MemBlock = S7.Net.Types.Byte.ToByteArray(0);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
// lasciato commentato, da rivalutare...
|
||||||
|
#if false
|
||||||
|
case taskType.setParameter:
|
||||||
|
// richiedo da URL i parametri WRITE da popolare
|
||||||
|
lgInfo("setParameter --> processMemWriteRequests");
|
||||||
|
taskVal = processMemWriteRequests();
|
||||||
|
// se restituiscce "" faccio altra prova...
|
||||||
|
if (string.IsNullOrEmpty(taskVal))
|
||||||
|
{
|
||||||
|
// i parametri me li aspetto come stringa composta paramName|paramvalue
|
||||||
|
if (item.Value.Contains("|"))
|
||||||
|
{
|
||||||
|
string[] paramsJob = item.Value.Split('|');
|
||||||
|
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
lgInfo($"executeTask | task name: {tName} | task value: {taskVal}");
|
||||||
|
// aggiungo task!
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
if (!string.IsNullOrEmpty(memAddrWrite))
|
||||||
|
{
|
||||||
|
// scrivo!
|
||||||
|
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
}
|
||||||
|
if (taskOk)
|
||||||
|
{
|
||||||
|
// aggiorno valore memoria... SE presente
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
memMap.mMapWrite[item.Key].value = item.Value;
|
||||||
|
lgInfo($"Aggiornato valore in mMapWrite per {item.Key}");
|
||||||
|
}
|
||||||
|
lgInfo($"Eseguita con successo S7WriteBB per executeTasks: {item.Key} | {item.Value}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return taskDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected bool EmergencyBypass = false;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO STANDARD 60
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount - NON usato
|
||||||
|
* B3: allarme (almeno 1 presente)
|
||||||
|
* B4: manuale - non usato
|
||||||
|
* B5: slowTC - non usato
|
||||||
|
* B6: WarmUpCoolDown - no usato
|
||||||
|
* B7: Emergenza armata (1)
|
||||||
|
*
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
int byteSignals = 0;
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
if (currPLC.IsConnected)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// processo dagli stati + gravi...
|
||||||
|
if (hasAlarms())
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 3);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// se bypass emergenza attivo --> forzo a ARMED...
|
||||||
|
if (EmergencyBypass)
|
||||||
|
{
|
||||||
|
// segnalo NON emergenza
|
||||||
|
byteSignals += (1 << 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
// salvo!
|
||||||
|
B_input = byteSignals;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,275 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Controllo Siemens specifico x impianti Pressoil+Cei (Pressa idraulica Valvital)
|
||||||
|
/// </summary>
|
||||||
|
public class SiemensPressoilCei : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS CEI PRESSOIL (impianti ad induzione in VALVITAL)
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1500
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB64 READ e DB67 WRITE, vedere file conf json
|
||||||
|
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensPressoilCei(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione PRESSOIL - CEI");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processo i task richiesti e li elimino dalla coda 1:1
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task2exe"></param>
|
||||||
|
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
|
||||||
|
{
|
||||||
|
// Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti...
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
bool taskOk = false;
|
||||||
|
string taskVal = "";
|
||||||
|
// inizio con 1 byte di default
|
||||||
|
byte[] MemBlock = new byte[1];
|
||||||
|
string memAddrWrite = "";
|
||||||
|
if (task2exe != null)
|
||||||
|
{
|
||||||
|
// cerco task specifici
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.nihil:
|
||||||
|
case taskType.fixStopSetup:
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
case taskType.forceSetPzCount:
|
||||||
|
case taskType.setProg:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setArt:
|
||||||
|
case taskType.setComm:
|
||||||
|
case taskType.setPzComm:
|
||||||
|
upsertKey(item.Key, item.Value);
|
||||||
|
// verifico se posso aggiornare valori in memoria...
|
||||||
|
if (memMap != null && memMap.mMapWrite != null)
|
||||||
|
{
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
dataConf currMem = memMap.mMapWrite[item.Key];
|
||||||
|
string addr = currMem.memAddr;
|
||||||
|
taskVal = $"SET task: {item.Key} --> {item.Value} | mem: {currMem.memAddr} - {currMem.size} byte";
|
||||||
|
// salvo il nuovo valore nella memoria... così prox invio lo trasmetterà
|
||||||
|
memMap.mMapWrite[item.Key].value = item.Value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"NO DATA MEM, SET task: {item.Key} --> {item.Value}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"NO MemMap found, SET task: {item.Key} --> {item.Value}";
|
||||||
|
}
|
||||||
|
int byteSize = 0;
|
||||||
|
// recupero dati da memMap... altrimenti NULLA
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
dataConf currMem = memMap.mMapWrite[item.Key];
|
||||||
|
byteSize = currMem.size;
|
||||||
|
memAddrWrite = currMem.memAddr;
|
||||||
|
MemBlock = new byte[byteSize];
|
||||||
|
if (currMem.tipoMem == plcDataType.String)
|
||||||
|
{
|
||||||
|
saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.Int)
|
||||||
|
{
|
||||||
|
short valDInt = 0;
|
||||||
|
short.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.Int.ToByteArray(valDInt);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.DInt)
|
||||||
|
{
|
||||||
|
int valDInt = 0;
|
||||||
|
int.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.Word)
|
||||||
|
{
|
||||||
|
ushort valDInt = 0;
|
||||||
|
ushort.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.Word.ToByteArray(valDInt);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.DWord)
|
||||||
|
{
|
||||||
|
uint valDInt = 0;
|
||||||
|
uint.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.DWord.ToByteArray(valDInt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskVal = item.Value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.sendWatchDogMes2Plc:
|
||||||
|
// processo scrittura BIT su DB67.DBX0.0
|
||||||
|
MemBlock = new byte[1];
|
||||||
|
memAddrWrite = "DB67.DBB0";
|
||||||
|
// compogo in byte... primo bit è setup/run, ultimo è watchdog
|
||||||
|
int valore = inSetup ? 1 : 0;
|
||||||
|
valore += (byte)(counterMes2Plc << 7);
|
||||||
|
MemBlock[0] = (byte)valore;
|
||||||
|
taskVal = $"VALUE DB67.0 --> {valore} | counter interno {counterMes2Plc}";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setParameter:
|
||||||
|
// richiedo da URL i parametri WRITE da popolare
|
||||||
|
lgInfo("Chiamata processMemWriteRequests");
|
||||||
|
taskVal = processMemWriteRequests();
|
||||||
|
// se restituiscce "" faccio altra prova...
|
||||||
|
if (string.IsNullOrEmpty(taskVal))
|
||||||
|
{
|
||||||
|
// i parametri me li aspetto come stringa composta paramName|paramvalue
|
||||||
|
if (item.Value.Contains("|"))
|
||||||
|
{
|
||||||
|
string[] paramsJob = item.Value.Split('|');
|
||||||
|
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.startSetup:
|
||||||
|
// salvo che SONO IN SETUP!
|
||||||
|
inSetup = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.stopSetup:
|
||||||
|
// salvo che SONO FUORI DAL SETUP!
|
||||||
|
inSetup = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = "SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// aggiungo task!
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
// scrivo comunque!
|
||||||
|
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
if (!taskOk)
|
||||||
|
{
|
||||||
|
lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return taskDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected int counterMes2Plc = 0;
|
||||||
|
protected int counterPlc2Mes = 0;
|
||||||
|
protected DateTime lastPLCWatchDog;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO STANDARD
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
* B4: manuale
|
||||||
|
* B5: emergenza
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* - BIT di stato
|
||||||
|
* - DBX0.0 - Life bit
|
||||||
|
* - DBX0.1 – Macchina lavora
|
||||||
|
* - DBX0.2 – Macchina in ciclo
|
||||||
|
* - DBX0.3 – Macchina in manuale
|
||||||
|
* - DBX0.4 – Macchina in allarme
|
||||||
|
* - DBX0.5 – Macchina in emergenza
|
||||||
|
*
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
byte mainData = RawInput[0];
|
||||||
|
|
||||||
|
int byteSignals = 0;
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
if (currPLC.IsConnected)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 0);
|
||||||
|
}
|
||||||
|
// RUN se lavora ed in ciclo
|
||||||
|
if ((mainData & (1 << 1)) != 0 && (mainData & (1 << 2)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 1);
|
||||||
|
}
|
||||||
|
// manuale
|
||||||
|
if ((mainData & (1 << 3)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 4);
|
||||||
|
}
|
||||||
|
// allarme
|
||||||
|
if ((mainData & (1 << 4)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 3);
|
||||||
|
}
|
||||||
|
// emergenza
|
||||||
|
if ((mainData & (1 << 5)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
// salvo!
|
||||||
|
B_input = byteSignals;
|
||||||
|
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo($"Trasformazione dati: RawInput:{RawInput[0]} --> B_input: {B_input}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,278 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Controllo Siemens specifico x impianti RobotSerice (es Smerigliature DONATI)
|
||||||
|
/// </summary>
|
||||||
|
public class SiemensRobotService : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS RobotService
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1500
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB15: (lettura) 10byte,
|
||||||
|
* G:\Drive condivisi\30_Clienti\Donati\Schemi IOB-WIN\RobotService
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* DB15
|
||||||
|
* B0.0 Num PowerOn
|
||||||
|
* B0.1 Num Run
|
||||||
|
* B0.2 Num Contapezzi
|
||||||
|
* B0.3 Num Allarme
|
||||||
|
* B0.4 Num Manuale
|
||||||
|
* B0.5 Num MagOutPieno
|
||||||
|
* B0.6 Num MagInVuoto
|
||||||
|
* B0.7 Num EmergenzaArmata (0=triggered,premuta)
|
||||||
|
* Contapezzi DInt 2
|
||||||
|
* PezziRiman DInt 6
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB14: (scrittura) 520byte,
|
||||||
|
* G:\Drive condivisi\30_Clienti\Donati\Schemi IOB-WIN\RobotService
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* DB14
|
||||||
|
* Commessa Odl String[000..256] String (254)
|
||||||
|
* CodArt String[256..512] String (254)
|
||||||
|
* QtaRich DInt 512 numero pezzi lanciati
|
||||||
|
* PzCountRes Bool/Byte 516 al fronte di salita (0-->1) reset contapezzi e NON CONTA mentre è 1, se 0 conta
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensRobotService(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione RobotService");
|
||||||
|
|
||||||
|
if (IOBConf.optPar.ContainsKey("EMERGENCY_BYPASS"))
|
||||||
|
{
|
||||||
|
bool.TryParse(IOBConf.optPar["EMERGENCY_BYPASS"], out EmergencyBypass);
|
||||||
|
lgInfo($"Override EmergencyBypass da conf: {IOBConf.optPar["EMERGENCY_BYPASS"]} --> {EmergencyBypass}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processo i task richiesti e li elimino dalla coda 1:1
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task2exe"></param>
|
||||||
|
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
|
||||||
|
{
|
||||||
|
lgInfo($"Chiamata executeTasks specifica IobSiemensRobotService: {task2exe.Count} task ricevuti");
|
||||||
|
// Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti...
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
bool taskOk = false;
|
||||||
|
string taskVal = "";
|
||||||
|
// inizio con 1 byte di default
|
||||||
|
byte[] MemBlock = new byte[1];
|
||||||
|
string memAddrWrite = "";
|
||||||
|
if (task2exe != null)
|
||||||
|
{
|
||||||
|
// cerco task specifici
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.nihil:
|
||||||
|
case taskType.fixStopSetup:
|
||||||
|
case taskType.forceSetPzCount:
|
||||||
|
case taskType.setProg:
|
||||||
|
case taskType.sendWatchDogMes2Plc:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setPzComm:
|
||||||
|
case taskType.setArt:
|
||||||
|
case taskType.setComm:
|
||||||
|
upsertKey(item.Key, item.Value);
|
||||||
|
int byteSize = 0;
|
||||||
|
// recupero dati da memMap... altrimenti NULLA
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
dataConf currMem = memMap.mMapWrite[item.Key];
|
||||||
|
byteSize = currMem.size;
|
||||||
|
memAddrWrite = currMem.memAddr;
|
||||||
|
MemBlock = new byte[byteSize];
|
||||||
|
if (currMem.tipoMem == plcDataType.String)
|
||||||
|
{
|
||||||
|
saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.DInt)
|
||||||
|
{
|
||||||
|
int valDInt = 0;
|
||||||
|
int.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.Int)
|
||||||
|
{
|
||||||
|
short valInt = 0;
|
||||||
|
short.TryParse(item.Value, out valInt);
|
||||||
|
MemBlock = S7.Net.Types.Int.ToByteArray(valInt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string rawMemConf = JsonConvert.SerializeObject(memMap, Formatting.Indented);
|
||||||
|
lgError($"Errore: non trovata chiave write in memMap.mMapWrite per {item.Key}{Environment.NewLine}Configurazione memoria R/W:{Environment.NewLine}{rawMemConf}");
|
||||||
|
}
|
||||||
|
taskVal = item.Value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
// processo scrittura BIT su DB6.DBB516
|
||||||
|
MemBlock = new byte[1];
|
||||||
|
MemBlock = S7.Net.Types.Byte.ToByteArray(1);
|
||||||
|
memAddrWrite = "DB14.DBB516";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.startSetup:
|
||||||
|
// processo scrittura BIT su DB6.DBB516
|
||||||
|
MemBlock = new byte[1];
|
||||||
|
MemBlock = S7.Net.Types.Byte.ToByteArray(1);
|
||||||
|
memAddrWrite = "DB14.DBB516";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.stopSetup:
|
||||||
|
// processo scrittura BIT su DB6.DBB516
|
||||||
|
MemBlock = new byte[1];
|
||||||
|
MemBlock = S7.Net.Types.Byte.ToByteArray(0);
|
||||||
|
memAddrWrite = "DB14.DBB516";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setParameter:
|
||||||
|
// richiedo da URL i parametri WRITE da popolare
|
||||||
|
lgInfo("setParameter --> processMemWriteRequests");
|
||||||
|
taskVal = processMemWriteRequests();
|
||||||
|
// se restituiscce "" faccio altra prova...
|
||||||
|
if (string.IsNullOrEmpty(taskVal))
|
||||||
|
{
|
||||||
|
// i parametri me li aspetto come stringa composta paramName|paramvalue
|
||||||
|
if (item.Value.Contains("|"))
|
||||||
|
{
|
||||||
|
string[] paramsJob = item.Value.Split('|');
|
||||||
|
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = "SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
lgInfo($"executeTask | task name: {tName} | task value: {taskVal}");
|
||||||
|
// aggiungo task!
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
if (!string.IsNullOrEmpty(memAddrWrite))
|
||||||
|
{
|
||||||
|
// scrivo!
|
||||||
|
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
}
|
||||||
|
if (taskOk)
|
||||||
|
{
|
||||||
|
// aggiorno valore memoria... SE presente
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
memMap.mMapWrite[item.Key].value = item.Value;
|
||||||
|
lgInfo($"Aggiornato valore in mMapWrite per {item.Key}");
|
||||||
|
}
|
||||||
|
lgInfo($"Eseguita con successo S7WriteBB per executeTasks: {item.Key} | {item.Value}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return taskDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected bool EmergencyBypass = false;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO STANDARD
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
* B4: manuale
|
||||||
|
* B5: MagOutPieno
|
||||||
|
* B6: MagInVuoto
|
||||||
|
* B7: Emergenza armata (1)
|
||||||
|
*
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
byte mainData = RawInput[0];
|
||||||
|
|
||||||
|
// copio il primo byte
|
||||||
|
int byteSignals = RawInput[0];
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
if (currPLC.IsConnected)
|
||||||
|
{
|
||||||
|
byteSignals |= (1 << 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
byteSignals &= ~(1 << 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// se bypass emergenza attivo --> forzo a ARMED...
|
||||||
|
if (EmergencyBypass)
|
||||||
|
{
|
||||||
|
byteSignals |= (1 << 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
// salvo!
|
||||||
|
B_input = byteSignals;
|
||||||
|
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo($"Trasformazione dati: B0: {mainData} --> B_input: {B_input}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,343 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Controllo Siemens specifico x impianti SAET
|
||||||
|
/// </summary>
|
||||||
|
public class SiemensSaet : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS SAET (impianti ad induzione in VALVITAL)
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1500
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB1275: primi 92 byte lettura, poi 56 byte scrittura, vedere doc allegato
|
||||||
|
* G:\Drive condivisi\30_Clienti\Valvital\Comunicazione PLC\SAET (forno e tempra)
|
||||||
|
*
|
||||||
|
* Si intende tutto con DB1275.DBxx
|
||||||
|
*
|
||||||
|
* - parametri processo
|
||||||
|
* - DBD00: Watchdog INT SAET Alive ( 1-9999 )
|
||||||
|
*
|
||||||
|
* - DB60.DBD6: pressione camera filtrante (salvataggio del MAX ogni minuto) | var testVal = S7.Net.Types.Double.FromByteArray(memByteRead.Skip(0).Take(4).ToArray());
|
||||||
|
* - DB60.DBD10: pressione linea utenze (salvataggio del MAX ogni minuto)
|
||||||
|
* - DB60.DBD14: temperatura acqua pulita (salvataggio del MAX ogni minuto)
|
||||||
|
*
|
||||||
|
* - BIT di stato
|
||||||
|
* - DBX2.1: READY TO RUN in AUTOMATICO
|
||||||
|
* - DBX2.3: Macchina in LAVORAZIONE
|
||||||
|
* - DBX2.4: WARNING Differenza tra Part Code MES - Saet (blu)
|
||||||
|
* - DBX2.5: se 1 --> LAMPADA ROSSA (allarmi almeno 1 attivo)
|
||||||
|
*
|
||||||
|
* PartCounter DINT 4.0 Conteggio Parziale di pezzi "OK" prodotti dalla macchina
|
||||||
|
* NumberCode String [12] 8.0 Valore numerico associato alla ricetta di produzione attualmente utilizzata dalla macchina
|
||||||
|
* NewCode INT 22.0 "1= Avvenuta ricezione del segnale ""richiesta nuovo ordine di produzione (NEW CODE)""
|
||||||
|
* ricevuto dal server,impostabile su 1 solo quando la macchina NON è in produzione attiva"
|
||||||
|
* Potenza utilizzata ST.1 REAL 24 Potenza utilizzata dalla stazione di riscaldo 1 [kW]
|
||||||
|
* Potenza utilizzata ST.2 REAL 28 Potenza utilizzata dalla stazione di riscaldo 2 [kW]
|
||||||
|
* Potenza utilizzata ST.3 REAL 32 Potenza utilizzata dalla stazione di riscaldo 3 [kW]
|
||||||
|
* Potenza utilizzata ST.4 REAL 36 Potenza utilizzata dalla stazione di riscaldo 4 [kW]
|
||||||
|
* Lettura Pirometro ST.1 REAL 40 Lettura Pirometro della stazione di riscaldo 1 [°C]
|
||||||
|
* Lettura Pirometro ST.2 REAL 44 Lettura Pirometro della stazione di riscaldo 2 [°C]
|
||||||
|
* Lettura Pirometro ST.3 REAL 48 Lettura Pirometro della stazione di riscaldo 3 [°C]
|
||||||
|
* Lettura Pirometro ST.4 REAL 52 Lettura Pirometro della stazione di riscaldo 4 [°C]
|
||||||
|
* Temperatura Acqua Raff Conv. ST.1 REAL 56 Temperarura Acqua di Raffreddamento Convertitore Stazione di Riscaldo 1 [°C]
|
||||||
|
* Temperatura Acqua Raff Conv. ST.2 REAL 60 Temperarura Acqua di Raffreddamento Convertitore Stazione di Riscaldo 2 [°C]
|
||||||
|
* Temperatura Acqua Raff Conv. ST.3 REAL 64 Temperarura Acqua di Raffreddamento Convertitore Stazione di Riscaldo 3 [°C]
|
||||||
|
* Temperatura Acqua Raff Conv. ST.4 REAL 68 Temperarura Acqua di Raffreddamento Convertitore Stazione di Riscaldo 4 [°C]
|
||||||
|
* Part_Status ST.1 INT 72 Stato Pezzo Stazione di Riscaldo 1 (0=Assente 1=Grezzo 10=OK 11=NOK)
|
||||||
|
* Part_Status ST.2 INT 74 Stato Pezzo Stazione di Riscaldo 2 (0=Assente 1=Grezzo 10=OK 11=NOK)
|
||||||
|
* Part_Status ST.3 INT 76 Stato Pezzo Stazione di Riscaldo 3 (0=Assente 1=Grezzo 10=OK 11=NOK)
|
||||||
|
* Part_Status ST.4 INT 78 Stato Pezzo Stazione di Riscaldo 4 (0=Assente 1=Grezzo 10=OK 11=NOK)
|
||||||
|
* Reserve_12 REAL 80 Riserva
|
||||||
|
* Reserve_13 REAL 84 Riserva
|
||||||
|
* Reserve_14 REAL 88 Riserva
|
||||||
|
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensSaet(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione SAET");
|
||||||
|
lastPLCWatchDog = DateTime.Now.AddMinutes(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processo i task richiesti e li elimino dalla coda 1:1
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task2exe"></param>
|
||||||
|
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
|
||||||
|
{
|
||||||
|
// Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti...
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
bool taskOk = false;
|
||||||
|
string taskVal = "";
|
||||||
|
// verifico non sia null
|
||||||
|
if (task2exe != null)
|
||||||
|
{
|
||||||
|
// inizio con 1 byte di default
|
||||||
|
byte[] MemBlock = new byte[1];
|
||||||
|
string memAddrWrite = "";
|
||||||
|
// cerco task specifici
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.nihil:
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
case taskType.forceSetPzCount:
|
||||||
|
case taskType.setProg:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setArt:
|
||||||
|
upsertKey(item.Key, item.Value);
|
||||||
|
MemBlock = new byte[34];
|
||||||
|
saveStringOnMemBlock(ref MemBlock, "setArt", 0, 32);
|
||||||
|
memAddrWrite = "DB1275.DBB96";
|
||||||
|
taskVal = item.Value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setComm:
|
||||||
|
upsertKey(item.Key, item.Value);
|
||||||
|
MemBlock = new byte[14];
|
||||||
|
saveStringOnMemBlock(ref MemBlock, "setComm", 0, 12);
|
||||||
|
memAddrWrite = "DB1275.DBB130";
|
||||||
|
taskVal = item.Value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setPzComm:
|
||||||
|
// imposto i valori...
|
||||||
|
MemBlock = new byte[4];
|
||||||
|
int numPz = 0;
|
||||||
|
int.TryParse(item.Value, out numPz);
|
||||||
|
MemBlock = S7.Net.Types.DInt.ToByteArray(numPz);
|
||||||
|
memAddrWrite = "DB1275.DBB144";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setParameter:
|
||||||
|
// richiedo da URL i parametri WRITE da popolare
|
||||||
|
lgInfo("Chiamata processMemWriteRequests");
|
||||||
|
taskVal = processMemWriteRequests();
|
||||||
|
// se restituiscce "" faccio altra prova...
|
||||||
|
if (string.IsNullOrEmpty(taskVal))
|
||||||
|
{
|
||||||
|
// i parametri me li aspetto come stringa composta paramName|paramvalue
|
||||||
|
if (item.Value.Contains("|"))
|
||||||
|
{
|
||||||
|
string[] paramsJob = item.Value.Split('|');
|
||||||
|
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.sendWatchDogMes2Plc:
|
||||||
|
MemBlock = new byte[2];
|
||||||
|
MemBlock[1] = (byte)counterMes2Plc;
|
||||||
|
MemBlock[0] = (byte)(counterMes2Plc >> 8);
|
||||||
|
memAddrWrite = "DB1275.DBB92";
|
||||||
|
taskVal = $"VALUE DB1275.92 --> {counterMes2Plc}";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.endProd:
|
||||||
|
case taskType.startSetup:
|
||||||
|
// processo scrittura BIT x richiesta nuovo ordine a INIZIO setup --> è DINT!
|
||||||
|
MemBlock = new byte[2];
|
||||||
|
MemBlock[0] = (byte)1;
|
||||||
|
MemBlock[1] = (byte)1;
|
||||||
|
memAddrWrite = "DB1275.DBB94";
|
||||||
|
lgInfo($"Chiamata startSetup | memAddrWrite: {memAddrWrite} | MemBlock: {MemBlock}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.fixStopSetup:
|
||||||
|
case taskType.stopSetup:
|
||||||
|
// processo scrittura BIT x richiesta nuovo ordine a FINE setup
|
||||||
|
MemBlock = new byte[2];
|
||||||
|
MemBlock[0] = (byte)0;
|
||||||
|
MemBlock[1] = (byte)0;
|
||||||
|
memAddrWrite = "DB1275.DBB94";
|
||||||
|
lgInfo($"Chiamata stopSetup | memAddrWrite: {memAddrWrite} | MemBlock: {MemBlock}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = "SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// verifico se posso aggiornare valori in memoria...
|
||||||
|
if (memMap != null && memMap.mMapWrite != null)
|
||||||
|
{
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
dataConf currMem = memMap.mMapWrite[item.Key];
|
||||||
|
string addr = currMem.memAddr;
|
||||||
|
taskVal = $"SET task: {item.Key} --> {item.Value} | mem: {currMem.memAddr} - {currMem.size} byte";
|
||||||
|
// salvo il nuovo valore nella memoria... così prox invio lo trasmetterà
|
||||||
|
memMap.mMapWrite[item.Key].value = item.Value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"NO DATA MEM, SET task: {item.Key} --> {item.Value}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"NO MemMap found, SET task: {item.Key} --> {item.Value}";
|
||||||
|
}
|
||||||
|
// aggiungo task!
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
// scrivo comunque!
|
||||||
|
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
if (!taskOk)
|
||||||
|
{
|
||||||
|
lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return taskDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua processing del recupero delle OVERRIDE (spindle, feedrate, rapid)
|
||||||
|
/// </summary>
|
||||||
|
public override void processOverride()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void processWhatchDog()
|
||||||
|
{
|
||||||
|
// scrivo 1 volta ogni n secondi il contatore incrementale su area apposita
|
||||||
|
DateTime adesso = DateTime.Now;
|
||||||
|
if (adesso.Subtract(lastPLCWatchDog).TotalSeconds > watchDogPeriod)
|
||||||
|
{
|
||||||
|
// incremento
|
||||||
|
counterMes2Plc++;
|
||||||
|
// se > 9999 --> 0
|
||||||
|
if (counterMes2Plc > 9999) counterMes2Plc = 0;
|
||||||
|
// salvo su DB
|
||||||
|
Dictionary<string, string> task2exe = new Dictionary<string, string>();
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
task2exe.Add("sendWatchDogMes2Plc", counterMes2Plc.ToString());
|
||||||
|
taskDone = executeTasks(task2exe);
|
||||||
|
// salvo watchdog PLC
|
||||||
|
lastPLCWatchDog = adesso;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected int counterMes2Plc = 0;
|
||||||
|
protected int counterPlc2Mes = 0;
|
||||||
|
protected int counterPlc2MesWrote = 0;
|
||||||
|
protected DateTime lastPLCWatchDog;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO STANDARD
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
* B4: manuale
|
||||||
|
* B5: anomalia
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* - BIT di stato
|
||||||
|
* - DBX2.0: macchina accesa
|
||||||
|
* - DBX2.1: CICLO AUTO = NON HO ANOMALIE/ALLARMI (0 --> allarme)
|
||||||
|
* - DBX2.2: contapezzi
|
||||||
|
* - DBX2.3: MACCHINA IN CICLO AUTO = LAVORA
|
||||||
|
* - DBX2.4: ERRORE tra part code MES/SAET (blu)
|
||||||
|
* - DBX2.5: Anomalia presente (rosso)
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
byte mainData = RawInput[2];
|
||||||
|
|
||||||
|
int byteSignals = 0;
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
if (currPLC.IsConnected)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 0);
|
||||||
|
}
|
||||||
|
if ((mainData & (1 << 3)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// controllo il bit ALLARME
|
||||||
|
if ((mainData & (1 << 1)) == 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// controllo il bit ANOMALIA
|
||||||
|
if ((mainData & (1 << 5)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// considero NON auto come manuale...
|
||||||
|
if ((mainData & (1 << 3)) == 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
// salvo!
|
||||||
|
B_input = byteSignals;
|
||||||
|
|
||||||
|
// processo il watchdog!
|
||||||
|
counterPlc2Mes = S7.Net.Types.Int.FromByteArray(RawInput.Skip(0).Take(2).ToArray());
|
||||||
|
// ogni 60 registro...
|
||||||
|
if (Math.Abs(counterPlc2Mes - counterPlc2MesWrote) > 60)
|
||||||
|
{
|
||||||
|
lgInfo($"WatchDog da PLC: {counterPlc2Mes}");
|
||||||
|
counterPlc2MesWrote = counterPlc2Mes;
|
||||||
|
}
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo($"Trasformazione dati: RawInput:{RawInput[3]} --> B_input: {B_input}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,270 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Controllo Siemens specifico x impianti Simec
|
||||||
|
/// </summary>
|
||||||
|
public class SiemensSimec : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS SIMEC
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1500
|
||||||
|
*
|
||||||
|
* STRUTTURA MEMORIA DB29: (lettura) 10byte,
|
||||||
|
* G:\Drive condivisi\30_Clienti\Valvital\Comunicazione PLC\26 - SIMEC Taglio\
|
||||||
|
*
|
||||||
|
* Si intende lettura con DB29.DBxx, scrittura DB30.DBxx
|
||||||
|
*
|
||||||
|
* DB30 blocco dati scritto dal MES
|
||||||
|
* CodArt Array[0..19] of Char DBB0..19
|
||||||
|
* CodComm Array[0..9] of Char DBB20..29
|
||||||
|
* CodProgr Array[0..9] of Char DBB30..39
|
||||||
|
*
|
||||||
|
* DB29 blocco dati letto dal MES Byte Num
|
||||||
|
* CicloOn Bool 0 0
|
||||||
|
* MacchOn Bool 0 1
|
||||||
|
* ManualeOn Bool 0 2
|
||||||
|
* AllarmiOn Bool 0 3
|
||||||
|
* EmergenzaOn Bool 0 4
|
||||||
|
* EmergenzaPremuta Bool 0 5
|
||||||
|
* b06 Bool 0 6
|
||||||
|
* b07 Bool 0 7
|
||||||
|
* b10 Bool 1 0
|
||||||
|
* b11 Bool 1 1
|
||||||
|
* b12 Bool 1 2
|
||||||
|
* b13 Bool 1 3
|
||||||
|
* b14 Bool 1 4
|
||||||
|
* b15 Bool 1 5
|
||||||
|
* b16 Bool 1 6
|
||||||
|
* b17 Bool 1 7
|
||||||
|
* ContapezziAssoluto DInt 2
|
||||||
|
* Comtapezzi parziale DInt 6
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe base con i metodi x Siemens
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensSimec(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
lgInfo("NEW IOB SIEMENS versione SIMEC");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processo i task richiesti e li elimino dalla coda 1:1
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task2exe"></param>
|
||||||
|
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
|
||||||
|
{
|
||||||
|
// Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti...
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
bool writeDone = false;
|
||||||
|
bool taskOk = false;
|
||||||
|
string taskVal = "";
|
||||||
|
// inizio con 1 byte di default
|
||||||
|
byte[] MemBlock = new byte[1];
|
||||||
|
string memAddrWrite = "";
|
||||||
|
if (task2exe != null)
|
||||||
|
{
|
||||||
|
// cerco task specifici
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.nihil:
|
||||||
|
case taskType.fixStopSetup:
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
case taskType.forceSetPzCount:
|
||||||
|
case taskType.setProg:
|
||||||
|
case taskType.sendWatchDogMes2Plc:
|
||||||
|
case taskType.startSetup:
|
||||||
|
case taskType.stopSetup:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
lgInfo(taskVal);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setPzComm:
|
||||||
|
case taskType.setArt:
|
||||||
|
case taskType.setComm:
|
||||||
|
upsertKey(item.Key, item.Value);
|
||||||
|
int byteSize = 0;
|
||||||
|
// verifico se posso aggiornare valori in memoria...
|
||||||
|
if (memMap != null && memMap.mMapWrite != null)
|
||||||
|
{
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
// recupero dati da memMap... altrimenti NULLA
|
||||||
|
if (memMap.mMapWrite.ContainsKey(item.Key))
|
||||||
|
{
|
||||||
|
dataConf currMem = memMap.mMapWrite[item.Key];
|
||||||
|
byteSize = currMem.size;
|
||||||
|
memAddrWrite = currMem.memAddr;
|
||||||
|
MemBlock = new byte[byteSize];
|
||||||
|
if (currMem.tipoMem == plcDataType.String)
|
||||||
|
{
|
||||||
|
saveStringOnMemBlock(ref MemBlock, item.Key, 0, byteSize);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.DInt)
|
||||||
|
{
|
||||||
|
int valDInt = 0;
|
||||||
|
int.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.DInt.ToByteArray(valDInt);
|
||||||
|
}
|
||||||
|
else if (currMem.tipoMem == plcDataType.Int)
|
||||||
|
{
|
||||||
|
short valDInt = 0;
|
||||||
|
short.TryParse(item.Value, out valDInt);
|
||||||
|
MemBlock = S7.Net.Types.Int.ToByteArray(valDInt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskVal = item.Value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"NO DATA MEM, SET task: {item.Key} --> {item.Value}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"NO MemMap found, SET task: {item.Key} --> {item.Value}";
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrEmpty(memAddrWrite))
|
||||||
|
{
|
||||||
|
// scrivo!
|
||||||
|
writeDone = true;
|
||||||
|
taskOk = S7WriteBB(ref MemBlock, memAddrWrite);
|
||||||
|
}
|
||||||
|
// se restituiscce "" faccio altra prova...
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.setParameter:
|
||||||
|
// richiedo da URL i parametri WRITE da popolare
|
||||||
|
lgInfo("Chiamata processMemWriteRequests");
|
||||||
|
taskVal = processMemWriteRequests();
|
||||||
|
if (string.IsNullOrEmpty(taskVal))
|
||||||
|
{
|
||||||
|
// i parametri me li aspetto come stringa composta paramName|paramvalue
|
||||||
|
if (item.Value.Contains("|"))
|
||||||
|
{
|
||||||
|
string[] paramsJob = item.Value.Split('|');
|
||||||
|
taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = "SKIPPED | NO EXEC";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// aggiungo task!
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
if (!taskOk && writeDone)
|
||||||
|
{
|
||||||
|
lgError($"Errore in S7WriteBB durante executeTasks: {item.Key} | {item.Value} | taskOk {taskOk} | writeDone {writeDone}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return taskDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
|
||||||
|
/* -----------------------------------------------------
|
||||||
|
* bitmap MAPO STANDARD
|
||||||
|
* B0: POWER_ON
|
||||||
|
* B1: RUN
|
||||||
|
* B2: pzCount
|
||||||
|
* B3: allarme
|
||||||
|
* B4: manuale
|
||||||
|
* B5: emergenza (1=attiva/premuta, 0=armed)
|
||||||
|
*
|
||||||
|
* - BIT di stato
|
||||||
|
* DB29 blocco dati letto dal MES Byte Num
|
||||||
|
* CicloOn Bool 0 0
|
||||||
|
* MacchOn Bool 0 1
|
||||||
|
* ManualeOn Bool 0 2
|
||||||
|
* AllarmiOn Bool 0 3
|
||||||
|
* EmergenzaOn Bool 0 4
|
||||||
|
* EmergenzaPremuta Bool 0 5
|
||||||
|
* ContapezziAssoluto DInt 2
|
||||||
|
* Comtapezzi parziale DInt 6
|
||||||
|
*
|
||||||
|
----------------------------------------------------- */
|
||||||
|
|
||||||
|
byte mainData = RawInput[0];
|
||||||
|
|
||||||
|
int byteSignals = 0;
|
||||||
|
// bit 0 (poweron) imposto a 1 SE connected...
|
||||||
|
if (currPLC.IsConnected)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// lavora --> bit0 e bit1: cicloOn AND macchOn
|
||||||
|
if ((mainData & (1 << 0)) != 0 && (mainData & (1 << 1)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// controllo il bit ALARM
|
||||||
|
if ((mainData & (1 << 3)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 3);
|
||||||
|
}
|
||||||
|
// controllo il bit emergenza dello status
|
||||||
|
if ((mainData & (1 << 5)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check MANUALE ...
|
||||||
|
if ((mainData & (1 << 2)) != 0)
|
||||||
|
{
|
||||||
|
byteSignals += (1 << 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
// salvo!
|
||||||
|
B_input = byteSignals;
|
||||||
|
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo($"Trasformazione dati: RawInput:{RawInput[0]} --> B_input: {B_input}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,551 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using MapoSDK;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.IobSiemens
|
||||||
|
{
|
||||||
|
public class SiemensTorri : Siemens
|
||||||
|
{
|
||||||
|
/* --------------------------------------------------------------------------------
|
||||||
|
* Controlli SIEMENS TORRI
|
||||||
|
* - basasto su SIEMENS
|
||||||
|
* - S7 vers 1200
|
||||||
|
*
|
||||||
|
* mod: 2019.01.19: aggiunta gestione segnale test/accensione/spegnimento (DB700.B1.4) --> mod StateMachine!
|
||||||
|
* mod: 2019.04.06: aggiunta indicazione (IOB--> PLC) di stato setup su DB701.B0.4
|
||||||
|
* mod: 2024.12.05: gestione allarmi da file ext come base Siemens e opzione ENABLE_ALARM_LEGACY
|
||||||
|
* -------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// estende l'init della classe base con i metodi x Siemens specifici x Torri
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="caller"></param>
|
||||||
|
/// <param name="adpConf"></param>
|
||||||
|
public SiemensTorri(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
|
||||||
|
{
|
||||||
|
// gestione restart OpcUa client...
|
||||||
|
if (!string.IsNullOrEmpty(getOptPar("ENABLE_ALARM_LEGACY")))
|
||||||
|
{
|
||||||
|
bool.TryParse(getOptPar("ENABLE_ALARM_LEGACY"), out enableAlarmLegacy);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
lgInfo("NEW IOB SIEMENS versione TORRI avviato | vers 2024");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processo i task richiesti e li elimino dalla coda 1:1
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task2exe"></param>
|
||||||
|
public override Dictionary<string, string> executeTasks(Dictionary<string, string> task2exe)
|
||||||
|
{
|
||||||
|
// Verificare il protocollo: dovrebeb togliere SOLO i task eseguiti...
|
||||||
|
Dictionary<string, string> taskDone = new Dictionary<string, string>();
|
||||||
|
bool taskOk = false;
|
||||||
|
string taskVal = "";
|
||||||
|
// inizio con 1 byte VUOTO
|
||||||
|
byte[] MemBlock = new byte[1];
|
||||||
|
if (task2exe != null)
|
||||||
|
{
|
||||||
|
// cerco task specifici: se ho startSetup --> imposto bit DBB701.DBB0.4
|
||||||
|
foreach (var item in task2exe)
|
||||||
|
{
|
||||||
|
taskOk = false;
|
||||||
|
taskVal = "";
|
||||||
|
// converto richiesta in enum...
|
||||||
|
taskType tName = taskType.nihil;
|
||||||
|
Enum.TryParse(item.Key, out tName);
|
||||||
|
// controllo sulla KEY
|
||||||
|
switch (tName)
|
||||||
|
{
|
||||||
|
case taskType.nihil:
|
||||||
|
case taskType.forceResetPzCount:
|
||||||
|
case taskType.forceSetPzCount:
|
||||||
|
case taskType.setArt:
|
||||||
|
case taskType.setComm:
|
||||||
|
case taskType.setProg:
|
||||||
|
case taskType.sendWatchDogMes2Plc:
|
||||||
|
taskVal = $"taskReq: {tName} | key: {item.Key} | val: {item.Value} | SKIPPED | NO EXEC";
|
||||||
|
lgInfo($"Chiamata senza processing: taskOk: {taskOk} | taskVal: {taskVal}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.fixStopSetup:
|
||||||
|
MemBlock[0] = 0;
|
||||||
|
taskVal = "VALUE DB701.0.4 --> 0";
|
||||||
|
lgInfo($"Chiamata fixStopSetup: taskOk: {taskOk} | taskVal: {taskVal}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.startSetup:
|
||||||
|
MemBlock[0] += (1 << 4);
|
||||||
|
taskVal = "VALUE DB701.0.4 --> 1";
|
||||||
|
lgInfo($"Chiamata startSetup: taskOk: {taskOk} | taskVal: {taskVal}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case taskType.stopSetup:
|
||||||
|
MemBlock[0] = 0;
|
||||||
|
taskVal = "VALUE DB701.0.4 --> 0";
|
||||||
|
lgInfo($"Chiamata stopSetup: taskOk: {taskOk} | taskVal: {taskVal}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
taskVal = "SKIPPED | NO EXEC";
|
||||||
|
lgInfo($"Chiamata default senza processing: taskOk: {taskOk} | taskVal: {taskVal}");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
taskDone.Add(item.Key, taskVal);
|
||||||
|
}
|
||||||
|
// scrivo comunque!
|
||||||
|
bool fatto = S7WriteBB(ref MemBlock);
|
||||||
|
}
|
||||||
|
return taskDone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupera ULTIMO allarme...
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override Dictionary<string, string> getCncAlarms()
|
||||||
|
{
|
||||||
|
// parto da ultimo vettore allarmi rilevato
|
||||||
|
Dictionary<string, string> outVal = lastReadAlarms;
|
||||||
|
// se ho altro --> accodo
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string almMsg = string.Format("{0} | {1}", currPLC.LastErrorCode.ToString(), currPLC.LastErrorString);
|
||||||
|
outVal.Add("CNC_ALARM", almMsg);
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
lgError(exc, "Errore in getCncAlarms");
|
||||||
|
}
|
||||||
|
// resetto vettore allarmi
|
||||||
|
lastReadAlarms = new Dictionary<string, string>();
|
||||||
|
return outVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupero dati dinamici...
|
||||||
|
/// </summary>
|
||||||
|
public override Dictionary<string, string> getDynData()
|
||||||
|
{
|
||||||
|
Dictionary<string, string> outVal = new Dictionary<string, string>();
|
||||||
|
#if false
|
||||||
|
inizio = DateTime.Now;
|
||||||
|
EgwProxy.MultiCncLib.Focas1.ODBDY2_1 answ = FANUC_ref.getAllDynData();
|
||||||
|
if (utils.CRB("recTime")) TimingData.addResult(string.Format("PROC-DYN-DATA"), DateTime.Now.Subtract(inizio).Ticks);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string actf = answ.actf.ToString();
|
||||||
|
string acts = answ.acts.ToString();
|
||||||
|
//string numAlarm = answ.alarm.ToString();
|
||||||
|
// preparo i singoli valori dell'array...
|
||||||
|
//outVal.Add("DYNDATA", string.Format("{0}#{1}#{2}", actf, acts, numAlarm));
|
||||||
|
outVal.Add("DYNDATA", string.Format("FEED {0}#SPEED_RPM {1}", actf, acts));
|
||||||
|
if (utils.CRB("SendFeedSpeed"))
|
||||||
|
{
|
||||||
|
outVal.Add("FEED", actf);
|
||||||
|
outVal.Add("SPEED_RPM", acts);
|
||||||
|
//outVal.Add("NUM_ALARM", numAlarm);
|
||||||
|
}
|
||||||
|
if (utils.CRB("SendAxPos"))
|
||||||
|
{
|
||||||
|
// salvo le posizioni...
|
||||||
|
EgwProxy.MultiCncLib.Focas1.FAXIS posAx = answ.pos;
|
||||||
|
int[] currPosAbs = posAx.absolute;
|
||||||
|
int i = 0;
|
||||||
|
foreach (var item in currPosAbs)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
outVal.Add(string.Format("POS_{0:00}", i), item.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
lgError(exc, "Errore in getDynData");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return outVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupero dati override in formato dictionary
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override Dictionary<string, string> getOverrides()
|
||||||
|
{
|
||||||
|
Dictionary<string, string> outVal = new Dictionary<string, string>();
|
||||||
|
uint valDW = 0;
|
||||||
|
// !!!FARE!!! recuperare da conf memoria, ora HARD CODED
|
||||||
|
outVal.Add("FEED_OVER", RawInput[19].ToString());
|
||||||
|
outVal.Add("RAPID_OVER", RawInput[20].ToString());
|
||||||
|
outVal.Add("CURR_MODE", decodeCurrMode(RawInput[21]));
|
||||||
|
// recupero RPM pezzo/mola !!!FARE!!! cambio nome da config, qui sono 01:conduttrice e
|
||||||
|
// 02:operatrice (3013), mentre sono pezzo/mola nella V100
|
||||||
|
valDW = S7.Net.Types.DWord.FromByteArray(RawInput.Skip(24).Take(4).ToArray());
|
||||||
|
outVal.Add("RPM_01", valDW.ToString());
|
||||||
|
valDW = S7.Net.Types.DWord.FromByteArray(RawInput.Skip(28).Take(4).ToArray());
|
||||||
|
outVal.Add("RPM_02", valDW.ToString());
|
||||||
|
return outVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupero programma in lavorazione
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override string getPrgName()
|
||||||
|
{
|
||||||
|
string prgName = "";
|
||||||
|
#if false
|
||||||
|
// recupero NUOVO prgName...
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// recupero nome programma MAIN
|
||||||
|
prgName = utils.purgedChar2String(FANUC_ref.getPrgNameMain());
|
||||||
|
// trimmo path del programma, ovvero "CNCMEMUSERPATH1"
|
||||||
|
prgName = prgName.Replace(utils.CRS("basePrgMemPath"), "");
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
lgError(string.Format("Eccezione in recupero PRG NAME MAIN:{0}{1}", Environment.NewLine, exc));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return prgName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupero programma in lavorazione come Dictionary FANUC...
|
||||||
|
/// - SYSINFO: (prima KEY globale) TUTTI i valori separati da # (x fare check modifica)
|
||||||
|
/// - altre stringhe: ogni singolo parametro / valore
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override Dictionary<string, string> getSysInfo()
|
||||||
|
{
|
||||||
|
Dictionary<string, string> outVal = new Dictionary<string, string>();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
outVal.Add("CPU", currPLC.CPU.ToString());
|
||||||
|
outVal.Add("MAX_PDU", currPLC.MaxPDUSize.ToString());
|
||||||
|
outVal.Add("RACK", currPLC.Rack.ToString());
|
||||||
|
outVal.Add("SLOT", currPLC.Slot.ToString());
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
lgError(exc, "Errore in getSysInfo");
|
||||||
|
}
|
||||||
|
return outVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Esegue processing MODE (e nel contempo recupera altri dati dell'area G)
|
||||||
|
/// </summary>
|
||||||
|
public override void processMode()
|
||||||
|
{
|
||||||
|
if (utils.CRB("enableMode"))
|
||||||
|
{
|
||||||
|
#if false
|
||||||
|
try
|
||||||
|
{
|
||||||
|
inizio = DateTime.Now;
|
||||||
|
// leggo tutto da 0 a 43...
|
||||||
|
int memIndex = 0;
|
||||||
|
FanucMemRW(R, FANUC.MemType.G, memIndex, ref MemBlockG);
|
||||||
|
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-G-AREA", MemBlockG.Length), DateTime.Now.Subtract(inizio).Ticks);
|
||||||
|
// verifico modo con valore corrente, se cambia aggiorno...
|
||||||
|
CNC_MODE newMode = decodeG43(MemBlockG[43]);
|
||||||
|
if (newMode != currMode)
|
||||||
|
{
|
||||||
|
// aggiorno!
|
||||||
|
currMode = newMode;
|
||||||
|
// conversione NUM MODE in descrizione da ENUM
|
||||||
|
string descrMode = Enum.GetName(typeof(CNC_MODE), currMode);
|
||||||
|
// accodo x invio
|
||||||
|
string sVal = string.Format("[CNC_MODE]{0}", descrMode);
|
||||||
|
// chiamo accodamento...
|
||||||
|
accodaFLog(sVal, qEncodeFLog("CNC_MODE", descrMode));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
lgError(exc, "Errore in process Mode G43");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Override salvataggio valori in memoria...
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tipo">tipo di DUMP</param>
|
||||||
|
public override void saveMemDump(dumpType tipo)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected Dictionary<string, string> lastReadAlarms = new Dictionary<string, string>();
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Decodifica il resto dell'area TORRI x i dati accessori (allarmi, ...)
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeOtherData()
|
||||||
|
{
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua decodifica aree memoria alla bitmap usata x MAPO
|
||||||
|
/// </summary>
|
||||||
|
protected override void decodeToBaseBitmap()
|
||||||
|
{
|
||||||
|
// init a zero...
|
||||||
|
B_input = 0;
|
||||||
|
// TORRI: leggo i primi 8 bit hard coded...
|
||||||
|
int byteSem = RawInput[0];
|
||||||
|
|
||||||
|
// azzero powerOn...
|
||||||
|
byteSem &= ~(1 << 0);
|
||||||
|
// bit 0 (powerOn) imposto a 1 SE connected...
|
||||||
|
if (currPLC.IsConnected)
|
||||||
|
{
|
||||||
|
byteSem += (1 << 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// azzero i bit NON gestiti (2-5-6-7)
|
||||||
|
byteSem &= ~(1 << 2);
|
||||||
|
byteSem &= ~(1 << 5);
|
||||||
|
byteSem &= ~(1 << 6);
|
||||||
|
byteSem &= ~(1 << 7);
|
||||||
|
// leggo bit DB700.B1.4 e lo porto al bit 5 --> ciclo test/accensione/spegnimento
|
||||||
|
if ((RawInput[1] & (1 << 4)) != 0) //se RawInput[1] & 16-- > 5° bit-- > TEST
|
||||||
|
{
|
||||||
|
byteSem += (1 << 5);
|
||||||
|
}
|
||||||
|
// salvo infine variabile bit x invio
|
||||||
|
B_input = byteSem;
|
||||||
|
|
||||||
|
// se ho il bit di allarme
|
||||||
|
if ((RawInput[0] & (1 << 3)) != 0)
|
||||||
|
{
|
||||||
|
checkAlarms();
|
||||||
|
}
|
||||||
|
|
||||||
|
// procedo SOLO SE è enabled IOB
|
||||||
|
if (IobOnline)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
currODL = utils.callUrl(urlGetCurrODL);
|
||||||
|
// solo SE HO un ODL...
|
||||||
|
if (string.IsNullOrEmpty(currODL) || currODL == "0")
|
||||||
|
{
|
||||||
|
if (periodicLog)
|
||||||
|
{
|
||||||
|
lgInfo($"SiemensTorri | Lettura ODL andata a vuoto: currODL: {currODL}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// se variato o scaduto timeout log...
|
||||||
|
if (periodicLog || (currIdxODL.ToString() != currODL))
|
||||||
|
{
|
||||||
|
lgInfo($"SiemensTorri | Lettura ODL, currODL: {currODL} --> currIdxODL prec: {currIdxODL}");
|
||||||
|
}
|
||||||
|
// provo a salvare nuovo ODL
|
||||||
|
int.TryParse(currODL, out currIdxODL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
if (DateTime.Now.Subtract(lastWarnODL).TotalSeconds > 15)
|
||||||
|
{
|
||||||
|
lgError(exc, $"Errore in fase di chiamata URL x ODL corrente | URL chiamato: {urlGetCurrODL}");
|
||||||
|
lastWarnODL = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// imposto currODL a vuoto!
|
||||||
|
currODL = "";
|
||||||
|
if (periodicLog)
|
||||||
|
{
|
||||||
|
lgInfo($"Fanuc | Lettura ODL non effettuata: IobOnline: {IobOnline} | currODL impostato a vuoto");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrEmpty(currODL) && currODL != "0")
|
||||||
|
{
|
||||||
|
// ora processo il contapezzi...
|
||||||
|
string retVal = "";
|
||||||
|
// controllo se è passato intervallo minimo tra 2 controlli/elaborazioni x
|
||||||
|
// distanziare invio e ridurre letture
|
||||||
|
if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay))
|
||||||
|
{
|
||||||
|
// Salvo il contapezzi della macchina
|
||||||
|
retVal = utils.callUrlNow(urlSetPzCountMAC + contapezziPLC.ToString());
|
||||||
|
// verifica se tutto OK, ovvero conferma i pezzi inviati
|
||||||
|
if (retVal != contapezziPLC.ToString())
|
||||||
|
{
|
||||||
|
// errore salvataggio contapezzi
|
||||||
|
lgInfo($"Errore salvataggio Contapezzi PLC SIEMENST-TORRI: {contapezziPLC} | contapezziIOB {contapezziIOB} | Valore tornato: {retVal}");
|
||||||
|
// rileggo il counter pezzi da server
|
||||||
|
pzCntReload(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// se sono differenti MOSTRO...
|
||||||
|
if (contapezziPLC != contapezziIOB)
|
||||||
|
{
|
||||||
|
// registro contapezzi
|
||||||
|
lgInfo($"Differenza Contapezzi: contapezziPLC: {contapezziPLC} | contapezziIOB: {contapezziIOB}");
|
||||||
|
}
|
||||||
|
if ((contapezziPLC > contapezziIOB))
|
||||||
|
{
|
||||||
|
// salvo nuovo contapezzi (incremento di 1...) + richiesta refresh conteggio
|
||||||
|
contapezziIOB++;
|
||||||
|
needRefreshPzCount = true;
|
||||||
|
// salvo in semaforo!
|
||||||
|
B_input += 1 << 2;
|
||||||
|
// registro contapezzi
|
||||||
|
lgInfo($"contapezziPLC SIEMENST-TORRI: {contapezziPLC} | contapezziIOB {contapezziIOB}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Salvo il contapezzi della macchina
|
||||||
|
retVal = utils.callUrlNow(urlSetPzCount + contapezziIOB.ToString());
|
||||||
|
// verifica se tutto OK, ovvero conferma i pezzi inviati
|
||||||
|
if (retVal != contapezziIOB.ToString())
|
||||||
|
{
|
||||||
|
// errore salvataggio contapezzi
|
||||||
|
lgInfo($"Errore salvataggio contapezziPLC SIEMENST-TORRI: {contapezziPLC} | contapezziIOB {contapezziIOB} | Valore tornato: {retVal}");
|
||||||
|
// rileggo il counter pezzi da server
|
||||||
|
pzCntReload(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// verifico se variato contapezzi... e se passato ritardo minimo...
|
||||||
|
if ((contapezziPLC - contapezziIOB) > minSendPzCountBlock)
|
||||||
|
{
|
||||||
|
trySendPzCountBlock("");
|
||||||
|
}
|
||||||
|
|
||||||
|
// invio a server contapezzi (aggiornato)
|
||||||
|
retVal = utils.callUrlNow(urlSetPzCount + contapezziIOB.ToString());
|
||||||
|
// verifica se tutto OK
|
||||||
|
if (retVal != contapezziIOB.ToString())
|
||||||
|
{
|
||||||
|
// errore salvataggio contapezzi
|
||||||
|
lgInfo($"Errore salvataggio Contapezzi SIEMENS-TORRI: contapezziPLC {contapezziPLC} | contapezziIOB {contapezziIOB} | risposta: {retVal}");
|
||||||
|
// rileggo il counter pezzi da server
|
||||||
|
pzCntReload(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// resetto timer...
|
||||||
|
lastPzCountSend = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (DateTime.Now >= lastPzCountSend.AddMilliseconds(pzCountDelay))
|
||||||
|
{
|
||||||
|
lgInfo($"Attenzione: mancanza ODL non procedo con gestione contapezzi. contapezziPLC SIEMENST-TORRI: {contapezziPLC} | contapezziIOB: {contapezziIOB}");
|
||||||
|
// resetto timer...
|
||||||
|
lastPzCountSend = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// log opzionale!
|
||||||
|
if (verboseLog)
|
||||||
|
{
|
||||||
|
lgInfo("Trasformazione B_input: {B_input}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// gestione allarmi classica torri come eventi FluxLog
|
||||||
|
/// </summary>
|
||||||
|
private bool enableAlarmLegacy = false;
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Private Methods
|
||||||
|
|
||||||
|
private int checkAlarmBank(string memAddrAlarms)
|
||||||
|
{
|
||||||
|
int trovato = 0;
|
||||||
|
uint valDW = 0;
|
||||||
|
var MemBlockPZ = new byte[4];
|
||||||
|
bool fatto = S7ReadBB(ref MemBlockPZ, memAddrAlarms, 4);
|
||||||
|
if (fatto)
|
||||||
|
{
|
||||||
|
valDW = S7.Net.Types.DWord.FromByteArray(MemBlockPZ.ToArray());
|
||||||
|
// se <> 0 --> log e accodo a dynData
|
||||||
|
if (valDW != 0)
|
||||||
|
{
|
||||||
|
string key = $"MTH_ALARM_{memAddrAlarms}_{valDW}";
|
||||||
|
var biteVal = baseUtils.binaryForm(valDW);
|
||||||
|
lgInfo($"Stato allarmi rilevati: {key} | {valDW} | {biteVal}");
|
||||||
|
// accodo a dictionary
|
||||||
|
string almMsg = $"{DateTime.Now} | val {valDW} | {biteVal}";
|
||||||
|
// se non ci fosse aggiungo
|
||||||
|
if (!lastReadAlarms.ContainsKey(key))
|
||||||
|
{
|
||||||
|
lastReadAlarms.Add(key, almMsg);
|
||||||
|
}
|
||||||
|
trovato++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return trovato;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkAlarms()
|
||||||
|
{
|
||||||
|
int trovati = 0;
|
||||||
|
// SE ho la gestione legacy allarmi sennò nulla...
|
||||||
|
if (enableAlarmLegacy)
|
||||||
|
{
|
||||||
|
// test gestione da conf alarmMap...
|
||||||
|
if (alarmMaps != null && alarmMaps.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var item in alarmMaps)
|
||||||
|
{
|
||||||
|
// da rivedere procedura x usare metodi di gestione allarmi con check differenze + invio alarmLog...
|
||||||
|
trovati += checkAlarmBank(item.memAddr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// legacy... tolto!
|
||||||
|
#if false
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// leggo i banchi allarmi : cablato D700.DBDW2 --> D700 DBDW14, sono 4 banchi a 32 bit
|
||||||
|
// da verificare
|
||||||
|
|
||||||
|
// ciclo nei 4 banchi...
|
||||||
|
trovati += checkAlarmBank("DB700.DBDW2");
|
||||||
|
trovati += checkAlarmBank("DB700.DBDW6");
|
||||||
|
trovati += checkAlarmBank("DB700.DBDW10");
|
||||||
|
trovati += checkAlarmBank("DB700.DBDW14");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Private Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
using IOB_UT_NEXT;
|
||||||
|
using IOB_WIN_SIEMENS.Iob;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS
|
||||||
|
{
|
||||||
|
public class MainFormNext : IOB_WIN_FORM.MainForm
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Avvio MainForm
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="args"></param>
|
||||||
|
public MainFormNext(string[] args) : base(args)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Apre la finestra child con conf
|
||||||
|
/// </summary>
|
||||||
|
protected override void openChild(string IOB)
|
||||||
|
{
|
||||||
|
if (IOB == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(IOB));
|
||||||
|
}
|
||||||
|
|
||||||
|
AdapterFormNext child = new AdapterFormNext(IOB);
|
||||||
|
child.MdiParent = this;
|
||||||
|
child.Text = IOB;
|
||||||
|
child.Show();
|
||||||
|
child.Shown += Child_Shown;
|
||||||
|
child.FormClosed += Child_FormClosed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<?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">
|
||||||
|
|
||||||
|
<variable name="logDir" value="${basedir}/logs"/>
|
||||||
|
<targets>
|
||||||
|
<target xsi:type="File"
|
||||||
|
name="f_base"
|
||||||
|
fileName="${logDir}/${var:codIOB:default=0000}/${shortdate}.log"
|
||||||
|
layout="${longdate} [${uppercase:${level}}] ${logger:shortName=true} | ${message}"
|
||||||
|
archiveFileName="${logDir}/${var:codIOB:default=0000}/${shortdate}.{###}.log"
|
||||||
|
archiveNumbering="Sequence"
|
||||||
|
archiveAboveSize="10240000"
|
||||||
|
maxArchiveFiles="90"
|
||||||
|
enableArchiveFileCompression="false"
|
||||||
|
keepFileOpen="false"
|
||||||
|
/>
|
||||||
|
<target xsi:type="File"
|
||||||
|
name="f_error"
|
||||||
|
fileName="${logDir}/${var:codIOB:default=0000}/${shortdate}_err.log"
|
||||||
|
layout="${longdate} [${uppercase:${level}}] ${logger:shortName=true} | ${message}${newline}${exception:format=tostring}"
|
||||||
|
archiveFileName="${logDir}/${var:codIOB:default=0000}/${shortdate}_err.{###}.log"
|
||||||
|
archiveNumbering="Sequence"
|
||||||
|
archiveAboveSize="10240000"
|
||||||
|
maxArchiveFiles="90"
|
||||||
|
enableArchiveFileCompression="false"
|
||||||
|
keepFileOpen="false"
|
||||||
|
/>
|
||||||
|
</targets>
|
||||||
|
<rules>
|
||||||
|
<!-- Logging Levels (Trace, Debug, Info, Warn, Error, Fatal)-->
|
||||||
|
<logger name="*" minlevel="Trace" maxlevel="Warn" final="true" writeTo="f_base" />
|
||||||
|
<logger name="*" minlevel="Error" writeTo="f_error" />
|
||||||
|
</rules>
|
||||||
|
</nlog>
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS
|
||||||
|
{
|
||||||
|
internal static class Program
|
||||||
|
{
|
||||||
|
#region Private Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Punto di ingresso principale dell'applicazione.
|
||||||
|
/// <paramref name="args">Parametri di avvio</paramref>
|
||||||
|
/// </summary>
|
||||||
|
[STAThread]
|
||||||
|
private static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Application.EnableVisualStyles();
|
||||||
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
Application.Run(new MainFormNext(args));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Private Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("IOB-WIN-SIEMENS")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyProduct("IOB-WIN-SIEMENS")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("26d891ef-c115-420a-b240-05f099e13853")]
|
||||||
+71
@@ -0,0 +1,71 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.Properties
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources
|
||||||
|
{
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ((resourceMan == null))
|
||||||
|
{
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IOB_WIN_SIEMENS.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS.Properties
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
|
||||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
|
||||||
|
{
|
||||||
|
|
||||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
|
public static Settings Default
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||||
|
<Profiles>
|
||||||
|
<Profile Name="(Default)" />
|
||||||
|
</Profiles>
|
||||||
|
<Settings />
|
||||||
|
</SettingsFile>
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<body>
|
||||||
|
<h3>MAPO-IOB-WIN</h3>
|
||||||
|
<b>v: {{CURRENT-REL}}</b>
|
||||||
|
<br />
|
||||||
|
<i>Acquisitore MAPO-IOB per sistemi Windows</i>
|
||||||
|
<br />
|
||||||
|
Note di rilascio:
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<b>v.3.1.* → v.3.2.*</b>
|
||||||
|
<ul>
|
||||||
|
<li>Nuovi simulatori con gestione emergenza</li>
|
||||||
|
<li>Fix gestione invio dati Redis</li>
|
||||||
|
<li>Implementazione IOB Eurom63</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>v.2.6.* → v.3.0.*</b>
|
||||||
|
<ul>
|
||||||
|
<li>revisione sistema metodi invio in blocco</li>
|
||||||
|
<li>Gestione invio contapezzi in step > 1</li>
|
||||||
|
<li>Gestione eventi in blocco (indipendente e prioritario su EvBlock)</li>
|
||||||
|
<li>Gestione limite eventi memorizzabili</li>
|
||||||
|
<li>Integrazione REDIS</li>
|
||||||
|
<li>Integrazione IOB-MAN</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>v.2.5.* → v.2.6.*</b>
|
||||||
|
<ul>
|
||||||
|
<li>revisione sistema timeout Ping</li>
|
||||||
|
<li>Gestione AutoODL in prod generale (non solo SIM)</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>v.2.4.* → v.2.5.*</b>
|
||||||
|
<ul>
|
||||||
|
<li>Aggiunto adapter MTConnect</li>
|
||||||
|
<li>Ottimizzazione gestione SIEMENS</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>v.2.3.* → v.2.4.*</b>
|
||||||
|
<ul>
|
||||||
|
<li>inserita gestione conf json x Flog acquisiti</li>
|
||||||
|
<li>gestione invio Json blocchi dati FLog</li>
|
||||||
|
<li>ottimizzazioni varie adapter Siemens</li>
|
||||||
|
<li>ottimizzazione processo svuotamento code</li>
|
||||||
|
<li>riduzione interferenza e interblocchi in fase di PLC assente</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>Ultime modifiche:</b>
|
||||||
|
<ul>{{LAST-CHANGES}}</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>v.1.18.* → v.2.3.*</b>
|
||||||
|
<ul>
|
||||||
|
<li>inserimento WPS x acontrolli WebPage human readable</li>
|
||||||
|
<li>fix gestione task2exe</li>
|
||||||
|
<li>aggiunte varie versioni PLC siemens</li>
|
||||||
|
<li>aggiunto PLC WPS x generiche web pages</li>
|
||||||
|
<li>revisitazione LOG ODL e contapezzi</li>
|
||||||
|
<li>modifica pagina presentazione dati (master) x resize</li>
|
||||||
|
<li>Attivazione IOB SIMULATOR per test di carico (sostituito type DEMO)</li>
|
||||||
|
<li>Aggiunto simulatore macchine MULTI pallet</li>
|
||||||
|
<li>Ottimizzazione simulatore</li>
|
||||||
|
<li>Ottimizzazioni PLC Siemens x riavvio post disconnessione (es spegnimento notturno)</li>
|
||||||
|
<li>Ottimizzazione processo chiusura in update applicazione</li>
|
||||||
|
<li>Aggiunta simulazione spegnimento con WU/CD</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>v.1.11.* → v.1.18.*</b>
|
||||||
|
<ul>
|
||||||
|
<li>Inserimento controller SIEMENS con S7+ library</li>
|
||||||
|
<li>Inserimento nuove letture FANUC x programmi</li>
|
||||||
|
<li>Inserimento nuove letture FANUC x SysEx (informazioni sistema)</li>
|
||||||
|
<li>Inserimento invio FluxLog x parametri estesi (es SysEx, ProgName,...)</li>
|
||||||
|
<li>FIX visualizzazione dati FluxLog e URL inviati</li>
|
||||||
|
<li>FIX MAIN program da FANUC (non il current)</li>
|
||||||
|
<li>Inserita modalita' DUMP memoria (iniziale full + periodica)</li>
|
||||||
|
<li>Inserimento gestione contapezzi standard/checkBit in IOB.cfg</li>
|
||||||
|
<li>Inserimento contapezzi da area memoria X</li>
|
||||||
|
<li>NUOVA Gestione rami cliente e URL di update</li>
|
||||||
|
<li>Gestione modi CNC</li>
|
||||||
|
<li>Lettura dari dinamycs FANUC (feed, speed)</li>
|
||||||
|
<li> aggiunta gestione aree G0..G30 (overrides?)</li>
|
||||||
|
<li>fix errore disconnessione FANUC (allo spegnimento dl CNC) e memoria valori persistente a 1</li>
|
||||||
|
<li>fix globali x gestione log IN / FLOG + ottimizzaizone check FANUC (PING)</li>
|
||||||
|
<li>ottimizzazione fasi di restart in caso di assenza del server (evita reinvii inutili e migliora tempo ripartenza invio)</li>
|
||||||
|
<li>review procedure controllo connessione x FANUC (es Tornos II)</li>
|
||||||
|
<li>non richeide più privilegi admin x fare update</li>
|
||||||
|
<li> gestione segnali inverted</li>
|
||||||
|
<li>completata gestione configurabilità parametrica segnali (Tornos, CMZ, Biglia)</li>
|
||||||
|
<li>revisitazione LOG x distinguere processi IOB</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>v.0.1.* → v.0.10.*</b>
|
||||||
|
<ul>
|
||||||
|
<li>Testato in produzione x update ad avvio e su richiesta</li>
|
||||||
|
<li>Testato in produzione x lettura dati da Fanuc</li>
|
||||||
|
<li>Inizio deploy con copia file su area IIS</li>
|
||||||
|
<li>Prima versione con autoupdate</li>
|
||||||
|
<li>Test PrettyBin x spostamento dll</li>
|
||||||
|
<li>Base acquisitore FANUC</li>
|
||||||
|
<li>Sistema base sw controllo in tray</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div>
|
||||||
|
<div style="float: left;">
|
||||||
|
<img src="logoSteamware.png" />
|
||||||
|
</div>
|
||||||
|
<div style="float: right;">
|
||||||
|
<a href="https://www.steamware.net/IOT" target="_blank">© Steamware 2006-{{CURR-YEAR}}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 160 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 102 KiB |
Binary file not shown.
@@ -0,0 +1,15 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
|
||||||
|
SET EXEName=IOB-WIN.exe
|
||||||
|
SET EXEFullPath=C:\Steamware\IOB-WIN\IOB-WIN.exe
|
||||||
|
|
||||||
|
TASKLIST | FINDSTR /I "%EXEName%"
|
||||||
|
IF ERRORLEVEL 1 GOTO :StartIobWin
|
||||||
|
|
||||||
|
REM "Programma ancora in run, nessuna azione necessaria"
|
||||||
|
timeout /T 2
|
||||||
|
GOTO :EOF
|
||||||
|
|
||||||
|
:StartIobWin
|
||||||
|
START "" "%EXEFullPath%"
|
||||||
|
GOTO :EOF
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 273 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<item>
|
||||||
|
<version>1.0.0.0</version>
|
||||||
|
<url>http://seriate.steamware.net:8083/SWS/MAPO/IOB-WIN/{{BRANCHNAME}}/MAPO-IOB-WIN.zip</url>
|
||||||
|
<changelog>http://seriate.steamware.net:8083/SWS/MAPO/IOB-WIN/{{BRANCHNAME}}/ChangeLog.html</changelog>
|
||||||
|
<mandatory>false</mandatory>
|
||||||
|
</item>
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
using S7.Net;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Implementazione classe connessione SIEMENS con S7.net, comprensiva dei parametri delle aree
|
||||||
|
/// di memoria
|
||||||
|
/// </summary>
|
||||||
|
public class connParamS7
|
||||||
|
{
|
||||||
|
#region Public Fields
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indirizzo IP del PLC
|
||||||
|
/// </summary>
|
||||||
|
public string ipAdrr = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Base area x lettura
|
||||||
|
/// </summary>
|
||||||
|
public string memAddrRead = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Base area x scrittura
|
||||||
|
/// </summary>
|
||||||
|
public string memAddrWrite = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Size memoria lettura
|
||||||
|
/// </summary>
|
||||||
|
public int memSizeRead = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Size memoria scrittura
|
||||||
|
/// </summary>
|
||||||
|
public int memSizeWrite = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Timeout ping
|
||||||
|
/// </summary>
|
||||||
|
public int pingMsTimeout = 250;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Rack comunicazione
|
||||||
|
/// </summary>
|
||||||
|
public short rack = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Slot comunicazione
|
||||||
|
/// </summary>
|
||||||
|
public short slot = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tipo CPU Siemens
|
||||||
|
/// </summary>
|
||||||
|
public CpuType tipoCpu = CpuType.S7300;
|
||||||
|
|
||||||
|
#endregion Public Fields
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
{
|
||||||
|
"metadata": [
|
||||||
|
{
|
||||||
|
"src": [
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
"*.csproj"
|
||||||
|
],
|
||||||
|
"cwd": ".",
|
||||||
|
"exclude": [
|
||||||
|
"**/obj/**",
|
||||||
|
"**/bin/**",
|
||||||
|
"_site/**"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dest": "obj/api"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"build": {
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
"api/**.yml"
|
||||||
|
],
|
||||||
|
"cwd": "obj"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
"api/*.md",
|
||||||
|
"articles/**.md",
|
||||||
|
"toc.yml",
|
||||||
|
"*.md"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"obj/**",
|
||||||
|
"_site/**"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"resource": [
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
"images/**"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"obj/**",
|
||||||
|
"_site/**"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"overwrite": [
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
"apidoc/**.md"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"obj/**",
|
||||||
|
"_site/**"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dest": "_site",
|
||||||
|
"template": [
|
||||||
|
"default"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# IOB-WIN-PING
|
||||||
|
|
||||||
|
Documentazione relativa all'applicativo IOB-WIN-PING
|
||||||
|
|
||||||
|
## Articles
|
||||||
|
|
||||||
|
Per maggiori dettagli, definizioni e demo funzionamento si rimanda alla sezione Articles
|
||||||
|
|
||||||
|
## Api
|
||||||
|
|
||||||
|
Per ogni dettaglio e riferimento alla libreria si rimanda alla sezione Api Documentation
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace IOB_WIN_SIEMENS
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Definizione area memoria SIEMENS
|
||||||
|
/// </summary>
|
||||||
|
public class memAreaSiemens
|
||||||
|
{
|
||||||
|
#region Public Fields
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indice DB
|
||||||
|
/// </summary>
|
||||||
|
public int DbNum = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indice partenza memoria (es DBD0 --> 0)
|
||||||
|
/// </summary>
|
||||||
|
public int indiceMem = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tipo Memoria (DBD, DBW...)
|
||||||
|
/// </summary>
|
||||||
|
public string tipoMem = "";
|
||||||
|
|
||||||
|
#endregion Public Fields
|
||||||
|
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Inizializza da un formato stringa
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="strFormat"></param>
|
||||||
|
public memAreaSiemens(string strFormat)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(strFormat))
|
||||||
|
{
|
||||||
|
string[] memComp = strFormat.Split('.');
|
||||||
|
int.TryParse(memComp[0].Replace("DB", ""), out DbNum);
|
||||||
|
//tipoMem = memComp[1].Substring(2, 1);
|
||||||
|
tipoMem = "";
|
||||||
|
for (int i = 0; i < memComp[1].Length; i++)
|
||||||
|
{
|
||||||
|
if (char.IsLetter(memComp[1][i]))
|
||||||
|
{
|
||||||
|
tipoMem += memComp[1][i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// rimuovo DB iniziale..
|
||||||
|
tipoMem = tipoMem.Replace("DB", "");
|
||||||
|
// ciclo x trovare SOLO stringa
|
||||||
|
int.TryParse(memComp[1].Replace("DB", "").Replace(tipoMem, ""), out indiceMem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="MapoSDK" version="6.14.2411.518" targetFramework="net462" />
|
||||||
|
<package id="Microsoft.Bcl.AsyncInterfaces" version="6.0.0" targetFramework="net462" />
|
||||||
|
<package id="Microsoft.Extensions.Logging.Abstractions" version="6.0.0" targetFramework="net462" />
|
||||||
|
<package id="Microsoft.VisualStudio.SlowCheetah" version="4.0.50" targetFramework="net462" developmentDependency="true" />
|
||||||
|
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net462" />
|
||||||
|
<package id="NLog" version="5.3.4" targetFramework="net462" />
|
||||||
|
<package id="Pipelines.Sockets.Unofficial" version="2.2.8" targetFramework="net462" />
|
||||||
|
<package id="S7netplus" version="0.1.9" targetFramework="net462" />
|
||||||
|
<package id="StackExchange.Redis" version="2.8.24" targetFramework="net462" />
|
||||||
|
<package id="System.Buffers" version="4.5.1" targetFramework="net462" />
|
||||||
|
<package id="System.IO.Compression" version="4.3.0" targetFramework="net462" />
|
||||||
|
<package id="System.IO.Pipelines" version="5.0.1" targetFramework="net462" />
|
||||||
|
<package id="System.Memory" version="4.5.4" targetFramework="net462" />
|
||||||
|
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net462" />
|
||||||
|
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net462" />
|
||||||
|
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net462" />
|
||||||
|
<package id="System.Threading.Channels" version="5.0.0" targetFramework="net462" />
|
||||||
|
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" />
|
||||||
|
</packages>
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
@echo off
|
||||||
|
echo Inizio processing After Build: configurazione %1 , directory %2
|
||||||
|
|
||||||
|
RD /S /Q %2"\lib\ar"
|
||||||
|
RD /S /Q %2"\lib\cs"
|
||||||
|
RD /S /Q %2"\lib\da"
|
||||||
|
RD /S /Q %2"\lib\de"
|
||||||
|
RD /S /Q %2"\lib\es"
|
||||||
|
RD /S /Q %2"\lib\fr"
|
||||||
|
RD /S /Q %2"\lib\it"
|
||||||
|
RD /S /Q %2"\lib\ja-JP"
|
||||||
|
RD /S /Q %2"\lib\ko"
|
||||||
|
RD /S /Q %2"\lib\lv"
|
||||||
|
RD /S /Q %2"\lib\nl"
|
||||||
|
RD /S /Q %2"\lib\pl"
|
||||||
|
RD /S /Q %2"\lib\pt"
|
||||||
|
RD /S /Q %2"\lib\pt-BR"
|
||||||
|
RD /S /Q %2"\lib\ru"
|
||||||
|
RD /S /Q %2"\lib\sk"
|
||||||
|
RD /S /Q %2"\lib\sv"
|
||||||
|
RD /S /Q %2"\lib\th"
|
||||||
|
RD /S /Q %2"\lib\tr"
|
||||||
|
RD /S /Q %2"\lib\zh"
|
||||||
|
RD /S /Q %2"\lib\zh-TW"
|
||||||
|
|
||||||
|
MOVE /Y %2"ar" %2"lib\"
|
||||||
|
MOVE /Y %2"cs" %2"lib\"
|
||||||
|
MOVE /Y %2"da" %2"lib\"
|
||||||
|
MOVE /Y %2"de" %2"lib\"
|
||||||
|
MOVE /Y %2"es" %2"lib\"
|
||||||
|
MOVE /Y %2"fr" %2"lib\"
|
||||||
|
MOVE /Y %2"it" %2"lib\"
|
||||||
|
MOVE /Y %2"ja-JP" %2"lib\"
|
||||||
|
MOVE /Y %2"ko" %2"lib\"
|
||||||
|
MOVE /Y %2"lv" %2"lib\"
|
||||||
|
MOVE /Y %2"nl" %2"lib\"
|
||||||
|
MOVE /Y %2"pl" %2"lib\"
|
||||||
|
MOVE /Y %2"pt" %2"lib\"
|
||||||
|
MOVE /Y %2"pt-BR" %2"lib\"
|
||||||
|
MOVE /Y %2"ru" %2"lib\"
|
||||||
|
MOVE /Y %2"sk" %2"lib\"
|
||||||
|
MOVE /Y %2"sv" %2"lib\"
|
||||||
|
MOVE /Y %2"th" %2"lib\"
|
||||||
|
MOVE /Y %2"tr" %2"lib\"
|
||||||
|
MOVE /Y %2"zh" %2"lib\"
|
||||||
|
MOVE /Y %2"zh-TW" %2"lib\"
|
||||||
|
|
||||||
|
|
||||||
|
if %1 == "Release" goto ReleaseExec
|
||||||
|
if %1 == Release goto ReleaseExec
|
||||||
|
if %1 == "Debug" goto DebugExec
|
||||||
|
if %1 == Debug goto DebugExec
|
||||||
|
if %1 == "Remote_DEBUG" goto RemoteDebugExec
|
||||||
|
if %1 == Remote_DEBUG goto RemoteDebugExec
|
||||||
|
|
||||||
|
:ReleaseExec
|
||||||
|
echo Release processing...
|
||||||
|
del /S %2"*.pdb""
|
||||||
|
del /S %2"*.xml""
|
||||||
|
del /S %2"lib/*.pdb""
|
||||||
|
echo Release: eliminato pdb + xml!!!
|
||||||
|
goto END
|
||||||
|
|
||||||
|
:DebugExec
|
||||||
|
echo Debug processing...
|
||||||
|
|
||||||
|
goto END
|
||||||
|
|
||||||
|
|
||||||
|
:RemoteDebugExec
|
||||||
|
echo Remote_DEBUG processing, effettuo copia script verso server remoto (ROBOCOPY)
|
||||||
|
REM copia script verso server remoto
|
||||||
|
REM echo Debug remoto: effettuo robocopy sync (verificare remote per cliente)
|
||||||
|
|
||||||
|
REM FINASSI
|
||||||
|
REM ROBOCOPY %2 \\10.150.0.1\Steamware\IOB-WIN-WPS-DEB /MIR
|
||||||
|
REM Baglietto
|
||||||
|
REM ROBOCOPY %2 \\192.168.60.15\Steamware\IOB-WIN-WPS-DEB /MIR
|
||||||
|
REM GIACOVELLI LOCOROTONDO
|
||||||
|
REM ROBOCOPY %2 \\192.168.1.93\Steamware\IOB-WIN-WPS-DEB /MIR
|
||||||
|
REM IMI Remosa
|
||||||
|
REM ROBOCOPY %2 \\192.168.0.12\Steamware\IOB-WIN-WPS-DEB /MIR
|
||||||
|
|
||||||
|
REM IOB-WIN-SIM
|
||||||
|
REM ROBOCOPY %2 \\IOB-WIN-SIMULA\Steamware\IOB-WIN-WPS-DEB /MIR
|
||||||
|
|
||||||
|
REM IOBVPN4MACHINE
|
||||||
|
REM ROBOCOPY %2 \\10.51.90.5\Steamware\IOB-WIN-WPS-DEB /MIR
|
||||||
|
REM ROBOCOPY %2 \\10.51.90.5\Steamware\IOB-WIN-WPS-DEB /MIR /log:RobocopyTransfer.log
|
||||||
|
REM ROBOCOPY %2 Z:\IOB-WIN-WPS-DEB /MIR
|
||||||
|
REM ROBOCOPY %2 \\10.51.90.10\Steamware\IOB-WIN-WPS-DEB /MIR
|
||||||
|
ROBOCOPY %2 \\10.51.90.9\Steamware\IOB-WIN-WPS-DEB /MIR
|
||||||
|
|
||||||
|
goto END
|
||||||
|
|
||||||
|
:END
|
||||||
|
echo Fatto!
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
@echo off
|
||||||
|
echo Effettua setup dei file specifici per i vari ambienti pre build installer: verifica da nome configurazione %1
|
||||||
|
|
||||||
|
|
||||||
|
if %1 == "Release" goto Release
|
||||||
|
if %1 == "Debug" goto Debug
|
||||||
|
if %1 == "Remote_DEBUG" goto RemoteDebug
|
||||||
|
|
||||||
|
:Release
|
||||||
|
echo Release: nulla da copiare
|
||||||
|
goto END
|
||||||
|
|
||||||
|
:Debug
|
||||||
|
echo Debug: copia file ini x simulazione Debug
|
||||||
|
REM del %2"DATA\CONF\EsaKvara.ini"
|
||||||
|
REM copy %2"Resources\SCM\EsaKvara_SIM.ini" %2"DATA\CONF\EsaKvara.ini"
|
||||||
|
goto END
|
||||||
|
|
||||||
|
|
||||||
|
:RemoteDebug
|
||||||
|
echo RemoteDebug: nulla da copiare
|
||||||
|
goto END
|
||||||
|
|
||||||
|
:END
|
||||||
|
echo Fatto!
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
- name: Articles
|
||||||
|
href: articles/
|
||||||
|
- name: API Documentation
|
||||||
|
href: obj/api/
|
||||||
|
homepage: api/index.md
|
||||||
Reference in New Issue
Block a user