diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 59b493a2..c80ac6cb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -259,6 +259,19 @@ IOB-WIN-MBUS:build:
- *version-fix
script:
- '& "$env:MSBUILD_PATH" "$env:APP_NAME\$env:APP_NAME.csproj" -target:Build /p:Configuration=Release /p:Platform="x86" /p:OutputPath=bin/ /nodeReuse:false /verbosity:minimal /m'
+
+IOB-WIN-MITSUBISHI:build:
+ stage: build
+ tags:
+ - win
+ variables:
+ APP_NAME: IOB-WIN-MITSUBISHI
+ before_script:
+ - *nuget-fix
+ - '& "$env:NUGET_PATH" restore "$env:APP_NAME.sln" -verbosity quiet'
+ - *version-fix
+ script:
+ - '& "$env:MSBUILD_PATH" "$env:APP_NAME\$env:APP_NAME.csproj" -target:Build /p:Configuration=Release /p:Platform="x86" /p:OutputPath=bin/ /nodeReuse:false /verbosity:minimal /m'
IOB-WIN-MTC:build:
stage: build
@@ -492,6 +505,31 @@ IOB-WIN-MBUS:release:
- *nexusUpload
- *SendToVersionsLog
+IOB-WIN-MITSUBISHI:release:
+ stage: release
+ needs: ["IOB-WIN-MITSUBISHI:build"]
+ tags:
+ - win
+ variables:
+ APP_NAME: IOB-WIN-MITSUBISHI
+ NEXUS_PATH: MAPO/IOB-WIN-MITSUBISHI
+ rules:
+ - if: $CI_COMMIT_BRANCH == 'master'
+ changes:
+ - IOB-WIN-MITSUBISHI/*
+ when: always
+ before_script:
+ - *nuget-fix
+ - '& "$env:NUGET_PATH" restore "$env:APP_NAME.sln" -verbosity quiet'
+ - *version-fix
+ - *cleanup-zip
+ script:
+ - '& "$env:MSBUILD_PATH" "$env:APP_NAME\$env:APP_NAME.csproj" -target:Build /p:Configuration=Release /p:Platform="x86" /p:OutputPath=bin/ /nodeReuse:false /verbosity:minimal /m'
+ - *zipper
+ - *hashBuild
+ - *nexusUpload
+ - *SendToVersionsLog
+
IOB-WIN-MTC:release:
stage: release
needs: ["IOB-WIN-MTC:build"]
@@ -696,26 +734,6 @@ IOB-WIN-WS:release:
# DocFx
# --------------------------------
-IOB-WIN-MBUS:docfx:
- stage: docfx
- needs: ["IOB-WIN-MBUS:build"]
- tags:
- - win
- variables:
- APP_NAME: IOB-WIN-MBUS
- rules:
- - if: $CI_COMMIT_BRANCH == 'master'
- changes:
- - IOB-WIN-MBUS/*
- when: always
- before_script:
- - *nuget-fix
- - '& "$env:NUGET_PATH" restore "$env:APP_NAME.sln" -verbosity quiet'
- script:
- - docfx $env:APP_NAME/docfx.json
- - mv $env:APP_NAME/_site "docfx"
- - *DocReplica
-
IOB-WIN-FANUC:docfx:
stage: docfx
needs: ["IOB-WIN-FANUC:build"]
@@ -776,6 +794,46 @@ IOB-WIN-FTP:docfx:
- mv $env:APP_NAME/_site "docfx"
- *DocReplica
+IOB-WIN-MBUS:docfx:
+ stage: docfx
+ needs: ["IOB-WIN-MBUS:build"]
+ tags:
+ - win
+ variables:
+ APP_NAME: IOB-WIN-MBUS
+ rules:
+ - if: $CI_COMMIT_BRANCH == 'master'
+ changes:
+ - IOB-WIN-MBUS/*
+ when: always
+ before_script:
+ - *nuget-fix
+ - '& "$env:NUGET_PATH" restore "$env:APP_NAME.sln" -verbosity quiet'
+ script:
+ - docfx $env:APP_NAME/docfx.json
+ - mv $env:APP_NAME/_site "docfx"
+ - *DocReplica
+
+IOB-WIN-MITSUBISHI:docfx:
+ stage: docfx
+ needs: ["IOB-WIN-MITSUBISHI:build"]
+ tags:
+ - win
+ variables:
+ APP_NAME: IOB-WIN-MITSUBISHI
+ rules:
+ - if: $CI_COMMIT_BRANCH == 'master'
+ changes:
+ - IOB-WIN-MITSUBISHI/*
+ when: always
+ before_script:
+ - *nuget-fix
+ - '& "$env:NUGET_PATH" restore "$env:APP_NAME.sln" -verbosity quiet'
+ script:
+ - docfx $env:APP_NAME/docfx.json
+ - mv $env:APP_NAME/_site "docfx"
+ - *DocReplica
+
IOB-WIN-MTC:docfx:
stage: docfx
needs: ["IOB-WIN-MTC:build"]
diff --git a/IOB-WIN-FILE/docfx.json b/IOB-WIN-FILE/docfx.json
new file mode 100644
index 00000000..bacb80c9
--- /dev/null
+++ b/IOB-WIN-FILE/docfx.json
@@ -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"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-FILE/toc copy.yml b/IOB-WIN-FILE/toc copy.yml
new file mode 100644
index 00000000..7eee9ffb
--- /dev/null
+++ b/IOB-WIN-FILE/toc copy.yml
@@ -0,0 +1,6 @@
+
+- name: Articles
+ href: articles/
+- name: API Documentation
+ href: obj/api/
+ homepage: api/index.md
diff --git a/IOB-WIN-FILE/toc.yml b/IOB-WIN-FILE/toc.yml
new file mode 100644
index 00000000..7eee9ffb
--- /dev/null
+++ b/IOB-WIN-FILE/toc.yml
@@ -0,0 +1,6 @@
+
+- name: Articles
+ href: articles/
+- name: API Documentation
+ href: obj/api/
+ homepage: api/index.md
diff --git a/IOB-WIN-FTP/App.config b/IOB-WIN-FTP/App.config
index fd627151..a17a636d 100644
--- a/IOB-WIN-FTP/App.config
+++ b/IOB-WIN-FTP/App.config
@@ -8,7 +8,7 @@
-
+
diff --git a/IOB-WIN-MITSUBISHI.sln b/IOB-WIN-MITSUBISHI.sln
new file mode 100644
index 00000000..e47922b4
--- /dev/null
+++ b/IOB-WIN-MITSUBISHI.sln
@@ -0,0 +1,83 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.2.32505.173
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VersGen", "VersGen\VersGen.csproj", "{58E399F3-9D4E-49D3-AB35-9ED536543D50}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B52E3E86-1B82-4F4D-982C-0C8909CD2A28}"
+ ProjectSection(SolutionItems) = preProject
+ .editorconfig = .editorconfig
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOB-UT-NEXT", "IOB-UT-NEXT\IOB-UT-NEXT.csproj", "{90512E12-29FC-460D-94CC-648C2A072DBD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOB-WIN-FORM", "IOB-WIN-FORM\IOB-WIN-FORM.csproj", "{9BA331BB-9BF1-40E0-AC03-74B43D73A097}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOB-WIN-MITSUBISHII", "IOB-WIN-MITSUBISHII\IOB-WIN-MITSUBISHII.csproj", "{4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|x86 = Release|x86
+ Remote_DEBUG|Any CPU = Remote_DEBUG|Any CPU
+ Remote_DEBUG|x86 = Remote_DEBUG|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {58E399F3-9D4E-49D3-AB35-9ED536543D50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {58E399F3-9D4E-49D3-AB35-9ED536543D50}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {58E399F3-9D4E-49D3-AB35-9ED536543D50}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {58E399F3-9D4E-49D3-AB35-9ED536543D50}.Debug|x86.Build.0 = Debug|Any CPU
+ {58E399F3-9D4E-49D3-AB35-9ED536543D50}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {58E399F3-9D4E-49D3-AB35-9ED536543D50}.Release|Any CPU.Build.0 = Release|Any CPU
+ {58E399F3-9D4E-49D3-AB35-9ED536543D50}.Release|x86.ActiveCfg = Release|x86
+ {58E399F3-9D4E-49D3-AB35-9ED536543D50}.Release|x86.Build.0 = Release|x86
+ {58E399F3-9D4E-49D3-AB35-9ED536543D50}.Remote_DEBUG|Any CPU.ActiveCfg = Debug|Any CPU
+ {58E399F3-9D4E-49D3-AB35-9ED536543D50}.Remote_DEBUG|Any CPU.Build.0 = Debug|Any CPU
+ {58E399F3-9D4E-49D3-AB35-9ED536543D50}.Remote_DEBUG|x86.ActiveCfg = Remote_DEBUG|x86
+ {58E399F3-9D4E-49D3-AB35-9ED536543D50}.Remote_DEBUG|x86.Build.0 = Remote_DEBUG|x86
+ {90512E12-29FC-460D-94CC-648C2A072DBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {90512E12-29FC-460D-94CC-648C2A072DBD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {90512E12-29FC-460D-94CC-648C2A072DBD}.Debug|x86.ActiveCfg = Debug|x86
+ {90512E12-29FC-460D-94CC-648C2A072DBD}.Debug|x86.Build.0 = Debug|x86
+ {90512E12-29FC-460D-94CC-648C2A072DBD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {90512E12-29FC-460D-94CC-648C2A072DBD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {90512E12-29FC-460D-94CC-648C2A072DBD}.Release|x86.ActiveCfg = Release|x86
+ {90512E12-29FC-460D-94CC-648C2A072DBD}.Release|x86.Build.0 = Release|x86
+ {90512E12-29FC-460D-94CC-648C2A072DBD}.Remote_DEBUG|Any CPU.ActiveCfg = Debug|Any CPU
+ {90512E12-29FC-460D-94CC-648C2A072DBD}.Remote_DEBUG|Any CPU.Build.0 = Debug|Any CPU
+ {90512E12-29FC-460D-94CC-648C2A072DBD}.Remote_DEBUG|x86.ActiveCfg = Release|x86
+ {9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Debug|x86.Build.0 = Debug|Any CPU
+ {9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Release|x86.ActiveCfg = Release|Any CPU
+ {9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Release|x86.Build.0 = Release|Any CPU
+ {9BA331BB-9BF1-40E0-AC03-74B43D73A097}.Remote_DEBUG|Any CPU.ActiveCfg = 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.Build.0 = Release|Any CPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}.Debug|x86.Build.0 = Debug|Any CPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}.Release|x86.ActiveCfg = Release|Any CPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}.Release|x86.Build.0 = Release|Any CPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}.Remote_DEBUG|Any CPU.ActiveCfg = Remote_DEBUG|Any CPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}.Remote_DEBUG|Any CPU.Build.0 = Remote_DEBUG|Any CPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}.Remote_DEBUG|x86.ActiveCfg = Release|Any CPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}.Remote_DEBUG|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {801DCDC5-B7D3-4EA5-B543-783D2C91765F}
+ EndGlobalSection
+EndGlobal
diff --git a/IOB-WIN-MITSUBISHII/AdapterFormNext.cs b/IOB-WIN-MITSUBISHII/AdapterFormNext.cs
new file mode 100644
index 00000000..32b693c5
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/AdapterFormNext.cs
@@ -0,0 +1,55 @@
+using IOB_UT_NEXT;
+using IOB_WIN_MITSUBISHI.Iob;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IOB_WIN_MITSUBISHI
+{
+ public class AdapterFormNext: IOB_WIN_FORM.AdapterForm
+ {
+
+ ///
+ /// Avvio MainForm
+ ///
+ ///
+ public AdapterFormNext(string codIOB): base(codIOB)
+ {
+ }
+ ///
+ /// carica IOB richiesto
+ ///
+ protected override void loadIobType()
+ {
+ if (IOBConf != null)
+ {
+ switch (tipoScelto)
+ {
+ case tipoAdapter.MITSUBISHI:
+ iobObj = new Mitsubishi(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}");
+ }
+ }
+ }
+}
diff --git a/IOB-WIN-MITSUBISHII/App.Debug.config b/IOB-WIN-MITSUBISHII/App.Debug.config
new file mode 100644
index 00000000..42297ccc
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/App.Debug.config
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/App.Release.config b/IOB-WIN-MITSUBISHII/App.Release.config
new file mode 100644
index 00000000..0f80d173
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/App.Release.config
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/App.config b/IOB-WIN-MITSUBISHII/App.config
new file mode 100644
index 00000000..fce58a4c
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/App.config
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/DATA/CONF/MAIN.ini b/IOB-WIN-MITSUBISHII/DATA/CONF/MAIN.ini
new file mode 100644
index 00000000..5335f1c9
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/DATA/CONF/MAIN.ini
@@ -0,0 +1,24 @@
+;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=IMI_SONATEST
+STARTLIST=FTP_SONATEST
+
+
+MAXCNC=10
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/DATA/CONF/SIMUL_01.ini b/IOB-WIN-MITSUBISHII/DATA/CONF/SIMUL_01.ini
new file mode 100644
index 00000000..08975356
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/DATA/CONF/SIMUL_01.ini
@@ -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
diff --git a/IOB-WIN-MITSUBISHII/DATA/CONF/SIMUL_01.json b/IOB-WIN-MITSUBISHII/DATA/CONF/SIMUL_01.json
new file mode 100644
index 00000000..d2895eb1
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/DATA/CONF/SIMUL_01.json
@@ -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-": "{{PODL}}",
+ "replace-": "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"
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/DATA/CONF/SIMUL_01_WD.ini b/IOB-WIN-MITSUBISHII/DATA/CONF/SIMUL_01_WD.ini
new file mode 100644
index 00000000..56bca173
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/DATA/CONF/SIMUL_01_WD.ini
@@ -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
diff --git a/IOB-WIN-MITSUBISHII/DATA/CONF/SIMUL_01_alarm.json b/IOB-WIN-MITSUBISHII/DATA/CONF/SIMUL_01_alarm.json
new file mode 100644
index 00000000..4f6ed310
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/DATA/CONF/SIMUL_01_alarm.json
@@ -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"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/DATA/CONF/VL28.ini b/IOB-WIN-MITSUBISHII/DATA/CONF/VL28.ini
new file mode 100644
index 00000000..90469029
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/DATA/CONF/VL28.ini
@@ -0,0 +1,81 @@
+;Configurazione IOB-WIN
+[IOB]
+CNCTYPE=MITSUBISHI
+
+[MACHINE]
+; VALVITAL 2024
+VENDOR=DMG MORI
+MODEL=NLX4000
+
+[CNC]
+; FANUC!
+IP=192.168.213.199
+PORT=683
+GETPRGNAME=true
+
+[SERVER]
+MPIP=192.168.214.4
+MPURL=/MP/IO
+CMDBASE=/IOB/input/
+CMDFLOG=/IOB/flog/
+CMDALIVE=/IOB
+CMDENABLED=/IOB/enabled/
+CMDADV1=?valore=
+CMDREBO=/sendReboot.aspx?idxMacchina=
+
+[MEMORY]
+; Green Y62=10098 | Red: Y60=10096 | Yellow: Y61=10097 | Blue Y63=10099 | Emerg: ??? (negata???)|
+;BIT0=CONN
+BIT1=10098
+;BIT2=PZCOUNT.PAR.8002
+BIT3=10096
+BIT4=10097
+;BIT5=!X8.4
+AREAV_START=500
+AREAV_SIZE=3
+PAR_START=8001
+PAR_SIZE=3
+SIGN_START=10096
+SIGN_SIZE=4
+
+[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]
+EZNC_SYS=EZNC_SYS_MELDAS700L
+ENABLE_PZCOUNT=TRUE
+ENABLE_DYN_DATA=TRUE
+PZCOUNT_MODE=STD.PAR.8002
+PZGTOT_MODE=STD.PAR.8001
+PZREQ_MODE=STD.PAR.8003
+ENABLE_PZ_REQ=TRUE
+ENABLE_PZ_RESET=TRUE
+ENABLE_PZ_RESET_stopSetup=FALSE
+;gestione invio pezzi in blocco
+ENABLE_SEND_PZC_BLOCK=TRUE
+MIN_SEND_PZC_BLOCK=0
+MAX_SEND_PZC_BLOCK=100
+; conf cablata set Art/Commessa
+SET_NUM_COM=STD.VAR.500
+SET_NUM_ART=STD.VAR.501
+SET_NUM_PZ=STD.VAR.502
+MAX_CHAR_DESC=7
+;indica se il numero articolo sia semplicemente il trim dei caratteri alfabetici (chiama comunque server...)
+NUM_ART_CHR_TRIM=TRUE
+; conf parametri memoria READ/WRITE
+PARAM_CONF=VL28.json
+DISABLE_SEND_WDST=TRUE
+
+[BRANCH]
+NAME=master
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/DATA/CONF/VL28.json b/IOB-WIN-MITSUBISHII/DATA/CONF/VL28.json
new file mode 100644
index 00000000..63d67e4d
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/DATA/CONF/VL28.json
@@ -0,0 +1,113 @@
+{
+ "mMapWrite": {
+ "setArt": {
+ "name": "setArt",
+ "description": "Articolo",
+ "memAddr": "",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 20,
+ "displOrdinal": 1
+ },
+ "setArtNum": {
+ "name": "setArtNum",
+ "description": "CodArt",
+ "memAddr": "VAR.501",
+ "tipoMem": "Int",
+ "index": 966,
+ "size": 4,
+ "displOrdinal": 2
+ },
+ "setComm": {
+ "name": "setComm",
+ "description": "Commessa",
+ "memAddr": "",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 20,
+ "displOrdinal": 3
+ },
+ "setCommNum": {
+ "name": "setCommNum",
+ "description": "ODL",
+ "memAddr": "VAR.500",
+ "tipoMem": "Int",
+ "index": 965,
+ "size": 4,
+ "displOrdinal": 4
+ },
+ "setPzComm": {
+ "name": "setPzComm",
+ "description": "Qta Richiesta",
+ "memAddr": "PAR.8003",
+ "tipoMem": "Int",
+ "index": 8003,
+ "size": 4,
+ "displOrdinal": 5
+ }
+ },
+ "mMapRead": {
+ "setPzCommOdl": {
+ "name": "setPzCommOdl",
+ "description": "PzOdl",
+ "memAddr": "VAR.502",
+ "tipoMem": "Int",
+ "index": 502,
+ "size": 4,
+ "displOrdinal": 6
+ },
+ "PZ_GTOT": {
+ "name": "PZ_GTOT",
+ "description": "Contatore GTot",
+ "memAddr": "",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 4,
+ "func": "MAX",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 7
+ },
+ "PZ_COUNT": {
+ "name": "PZ_COUNT",
+ "description": "Contatore",
+ "memAddr": "",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 4,
+ "func": "MAX",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 8
+ },
+ "PROG": {
+ "name": "PROG",
+ "description": "Programma",
+ "memAddr": "",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 4,
+ "func": "MAX",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 9
+ },
+ "DYNDATA": {
+ "name": "DYNDATA",
+ "description": "DynData check",
+ "memAddr": "",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 20
+ }
+ },
+ "mMapWriteLink": {
+ "setArt": "setArtNum",
+ "setComm": "setCommNum",
+ "setPzComm": "setPzCommOdl"
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/IOB-WIN-MITSUBISHII.csproj b/IOB-WIN-MITSUBISHII/IOB-WIN-MITSUBISHII.csproj
new file mode 100644
index 00000000..17543460
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/IOB-WIN-MITSUBISHII.csproj
@@ -0,0 +1,206 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {4FB0ABD9-84B9-4DA8-9AD4-CDD8CFF74F66}
+ WinExe
+ IOB_WIN_MITSUBISHII
+ IOB-WIN-MITSUBISHII
+ v4.6.2
+ 512
+ true
+ true
+
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+ bin\Remote_DEBUG\
+ DEBUG;TRACE
+ full
+ x86
+ 7.3
+ prompt
+
+
+
+ ..\packages\EgwProxy.MultiCncLib.3.6.2207.1211\lib\EgwProxy.MultiCncLib.dll
+
+
+ ..\packages\MapoSDK.6.14.2411.518\lib\MapoSDK.dll
+
+
+ ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ VersGen.cs
+
+
+ Form
+
+
+
+
+ Form
+
+
+
+
+ Always
+
+
+ Always
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ App.config
+ PreserveNewest
+
+
+ App.config
+ PreserveNewest
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+
+
+ Always
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+ Always
+
+
+
+ Always
+
+
+
+
+ Designer
+ true
+ PreserveNewest
+
+
+
+
+ Always
+
+
+ Always
+
+
+
+ Always
+
+
+ Always
+
+
+
+
+
+ {90512e12-29fc-460d-94cc-648c2a072dbd}
+ IOB-UT-NEXT
+
+
+ {9ba331bb-9bf1-40e0-ac03-74b43d73a097}
+ IOB-WIN-FORM
+
+
+
+
+ {1B93D6AF-FD32-4281-83FE-533F666FAE6C}
+ 1
+ 0
+ 0
+ tlbimp
+ False
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+
+
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/Iob/GenericNext.cs b/IOB-WIN-MITSUBISHII/Iob/GenericNext.cs
new file mode 100644
index 00000000..01c11574
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/Iob/GenericNext.cs
@@ -0,0 +1,13 @@
+using IOB_UT_NEXT;
+
+namespace IOB_WIN_MITSUBISHI.Iob
+{
+ public class GenericNext : IOB_WIN_FORM.Iob.Generic
+ {
+
+ public GenericNext(AdapterFormNext caller, IobConfiguration IOBConf): base((IOB_WIN_FORM.AdapterForm)caller, IOBConf)
+ {
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/Iob/Mitsubishi.cs b/IOB-WIN-MITSUBISHII/Iob/Mitsubishi.cs
new file mode 100644
index 00000000..9758d958
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/Iob/Mitsubishi.cs
@@ -0,0 +1,2138 @@
+using IOB_UT_NEXT;
+using MapoSDK;
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Net.NetworkInformation;
+using System.Text;
+
+namespace IOB_WIN_MITSUBISHI.Iob
+{
+ public class Mitsubishi : Iob.GenericNext
+ {
+ #region Public Constructors
+
+ ///
+ /// Estende l'init della classe base...
+ ///
+ ///
+ ///
+ public Mitsubishi(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
+ {
+ lgInfo("Start init Mitsubishi");
+ // gestione invio ritardato contapezzi
+ pzCountDelay = utils.CRI("pzCountDelay");
+ lastPzCountSend = DateTime.Now;
+ lastWarnODL = DateTime.Now;
+
+ // inizializzo correttamente aree memoria secondo CONF - iniFileName
+ IniFile fIni = new IniFile(IOBConf.iniFileName);
+
+ // inizializzo aree di memoria correnti...
+ MemVarStart = fIni.ReadInteger("MEMORY", "AREAV_START", 500);
+ MemVarSize = fIni.ReadInteger("MEMORY", "AREAV_SIZE", 1);
+ ParamStart = fIni.ReadInteger("MEMORY", "PAR_START", 8001);
+ ParamSize = fIni.ReadInteger("MEMORY", "PAR_SIZE", 1);
+ SignStart = fIni.ReadInteger("MEMORY", "SIGN_START", 10096);
+ SignSize = fIni.ReadInteger("MEMORY", "SIGN_SIZE", 1);
+
+ // loggo aree di memoria avviate...
+ lgInfo($"Avviata area di memoria Var: {MemVarSize} vars");
+ lgInfo($"Avviata area di memoria Param: {ParamSize} params");
+
+ // fix enable prgName
+ enablePrgName = fIni.ReadBoolean("CNC", "GETPRGNAME", true);
+
+ // effettuo lettura della conf sigLUT... cercando 1:1 i bit...
+ string currBit = "";
+ string memArea = "";
+ for (int i = 0; i < 8; i++)
+ {
+ currBit = $"BIT{i}";
+ memArea = fIni.ReadString("MEMORY", currBit, "");
+ // se trovo un valore...
+ if (!string.IsNullOrEmpty(memArea))
+ {
+ signLUT.Add(currBit, memArea);
+ }
+ }
+
+ // recupero sysType del controllo, sennò default M700L...
+ string sEZNC_SYS = getOptPar("EZNC_SYS");
+ if (!string.IsNullOrEmpty(sEZNC_SYS))
+ {
+ sysType = (SYSTEMTYPE)Enum.Parse(typeof(SYSTEMTYPE), sEZNC_SYS);
+ }
+ lgInfo($"Start init Mitsubishi | SysType: {sysType}");
+
+ // gestione override contapezzi
+ enablePzCountByApp = utils.CRB("enableContapezzi");
+ enablePzCountByIob = (getOptPar("ENABLE_PZCOUNT") == "TRUE");
+ disablePzCountByIob = (getOptPar("DISABLE_PZCOUNT") == "FALSE");
+
+ // gestione override idx articoli...
+ if (!string.IsNullOrEmpty(getOptPar("NUM_ART_CHR_TRIM")))
+ {
+ string NUM_ART_CHR_TRIM = getOptPar("NUM_ART_CHR_TRIM");
+ bool.TryParse(NUM_ART_CHR_TRIM, out numArtCharTrim);
+ }
+ if (!string.IsNullOrEmpty(getOptPar("MAX_CHAR_DESC")))
+ {
+ string MAX_CHAR_DESC = getOptPar("MAX_CHAR_DESC");
+ int.TryParse(MAX_CHAR_DESC, out maxVarStrLen);
+ }
+
+ // leggo conf x ricerca valori memoria da tracciare in log di continuo...
+ mem2trace = fIni.ReadString("OPTPAR", "MEM_2_TRACE", "");
+
+ // è little endian (NON serve conversione)
+ hasBigEndian = false;
+ lgInfoStartup($"Start init Adapter MITSUBISHI | IP {IOBConf.cncIpAddr}:{IOBConf.cncPort} per IOB {IOBConf.codIOB}");
+
+ // Creo oggetto connessione NC
+ parentForm.commPlcActive = true;
+
+ // init oggetto
+ oEZNcAutCom = new EZNCAUTLib.DispEZNcCommunication();
+ int.TryParse(IOBConf.cncPort, out ezPort);
+ ipAddr = IOBConf.cncIpAddr;
+
+ parentForm.commPlcActive = false;
+
+ // effettuo tryConnect...
+ lgInfo("MITSUBISHI startup: tryConnect");
+ tryConnect();
+ if ((enablePzCountByApp || enablePzCountByIob) && !(disablePzCountByIob))
+ {
+ lgInfo("MITSUBISHI: inizio gestione contapezzi");
+ try
+ {
+ // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con
+ // indicazione area)
+ if (cIobConf.optPar.Count > 0 && !string.IsNullOrEmpty(getOptPar("PZCOUNT_MODE")))
+ {
+ if (getOptPar("PZCOUNT_MODE").StartsWith("STD"))
+ {
+ lgInfo("Init contapezzi MITSUBISHI: pzCntReload(true)");
+ pzCntReload(true);
+ // refresh associazione Macchina - IOB
+ SendM2IOB();
+ // invio altri dati accessori...
+ SendMachineConf();
+ // per adesso imposto lettura MITSUBISHI == contapezzi (poi farà vera lettura...)
+ contapezziPLC = contapezziIOB;
+ }
+ else
+ {
+ contapezziIOB = 0;
+ lgInfo("Contapezzi STD disabilitato: modalità {0}", getOptPar("PZCOUNT_MODE"));
+ }
+ }
+ else
+ {
+ contapezziIOB = 0;
+ lgInfo("Parametro mancante PZCOUNT_MODE");
+ }
+ }
+ catch (Exception exc)
+ {
+ lgError(exc, "Errore in contapezzi MITSUBISHI 01");
+ }
+ }
+ // finisco INIT ADAPTER
+ lgInfo("End init Adapter MITSUBISHI");
+ }
+
+ #endregion Public Constructors
+
+ #region Public Methods
+
+ ///
+ /// Processo i task richiesti e li elimino dalla coda 1:1
+ ///
+ ///
+ public override Dictionary executeTasks(Dictionary task2exe)
+ {
+ // Verificare il protocollo: dovrebbe togliere SOLO i task eseguiti...
+ Dictionary taskDone = new Dictionary();
+ if (task2exe != null)
+ {
+ bool taskOk = false;
+ string taskVal = "";
+ string newVal = "";
+ string memAddr = "";
+ long valLong = 0;
+ // 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);
+ switch (tName)
+ {
+ case taskType.setArt:
+ case taskType.setComm:
+ lgInfo($"Richiesta scrittura {tName}");
+ // salvo in memoria il valore richiesto...
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ if (memMap.mMapWrite.ContainsKey(item.Key))
+ {
+ dataConf currMem = memMap.mMapWrite[item.Key];
+ memAddr = currMem.memAddr;
+ taskVal = $"SET task: {item.Key} --> {newVal} | mem: {currMem.memAddr} - {currMem.size} byte";
+ // salvo il nuovo valore nella memoria... così prox invio lo trasmetterÃ
+ memMap.mMapWrite[item.Key].value = newVal;
+ }
+ else
+ {
+ taskVal = $"NO DATA MEM, SET task: {item.Key} --> {newVal} ({item.Value})";
+ }
+ }
+ else
+ {
+ taskVal = $"NO MemMap found, SET task: {item.Key} --> {newVal} ({item.Value})";
+ }
+ // salvo in currProd..
+ upsertKey(item.Key, item.Value);
+ break;
+
+ case taskType.nihil:
+ case taskType.fixStopSetup:
+ case taskType.forceResetPzCount:
+ case taskType.setProg:
+ case taskType.forceSetPzCount:
+ 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.setArtNum:
+ lgInfo($"Richiesta scrittura CodART numerico");
+ // in primis faccio una chiamata per tutta la tab SE fosse vuoto il dict
+ // di traduzione
+ if (DictNumArt == null || DictNumArt.Count == 0)
+ {
+ getNumArt("");
+ lgInfo($"Recuperato DictNumArt, trovati {DictNumArt.Count} rec");
+ }
+ // chiamo server x avere decodifica valore INT
+ newVal = getNumArt(item.Value);
+ // se c'è gestione semplificata num articolo --> usa trim dei soli
+ // caratteri alfabetici lasciando numeri..
+ if (numArtCharTrim)
+ {
+ newVal = baseUtils.GetNumbers(item.Value);
+ }
+ // converto int...
+ long.TryParse(newVal, out valLong);
+ // procedo come il resto cercando mappatura in memMap: recupero dati da memMap...
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ if (memMap.mMapWrite.ContainsKey(item.Key))
+ {
+ dataConf currMem = memMap.mMapWrite[item.Key];
+ memAddr = currMem.memAddr;
+ taskVal = $"SET task: {item.Key} --> {newVal} | mem: {currMem.memAddr} - {currMem.size} byte";
+ // salvo il nuovo valore nella memoria... così prox invio lo trasmetterÃ
+ memMap.mMapWrite[item.Key].value = newVal;
+ }
+ else
+ {
+ taskVal = $"NO DATA MEM, SET task: {item.Key} --> {newVal} ({item.Value})";
+ }
+ }
+ else
+ {
+ taskVal = $"NO MemMap found, SET task: {item.Key} --> {newVal} ({item.Value})";
+ }
+
+ // invio a controller...
+ taskOk = setNumArt(valLong);
+ //se ho successo rileggo ed eventualmente sistemo valore
+ if (taskOk)
+ {
+ var rVal = getValByMemAddr(memAddr);
+ if (rVal == newVal)
+ {
+ lgInfo("All OK");
+ // invio aggiornamento x reset richiesta... test!
+ sendOptVal(item.Key, newVal);
+ }
+ else
+ {
+ lgError($"Error | memAddr: {memAddr} | rVal: {rVal} | newVal: {newVal}");
+ }
+ }
+ else
+ {
+ lgError("Errore in scrittura SetNumArt");
+ }
+ // salvo in currProd..
+ upsertKey(item.Key, item.Value);
+ break;
+
+ case taskType.setCommNum:
+ lgInfo($"Richiesta scrittura cod COMMESSA numerica");
+ // chiamo server x avere decodifica valore INT
+ newVal = getNumComm(item.Value);
+ // converto int...
+ long.TryParse(newVal, out valLong);
+ //riscrivo senza eventuali zeri...
+ newVal = valLong > 0 ? $"{valLong}" : newVal;
+ lgTrace($"Conv.Int numComm | newVal: {newVal} | valLong: {valLong}");
+ // procedo come il resto cercando mappatura in memMap: recupero dati da memMap...
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ if (memMap.mMapWrite.ContainsKey(item.Key))
+ {
+ dataConf currMem = memMap.mMapWrite[item.Key];
+ memAddr = currMem.memAddr;
+ taskVal = $"SET task: {item.Key} --> {newVal} | mem: {currMem.memAddr} - {currMem.size} byte";
+ // salvo il nuovo valore nella memoria... così prox invio lo trasmetterÃ
+ memMap.mMapWrite[item.Key].value = newVal;
+ }
+ else
+ {
+ taskVal = $"NO DATA MEM, SET task: {item.Key} --> {newVal} ({item.Value})";
+ }
+ }
+ else
+ {
+ taskVal = $"NO MemMap found, SET task: {item.Key} --> {newVal} ({item.Value})";
+ }
+
+ // invio a controller...
+ taskOk = setNumCom(valLong);
+ //se ho successo rileggo ed eventualmente sistemo valore
+ if (taskOk)
+ {
+ //var rVal = getValByParam("SET_NUM_COM");
+ var rVal = getValByMemAddr(memAddr);
+ if (rVal == newVal)
+ {
+ lgInfo("All OK");
+ // invio aggiornamento x reset richiesta... test!
+ sendOptVal(item.Key, newVal);
+ }
+ else
+ {
+ lgError($"Error | memAddr: {memAddr} | rVal: {rVal} | newVal: {newVal}");
+ }
+ }
+ else
+ {
+ lgError("Errore in scrittura SetNumCom");
+ }
+ // salvo in currProd..
+ upsertKey(item.Key, item.Value);
+ break;
+
+ case taskType.setPzComm:
+ int pzReq = 0;
+ int.TryParse(item.Value, out pzReq);
+ // procedo come il resto cercando mappatura in memMap: recupero dati da memMap...
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ if (memMap.mMapWrite.ContainsKey(item.Key))
+ {
+ dataConf currMem = memMap.mMapWrite[item.Key];
+ memAddr = currMem.memAddr;
+ taskVal = $"SET task: {item.Key} --> {newVal} | mem: {currMem.memAddr} - {currMem.size} byte";
+ // salvo il nuovo valore nella memoria... così prox invio lo trasmetterÃ
+ memMap.mMapWrite[item.Key].value = newVal;
+ }
+ else
+ {
+ taskVal = $"NO DATA MEM, SET task: {item.Key} --> {newVal} ({item.Value})";
+ }
+ }
+ else
+ {
+ taskVal = $"NO MemMap found, SET task: {item.Key} --> {newVal} ({item.Value})";
+ }
+ // set pezzi richiesti inizio setup
+ taskOk = setPzComm(pzReq);
+ //se ho successo rileggo ed eventualmente sistemo valore
+ if (taskOk)
+ {
+ var rVal = getValByMemAddr(memAddr);
+ if (rVal == newVal)
+ {
+ lgInfo("All OK");
+ // invio aggiornamento x reset richiesta... test!
+ sendOptVal(item.Key, newVal);
+ }
+ else
+ {
+ lgError($"Error | memAddr: {memAddr} | rVal: {rVal} | newVal: {newVal}");
+ }
+ }
+ else
+ {
+ lgError("Errore in scrittura SetNumCom");
+ }
+ taskVal = taskOk ? "RESET: SETUP START" : "PZ RESET DISABLED | NO EXEC";
+ lgInfo($"Chiamata startSetup: taskOk: {taskOk} | taskVal: {taskVal}");
+
+ // salvo in currProd..
+ upsertKey(item.Key, item.Value);
+ break;
+
+ case taskType.startSetup:
+ // reset contapezzi inizio setup
+ taskOk = resetContapezziPLC();
+ taskVal = taskOk ? "RESET: SETUP START" : "PZ RESET DISABLED | NO EXEC";
+ lgInfo($"Chiamata startSetup: taskOk: {taskOk} | taskVal: {taskVal}");
+ break;
+
+ case taskType.stopSetup:
+ // reset contapezzi fine setup SE ESPLICITAMENTE IMPOSTATO
+ if (cIobConf.optPar.Count > 0 && getOptPar("ENABLE_PZ_RESET_stopSetup") == "TRUE")
+ {
+ taskOk = resetContapezziPLC();
+ }
+ taskVal = taskOk ? "RESET: SETUP END" : "PZ RESET DISABLED | NO EXEC";
+ lgInfo($"Chiamata stopSetup: taskOk: {taskOk} | taskVal: {taskVal}");
+ break;
+
+ case taskType.setParameter:
+ lgInfo($"Chiamata setParameter | NO processing: taskOk: {taskOk} | taskVal: {taskVal}");
+ taskVal = "setParameter | SKIPPED | NO EXEC";
+ break;
+
+ default:
+ lgInfo($"Chiamata default senza processing: taskOk: {taskOk} | taskVal: {taskVal}");
+ taskVal = "SKIPPED | NO EXEC";
+ break;
+ }
+
+ // aggiungo task!
+ taskDone.Add(item.Key, taskVal);
+ }
+ }
+ return taskDone;
+ }
+
+ ///
+ /// Recupero dati dinamici...
+ ///
+ public override Dictionary getDynData()
+ {
+ Dictionary outVal = new Dictionary();
+ // processo SOLO SE connected...
+ if (connectionOk)
+ {
+ // leggo i valori Var
+ ReadMitsubVars();
+
+ // cerco tra tutte le aree write le VARS...
+ foreach (var item in memMap.mMapWrite)
+ {
+ if (item.Value.memAddr.StartsWith("VAR"))
+ {
+ // certo in dict ed accodo...
+ int iVar = 0;
+ string sVar = item.Value.memAddr.Replace("VAR.", "");
+ int.TryParse(sVar, out iVar);
+ if (iVar > 0)
+ {
+ // cerco in dizionario...
+ if (DictVar.ContainsKey(iVar))
+ {
+ outVal.Add(item.Key, $"{DictVar[iVar]}");
+ upsertKey(item.Key, $"{DictVar[iVar]}");
+ }
+ }
+ }
+ }
+ // cerco tra tutte le aree read le VARS...
+ foreach (var item in memMap.mMapRead)
+ {
+ if (item.Value.memAddr.StartsWith("VAR"))
+ {
+ // certo in dict ed accodo...
+ int iVar = 0;
+ string sVar = item.Value.memAddr.Replace("VAR.", "");
+ int.TryParse(sVar, out iVar);
+ if (iVar > 0)
+ {
+ // cerco in dizionario...
+ if (DictVar.ContainsKey(iVar))
+ {
+ outVal.Add(item.Key, $"{DictVar[iVar]}");
+ upsertKey(item.Key, $"{DictVar[iVar]}");
+ }
+ }
+ }
+ }
+ // aggiungo DynData... calcolato come variazione pezzi e lampade...
+ if (outVal.ContainsKey("DYNDATA"))
+ {
+ outVal.Remove("DYNDATA");
+ }
+ StringBuilder sb = new StringBuilder();
+ // inserisco i segnali
+ sb.Append("SIGN:[");
+ foreach (var item in DictSign)
+ {
+ sb.Append($"{item.Key}:{item.Value}|");
+ }
+ // inserisco parametri
+ sb.Append("] PAR:[");
+ foreach (var item in DictParam)
+ {
+ sb.Append($"{item.Key}:{item.Value}|");
+ }
+ // inserisco le variabili
+ sb.Append("] VAR:[");
+ foreach (var item in outVal)
+ {
+ sb.Append($"{item.Value}|");
+ }
+ sb.Append("]");
+ outVal.Add("DYNDATA", sb.ToString());
+ }
+ return outVal;
+ }
+
+ ///
+ /// Recupero programma in lavorazione
+ ///
+ ///
+ public override string getPrgName()
+ {
+ string prgName = "";
+ // recupero NUOVO prgName...
+ try
+ {
+ int iRet = oEZNcAutCom.Program_GetProgramNumber2((Int32)PROGRAMTYPE.EZNC_MAINPRG, out String strProgramNo);
+
+ // recupero nome programma MAIN
+ prgName = utils.purgedChar2String(strProgramNo);
+ // trimmo path del programma SE presente
+ prgName = prgName.Replace(utils.CRS("basePrgMemPath"), "");
+ lgInfo("Current PROG: {0}", prgName);
+ }
+ catch (Exception exc)
+ {
+ lgError(string.Format("Eccezione in recupero PRG NAME MAIN:{0}{1}", Environment.NewLine, exc));
+ connectionOk = false;
+ }
+ return prgName;
+ }
+
+ ///
+ /// Recupero info lavorazione come Dictionary...
+ /// - SYSINFO: (prima KEY globale) TUTTI i valori separati da # (x fare check modifica)
+ /// - altre stringhe: ogni singolo parametro / valore
+ ///
+ ///
+ public override Dictionary getSysInfo()
+ {
+ Dictionary outVal = new Dictionary();
+ stopwatch.Restart();
+ try
+ {
+ oEZNcAutCom.System_GetSystemInformation(0, out int partSys);
+ outVal.Add("PartSys", $"{partSys}");
+ oEZNcAutCom.System_GetSystemInformation(1, out int numAx);
+ outVal.Add("NumAxis", $"{numAx}");
+ oEZNcAutCom.System_GetSerialNo(out string serNo);
+ outVal.Add("SerialNo", $"{serNo}");
+ for (int i = 0; i < 3; i++)
+ {
+ oEZNcAutCom.System_GetVersion(0, i, out string pVers);
+ outVal.Add($"V_{i}", $"{pVers}");
+ }
+ }
+ catch (Exception exc)
+ {
+ lgError($"Eccezione in getSysInfo{Environment.NewLine}{exc}");
+ connectionOk = false;
+ }
+ if (utils.CRB("recTime"))
+ {
+ TimingData.addResult(cIobConf.codIOB, string.Format("SYS-INFO"), stopwatch.ElapsedTicks);
+ }
+ return outVal;
+ }
+
+ ///
+ /// Effettua vero processing contapezzi da configurazione
+ /// PZCOUNT_MODE: pezzi lavorati (parziale)
+ /// PZGTOT_MODE: pezzi lavorati totali
+ /// PZREQ_MODE: pezzi richiesti
+ ///
+ public override void processContapezzi()
+ {
+ if ((enablePzCountByApp || enablePzCountByIob) && !(disablePzCountByIob))
+ {
+ // procedo SOLO SE ho connessione...
+ if (connectionOk)
+ {
+ try
+ {
+ // lettura parametri per procedere
+ ReadMitsubParams();
+ // controllo di AVERE parametri opzionali x conteggi vari
+ if (cIobConf.optPar.Count > 0)
+ {
+ // contapezzi ATTUALE
+ string memAddr = getOptPar("PZCOUNT_MODE");
+ if (!string.IsNullOrEmpty(memAddr))
+ {
+ // verifico quale modalità sia richiesta: STD oppure CST (Custom, TBD)
+ if (memAddr.StartsWith("STD"))
+ {
+ // inizio verifica area memoria/parametro levando prima parte codice
+ memAddr = memAddr.Replace("STD.", "");
+ }
+
+ // verifico SE sia di tipo PAR e cerco valore...
+ int cntAddr = 0;
+ if (memAddr.StartsWith("PAR."))
+ {
+ // recupero parametro...
+ int.TryParse(memAddr.Replace("PAR.", ""), out cntAddr);
+ }
+ // cerco in dizionario...
+ if (DictParam.ContainsKey(cntAddr))
+ {
+ string rawVal = DictParam[cntAddr];
+ int newVal = -1;
+ Int32.TryParse(rawVal, out newVal);
+ contapezziPLC = newVal > -1 ? newVal : contapezziPLC;
+ }
+
+ stopwatch.Stop();
+ }
+ }
+ }
+ catch (Exception exc)
+ {
+ lgError(exc, "Errore in contapezzi MITSUBISHI 02");
+ connectionOk = false;
+ }
+ }
+ else
+ {
+ lgError("Errore: manca connessione in contapezzi MITSUBISHI");
+ }
+ }
+ }
+
+ ///
+ /// Recupero altri counters se ci sono
+ ///
+ public override void processOtherCounters()
+ {
+ try
+ {
+ // lettura parametri per procedere
+ ReadMitsubParams();
+
+ // controllo di AVERE parametri opzionali x conteggi vari
+ if (cIobConf.optPar.Count > 0)
+ {
+ // gestione con ricerca in memoria Write / optPar...
+ if (string.IsNullOrEmpty(memAddrPzReq))
+ {
+ lgTrace("PzReq disabilitato | NO memConf.Write | NO optPar");
+ }
+ else
+ {
+ sendOptVal(memNamePzReq, getValByMemAddr(memAddrPzReq));
+ }
+ if (string.IsNullOrEmpty(memAddrArt))
+ {
+ lgTrace("Articolo disabilitato | NO memConf.Write | NO optPar");
+ }
+ else
+ {
+ sendOptVal(memNameArt, getValByMemAddr(memAddrArt));
+ }
+ if (string.IsNullOrEmpty(memAddrCom))
+ {
+ lgTrace("Commessa disabilitata | NO memConf.Write | NO optPar");
+ }
+ else
+ {
+ sendOptVal(memNameCom, getValByMemAddr(memAddrCom));
+ }
+ if (string.IsNullOrEmpty(memAddrPzCnt))
+ {
+ lgTrace("PzCount disabilitato | NO memConf.Write | NO optPar");
+ }
+ else
+ {
+ sendOptVal(memNamePzCnt, getValByMemAddr(memAddrPzCnt));
+ }
+ if (string.IsNullOrEmpty(memAddrPzCntTot))
+ {
+ lgTrace("PzCntTOT disabilitato | NO memConf.Write | NO optPar");
+ }
+ else
+ {
+ sendOptVal(memNamePzCntTot, getValByMemAddr(memAddrPzCntTot));
+ }
+ if (string.IsNullOrEmpty(memAddrCaden))
+ {
+ lgTrace("Cadenza disabilitata | NO memConf.Write | NO optPar");
+ }
+ else
+ {
+ sendOptVal(memNameCaden, getValByMemAddr(memAddrCaden));
+ }
+ }
+ }
+ catch (Exception exc)
+ {
+ lgError(exc, "Eccezione in processOtherCounters");
+ }
+ }
+
+ ///
+ /// Effettua lettura semafori principale Parametri da
+ /// aggiornare x display in form
+ ///
+ public override void readSemafori(ref newDisplayData currDispData)
+ {
+ DateTime adesso = DateTime.Now;
+ base.readSemafori(ref currDispData);
+ // verifico non sia in veto invio iniziale...
+ if (queueInEnabCurr)
+ {
+ try
+ {
+ if (verboseLog)
+ {
+ lgInfo("inizio read semafori");
+ }
+
+ currDispData.semIn = Semaforo.SV;
+ ReadMitsubGenData();
+ // salvo il solo BYTE dell'input decifrando il semaforo...
+ decodeToBitmap();
+ reportRawInput(ref currDispData);
+ }
+ catch (Exception exc)
+ {
+ lgError(string.Format("Eccezione in readSemafori:{0}{1}", Environment.NewLine, exc));
+ connectionOk = false;
+ currDispData.semIn = Semaforo.SR;
+ }
+ }
+ else
+ {
+ lgDebug($"[VETO readSemafori] | veto attivo alle {adesso:yyyy.MM.dd HH:mm:ss}");
+ checkVetoQueueIn();
+ }
+ }
+
+ ///
+ /// Effettua reset del contapezzi
+ ///
+ ///
+ public override bool resetContapezziPLC()
+ {
+ bool answ = false;
+ // ...SE abilitato da conf IOB
+ if (cIobConf.optPar.Count > 0 && getOptPar("ENABLE_PZ_RESET") == "TRUE")
+ {
+ // scrivo valore 0 x il contapezzi
+ try
+ {
+ // contapezzi ATTUALE
+ if (!string.IsNullOrEmpty(getOptPar("PZCOUNT_MODE")))
+ {
+ int valReq = 0;
+ // scrivo valore 0 x il contapezzi
+ try
+ {
+ answ = writeMitsubMem("NumPz", memAddrPzCnt, valReq);
+ }
+ catch (Exception exc)
+ {
+ lgError($"Errore in SET NumPz MITSUBISHI{Environment.NewLine}{exc}");
+ }
+ answ = true;
+ }
+ }
+ catch (Exception exc)
+ {
+ lgError(exc, "Errore in RESET contapezzi MITSUBISHI");
+ connectionOk = false;
+ }
+ answ = true;
+ }
+ return answ;
+ }
+
+ ///
+ /// Effettua impostazione del valore numerico ARTICOLO (specifico MITSUBISHI)
+ ///
+ ///
+ public bool setNumArt(double valReq)
+ {
+ bool answ = false;
+ string memAddr = memAddrArt;
+ lgTrace($"INIT setNumArt | memAddr: {memAddr}");
+ if (cIobConf.optPar.Count > 0 && !string.IsNullOrEmpty(memAddr))
+ {
+ // scrivo valore richiesto in area configurata
+ try
+ {
+ answ = writeMitsubMem("CodArt", memAddr, valReq);
+ }
+ catch (Exception exc)
+ {
+ lgError(exc, "Errore in setNumArt MITSUBISHI");
+ }
+ }
+ return answ;
+ }
+
+ ///
+ /// Effettua impostazione del valore numerico COMMESSA (specifico MITSUBISHI)
+ ///
+ ///
+ public bool setNumCom(double valReq)
+ {
+ bool answ = false;
+ // verifico quale modalità sia richiesta
+ string memAddr = memAddrCom;
+ lgTrace($"INIT setNumCom | memAddr: {memAddr}");
+ if (cIobConf.optPar.Count > 0 && !string.IsNullOrEmpty(memAddr))
+ {
+ lgTrace($"setNumCom | memAddr: {memAddr} | valReq: {valReq}");
+ // scrivo valore richiesto in area configurata
+ try
+ {
+ answ = writeMitsubMem("ODL", memAddr, valReq);
+ }
+ catch (Exception exc)
+ {
+ lgError(exc, "Errore in setNumCom MITSUBISHI");
+ }
+ answ = true;
+ }
+ return answ;
+ }
+
+ ///
+ /// Effettua impostazione del conteggio pezzi richiesti
+ ///
+ ///
+ public override bool setPzComm(int valReq)
+ {
+ bool answ = false;
+ // ...SE abilitato da conf IOB
+ if (cIobConf.optPar.Count > 0 && getOptPar("ENABLE_PZ_REQ") == "TRUE")
+ {
+ // scrivo valore 0 x il contapezzi
+ try
+ {
+ bool write1 = writeMitsubMem("NumPz", memAddrPzReq, valReq);
+ bool write2 = writeMitsubMem("PzOdl", memAddrPzReqOdl, valReq);
+ answ = write1 && write2;
+ }
+ catch (Exception exc)
+ {
+ lgError($"Errore in SET NumPz MITSUBISHI{Environment.NewLine}{exc}");
+ }
+ answ = true;
+ }
+ return answ;
+ }
+
+ ///
+ /// Override connessione
+ ///
+ public override void tryConnect()
+ {
+ if (!connectionOk)
+ {
+ // controllo che il ping sia stato tentato almeno pingTestSec fa...
+ if (DateTime.Now.Subtract(lastPING).TotalSeconds > utils.CRI("pingTestSec"))
+ {
+ if (verboseLog || periodicLog)
+ {
+ lgInfo("MITSUBISHI: ConnKO - tryConnect");
+ }
+ // in primis salvo data ping...
+ lastPING = DateTime.Now;
+ // ora PING!!!
+ Ping pingSender = new Ping();
+ IPAddress address = IPAddress.Loopback;
+ IPAddress.TryParse(cIobConf.cncIpAddr, out address);
+ PingReply reply;
+ try
+ {
+ // se != null --> uso address...
+ if (address != null)
+ {
+ reply = pingSender.Send(address, 100);
+ }
+ else
+ {
+ reply = pingSender.Send(cIobConf.cncIpAddr, 100);
+ }
+ }
+ catch
+ {
+ reply = pingSender.Send(IPAddress.Loopback, 100);
+ }
+ // se passa il ping faccio il resto...
+ if (reply.Status == IPStatus.Success)
+ {
+ string szStatusConnection = "";
+ try
+ {
+ // ora provo connessione...
+ parentForm.commPlcActive = true;
+
+ // Open communication
+ int iRet = 0;
+ oEZNcAutCom = new EZNCAUTLib.DispEZNcCommunication();
+ iRet = oEZNcAutCom.SetTCPIPProtocol(ipAddr, ezPort);
+ iRet = oEZNcAutCom.Open3((int)sysType, 1, 10, hostName);
+ parentForm.commPlcActive = false;
+ lgInfo($"Mitubishi | open Result: {iRet}");
+ connectionOk = iRet == 0;
+ connectionOk = true;
+ // refresh stato allarmi!!!
+ if (connectionOk)
+ {
+ checkVetoQueueIn();
+ dtAvvioAdp = DateTime.Now;
+ if (adpRunning)
+ {
+ lgInfo("Connessione OK");
+ }
+ }
+ else
+ {
+ lgError("Impossibile procedere, connessione mancante...");
+ }
+ }
+ catch (Exception exc)
+ {
+ lgFatal(string.Format("Errore nella connessione all'adapter MITSUBISHI: {0}{1}{2}", szStatusConnection, Environment.NewLine, exc));
+ connectionOk = false;
+ lgInfo(string.Format("Eccezione in TryConnect, Adapter NON running, pausa di {0} msec prima di ulteriori tentativi di riconnessione", utils.CRI("waitRecMSec")));
+ }
+ }
+ else
+ {
+ // loggo no risposta ping ...
+ connectionOk = false;
+ if (verboseLog || periodicLog)
+ {
+ lgInfo(string.Format("Attenzione: controllo PING fallito per IP {0} - {1}", cIobConf.cncPingAddr, reply.Status));
+ }
+ }
+ }
+ }
+ // se non è ancora connesso faccio procesisng memoria caso disconnesso...
+ if (!connectionOk)
+ {
+ // processo semafori ed invio...
+ processMemoryDiscon();
+ }
+ }
+
+ ///
+ /// Override disconnessione
+ ///
+ public override void tryDisconnect()
+ {
+ if (connectionOk)
+ {
+ string szStatusConnection = "";
+ try
+ {
+ // Close.
+ var iRet = oEZNcAutCom.Close();
+ //Release object
+ oEZNcAutCom = null;
+ connectionOk = false;
+ // resetto timing!
+ TimingData.resetData();
+ lgInfo(szStatusConnection);
+ lgInfo("Effettuata disconnessione adapter MITSUBISHI!");
+ }
+ catch (Exception exc)
+ {
+ lgFatal(exc, "Errore nella disconnessione dall'adapter MITSUBISHI");
+ }
+ }
+ else
+ {
+ lgError("IMPOSSIBILE effettuare disconnessione: Connessione non disponibile...");
+ }
+ queueInEnabCurr = false;
+ }
+
+ #endregion Public Methods
+
+ #region Protected Fields
+
+ ///
+ /// Porta di comunicazione INT
+ ///
+ protected int ezPort = 683;
+
+ ///
+ /// Nome amcchina x connessione
+ ///
+ protected string hostName = "EZNC_LOCALHOST";
+
+ ///
+ /// Nome/IP del CN
+ ///
+ protected string ipAddr = "";
+
+ ///
+ /// Obj di comunicazione Mitsubishi
+ ///
+ protected EZNCAUTLib.DispEZNcCommunication oEZNcAutCom = null;
+
+ #endregion Protected Fields
+
+ #region Protected Methods
+
+ ///
+ /// Metodo da overridare x scrivere DAVVERO i parametri sul PLC
+ ///
+ ///
+ protected override void plcWriteParams(ref List updatedPar)
+ {
+ lgTrace($"plcWriteParams: richiesta per {updatedPar.Count} params");
+ foreach (var item in updatedPar)
+ {
+ lgInfo($"ITEM | {item.uid} | {item.value}");
+ // effettuo scrittura SE configurata in write param...
+ bool fatto = false;
+ double valReq = 0;
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ if (memMap.mMapWrite.ContainsKey(item.uid))
+ {
+ double.TryParse(item.value, out valReq);
+ var currSet = memMap.mMapWrite[item.uid];
+ if (string.IsNullOrEmpty(currSet.memAddr))
+ {
+ fatto = true;
+ }
+ else
+ {
+ fatto = writeMitsubMem(currSet.description, currSet.memAddr, valReq);
+ }
+ }
+ }
+ // salvo i valori ricevuti
+ upsertKey(item.uid, item.reqValue);
+ // se i valori richiesto e fatto corrispondono... resetto!
+ if (fatto && item.reqValue.Trim() == item.value.Trim())
+ {
+ // resetto richiesta!
+ item.reqValue = "";
+ }
+ }
+ }
+
+ #endregion Protected Methods
+
+ #region Private Fields
+
+ private DateTime lastParRefr = DateTime.Now;
+
+ private DateTime lastSigRefr = DateTime.Now;
+
+ private DateTime lastVarRefr = DateTime.Now;
+
+ ///
+ /// Max num caratteri string ammessi VAR label
+ ///
+ private int maxVarStrLen = 7;
+
+ ///
+ /// Num celle Var da leggere
+ ///
+ private int MemVarSize = 1;
+
+ ///
+ /// Indirizzo partenza lettura Var(100/500)
+ ///
+ private int MemVarStart = 500;
+
+ ///
+ /// Num celle Param da leggere
+ ///
+ private int ParamSize = 1;
+
+ ///
+ /// Indirizzo partenza lettura Param
+ ///
+ private int ParamStart = 8000;
+
+ ///
+ /// LookUpTable di decodifica da CNC a segnali tipo bitmap MAPO
+ ///
+ private Dictionary signLUT = new Dictionary();
+
+ ///
+ /// Num celle Signal da leggere
+ ///
+ private int SignSize = 3;
+
+ ///
+ /// Indirizzo partenza lettura Signal
+ ///
+ private int SignStart = 10096;
+
+ ///
+ /// Tipo di controllo gestito
+ ///
+ private SYSTEMTYPE sysType = SYSTEMTYPE.EZNC_SYS_MELDAS700L;
+
+ #endregion Private Fields
+
+ #region Private Enums
+
+ ///
+ /// Tipo program
+ ///
+ private enum PROGRAMTYPE
+ {
+ ///
+ /// Main Program メインプãƒã‚°ãƒ©ãƒ
+ ///
+ EZNC_MAINPRG = 0,
+
+ ///
+ /// Sub Program サブプãƒã‚°ãƒ©ãƒ
+ ///
+ EZNC_SUBPRG = 1,
+ }
+
+ ///
+ /// Controllo specifico da gestire
+ ///
+ private enum SYSTEMTYPE
+ {
+ ///
+ /// M700L
+ ///
+ EZNC_SYS_MELDAS700L = 5,
+
+ ///
+ /// M700M
+ ///
+ EZNC_SYS_MELDAS700M = 6,
+
+ ///
+ /// C70
+ ///
+ EZNC_SYS_MELDASC70 = 7,
+
+ ///
+ /// M800L
+ ///
+ EZNC_SYS_MELDAS800L = 8,
+
+ ///
+ /// M800M
+ ///
+ EZNC_SYS_MELDAS800M = 9,
+
+ ///
+ /// C80
+ ///
+ EZNC_SYS_CNCC80 = 10,
+ }
+
+ #endregion Private Enums
+
+ #region Private Properties
+
+ ///
+ /// Dictionary contenuto memorie Param
+ ///
+ private Dictionary DictParam { get; set; } = new Dictionary();
+
+ ///
+ /// Dictionary contenuto dati Signal (es Y)
+ ///
+ private Dictionary DictSign { get; set; } = new Dictionary();
+
+ ///
+ /// Dictionary contenuto memorie Var
+ ///
+ private Dictionary DictVar { get; set; } = new Dictionary();
+
+ private string memAddrArt
+ {
+ get
+ {
+ string memAddr = "";
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("setArtNum"))
+ {
+ memAddr = memMap.mMapWrite["setArtNum"].memAddr;
+ }
+ // se vuoto provo altra alternativa...
+ if (string.IsNullOrEmpty(memAddr) && memMap.mMapWrite.ContainsKey("setArt"))
+ {
+ memAddr = memMap.mMapWrite["setArt"].memAddr;
+ }
+ }
+ // se non trovato... leggo da OPT_PAR
+ if (string.IsNullOrEmpty(memAddr))
+ {
+ memAddr = getOptPar("SET_NUM_ART");
+ }
+ // bonifica variabile da definizione STD iniziale...
+ if (memAddr.StartsWith("STD"))
+ {
+ memAddr = memAddr.Replace("STD.", "");
+ }
+ return memAddr;
+ }
+ }
+
+ private string memAddrCaden
+ {
+ get
+ {
+ string memAddr = "";
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("Cadenza"))
+ {
+ memAddr = memMap.mMapWrite["Cadenza"].memAddr;
+ }
+ }
+ // se non trovato... leggo da OPT_PAR
+ if (string.IsNullOrEmpty(memAddr))
+ {
+ memAddr = getOptPar("PZCAD_MODE");
+ }
+ // bonifica variabile da definizione STD iniziale...
+ if (memAddr.StartsWith("STD"))
+ {
+ memAddr = memAddr.Replace("STD.", "");
+ }
+ return memAddr;
+ }
+ }
+
+ private string memAddrCom
+ {
+ get
+ {
+ string memAddr = "";
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("setCommNum"))
+ {
+ memAddr = memMap.mMapWrite["setCommNum"].memAddr;
+ }
+ // se vuoto provo altra alternativa...
+ if (string.IsNullOrEmpty(memAddr) && memMap.mMapWrite.ContainsKey("setComm"))
+ {
+ memAddr = memMap.mMapWrite["setComm"].memAddr;
+ }
+ }
+ // se non trovato... leggo da OPT_PAR
+ if (string.IsNullOrEmpty(memAddr))
+ {
+ memAddr = getOptPar("SET_NUM_COM");
+ }
+ // bonifica variabile da definizione STD iniziale...
+ if (memAddr.StartsWith("STD"))
+ {
+ memAddr = memAddr.Replace("STD.", "");
+ }
+ return memAddr;
+ }
+ }
+
+ private string memAddrPzCnt
+ {
+ get
+ {
+ string memAddr = "";
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("ContatoreParziale"))
+ {
+ memAddr = memMap.mMapWrite["ContatoreParziale"].memAddr;
+ }
+ }
+ // se non trovato... leggo da OPT_PAR
+ if (string.IsNullOrEmpty(memAddr))
+ {
+ memAddr = getOptPar("PZCOUNT_MODE");
+ }
+ // bonifica variabile da definizione STD iniziale...
+ if (memAddr.StartsWith("STD"))
+ {
+ memAddr = memAddr.Replace("STD.", "");
+ }
+ return memAddr;
+ }
+ }
+
+ private string memAddrPzCntTot
+ {
+ get
+ {
+ string memAddr = "";
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("ContatoreAssoluto"))
+ {
+ memAddr = memMap.mMapWrite["ContatoreAssoluto"].memAddr;
+ }
+ }
+ // se non trovato... leggo da OPT_PAR
+ if (string.IsNullOrEmpty(memAddr))
+ {
+ memAddr = getOptPar("PZGTOT_MODE");
+ }
+ // bonifica variabile da definizione STD iniziale...
+ if (memAddr.StartsWith("STD"))
+ {
+ memAddr = memAddr.Replace("STD.", "");
+ }
+ return memAddr;
+ }
+ }
+
+ private string memAddrPzReq
+ {
+ get
+ {
+ string memAddr = "";
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("setPzComm"))
+ {
+ memAddr = memMap.mMapWrite["setPzComm"].memAddr;
+ }
+ }
+ // se non trovato... leggo da OPT_PAR
+ if (string.IsNullOrEmpty(memAddr))
+ {
+ memAddr = getOptPar("PZREQ_MODE");
+ }
+ // bonifica variabile da definizione STD iniziale...
+ if (memAddr.StartsWith("STD"))
+ {
+ memAddr = memAddr.Replace("STD.", "");
+ }
+ return memAddr;
+ }
+ }
+
+ ///
+ /// Area memoria PzOdl, NON abilitata in scrittura utente (è duplo/copia)
+ ///
+ private string memAddrPzReqOdl
+ {
+ get
+ {
+ string memAddr = "";
+ //cerco prima in read area
+ if (memMap != null && memMap.mMapRead != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapRead.ContainsKey("setPzCommOdl"))
+ {
+ memAddr = memMap.mMapRead["setPzCommOdl"].memAddr;
+ }
+ }
+ // cerco anche in write se non trovata..
+ if (string.IsNullOrEmpty(memAddr))
+ {
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("setPzCommOdl"))
+ {
+ memAddr = memMap.mMapWrite["setPzCommOdl"].memAddr;
+ }
+ }
+ }
+ // bonifica variabile da definizione STD iniziale...
+ if (memAddr.StartsWith("STD"))
+ {
+ memAddr = memAddr.Replace("STD.", "");
+ }
+ return memAddr;
+ }
+ }
+
+ private string memNameArt
+ {
+ get
+ {
+ string memName = "";
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("setArtNum"))
+ {
+ memName = "setArtNum";
+ }
+ // se vuoto provo altra alternativa...
+ if (string.IsNullOrEmpty(memName) && memMap.mMapWrite.ContainsKey("setArt"))
+ {
+ memName = "setArt";
+ }
+ }
+ // se non trovato... leggo da OPT_PAR
+ if (string.IsNullOrEmpty(memName))
+ {
+ memName = "PZ_COUNT";
+ }
+ return memName;
+ }
+ }
+
+ private string memNameCaden
+ {
+ get
+ {
+ string memName = "";
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("Cadenza"))
+ {
+ memName = "Cadenza";
+ }
+ }
+ // se non trovato... leggo da OPT_PAR
+ if (string.IsNullOrEmpty(memName))
+ {
+ memName = "CICLE_CAD";
+ }
+ return memName;
+ }
+ }
+
+ private string memNameCom
+ {
+ get
+ {
+ string memName = "";
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("setCommNum"))
+ {
+ memName = "setCommNum";
+ }
+ // se vuoto provo altra alternativa...
+ if (string.IsNullOrEmpty(memName) && memMap.mMapWrite.ContainsKey("setComm"))
+ {
+ memName = "setComm";
+ }
+ }
+ // se non trovato... leggo da OPT_PAR
+ if (string.IsNullOrEmpty(memName))
+ {
+ memName = "SET_NUM_COM";
+ }
+ return memName;
+ }
+ }
+
+ private string memNamePzCnt
+ {
+ get
+ {
+ string memName = "";
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("ContatoreParziale"))
+ {
+ memName = "ContatoreParziale";
+ }
+ }
+ // se non trovato... leggo da OPT_PAR
+ if (string.IsNullOrEmpty(memName))
+ {
+ memName = "PZ_COUNT";
+ }
+ return memName;
+ }
+ }
+
+ private string memNamePzCntTot
+ {
+ get
+ {
+ string memName = "";
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("ContatoreAssoluto"))
+ {
+ memName = "ContatoreAssoluto";
+ }
+ }
+ // se non trovato... leggo da OPT_PAR
+ if (string.IsNullOrEmpty(memName))
+ {
+ memName = "PZ_GTOT";
+ }
+ return memName;
+ }
+ }
+
+ private string memNamePzReq
+ {
+ get
+ {
+ string memName = "";
+ if (memMap != null && memMap.mMapWrite != null)
+ {
+ //cerco in primis modalità NUM altrimenti standard...
+ if (memMap.mMapWrite.ContainsKey("setPzComm"))
+ {
+ memName = "setPzComm";
+ }
+ }
+ // se non trovato... leggo da OPT_PAR
+ if (string.IsNullOrEmpty(memName))
+ {
+ memName = "PZ_REQ";
+ }
+ return memName;
+ }
+ }
+
+ #endregion Private Properties
+
+ #region Private Methods
+
+ ///
+ /// Effettua decodifica aree memoria alla bitmap usata x MAPO
+ ///
+ private void decodeToBitmap()
+ {
+ /*------------------------------------------
+ * Bitmap MAPO STD 54
+ * B0: POWER_ON
+ * B1: RUN
+ * B2: pzCount
+ * B3: allarme
+ * B4: manuale
+ * B5: Emerg (1 = emergenza, 0 = NON emergenza)
+ *
+ *------------------------------------------*/
+ // init a zero...
+ B_input = 0;
+ if (connectionOk)
+ {
+ // vedere conf:
+ // Y60: RED
+ // Y61: YELLOW
+ // Y62: GREEN
+ // Y63: BLUE
+
+ // default connesso = poweron, valutare se blue?
+ B_input += 1 << 0;
+
+ string bKey = "";
+ string bVal = "";
+ // decodifico impiegando dictionary... cercando il TIPO di memoria & co...
+ char area;
+ // valore INVERTED (default è false)
+ bool invSignal = false;
+ string memArea = "";
+ string cVal = "";
+ string[] memIdx;
+ int bitNum = 0;
+ int byteNum = 0;
+ int byte2check = 0;
+ for (int i = 0; i < 8; i++)
+ {
+ bKey = $"BIT{i}";
+ // cerco se ci sia in LUT
+ if (signLUT.ContainsKey(bKey))
+ {
+ // recupero nome variabile...
+ bVal = signLUT[bKey];
+ // se l'area è PZCOUNT... processo PUNTUALMENTE il CONTAPEZZI...
+ if (bVal.StartsWith("PZCOUNT"))
+ {
+ // disabilito pzcount singolo
+#if false
+ // 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(string.Format("MITSUBISHI | Lettura ODL andata a vuoto: currODL: {0}", currODL));
+ }
+ }
+ else
+ {
+ // se variato o scaduto timeout log...
+ if (periodicLog || ($"{currIdxODL}" != currODL))
+ {
+ lgInfo(string.Format("MITSUBISHI | 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($"MITSUBISHI | Lettura ODL non effettuata: IobOnline: {IobOnline} | currODL impostato a vuoto");
+ }
+ }
+ if (!string.IsNullOrEmpty(currODL) && currODL != "0")
+ {
+ // 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}");
+ }
+
+ if ((enablePzCountByApp || enablePzCountByIob) && !(disablePzCountByIob))
+ {
+ // verifico se variato contapezzi...
+ 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 MITSUBISHI: {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 MITSUBISHI: 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 MITSUBISHI: {contapezziPLC} | contapezziIOB {contapezziIOB}");
+ // resetto timer...
+ lastPzCountSend = DateTime.Now;
+ }
+ }
+#endif
+ }
+ else // area "normale" byte.bit
+ {
+ // di norma è segnale normale => 1, altrimenti inverse => 0...
+ invSignal = false;
+ // cerco se sia inverse (primo char "!") --> registro e elimino char...
+ invSignal = bVal.StartsWith("!");
+ // se è da tracciare...
+ if (mem2trace.Contains($"|{bKey}|"))
+ {
+ if (invSignal)
+ {
+ lgTrace($"Segnale invertito | bVal: {bVal}");
+ }
+ }
+ // tolgo comunque inversione...
+ bVal = bVal.Replace("!", "");
+
+ // recupero int key
+ int iKey = 0;
+ int.TryParse(bVal, out iKey);
+ // leggo dizionario richiesto
+ if (DictSign.ContainsKey(iKey))
+ {
+ cVal = DictSign[iKey];
+ }
+
+ // a secondo che sia segnale normale o inverso...
+ if (invSignal)
+ {
+ // controllo se il bit sia NON attivo (basso)... == 0
+ if (cVal == "0")
+ {
+ B_input += 1 << i;
+ }
+ }
+ else
+ {
+ // controllo se il bit sia attivo (alto)... == 1
+ if (cVal == "1")
+ {
+ B_input += 1 << i;
+ }
+ }
+
+ // se è da tracciare...
+ if (mem2trace.Contains($"|{bKey}|"))
+ {
+ var bMapAct = Convert.ToString(byte2check, 2).PadLeft(8, '0');
+ var bMapReq = Convert.ToString((1 << bitNum), 2).PadLeft(8, '0');
+ lgTrace($"Valore | bKey: {bKey} | bVal: {bVal} | byte: {bMapAct} | tgt: {bMapReq} | B_input: {B_input}");
+ }
+ }
+ }
+ }
+ }
+ // log opzionale!
+ if (verboseLog)
+ {
+ lgInfo(string.Format("Trasformazione B_input: {0}", B_input));
+ }
+ }
+
+ ///
+ /// Recupera il valore da memoria per successivo processing
+ ///
+ ///
+ ///
+ private string getValByMemAddr(string memAddr)
+ {
+ lgTrace($"inizio getValByMemAddr | memAddr: {memAddr}");
+ string answ = "";
+ // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con indicazione area)
+ if (memAddr.StartsWith("STD"))
+ {
+ // inizio verifica area memoria/parametro levando prima parte codice
+ memAddr = memAddr.Replace("STD.", "");
+ }
+ // var di appoggio
+ int cntAddr = 0;
+ // verifico se si tratta di lettura parametro... formato tipo STD.PAR.8001
+ if (memAddr.StartsWith("PAR."))
+ {
+ // recupero parametro...
+ int.TryParse(memAddr.Replace("PAR.", ""), out cntAddr);
+ // cerco in dizionario...
+ if (DictParam.ContainsKey(cntAddr))
+ {
+ answ = DictParam[cntAddr];
+ }
+ }
+ else if (memAddr.StartsWith("VAR."))
+ {
+ // recupero parametro...
+ int.TryParse(memAddr.Replace("VAR.", ""), out cntAddr);
+ // cerco in dizionario...
+ if (DictVar.ContainsKey(cntAddr))
+ {
+ answ = $"{DictVar[cntAddr]}";
+ }
+ }
+ return answ;
+ }
+
+ ///
+ /// Recupera il valore INT dal nome del parametro per successivo processing
+ ///
+ ///
+ ///
+ private string getValByParam(string varName)
+ {
+ string memAddr = getOptPar(varName);
+ string answ = getValByMemAddr(memAddr);
+ if (isVerboseLog)
+ {
+ lgInfo($"[3] PAR letto: {varName} | {answ}");
+ }
+ return answ;
+ }
+
+ ///
+ /// Lettura dati generici (es var Y)
+ ///
+ private void ReadMitsubGenData()
+ {
+ DateTime adesso = DateTime.Now;
+ int parSPeriod = samplePeriod;
+ // controllo se sia passato il samplePeriod minimo...
+ if (adesso.Subtract(lastSigRefr.AddMilliseconds(parSPeriod)).TotalSeconds > 0)
+ {
+ lastSigRefr = adesso;
+ stopwatch.Restart();
+ // in primis: leggo i valor in sequenza e salvo in dizionario...
+ object pvRead = "bbb";
+ // sezione segnali: cablata 53...
+ int sec = 53;
+ // Start da Y60 (Hex) --> 10000+96
+ for (int i = SignStart; i < SignStart + SignSize; i++)
+ {
+ oEZNcAutCom.Generic_ReadData(0, sec, i, ref pvRead);
+ UpsertSign(i, $"{pvRead}");
+ if (verboseLog)
+ {
+ lgTrace($"Sign | {i} : {pvRead}");
+ }
+ }
+ // recording tempi
+ if (utils.CRB("recTime"))
+ {
+ TimingData.addResult(cIobConf.codIOB, $"Sign{SignSize}-R", stopwatch.ElapsedTicks);
+ }
+ stopwatch.Stop();
+ }
+ else
+ {
+ lgTrace($"Saltata ReadMitsubGenData x periodo minimo {parSPeriod} ms");
+ }
+ }
+
+ ///
+ /// Lettura area parametri mitsubishi come configurato
+ ///
+ private void ReadMitsubParams()
+ {
+ DateTime adesso = DateTime.Now;
+ int parSPeriod = samplePeriod * 3;
+ // controllo se sia passato il samplePeriod minimo...
+ if (adesso.Subtract(lastParRefr.AddMilliseconds(parSPeriod)).TotalSeconds > 0)
+ {
+ lastParRefr = adesso;
+ // per prima cosa processo la lettura parametri e li salvo in DICT
+ int lAxis = 0;
+ object parValue = "";
+ stopwatch.Restart();
+ int iRet = oEZNcAutCom.Parameter_GetData3(0, ParamStart, ParamSize, lAxis, out parValue);
+ if (utils.CRB("recTime"))
+ {
+ TimingData.addResult(cIobConf.codIOB, $"R{ParamSize}-PAR", stopwatch.ElapsedTicks);
+ }
+ // converto in array di string...
+ string[] rawData = (string[])parValue;
+ // salvo in dict...
+ for (int i = 0; i < ParamSize; i++)
+ {
+ UpsertParam(ParamStart + i, rawData[i]);
+ }
+ }
+ else
+ {
+ lgTrace($"Saltata ReadMitsubParams x periodo minimo {parSPeriod} ms");
+ }
+ }
+
+ ///
+ /// Lettura area Var100/Var500 mitsubishi come configurato
+ ///
+ private void ReadMitsubVars()
+ {
+ DateTime adesso = DateTime.Now;
+ int parSPeriod = samplePeriod * 5;
+ // controllo se sia passato il samplePeriod minimo...
+ if (adesso.Subtract(lastVarRefr.AddMilliseconds(parSPeriod)).TotalSeconds > 0)
+ {
+ lastVarRefr = adesso;
+ // per prima cosa processo la lettura Variabili e li salvo in DICT
+ double pData = 0;
+ int pType = 0;
+ stopwatch.Restart();
+ for (int i = MemVarStart; i < MemVarStart + MemVarSize; i++)
+ {
+ oEZNcAutCom.CommonVariable_Read2(i, out pData, out pType);
+ UpsertVar(i, pData);
+ if (verboseLog)
+ {
+ lgTrace($"Var | {i} : {pData}");
+ }
+ }
+ if (utils.CRB("recTime"))
+ {
+ TimingData.addResult(cIobConf.codIOB, $"R{MemVarSize}-VAR", stopwatch.ElapsedTicks);
+ }
+ }
+ else
+ {
+ lgTrace($"Saltata ReadMitsubVars x periodo minimo {parSPeriod} ms");
+ }
+ }
+
+ ///
+ /// Upsert info in DICT dei Params (es 8001..8003 contatori pezzi)
+ ///
+ ///
+ ///
+ private void UpsertParam(int key, string value)
+ {
+ if (DictParam.ContainsKey(key))
+ {
+ DictParam[key] = value;
+ }
+ else
+ {
+ DictParam.Add(key, value);
+ }
+ }
+
+ ///
+ /// Upsert info in DICT dei SIGNAL (es Y)
+ ///
+ ///
+ ///
+ private void UpsertSign(int key, string value)
+ {
+ if (DictSign.ContainsKey(key))
+ {
+ DictSign[key] = value;
+ }
+ else
+ {
+ DictSign.Add(key, value);
+ }
+ }
+
+ ///
+ /// Upsert info in DICT dei VAR (es Var100, Var500)
+ ///
+ ///
+ ///
+ private void UpsertVar(int key, double value)
+ {
+ if (DictVar.ContainsKey(key))
+ {
+ DictVar[key] = value;
+ }
+ else
+ {
+ DictVar.Add(key, value);
+ }
+ }
+
+#if false
+ ///
+ /// Scrive valore richiesto nella memoria richiesta
+ ///
+ ///
+ ///
+ ///
+ ///
+ private bool writeMitsubMem(string memName, string memAddr, int valReq)
+ {
+ bool answ = false;
+ lgTrace($"INIT {memName} | memAddr: {memAddr}");
+ // contapezzi ATTUALE
+ if (!string.IsNullOrEmpty(memAddr))
+ {
+ if (memAddr.StartsWith("STD"))
+ {
+ // inizio verifica area memoria/parametro levando prima parte codice
+ memAddr = memAddr.Replace("STD.", "");
+ }
+ // var di appoggio
+ int cntAddr = 0;
+ // verifico se si tratta di tipo VAR... formato tipo VAR.501
+ if (memAddr.StartsWith("VAR."))
+ {
+ // recupero parametro...
+ int.TryParse(memAddr.Replace("VAR.", ""), out cntAddr);
+ lgTrace($"VAR | {memName} Write 01 | memAddr: {memAddr} | idx: {cntAddr}");
+ // processo SET valore
+ stopwatch.Restart();
+ if (cntAddr > 0)
+ {
+ double vTransf = (double)valReq;
+ // scrivo valore
+ int iRet = oEZNcAutCom.CommonVariable_Write2(cntAddr, vTransf, 1);
+ // trimmo se necessario memName...
+ if (memName.Length > maxVarStrLen)
+ {
+ memName = memName.Substring(0, maxVarStrLen);
+ }
+ // scrivo label
+ iRet = oEZNcAutCom.CommonVariable_SetName(cntAddr, memName);
+ lgTrace($"VAR | {memName} Write 02 | memAddr: {memAddr} | valReq: {valReq} | vTransf: {vTransf}");
+ if (utils.CRB("recTime"))
+ {
+ TimingData.addResult(cIobConf.codIOB, "VAR-W", stopwatch.ElapsedTicks);
+ }
+ answ = iRet == 0;
+ // se successo --> rileggo!
+ if (answ)
+ {
+ ReadMitsubVars();
+ }
+ }
+ stopwatch.Stop();
+ }
+ else if (memAddr.StartsWith("PAR."))
+ {
+ // recupero parametro...
+ int.TryParse(memAddr.Replace("PAR.", ""), out cntAddr);
+ lgTrace($"PAR | {memName} Write 01 | memAddr: {memAddr} | idx: {cntAddr}");
+ // processo SET valore
+ stopwatch.Restart();
+ if (cntAddr > 0)
+ {
+ // scrivo pz req come PAR...
+ int lAxis = 0;
+ string[] sValue = new string[1];
+ sValue[0] = $"{valReq}";
+ int iRet = oEZNcAutCom.Parameter_SetData3(0, cntAddr, lAxis, (object)sValue);
+ lgTrace($"PAR | {memName} Write 02 | memAddr: {memAddr} | valReq: {valReq}");
+ if (utils.CRB("recTime"))
+ {
+ TimingData.addResult(cIobConf.codIOB, "PAR-W", stopwatch.ElapsedTicks);
+ }
+ answ = iRet == 0;
+ // se successo --> rileggo!
+ if (answ)
+ {
+ ReadMitsubParams();
+ }
+ }
+ stopwatch.Stop();
+ }
+ }
+ return answ;
+ }
+#endif
+
+ ///
+ /// Scrive valore richiesto nella memoria richiesta
+ ///
+ ///
+ ///
+ ///
+ ///
+ private bool writeMitsubMem(string memName, string memAddr, double valReq)
+ {
+ bool answ = false;
+ lgTrace($"INIT {memName} | memAddr: {memAddr}");
+ // contapezzi ATTUALE
+ if (!string.IsNullOrEmpty(memAddr))
+ {
+ if (memAddr.StartsWith("STD"))
+ {
+ // inizio verifica area memoria/parametro levando prima parte codice
+ memAddr = memAddr.Replace("STD.", "");
+ }
+ // var di appoggio
+ int cntAddr = 0;
+ // verifico se si tratta di tipo VAR... formato tipo VAR.501
+ if (memAddr.StartsWith("VAR."))
+ {
+ // recupero parametro...
+ int.TryParse(memAddr.Replace("VAR.", ""), out cntAddr);
+ lgTrace($"VAR | {memName} Write 01 | memAddr: {memAddr} | idx: {cntAddr}");
+ // processo SET valore
+ stopwatch.Restart();
+ if (cntAddr > 0)
+ {
+ // scrivo valore
+ int iRet = oEZNcAutCom.CommonVariable_Write2(cntAddr, valReq, 1);
+ // trimmo se necessario memName...
+ if (memName.Length > maxVarStrLen)
+ {
+ memName = memName.Substring(0, maxVarStrLen);
+ }
+ // scrivo label
+ iRet = oEZNcAutCom.CommonVariable_SetName(cntAddr, memName);
+ lgTrace($"VAR | {memName} Write 02 | memAddr: {memAddr} | valReq: {valReq}");
+ if (utils.CRB("recTime"))
+ {
+ TimingData.addResult(cIobConf.codIOB, "VAR-W", stopwatch.ElapsedTicks);
+ }
+ answ = iRet == 0;
+ // se successo --> rileggo!
+ if (answ)
+ {
+ ReadMitsubVars();
+ }
+ }
+ stopwatch.Stop();
+ }
+ else if (memAddr.StartsWith("PAR."))
+ {
+ // recupero parametro...
+ int.TryParse(memAddr.Replace("PAR.", ""), out cntAddr);
+ lgTrace($"PAR | {memName} Write 01 | memAddr: {memAddr} | idx: {cntAddr}");
+ // processo SET valore
+ stopwatch.Restart();
+ if (cntAddr > 0)
+ {
+ // scrivo pz req come PAR...
+ int lAxis = 0;
+ string[] sValue = new string[1];
+ // cablato: zero decimali...
+ sValue[0] = $"{valReq:N0}";
+ int iRet = oEZNcAutCom.Parameter_SetData3(0, cntAddr, lAxis, (object)sValue);
+ lgTrace($"PAR | {memName} Write 02 | memAddr: {memAddr} | valReq: {valReq}");
+ if (utils.CRB("recTime"))
+ {
+ TimingData.addResult(cIobConf.codIOB, "PAR-W", stopwatch.ElapsedTicks);
+ }
+ answ = iRet == 0;
+ // se successo --> rileggo!
+ if (answ)
+ {
+ ReadMitsubParams();
+ }
+ }
+ stopwatch.Stop();
+ }
+ }
+ return answ;
+ }
+
+ #endregion Private Methods
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/MainFormNext.cs b/IOB-WIN-MITSUBISHII/MainFormNext.cs
new file mode 100644
index 00000000..e403ec30
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/MainFormNext.cs
@@ -0,0 +1,40 @@
+using IOB_UT_NEXT;
+using IOB_WIN_MITSUBISHI.Iob;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IOB_WIN_MITSUBISHI
+{
+ public class MainFormNext : IOB_WIN_FORM.MainForm
+ {
+
+ ///
+ /// Avvio MainForm
+ ///
+ ///
+ public MainFormNext(string[] args) : base(args)
+ {
+ }
+
+ ///
+ /// Apre la finestra child con conf
+ ///
+ 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;
+ }
+ }
+}
diff --git a/IOB-WIN-MITSUBISHII/NLog.config b/IOB-WIN-MITSUBISHII/NLog.config
new file mode 100644
index 00000000..cd1bcc98
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/NLog.config
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/IOB-WIN-MITSUBISHII/Program.cs b/IOB-WIN-MITSUBISHII/Program.cs
new file mode 100644
index 00000000..e32b68ff
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/Program.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Windows.Forms;
+
+namespace IOB_WIN_MITSUBISHI
+{
+ internal static class Program
+ {
+ #region Private Methods
+
+ ///
+ /// Punto di ingresso principale dell'applicazione.
+ /// Parametri di avvio
+ ///
+ [STAThread]
+ private static void Main(string[] args)
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new MainFormNext(args));
+ }
+
+ #endregion Private Methods
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/Properties/AssemblyInfo.cs b/IOB-WIN-MITSUBISHII/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..fb95eb3a
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/Properties/AssemblyInfo.cs
@@ -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-MITSUBISHII")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyProduct("IOB-WIN-MITSUBISHII")]
+[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("4fb0abd9-84b9-4da8-9ad4-cdd8cff74f66")]
diff --git a/IOB-WIN-MITSUBISHII/Properties/Resources.Designer.cs b/IOB-WIN-MITSUBISHII/Properties/Resources.Designer.cs
new file mode 100644
index 00000000..aec810c0
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+namespace IOB_WIN_MITSUBISHII.Properties
+{
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // 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()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [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_MITSUBISHII.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/IOB-WIN-MITSUBISHII/Properties/Resources.resx b/IOB-WIN-MITSUBISHII/Properties/Resources.resx
new file mode 100644
index 00000000..af7dbebb
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/Properties/Settings.Designer.cs b/IOB-WIN-MITSUBISHII/Properties/Settings.Designer.cs
new file mode 100644
index 00000000..48432f89
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+
+namespace IOB_WIN_MITSUBISHII.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;
+ }
+ }
+ }
+}
diff --git a/IOB-WIN-MITSUBISHII/Properties/Settings.settings b/IOB-WIN-MITSUBISHII/Properties/Settings.settings
new file mode 100644
index 00000000..39645652
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/IOB-WIN-MITSUBISHII/Resources/ChangeLog.html b/IOB-WIN-MITSUBISHII/Resources/ChangeLog.html
new file mode 100644
index 00000000..7ab91d78
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/Resources/ChangeLog.html
@@ -0,0 +1,120 @@
+
+ MAPO-IOB-WIN
+ v: {{CURRENT-REL}}
+
+ Acquisitore MAPO-IOB per sistemi Windows
+
+ Note di rilascio:
+
+ -
+ v.3.1.* → v.3.2.*
+
+ - Nuovi simulatori con gestione emergenza
+ - Fix gestione invio dati Redis
+ - Implementazione IOB Eurom63
+
+
+ -
+ v.2.6.* → v.3.0.*
+
+ - revisione sistema metodi invio in blocco
+ - Gestione invio contapezzi in step > 1
+ - Gestione eventi in blocco (indipendente e prioritario su EvBlock)
+ - Gestione limite eventi memorizzabili
+ - Integrazione REDIS
+ - Integrazione IOB-MAN
+
+
+ -
+ v.2.5.* → v.2.6.*
+
+ - revisione sistema timeout Ping
+ - Gestione AutoODL in prod generale (non solo SIM)
+
+
+ -
+ v.2.4.* → v.2.5.*
+
+ - Aggiunto adapter MTConnect
+ - Ottimizzazione gestione SIEMENS
+
+
+ -
+ v.2.3.* → v.2.4.*
+
+ - inserita gestione conf json x Flog acquisiti
+ - gestione invio Json blocchi dati FLog
+ - ottimizzazioni varie adapter Siemens
+ - ottimizzazione processo svuotamento code
+ - riduzione interferenza e interblocchi in fase di PLC assente
+
+
+ -
+ Ultime modifiche:
+
+
+ -
+ v.1.18.* → v.2.3.*
+
+ - inserimento WPS x acontrolli WebPage human readable
+ - fix gestione task2exe
+ - aggiunte varie versioni PLC siemens
+ - aggiunto PLC WPS x generiche web pages
+ - revisitazione LOG ODL e contapezzi
+ - modifica pagina presentazione dati (master) x resize
+ - Attivazione IOB SIMULATOR per test di carico (sostituito type DEMO)
+ - Aggiunto simulatore macchine MULTI pallet
+ - Ottimizzazione simulatore
+ - Ottimizzazioni PLC Siemens x riavvio post disconnessione (es spegnimento notturno)
+ - Ottimizzazione processo chiusura in update applicazione
+ - Aggiunta simulazione spegnimento con WU/CD
+
+
+ -
+ v.1.11.* → v.1.18.*
+
+ - Inserimento controller SIEMENS con S7+ library
+ - Inserimento nuove letture FANUC x programmi
+ - Inserimento nuove letture FANUC x SysEx (informazioni sistema)
+ - Inserimento invio FluxLog x parametri estesi (es SysEx, ProgName,...)
+ - FIX visualizzazione dati FluxLog e URL inviati
+ - FIX MAIN program da FANUC (non il current)
+ - Inserita modalita' DUMP memoria (iniziale full + periodica)
+ - Inserimento gestione contapezzi standard/checkBit in IOB.cfg
+ - Inserimento contapezzi da area memoria X
+ - NUOVA Gestione rami cliente e URL di update
+ - Gestione modi CNC
+ - Lettura dari dinamycs FANUC (feed, speed)
+ - aggiunta gestione aree G0..G30 (overrides?)
+ - fix errore disconnessione FANUC (allo spegnimento dl CNC) e memoria valori persistente a 1
+ - fix globali x gestione log IN / FLOG + ottimizzaizone check FANUC (PING)
+ - ottimizzazione fasi di restart in caso di assenza del server (evita reinvii inutili e migliora tempo ripartenza invio)
+ - review procedure controllo connessione x FANUC (es Tornos II)
+ - non richeide più privilegi admin x fare update
+ - gestione segnali inverted
+ - completata gestione configurabilità parametrica segnali (Tornos, CMZ, Biglia)
+ - revisitazione LOG x distinguere processi IOB
+
+
+ -
+ v.0.1.* → v.0.10.*
+
+ - Testato in produzione x update ad avvio e su richiesta
+ - Testato in produzione x lettura dati da Fanuc
+ - Inizio deploy con copia file su area IIS
+ - Prima versione con autoupdate
+ - Test PrettyBin x spostamento dll
+ - Base acquisitore FANUC
+ - Sistema base sw controllo in tray
+
+
+
+
+
+

+
+
+
+
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/Resources/Circuit.ico b/IOB-WIN-MITSUBISHII/Resources/Circuit.ico
new file mode 100644
index 00000000..a05b27a6
Binary files /dev/null and b/IOB-WIN-MITSUBISHII/Resources/Circuit.ico differ
diff --git a/IOB-WIN-MITSUBISHII/Resources/Net.ico b/IOB-WIN-MITSUBISHII/Resources/Net.ico
new file mode 100644
index 00000000..a33a9eca
Binary files /dev/null and b/IOB-WIN-MITSUBISHII/Resources/Net.ico differ
diff --git a/IOB-WIN-MITSUBISHII/Resources/STEAM-IOB-WIN.xml b/IOB-WIN-MITSUBISHII/Resources/STEAM-IOB-WIN.xml
new file mode 100644
index 00000000..ba4e78f6
Binary files /dev/null and b/IOB-WIN-MITSUBISHII/Resources/STEAM-IOB-WIN.xml differ
diff --git a/IOB-WIN-MITSUBISHII/Resources/Start-IOB-WIN.bat b/IOB-WIN-MITSUBISHII/Resources/Start-IOB-WIN.bat
new file mode 100644
index 00000000..3f8ecaa1
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/Resources/Start-IOB-WIN.bat
@@ -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
diff --git a/IOB-WIN-MITSUBISHII/Resources/SteamWare.ico b/IOB-WIN-MITSUBISHII/Resources/SteamWare.ico
new file mode 100644
index 00000000..70ccadaf
Binary files /dev/null and b/IOB-WIN-MITSUBISHII/Resources/SteamWare.ico differ
diff --git a/IOB-WIN-MITSUBISHII/Resources/logoSteamware.png b/IOB-WIN-MITSUBISHII/Resources/logoSteamware.png
new file mode 100644
index 00000000..0958b50a
Binary files /dev/null and b/IOB-WIN-MITSUBISHII/Resources/logoSteamware.png differ
diff --git a/IOB-WIN-MITSUBISHII/Resources/manifest.xml b/IOB-WIN-MITSUBISHII/Resources/manifest.xml
new file mode 100644
index 00000000..f66a7e99
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/Resources/manifest.xml
@@ -0,0 +1,7 @@
+
+-
+ 1.0.0.0
+ http://seriate.steamware.net:8083/SWS/MAPO/IOB-WIN/{{BRANCHNAME}}/MAPO-IOB-WIN.zip
+ http://seriate.steamware.net:8083/SWS/MAPO/IOB-WIN/{{BRANCHNAME}}/ChangeLog.html
+ false
+
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/docfx.json b/IOB-WIN-MITSUBISHII/docfx.json
new file mode 100644
index 00000000..bacb80c9
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/docfx.json
@@ -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"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/index.md b/IOB-WIN-MITSUBISHII/index.md
new file mode 100644
index 00000000..fdb4be99
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/index.md
@@ -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
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/logs/.placeholder.txt b/IOB-WIN-MITSUBISHII/logs/.placeholder.txt
new file mode 100644
index 00000000..5f282702
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/logs/.placeholder.txt
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/packages.config b/IOB-WIN-MITSUBISHII/packages.config
new file mode 100644
index 00000000..7bf5c7b6
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/packages.config
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/postBuildTgt.bat b/IOB-WIN-MITSUBISHII/postBuildTgt.bat
new file mode 100644
index 00000000..26a831a0
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/postBuildTgt.bat
@@ -0,0 +1,52 @@
+@echo off
+echo Inizio processing After Build: configurazione %1 , directory %2
+
+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-MITSUBISHI-DEB /MIR
+REM Baglietto
+REM ROBOCOPY %2 \\192.168.60.15\Steamware\IOB-WIN-MITSUBISHI-DEB /MIR
+REM GIACOVELLI LOCOROTONDO
+REM ROBOCOPY %2 \\192.168.1.93\Steamware\IOB-WIN-MITSUBISHI-DEB /MIR
+REM IMI Remosa
+REM ROBOCOPY %2 \\192.168.0.12\Steamware\IOB-WIN-MITSUBISHI-DEB /MIR
+
+REM IOB-WIN-SIM
+REM ROBOCOPY %2 \\IOB-WIN-SIMULA\Steamware\IOB-WIN-MITSUBISHI-DEB /MIR
+
+REM IOBVPN4MACHINE
+REM ROBOCOPY %2 \\10.51.90.5\Steamware\IOB-WIN-MITSUBISHI-DEB /MIR
+REM ROBOCOPY %2 \\10.51.90.5\Steamware\IOB-WIN-MITSUBISHI-DEB /MIR /log:RobocopyTransfer.log
+REM ROBOCOPY %2 Z:\IOB-WIN-MITSUBISHI-DEB /MIR
+REM ROBOCOPY %2 \\10.51.90.10\Steamware\IOB-WIN-MITSUBISHI-DEB /MIR
+ROBOCOPY %2 \\10.51.90.9\Steamware\IOB-WIN-MITSUBISHI-DEB /MIR
+
+goto END
+
+:END
+echo Fatto!
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/setupTgt.bat b/IOB-WIN-MITSUBISHII/setupTgt.bat
new file mode 100644
index 00000000..ba685c02
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/setupTgt.bat
@@ -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!
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/temp/.placeholder b/IOB-WIN-MITSUBISHII/temp/.placeholder
new file mode 100644
index 00000000..5f282702
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/temp/.placeholder
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/IOB-WIN-MITSUBISHII/toc.yml b/IOB-WIN-MITSUBISHII/toc.yml
new file mode 100644
index 00000000..7eee9ffb
--- /dev/null
+++ b/IOB-WIN-MITSUBISHII/toc.yml
@@ -0,0 +1,6 @@
+
+- name: Articles
+ href: articles/
+- name: API Documentation
+ href: obj/api/
+ homepage: api/index.md
diff --git a/IOB-WIN-NEXT/AdapterFormNext.cs b/IOB-WIN-NEXT/AdapterFormNext.cs
index 2da82a1f..22a0a86c 100644
--- a/IOB-WIN-NEXT/AdapterFormNext.cs
+++ b/IOB-WIN-NEXT/AdapterFormNext.cs
@@ -71,12 +71,12 @@ namespace IOB_WIN_NEXT
iobObj = new IobSql.IcoelDb(this, IOBConf);
btnStart.Enabled = true;
break;
-#endif
case tipoAdapter.MITSUBISHI:
iobObj = new Mitsubishi(this, IOBConf);
btnStart.Enabled = true;
break;
+#endif
case tipoAdapter.OMRON:
iobObj = new Iob.Omron(this, IOBConf);