diff --git a/IOB-WIN-FILE.sln b/IOB-WIN-FILE.sln
new file mode 100644
index 00000000..a62eceed
--- /dev/null
+++ b/IOB-WIN-FILE.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-FTP", "IOB-WIN-FTP\IOB-WIN-FTP.csproj", "{3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}"
+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
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|x86.Build.0 = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|x86.ActiveCfg = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|x86.Build.0 = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Remote_DEBUG|Any CPU.ActiveCfg = Release_DEBUG|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Remote_DEBUG|Any CPU.Build.0 = Release_DEBUG|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Remote_DEBUG|x86.ActiveCfg = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.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-KAVASAKI.sln b/IOB-WIN-KAVASAKI.sln
new file mode 100644
index 00000000..a62eceed
--- /dev/null
+++ b/IOB-WIN-KAVASAKI.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-FTP", "IOB-WIN-FTP\IOB-WIN-FTP.csproj", "{3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}"
+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
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|x86.Build.0 = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|x86.ActiveCfg = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|x86.Build.0 = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Remote_DEBUG|Any CPU.ActiveCfg = Release_DEBUG|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Remote_DEBUG|Any CPU.Build.0 = Release_DEBUG|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Remote_DEBUG|x86.ActiveCfg = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.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-NEXT/AdapterFormNext.cs b/IOB-WIN-NEXT/AdapterFormNext.cs
index b833faf7..418652c6 100644
--- a/IOB-WIN-NEXT/AdapterFormNext.cs
+++ b/IOB-WIN-NEXT/AdapterFormNext.cs
@@ -54,10 +54,12 @@ namespace IOB_WIN_NEXT
btnStart.Enabled = true;
break;
+#if false
case tipoAdapter.FILE_SOITAAB:
iobObj = new IobFile.IobFileSoitaab(this, IOBConf);
btnStart.Enabled = true;
- break;
+ break;
+#endif
case tipoAdapter.KAWASAKI:
iobObj = new Iob.Kawasaki(this, IOBConf);
diff --git a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj
index 56653fd8..257f6b78 100644
--- a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj
+++ b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj
@@ -388,7 +388,6 @@
Form
-
Form
@@ -412,32 +411,14 @@
TestForm.cs
-
-
-
-
-
-
-
-
-
-
-
Always
-
-
-
-
-
-
-
@@ -446,15 +427,9 @@
Always
-
- Always
-
-
-
-
@@ -516,17 +491,6 @@
True
PreserveNewest
-
-
-
-
-
-
-
-
-
-
-
@@ -554,16 +518,6 @@
Always
-
-
-
-
-
-
-
-
-
-
@@ -571,8 +525,6 @@
-
-
Always
diff --git a/IOB-WIN-OMRON.sln b/IOB-WIN-OMRON.sln
new file mode 100644
index 00000000..a62eceed
--- /dev/null
+++ b/IOB-WIN-OMRON.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-FTP", "IOB-WIN-FTP\IOB-WIN-FTP.csproj", "{3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}"
+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
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|x86.Build.0 = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|x86.ActiveCfg = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|x86.Build.0 = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Remote_DEBUG|Any CPU.ActiveCfg = Release_DEBUG|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Remote_DEBUG|Any CPU.Build.0 = Release_DEBUG|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Remote_DEBUG|x86.ActiveCfg = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.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-OPC-UA/IOB-WIN-OPC-UA.csproj b/IOB-WIN-OPC-UA/IOB-WIN-OPC-UA.csproj
index a77f7ab5..ab5c13f9 100644
--- a/IOB-WIN-OPC-UA/IOB-WIN-OPC-UA.csproj
+++ b/IOB-WIN-OPC-UA/IOB-WIN-OPC-UA.csproj
@@ -224,6 +224,7 @@
+
@@ -293,7 +294,6 @@
Always
-
Always
@@ -316,9 +316,7 @@
IOB-WIN-FORM
-
-
-
+
diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemens.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemens.cs
index 9a7bd20a..615d9862 100644
--- a/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemens.cs
+++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemens.cs
@@ -103,6 +103,7 @@ namespace IOB_WIN_OPC_UA.IobOpc
// se NON c'è già sync DB
if (addResetPzCount && !task2exe.ContainsKey("forceResetPzCount"))
{
+ task2exe.Add("forceSetPzCount", "0");
task2exe.Add("forceResetPzCount", "0");
}
}
diff --git a/IOB-WIN-OPC-UA/Readme/ToDo.txt b/IOB-WIN-OPC-UA/Readme/ToDo.txt
deleted file mode 100644
index 161ff489..00000000
--- a/IOB-WIN-OPC-UA/Readme/ToDo.txt
+++ /dev/null
@@ -1,61 +0,0 @@
--------------------------------------
-- 2017.10.19
--------------------------------------
-OK - da testare ora invio URL a MoonPro
-OK - ALIVE
-OK - ENABLED
-OK - INPUT
-OK - FARE lettura VERA da FANUC almeno della bitmap
-OK - fare gestione come rPI-IOB, ovvero
-OK - gestione QUEUE eventi
-OK - salvataggio su file dello storico eventi rilevati
-OK - gestione dei segnali ballerini (BITMASK!)
-OK - gestione contapezzi CUSTOM
- - fare gestione configurabile lettura FANUC
-OK - gestione dati G43
-OK - togliere dati F (E0 | 90)
- - fare integrazione ALTRI varori FANUC, tra cui
- - allarmi
-OK - load/speed
-OK - overrides (G12, G30)
-
-OK - nuovo metodo chiamata x MP/IO (che dovrà avere nuovo comando x accettare queste chiamate e salvare su tabella SENZA processing, come eventi o come extra... evento NOTA?)
- - verificare segnali: (vedi doc gsheet)
- - F001.0: ALARM_PRESENT
- - F001.7: CN_READY / POWER_ON
- - STL000.5: AUTO (vers 1)
- - STL000.7: AUTO (vers 2)
-- Cambiare ordine valutazione eventi frequenza VLF-->VHF
-- Azzerare I contatori quanto si arriva al più lento (quando si azzera lui ripartono comunque tutti...) -> in questo modo scatta un contatore QUANDO GENERAL_COUNTER MOD periodo_Ccntatore == 0
-- rendere parametrica l'assegnazione delle funzioni al diverso ambito frequenza tra i 5 (VHF, HF, NF, LF, VLF)
-- procedura x gestione dati REALTIME (da NON salvare su db ma al limite su REDIS, simil EQN con 2 tab x eliminare dati scaduti)
-
-OK FINIRE SISTEMAZIONE JETCO:
-OK - install servers
-OK - install DB
-OK - conf acquisitore togliendo parti abbozzate x contapezzi/fineciclo
-OK - part program name MAIN con nuova funzione
-
-CREARE NUOVO SW (o configurazione? o ramo alternativo a develop?) x mapping INIZIALE della macchina... ad esempio
- - si collega a ns server
- - chiede cosa deve fare (es mappa memorie D da 0 a 9999)
- - effettua testing e poi fa upload risultati
- - il ns sw fa i check/controlli modifica
-in questo modo ad esmepio possiamo cercare i contapezzi, i segnali ceh cambiano con il fineciclo nelle aree Y, i contatori STANDARD nelle memorie D, ...
-
-
-GESTIONE LIVE DATA
-L'idea è ceh quando una macchina è "sotto osservazione" ovvero live viene aperta pagina questa debba inviare PIU' DATI di tipo realtime e mostrarli nel browser. Per farlo ci saranno questi elementi
-- si apre una pagina di dettaglio macchina (da tablet? da SITE principale?)
-- questo causa la modifica di una chiave su DB (e/o redis) di stato macchina, del tipo "OnAir=true", e potrebbe essere una chiave a tempo (30 sec poi scade?) e mentre la pagina è aperta e si aggiorna (ogni 1-2 sec oppure Signal-R) questo valore viene confermato (e prorigato)
-- ogni IOB-WIN fa una chiamata "extra" all'URL dedicato al checl "OnAir", e se trova che è abilitato passa in modalità letture frequenti (1/2 al sec?) dei parametri LIVE (es: feed, speed, posizioni assi, load istantanei)
-- se passa inq eusta modalità live invia DI CONTINUO il dato al server IO
-- il server IO salva SU REDIS questi valori sia come "lastVal" che come serie storica
-- le pagine che mostrano i dati si continuano ad aggiornare (da redis) con grafici (chartJs come PIC) e/o valori istantanei
-- le serie storiche vengono ripulite periodicamente (ogni ora? valori + vecchi di 24h ad esempio?)
-- struttura dati REDIS da creare SIMILE a struttura info URL...
-- struttura dati LIVE: ../LIVE/COD_MACC/CURR_VAL (contiene TUTTI i dati LIVE, ultimi ricevuti...)
-- struttura dati TimeSeries: ../LIVE/COD_MACC/DATA_NAME (contiene TUTTI i dati come timeseries, es SPEEDRATE, FEEDRATE, POS_X1, POS_X2, ...)
-- operazione SAVE aggiorna SURR e accoda NUOVO valore...
-- LOAD (rilettura9 POTREBBE fare pulizia se + vecchi di 24h...)
-- la trasmissione verso IO deve avvenire con "multisend, nel
\ No newline at end of file
diff --git a/IOB-WIN-OSAI.sln b/IOB-WIN-OSAI.sln
new file mode 100644
index 00000000..a62eceed
--- /dev/null
+++ b/IOB-WIN-OSAI.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-FTP", "IOB-WIN-FTP\IOB-WIN-FTP.csproj", "{3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}"
+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
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Debug|x86.Build.0 = Debug|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|x86.ActiveCfg = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Release|x86.Build.0 = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Remote_DEBUG|Any CPU.ActiveCfg = Release_DEBUG|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Remote_DEBUG|Any CPU.Build.0 = Release_DEBUG|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.Remote_DEBUG|x86.ActiveCfg = Release|Any CPU
+ {3ED97EEA-9EAB-480D-8E53-EDB3662DCB79}.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-SQL/AdapterFormNext.cs b/IOB-WIN-SQL/AdapterFormNext.cs
index ab41fb52..ae446f83 100644
--- a/IOB-WIN-SQL/AdapterFormNext.cs
+++ b/IOB-WIN-SQL/AdapterFormNext.cs
@@ -27,9 +27,23 @@ namespace IOB_WIN_SQL
{
switch (tipoScelto)
{
+ case tipoAdapter.FILE_SOITAAB:
+ iobObj = new IobFile.IobFileSoitaab(this, IOBConf);
+ btnStart.Enabled = true;
+ break;
- case tipoAdapter.PingWatchdog:
- iobObj = new IOB_WIN_FORM.Iob.PingWatchDog(this, IOBConf);
+ case tipoAdapter.IcoelDb:
+ iobObj = new IobSql.IcoelDb(this, IOBConf);
+ btnStart.Enabled = true;
+ break;
+
+ case tipoAdapter.SQLSERVER_LANTEK:
+ iobObj = new IobSql.SqlServLantek(this, IOBConf);
+ btnStart.Enabled = true;
+ break;
+
+ case tipoAdapter.SQLSERVER_PAMA:
+ iobObj = new IobSql.SqlServPama(this, IOBConf);
btnStart.Enabled = true;
break;
diff --git a/IOB-WIN-SQL/DATA/CONF/GIACO_ICOEL_003.ini b/IOB-WIN-SQL/DATA/CONF/GIACO_ICOEL_003.ini
new file mode 100644
index 00000000..32c69ff3
--- /dev/null
+++ b/IOB-WIN-SQL/DATA/CONF/GIACO_ICOEL_003.ini
@@ -0,0 +1,91 @@
+;Configurazione IOB-WIN
+[IOB]
+;Accesso gestione sync DB x sync ICOEL --> MoonPro_ISF --> MoonPro_IS
+CNCTYPE=IcoelDb
+PING_MS_TIMEOUT=500
+MinDeltaSec=5
+;IOB_NAME=GIACO_ICOEL
+
+[MACHINE]
+VENDOR=ICOEL
+MODEL=Impianto Ciliegie Turi
+
+[CNC]
+IP=192.168.137.175
+PORT=1443
+GETPRGNAME=false
+
+[SERVER]
+MPIP=http://192.168.1.14
+MPURL=/MP/IO
+CMDBASE=/IOB/input/
+CMDFLOG=/IOB/flog/
+CMDRAWTRANSF=/IOB/rawTransfJson/
+CMDALIVE=/IOB
+CMDENABLED=/IOB/enabled/
+CMDADV1=?valore=
+CMDREBO=/sendReboot.aspx?idxMacchina=
+
+[MEMORY]
+ADDR_READ=DB9999.DBB0
+ADDR_WRITE=DB9999.DBB0
+SIZE_READ=0
+SIZE_WRITE=0
+;BIT0=CONN
+;BIT1=DB60.DBB1
+;BIT2=PZCOUNT.STD.DB700.DBW22
+;BIT3=DB60.DBB3
+;BIT4=DB60.DBB4
+
+
+[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]
+AUTO_CHANGE_ODL=false
+CHANGE_ODL_MODE=TIME
+CHANGE_ODL_HOURS=24
+CHANGE_ODL_IDLE_MIN=5
+PZCOUNT_MODE=Icoel
+DISABLE_PZCOUNT=FALSE
+ENABLE_SEND_PZC_BLOCK=TRUE
+MIN_SEND_PZC_BLOCK=0
+MAX_SEND_PZC_BLOCK=100
+ENABLE_DYN_DATA=TRUE
+FORCE_DYN_DATA=TRUE
+DEM_FACT_DYN_DATA=5
+ENABLE_DATA_FILTER=TRUE
+ENABLE_CLI_RESTART=TRUE
+SyncStateServer=localhost\sqlexpress
+SyncStateDb=MoonPro_ISF_2022
+SyncStateUser=egalware
+SyncStatePwd=egalware2022
+SyncStateCTout=
+DISABLE_SEND_WDST=TRUE
+
+; clock base (da 10ms)
+timerIntMs=20
+
+; conf parametri memoria READ/WRITE
+PARAM_CONF=GIACO_ICOEL_003.json
+
+[BRANCH]
+NAME=master
+
+; Tags manuali
+[TAGS]
+Customer=Giacovelli-Turi
+HostOS=WIN
+HostName=IOB-WIN-TURI-03
+HostAddr=192.168.137.175
diff --git a/IOB-WIN-SQL/DATA/CONF/GIACO_ICOEL_003.json b/IOB-WIN-SQL/DATA/CONF/GIACO_ICOEL_003.json
new file mode 100644
index 00000000..479d6927
--- /dev/null
+++ b/IOB-WIN-SQL/DATA/CONF/GIACO_ICOEL_003.json
@@ -0,0 +1,34 @@
+{
+ "mMapWrite": {
+
+ },
+ "mMapRead": {
+ "TotMerceProcTonn": {
+ "name": "TotMerceProcTonn",
+ "description": "Totale merce processata oggi su impianto (Tonn)",
+ "memAddr": "TotMerceProcTonn",
+ "tipoMem": "Real",
+ "index": 0,
+ "size": 0,
+ "func": "MAX",
+ "period": 60,
+ "factor": 1
+ },
+ "TotMerceCaricTonn": {
+ "name": "TotMerceCaricTonn",
+ "description": "Totale merce caricata oggi su impianto (Tonn)",
+ "memAddr": "TotMerceCaricTonn",
+ "tipoMem": "Real",
+ "index": 0,
+ "size": 0,
+ "func": "MAX",
+ "period": 60,
+ "factor": 1
+ }
+ },
+ "optKVP": {
+ "fluxLogReduce": true,
+ "fluxLogRedDeadBand": 1.0,
+ "fluxLogResendPeriod": 60
+ }
+}
diff --git a/IOB-WIN-SQL/DATA/CONF/IMI_PAMA_392.ini b/IOB-WIN-SQL/DATA/CONF/IMI_PAMA_392.ini
new file mode 100644
index 00000000..e24c4d98
--- /dev/null
+++ b/IOB-WIN-SQL/DATA/CONF/IMI_PAMA_392.ini
@@ -0,0 +1,85 @@
+;Configurazione IOB-WIN
+[IOB]
+;Accesso gestione sync DB x sync PAMA --> MoonPro_IOB_ISF --> Chiamate REST
+CNCTYPE=SQLSERVER_PAMA
+PING_MS_TIMEOUT=500
+MinDeltaSec=5
+
+[MACHINE]
+VENDOR=PAMA
+MODEL=Alesatrice 392
+
+[CNC]
+IP=127.0.0.1
+PORT=1443
+GETPRGNAME=false
+
+[SERVER]
+MPIP=http://192.168.0.110
+MPURL=/MP/IO
+CMDBASE=/IOB/input/
+CMDFLOG=/IOB/flog/
+CMDALIVE=/IOB
+CMDENABLED=/IOB/enabled/
+CMDADV1=?valore=
+CMDREBO=/sendReboot.aspx?idxMacchina=
+CMDRAWTRANSF=/IOB/rawTransfJson/
+
+[MEMORY]
+ADDR_READ=DB9999.DBB0
+ADDR_WRITE=DB9999.DBB0
+SIZE_READ=0
+SIZE_WRITE=0
+;BIT0=CONN
+;BIT1=DB60.DBB1
+;BIT2=PZCOUNT.STD.DB700.DBW22
+;BIT3=DB60.DBB3
+;BIT4=DB60.DBB4
+
+
+[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]
+AUTO_CHANGE_ODL=false
+CHANGE_ODL_MODE=TIME
+CHANGE_ODL_HOURS=24
+CHANGE_ODL_IDLE_MIN=5
+PZCOUNT_MODE=PAMA
+DISABLE_PZCOUNT=FALSE
+ENABLE_SEND_PZC_BLOCK=TRUE
+MIN_SEND_PZC_BLOCK=0
+MAX_SEND_PZC_BLOCK=100
+ENABLE_DYN_DATA=TRUE
+FORCE_DYN_DATA=TRUE
+DEM_FACT_DYN_DATA=5
+ENABLE_DATA_FILTER=TRUE
+ENABLE_CLI_RESTART=TRUE
+SyncStateServer=308SERVER60\LANTEK
+SyncStateDb=MoonPro_IOB_ISF_PAMA
+SyncStateUser=steamware
+SyncStatePwd=viadante16
+SyncStateCTout=
+VetoReadSec=2
+VetoSyncSec=10
+;FullPodlUrl=true
+
+; clock base (da 10ms)
+timerIntMs=20
+
+; conf parametri memoria READ/WRITE
+PARAM_CONF=IMI_PAMA_392.json
+
+[BRANCH]
+NAME=master
\ No newline at end of file
diff --git a/IOB-WIN-SQL/DATA/CONF/IMI_PAMA_392.json b/IOB-WIN-SQL/DATA/CONF/IMI_PAMA_392.json
new file mode 100644
index 00000000..898e2595
--- /dev/null
+++ b/IOB-WIN-SQL/DATA/CONF/IMI_PAMA_392.json
@@ -0,0 +1,29 @@
+{
+ "mMapWrite": {
+
+ },
+ "mMapRead": {
+ //"TotMerceProcTonn": {
+ // "name": "TotMerceProcTonn",
+ // "description": "Totale merce processata oggi su impianto (Tonn)",
+ // "memAddr": "TotMerceProcTonn",
+ // "tipoMem": "Real",
+ // "index": 0,
+ // "size": 0,
+ // "func": "MAX",
+ // "period": 60,
+ // "factor": 1
+ //},
+ //"TotMerceCaricTonn": {
+ // "name": "TotMerceCaricTonn",
+ // "description": "Totale merce caricata oggi su impianto (Tonn)",
+ // "memAddr": "TotMerceCaricTonn",
+ // "tipoMem": "Real",
+ // "index": 0,
+ // "size": 0,
+ // "func": "MAX",
+ // "period": 60,
+ // "factor": 1
+ //}
+ }
+}
diff --git a/IOB-WIN-SQL/DATA/CONF/IMI_SOITAAB_Z2342_01.ini b/IOB-WIN-SQL/DATA/CONF/IMI_SOITAAB_Z2342_01.ini
new file mode 100644
index 00000000..3c53fb69
--- /dev/null
+++ b/IOB-WIN-SQL/DATA/CONF/IMI_SOITAAB_Z2342_01.ini
@@ -0,0 +1,89 @@
+;Configurazione IOB-WIN
+[IOB]
+;Accesso gestione sync DB x LANTEK --> MoonPro_IOB_ISF --> Chiamate REST
+CNCTYPE=SQLSERVER_LANTEK
+PING_MS_TIMEOUT=500
+MinDeltaSec=5
+IOB_NAME=IMI_SOITAAB_Z2342
+DIS_EXE_TASK=FALSE
+DIS_STATE_CH=TRUE
+
+[MACHINE]
+VENDOR=SOITAAB
+MODEL=Ossitaglio Z2342 + sw nesting LANTEK
+
+[CNC]
+IP=127.0.0.1
+PORT=1443
+GETPRGNAME=false
+
+[SERVER]
+MPIP=http://192.168.0.110
+MPURL=/MP/IO
+CMDBASE=/IOB/input/
+CMDFLOG=/IOB/flog/
+CMDALIVE=/IOB
+CMDENABLED=/IOB/enabled/
+CMDADV1=?valore=
+CMDREBO=/sendReboot.aspx?idxMacchina=
+CMDRAWTRANSF=/IOB/rawTransfJson/
+
+[MEMORY]
+ADDR_READ=DB9999.DBB0
+ADDR_WRITE=DB9999.DBB0
+SIZE_READ=0
+SIZE_WRITE=0
+;BIT0=CONN
+;BIT1=DB60.DBB1
+;BIT2=PZCOUNT.STD.DB700.DBW22
+;BIT3=DB60.DBB3
+;BIT4=DB60.DBB4
+
+
+[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]
+AUTO_CHANGE_ODL=false
+CHANGE_ODL_MODE=TIME
+CHANGE_ODL_HOURS=24
+CHANGE_ODL_IDLE_MIN=5
+PZCOUNT_MODE=PAMA
+DISABLE_PZCOUNT=FALSE
+ENABLE_SEND_PZC_BLOCK=TRUE
+MIN_SEND_PZC_BLOCK=0
+MAX_SEND_PZC_BLOCK=100
+ENABLE_DYN_DATA=TRUE
+FORCE_DYN_DATA=TRUE
+DEM_FACT_DYN_DATA=5
+ENABLE_DATA_FILTER=TRUE
+ENABLE_CLI_RESTART=TRUE
+DISABLE_SEND_WDST=TRUE
+SyncStateServer=308SERVER60\LANTEK
+SyncStateDb=MoonPro_IOB_ISF_LANTEK
+SyncStateUser=steamware
+SyncStatePwd=viadante16
+SyncStateCTout=
+VetoReadSec=2
+VetoSyncSec=10
+FullPodlUrl=true
+
+; clock base (da 10ms)
+timerIntMs=20
+
+; conf parametri memoria READ/WRITE
+PARAM_CONF=IMI_SOITAAB_Z2342_01.json
+
+[BRANCH]
+NAME=master
\ No newline at end of file
diff --git a/IOB-WIN-SQL/DATA/CONF/IMI_SOITAAB_Z2342_01.json b/IOB-WIN-SQL/DATA/CONF/IMI_SOITAAB_Z2342_01.json
new file mode 100644
index 00000000..b689eced
--- /dev/null
+++ b/IOB-WIN-SQL/DATA/CONF/IMI_SOITAAB_Z2342_01.json
@@ -0,0 +1,10 @@
+{
+ "mMapWrite": {
+ },
+ "mMapRead": {
+ },
+ "optKVP": {
+ //"path-remBase": "C:\\Temp"
+ "path-remBase": "\\\\ecs900\\Logs"
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-SQL/DATA/CONF/IMI_SOITAAB_Z2342_02.ini b/IOB-WIN-SQL/DATA/CONF/IMI_SOITAAB_Z2342_02.ini
new file mode 100644
index 00000000..1055e433
--- /dev/null
+++ b/IOB-WIN-SQL/DATA/CONF/IMI_SOITAAB_Z2342_02.ini
@@ -0,0 +1,87 @@
+;Configurazione IOB-WIN
+[IOB]
+;Accesso gestione sync con FILE SOITAAB
+CNCTYPE=FILE_SOITAAB
+PING_MS_TIMEOUT=500
+MinDeltaSec=5
+IOB_NAME=IMI_SOITAAB_Z2342
+DIS_EXE_TASK=TRUE
+DIS_STATE_CH=FALSE
+
+[MACHINE]
+VENDOR=SOITAAB
+MODEL=Ossitaglio Z2342
+
+[CNC]
+;IP=ecs900
+IP=172.28.30.53
+PORT=0
+GETPRGNAME=false
+
+[SERVER]
+MPIP=http://192.168.0.110
+MPURL=/MP/IO
+CMDBASE=/IOB/input/
+CMDFLOG=/IOB/flog/
+CMDALIVE=/IOB
+CMDENABLED=/IOB/enabled/
+CMDADV1=?valore=
+CMDREBO=/sendReboot.aspx?idxMacchina=
+CMDRAWTRANSF=/IOB/rawTransfJson/
+
+[MEMORY]
+ADDR_READ=DB9999.DBB0
+ADDR_WRITE=DB9999.DBB0
+SIZE_READ=0
+SIZE_WRITE=0
+;BIT0=CONN
+;BIT1=DB60.DBB1
+;BIT2=PZCOUNT.STD.DB700.DBW22
+;BIT3=DB60.DBB3
+;BIT4=DB60.DBB4
+
+
+[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]
+AUTO_CHANGE_ODL=false
+CHANGE_ODL_MODE=TIME
+CHANGE_ODL_HOURS=24
+CHANGE_ODL_IDLE_MIN=5
+PZCOUNT_MODE=SOITAAB
+DISABLE_PZCOUNT=FALSE
+ENABLE_SEND_PZC_BLOCK=TRUE
+MIN_SEND_PZC_BLOCK=0
+MAX_SEND_PZC_BLOCK=100
+ENABLE_DYN_DATA=TRUE
+FORCE_DYN_DATA=TRUE
+DEM_FACT_DYN_DATA=5
+ENABLE_DATA_FILTER=TRUE
+ENABLE_CLI_RESTART=TRUE
+DISABLE_SEND_WDST=TRUE
+VetoReadSec=5
+EnabelPodlManFull=true
+CodGruppoIob=GRP-CC-025
+; invio flux alla lettura file
+sendFluxOnRead=true
+
+; clock base (da 10ms)
+timerIntMs=20
+
+; conf parametri memoria READ/WRITE
+PARAM_CONF=IMI_SOITAAB_Z2342_02.json
+
+[BRANCH]
+NAME=master
\ No newline at end of file
diff --git a/IOB-WIN-SQL/DATA/CONF/IMI_SOITAAB_Z2342_02.json b/IOB-WIN-SQL/DATA/CONF/IMI_SOITAAB_Z2342_02.json
new file mode 100644
index 00000000..b689eced
--- /dev/null
+++ b/IOB-WIN-SQL/DATA/CONF/IMI_SOITAAB_Z2342_02.json
@@ -0,0 +1,10 @@
+{
+ "mMapWrite": {
+ },
+ "mMapRead": {
+ },
+ "optKVP": {
+ //"path-remBase": "C:\\Temp"
+ "path-remBase": "\\\\ecs900\\Logs"
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-SQL/IOB-WIN-SQL.csproj b/IOB-WIN-SQL/IOB-WIN-SQL.csproj
index 2c767b1d..6df523f8 100644
--- a/IOB-WIN-SQL/IOB-WIN-SQL.csproj
+++ b/IOB-WIN-SQL/IOB-WIN-SQL.csproj
@@ -132,6 +132,7 @@
+
Form
@@ -164,6 +165,14 @@
Always
+
+
+
+
+
+
+
+
Always
diff --git a/IOB-WIN-SQL/Iob/IobFileSoitaab.cs b/IOB-WIN-SQL/Iob/IobFileSoitaab.cs
new file mode 100644
index 00000000..d998f30e
--- /dev/null
+++ b/IOB-WIN-SQL/Iob/IobFileSoitaab.cs
@@ -0,0 +1,629 @@
+#if false
+using EgwProxy.SqlDb.DbModels;
+#endif
+using IOB_UT_NEXT;
+using MapoSDK;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net.NetworkInformation;
+using static IOB_UT_NEXT.CustomObj;
+
+namespace IOB_WIN_SQL.IobFile
+{
+ ///
+ /// Adapter specializzato per SOITAAB x la SOLA lettura stato macchina da log, da accoppiare a
+ /// adapter x IOB LANTEK x scrittura PODL
+ /// - IN: LOGFile macchina diretto
+ /// - OUT: --> sigLog
+ /// --> fluxLog
+ ///
+
+ public class IobFileSoitaab : Iob.GenericNext
+ {
+ #region Public Constructors
+
+ ///
+ /// Costruttore dell'IOB FileBased SOITAAB
+ ///
+ /// AdapterForm chiamante
+ /// Configurazione IOB per avvio
+ public IobFileSoitaab(AdapterFormNext caller, IobConfiguration IOBConf) : base(caller, IOBConf)
+ {
+ DateTime adesso = DateTime.Now;
+ string VetoReadSec = getOptPar("VetoReadSec");
+
+ setupSpecialParams();
+ if (pathList.ContainsKey("path-remBase"))
+ {
+ logDirPath = pathList["path-remBase"];
+ }
+ // fix parametri veto
+ if (!string.IsNullOrEmpty(VetoReadSec))
+ {
+ int.TryParse(VetoReadSec, out vetoReadFileSec);
+ }
+
+ string sFluxOnRead = getOptPar("sendFluxOnRead");
+ if (!string.IsNullOrEmpty("sendFluxOnRead"))
+ {
+ bool.TryParse(sFluxOnRead, out sendFluxOnRead);
+ }
+
+ // init a zero....
+ B_input = 0;
+
+ // provo prima lettura logfile
+ try
+ {
+ // eseguo subito un ciclo acquisizione log + processing
+ bool acquireLog = getRemoteLog();
+ if (acquireLog)
+ {
+ bool sentSignLog = processSignLogTable(adesso);
+ }
+ }
+ catch (Exception exc)
+ {
+ lgError($"Eccezione in IobFileSoitaab{Environment.NewLine}{exc}");
+ }
+
+ lastPING = DateTime.Now.AddHours(-1);
+ }
+
+ #endregion Public Constructors
+
+ #region Public Methods
+
+ ///
+ /// Implementazione custom esecuzione task specifici
+ ///
+ ///
+ ///
+ public override Dictionary executeTasks(Dictionary task2exe)
+ {
+ DateTime adesso = DateTime.Now;
+ // NON fa nulla... anche se non dovrebbe richiamarlo
+ Dictionary taskDone = new Dictionary();
+ lastReadPLC = DateTime.Now;
+ return taskDone;
+ }
+
+ ///
+ /// Recupero dati dinamici...
+ ///
+ public override Dictionary getDynData()
+ {
+ DateTime adesso = DateTime.Now;
+ // dizionario vuoto / faccio direttamente accodamento in FluxLog
+ Dictionary outVal = new Dictionary();
+ // processo ed accodo!
+ processFluxLogTable(adesso);
+ lastReadPLC = DateTime.Now;
+ return outVal;
+ }
+
+ ///
+ /// Effettua lettura semafori principale Parametri da
+ /// aggiornare x display in form
+ ///
+ public override void readSemafori(ref newDisplayData currDispData)
+ {
+ DateTime adesso = DateTime.Now;
+ if (connectionOk)
+ {
+ // controllo veto checkDB
+ if (adesso > vetoDataRead)
+ {
+ // predispongo prox veto...
+ vetoDataRead = adesso.AddSeconds(vetoReadFileSec);
+ // semaforo
+ currDispData.semIn = Semaforo.SV;
+ // verifico SignLog e processo
+ bool acquireLog = getRemoteLog();
+ bool sentSignLog = processSignLogTable(adesso);
+ // verifico ProdData e processo
+ bool sentProdData = processProdDataTable(adesso);
+ }
+ }
+ else
+ {
+ B_input = 0;
+ currDispData.semIn = Semaforo.SR;
+ }
+ }
+
+ ///
+ /// 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("FileSoitaab: ConnKO - tryConnect");
+ }
+ // in primis salvo data ping...
+ lastPING = DateTime.Now;
+ // se passa il ping faccio il resto...
+ if (testPingMachine == IPStatus.Success)
+ {
+ string szStatusConnection = "";
+ try
+ {
+ // ora provo connessione...
+ parentForm.commPlcActive = true;
+
+ // connessione OK se oltre al PING riesco a leggere la folder di base
+ if (Directory.Exists(logDirPath))
+ {
+ parentForm.commPlcActive = false;
+ connectionOk = true;
+ }
+ // refresh stato connessione!!!
+ if (connectionOk)
+ {
+ queueInEnabCurr = true;
+ if (adpRunning)
+ {
+ lgInfo($"Connessione OK alla folder {logDirPath}");
+ lastReadPLC = DateTime.Now;
+ }
+ }
+ else
+ {
+ lgError("Impossibile procedere, connessione mancante...");
+ }
+ }
+ catch (Exception exc)
+ {
+ lgFatal($"Errore nella connessione all'adapter IobFileSoitaab: {szStatusConnection}{Environment.NewLine}{exc}");
+ connectionOk = false;
+ lgInfo($"Eccezione in TryConnect, Adapter IobFileSoitaab NON running, pausa di {utils.CRI("waitRecMSec")} msec prima di ulteriori tentativi di riconnessione");
+ }
+ }
+ else
+ {
+ // loggo no risposta ping ...
+ connectionOk = false;
+ B_input = 0;
+ if (verboseLog || periodicLog)
+ {
+ lgInfo($"Attenzione: IobFileSoitaab controllo PING fallito per IP {cIobConf.cncPingAddr}");
+ }
+ }
+ }
+ }
+ else
+ {
+ needRefresh = true;
+ }
+ }
+
+ public override void tryDisconnect()
+ {
+ // registro solo che è disconnesso
+ connectionOk = false;
+ queueInEnabCurr = false;
+ }
+
+ #endregion Public Methods
+
+ #region Protected Fields
+
+ protected bool sendFluxOnRead = false;
+ protected int vetoReadFileSec = 3;
+
+ #endregion Protected Fields
+
+ #region Protected Properties
+
+#if false
+ ///
+ /// Stato di sync delle tab gestite
+ ///
+ protected List elencoSyncState { get; set; } = new List();
+#endif
+
+ #endregion Protected Properties
+
+ #region Protected Methods
+
+ ///
+ /// Conversione string row in log generico
+ ///
+ ///
+ ///
+ protected override GenLogRow convertToMachineLog(string dailyLog)
+ {
+ GenLogRow answ = new GenLogRow();
+ if (!string.IsNullOrEmpty(dailyLog))
+ {
+ // preventivamente: doppio ";;" --> ";"
+ dailyLog = dailyLog.Replace(";;", ";");
+ var sSplit = dailyLog.Split(';');
+ answ.dtRif = DateTime.ParseExact($"{sSplit[0]} {sSplit[1]}", "yyyy-M-d HH:mm:ss", null);
+ answ.valString = $"{sSplit[2]};{sSplit[3]}";
+ }
+ return answ;
+ }
+
+ ///
+ /// Recupera file log da analizzare
+ ///
+ ///
+ protected override bool getRemoteLog()
+ {
+ bool answ = false;
+ bool pingOk = testPingMachine == IPStatus.Success;
+ if (pingOk && Directory.Exists(logDirPath))
+ {
+ string filePath = Path.Combine(logDirPath, $"Report-{DateTime.Today.Day}.txt");
+ bool hasDaily = File.Exists(filePath);
+ // cerco file quotidiano...
+ if (!hasDaily)
+ {
+ var fileList = Directory.GetFiles(logDirPath, "Report-*.txt");
+ DateTime lastMod = DateTime.Today.AddYears(-1);
+ foreach (var cFile in fileList)
+ {
+ var tempFile = Path.Combine(logDirPath, cFile);
+ var lwTime = File.GetLastWriteTime(tempFile);
+ if (lwTime >= lastMod)
+ {
+ lastMod = lwTime;
+ filePath = tempFile;
+ }
+ }
+ }
+ // leggo file
+ string rawVal = File.ReadAllText(Path.Combine(logDirPath, filePath));
+ if (!string.IsNullOrEmpty(rawVal))
+ {
+ // salvo in redis
+ string redKey = redisMan.redHash($"IOB:CurrData:{cIobConf.codIOB}:LogFile:Act");
+ redisMan.setRSV(redKey, rawVal);
+ answ = true;
+ }
+ }
+ return answ;
+ }
+
+ #endregion Protected Methods
+
+ #region Private Properties
+
+ private string logDirPath { get; set; } = "\\\\ecs900\\Logs";
+
+ #endregion Private Properties
+
+ #region Private Methods
+
+ private static int decodeSoitaabLog(string val2test)
+ {
+ // di default NON EMERGENZA...
+ int valInt = 128;
+ switch (val2test)
+ {
+ case "START;1":
+ valInt = 1 + 2 + 128;
+ break;
+
+ case "END;1":
+ valInt = 1 + 128;
+ break;
+
+ case "START;0":
+ case "END;0":
+ case "HOLD;":
+ valInt = 1 + 16 + 128;
+ break;
+
+ default:
+ break;
+ }
+
+ return valInt;
+ }
+
+ ///
+ /// Esegue processing + invio dati tab SignLog
+ ///
+ ///
+ ///
+ private bool processFluxLogTable(DateTime adesso)
+ {
+ bool fatto = false;
+ // leggo eventuali dati di fluxlog ed invio...
+ if (fluxLogData != null && fluxLogData.Count > 0)
+ {
+ string sVal = "";
+ foreach (var fLog2send in fluxLogData)
+ {
+ var kvpFlux = fLog2send.valString.Split(';');
+ if (kvpFlux.Count() > 1)
+ {
+ sVal = $"[DYNDATA] |{fLog2send.dtRif:yyyy-MM-dd HH:mm:ss}|{kvpFlux[0]}|{kvpFlux[1]}";
+ // chiamo accodamento con dataora corretta...
+ accodaFLog(sVal, qEncodeFLog(fLog2send.dtRif, kvpFlux[0], kvpFlux[1]));
+ }
+ }
+ // svuoto coda invio fluxlog...
+ fluxLogData = new List();
+ // fatto!
+ fatto = true;
+ }
+ return fatto;
+ }
+
+ ///
+ /// Esegue processing + invio dati tab ProdData
+ ///
+ ///
+ ///
+ private bool processProdDataTable(DateTime adesso)
+ {
+ bool fatto = false;
+ return fatto;
+ }
+
+ ///
+ /// Esegue processing + invio dati tab SignLog
+ ///
+ ///
+ ///
+ private bool processSignLogTable(DateTime adesso)
+ {
+ bool fatto = false;
+ // init oggetto x processing
+ Dictionary sigLogFromFile = new Dictionary();
+ // recupero i dati dai logs files, attuale e nuovo...
+ string fileAct = redisMan.getRSV(redKeyLogfileAct);
+ string fileLast = redisMan.getRSV(redKeyLogfileLast);
+ // confronto con i dati dell'ultimo LOG FILE processato
+ int lenghtAct = fileAct != null ? fileAct.Length : 0;
+ int lenghtLast = fileLast != null ? fileLast.Length : 0;
+ //if (lenghtAct > 0 && lenghtAct != lenghtLast)
+ if (lenghtAct > 0)
+ {
+ List logNew = new List();
+ List sigLogData = new List();
+ List logLast = getGenLogFromMachineLog(fileLast);
+ List logAct = getGenLogFromMachineLog(fileAct);
+ // SE c'è prendo ultima riga inviata x confronto...
+ var fileLastEnd = logLast.LastOrDefault();
+ if (fileLastEnd != null)
+ {
+ // ora prendo SOLAMENTE le righe nuove
+ logNew = logAct
+ .Where(x => x.dtRif > fileLastEnd.dtRif)
+ .OrderBy(x => x.dtRif)
+ .ToList();
+ }
+ else
+ {
+ logNew = logAct;
+ }
+ // solo SE ho nuovi dati....
+ if (logNew.Count > 0)
+ {
+ // processo le righe nuove e le accodo in redis come elenco FluxLog da inviare
+ // (appoggio in redis)... andando ad accodarle...
+ var currFLD = fluxLogData;
+ currFLD.AddRange(logNew);
+ fluxLogData = currFLD;
+
+ // estraggo solo info x sig log
+ sigLogData = logNew
+ .Where(x => x.valString.StartsWith("START") || x.valString.StartsWith("HOLD") || x.valString.StartsWith("END"))
+ .OrderBy(x => x.dtRif)
+ .ToList();
+
+ // processo le righe nuove trasformando al volo SOLO eventi...
+ foreach (var sLog2send in sigLogData)
+ {
+ /* -----------------------------------------------------
+ * bitmap MAPO STANDARD 60
+ * B0: 001 POWER_ON
+ * B1: 002 RUN
+ * B2: 004 pzCount
+ * B3: 008 allarme
+ * B4: 016 manuale
+ * B5: 032 slowTC
+ * B6: 064 WarmUpCoolDown
+ * B7: 128 EmergArmata
+ *
+ ----------------------------------------------------- */
+
+ int valInt = decodeSoitaabLog(sLog2send.valString);
+
+ string currVal = getEncodSigLog(sLog2send.dtRif, valInt, counterSigIN);
+ // verifico non sia in veto invio iniziale...
+ if (queueInEnabCurr)
+ {
+ // --> accodo (valore già formattato)!
+ QueueIN.Enqueue(currVal);
+ // loggo!
+ lgTrace(string.Format("[QUEUE-IN] {0}", currVal));
+ counterSigIN++;
+ if (counterSigIN > 9999)
+ {
+ counterSigIN = 0;
+ }
+ }
+ else
+ {
+ lgDebug($"[VETO FOR QUEUE-IN] | {currVal} - MESSAGE NOT SENT | {adesso:yyyyMMdd_HHmmss}");
+ checkVetoQueueIn();
+ }
+ }
+
+ /* ----------------------------------------------------------
+ * processo righe x costruire una lista di eventi produzione:
+ * - elenco di eventi contapezzi
+ * - lista xODL come articolo + quantità prodotta (_1, _2, ...)
+ * - eventuale ultimo xODL che resta aperto
+ *
+ * successivamente processing + invio info raccolte
+ * - recupero PODL aperti
+ * - apertura/chiusura PODL esistenti
+ * - creazione PODL mancanti
+ * - dichiarazione contapezzi
+ *
+ * ---------------------------------------------------------- */
+
+ string sVal = "";
+ string descrArt = "";
+ List elencoProdBatch = new List();
+ ProdBatchData lastProdBatch = new ProdBatchData();
+
+ // ora processo TUTTO x il generico caso fluxLog......
+ foreach (var fLog2send in logNew)
+ {
+ // separo per ";"
+ var currData = fLog2send.valString.Split(';');
+ if (currData.Length > 1)
+ {
+ if (sendFluxOnRead)
+ {
+ // per prima cosa fluxLog a prescindere...
+ sVal = $"[LOGFILE]{currData[0]}|{currData[1]}";
+ // ...e chiamo accodamento
+ accodaFLog(sVal, qEncodeFLog(fLog2send.dtRif, currData[0], currData[1]));
+ }
+
+ switch (currData[0])
+ {
+ case "END":
+ // se è un end --> è comunque NON + runnning
+ isRunningState = false; // chiudo batch precedente + in elenco (SE era valido...)
+ if (!string.IsNullOrEmpty(lastProdBatch.codArt))
+ {
+ lastProdBatch.dtEnd = fLog2send.dtRif;
+ elencoProdBatch.Add(lastProdBatch);
+ }
+ // reset articolo..
+ lastArtDescr = "";
+ // nuovo batch VUOTO
+ lastProdBatch = new ProdBatchData();
+ contapezziPLC = 0;
+ break;
+
+ case "START":
+ isRunningState = currData[1] == "1";
+ break;
+
+ case "PARTCODE":
+ // inizio confronto articolo con precedente x capire se sia NUOVO
+ descrArt = currData[1];
+ // devo scartare i "doppi percorsi"
+ if (descrArt != lastArtDescr)
+ {
+ // verifico se sia DAVVERO cambiato articolo... prendo
+ // articolo senza indice (_1, _2, _3, ...)
+ var artDataLast = lastArtDescr.Split('_');
+ var artDataNew = descrArt.Split('_');
+ // nuovo articolo (NON vuoto)
+ if (!string.IsNullOrEmpty(artDataNew[0]) && artDataLast[0] != artDataNew[0])
+ {
+ // chiudo batch precedente + in elenco (SE era valido...)
+ if (!string.IsNullOrEmpty(lastProdBatch.codArt))
+ {
+ // chiudo prod
+ lastProdBatch.dtEnd = fLog2send.dtRif;
+ elencoProdBatch.Add(lastProdBatch);
+ }
+ // nuovo batch
+ lastProdBatch = new ProdBatchData()
+ {
+ codArt = artDataNew[0],
+ dtStart = fLog2send.dtRif,
+ numPz = 1
+ };
+ }
+ // solo nuova copia articolo
+ else
+ {
+ // aumento numPezzi batch
+ lastProdBatch.numPz++;
+ }
+
+ // salvo nuovo art processato
+ lastArtDescr = descrArt;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ // recupero elenco PODL corrente...
+ List reqPOdlList = MachineNextPodl();
+ // adesso processo tutti i prodBatch collezionati x invio
+ foreach (var item in elencoProdBatch)
+ {
+ int currIdxPOdl = 0;
+ // cerco se articolo sia in elenco PODL
+ var listPOdl = reqPOdlList
+ .Where(x => x.CodArticolo.Equals(item.codArt, StringComparison.InvariantCultureIgnoreCase))
+ .ToList();
+
+ // se trovato --> invio start/stop PODL
+ if (listPOdl != null && listPOdl.Count > 0)
+ {
+ var currPodl = listPOdl.FirstOrDefault();
+ if (currPodl != null)
+ {
+ currIdxPOdl = currPodl.IdxPromessa;
+ // elimino da elenco PODL
+ reqPOdlList.Remove(currPodl);
+ }
+ }
+ else
+ {
+ // se NON trovato --> creo PODL, poi avvio/chiudo
+ currIdxPOdl = TryCreatePodl(item.codArt, CodGruppoIob, item.numPz);
+ }
+ // se idxPOdl valido
+ if (currIdxPOdl > 0)
+ {
+ // mando apertura PODL
+ SendStartPodl(currIdxPOdl, item.dtStart);
+ // chiudo PODL...
+ if (item.dtEnd != null)
+ {
+ // invio pezzi 3 sec prima di chiusura
+ SendPzIncrAtDate(item.numPz, ((DateTime)item.dtEnd).AddSeconds(-3));
+ // chiudo
+ SendClosePOdl(currIdxPOdl, (DateTime)item.dtEnd);
+ }
+ }
+ }
+
+ // salvo in last il valore di act...
+ redisMan.setRSV(redKeyLogfileLast, fileAct);
+
+ // calcolo B_input valido
+ var lastRec = sigLogData.LastOrDefault();
+ if (lastRec != null)
+ {
+ // salvo in B_input ultimo valore letto...
+ int lastValInt = decodeSoitaabLog(lastRec.valString);
+ B_input = lastValInt;
+ }
+ }
+ fatto = true;
+ }
+ return fatto;
+ }
+
+ #endregion Private Methods
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-WS/DATA/CONF/GIACO_ICOEL_002.ini b/IOB-WIN-WS/DATA/CONF/GIACO_ICOEL_002.ini
new file mode 100644
index 00000000..9ced4fca
--- /dev/null
+++ b/IOB-WIN-WS/DATA/CONF/GIACO_ICOEL_002.ini
@@ -0,0 +1,86 @@
+;Configurazione IOB-WIN
+[IOB]
+;WebService SOAP x sizer
+CNCTYPE=IcoelSoap
+PING_MS_TIMEOUT=500
+MinDeltaSec=5
+;IOB_NAME=GIACO_ICOEL
+
+[MACHINE]
+VENDOR=ICOEL
+MODEL=Impianto Ciliegie Turi
+
+[CNC]
+IP=192.168.137.50
+PORT=8001
+GETPRGNAME=false
+
+[SERVER]
+MPIP=http://192.168.1.14
+MPURL=/MP/IO
+CMDBASE=/IOB/input/
+CMDFLOG=/IOB/flog/
+CMDRAWTRANSF=/IOB/rawTransfJson/
+CMDALIVE=/IOB
+CMDENABLED=/IOB/enabled/
+CMDADV1=?valore=
+CMDREBO=/sendReboot.aspx?idxMacchina=
+
+[MEMORY]
+ADDR_READ=DB9999.DBB0
+ADDR_WRITE=DB9999.DBB0
+SIZE_READ=0
+SIZE_WRITE=0
+;BIT0=CONN
+;BIT1=DB60.DBB1
+;BIT2=PZCOUNT.STD.DB700.DBW22
+;BIT3=DB60.DBB3
+;BIT4=DB60.DBB4
+
+
+[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]
+AUTO_CHANGE_ODL=false
+CHANGE_ODL_MODE=TIME
+CHANGE_ODL_HOURS=24
+CHANGE_ODL_IDLE_MIN=5
+PZCOUNT_MODE=Icoel
+DISABLE_PZCOUNT=FALSE
+ENABLE_SEND_PZC_BLOCK=TRUE
+MIN_SEND_PZC_BLOCK=0
+MAX_SEND_PZC_BLOCK=100
+ENABLE_DYN_DATA=TRUE
+FORCE_DYN_DATA=TRUE
+DEM_FACT_DYN_DATA=2
+ENABLE_DATA_FILTER=TRUE
+ENABLE_CLI_RESTART=TRUE
+DISABLE_SEND_WDST=TRUE
+
+; clock base (da 10ms)
+timerIntMs=40
+
+; conf parametri memoria READ/WRITE
+PARAM_CONF=GIACO_ICOEL_002.json
+
+[BRANCH]
+NAME=master
+
+; Tags manuali
+[TAGS]
+Customer=Giacovelli-Turi
+HostOS=WIN
+HostName=IOB-WIN-01
+HostAddr=192.168.137.11
diff --git a/IOB-WIN-WS/DATA/CONF/GIACO_ICOEL_002.json b/IOB-WIN-WS/DATA/CONF/GIACO_ICOEL_002.json
new file mode 100644
index 00000000..df6898b4
--- /dev/null
+++ b/IOB-WIN-WS/DATA/CONF/GIACO_ICOEL_002.json
@@ -0,0 +1,124 @@
+{
+ "mMapWrite": {
+ "setSupplier": {
+ "name": "setSupplier",
+ "description": "Send Batch req (GrowerCode|Descript)",
+ "tipoMem": "String",
+ "memAddr": "setSupplier",
+ "index": 0,
+ "size": 50
+ }
+ },
+ "mMapRead": {
+ "VelTonnOra": {
+ "name": "VelTonnOra",
+ "description": "Vel. Impianto Tonnellate / Ora",
+ "memAddr": "VelTonnOra",
+ "tipoMem": "Real",
+ "index": 0,
+ "size": 0,
+ "func": "AVG",
+ "period": 50,
+ "factor": 1
+ },
+ "VelFruttiMinuto": {
+ "name": "VelFruttiMinuto",
+ "description": "Vel. Impianto Frutti / Minuto",
+ "memAddr": "VelFruttiMinuto",
+ "tipoMem": "Real",
+ "index": 0,
+ "size": 0,
+ "func": "AVG",
+ "period": 50,
+ "factor": 1
+ },
+ "NumPacksOra": {
+ "name": "NumPacksOra",
+ "description": "Numero confezioni / Ora",
+ "memAddr": "NumPacksOra",
+ "tipoMem": "Real",
+ "index": 0,
+ "size": 0,
+ "func": "AVG",
+ "period": 50,
+ "factor": 1
+ },
+ "PercRiemp": {
+ "name": "PercRiemp",
+ "description": "Percentuale riempimento carrelli",
+ "memAddr": "PercRiemp",
+ "tipoMem": "Real",
+ "index": 0,
+ "size": 0,
+ "func": "AVG",
+ "period": 50,
+ "factor": 1
+ },
+ "L1_Batch": {
+ "name": "L1_Batch",
+ "description": "Curr Batch",
+ "tipoMem": "String",
+ "memAddr": "L1_Batch",
+ "index": 0,
+ "size": 50,
+ "func": "POINT",
+ "period": 120,
+ "factor": 1
+ },
+ "L2_Batch": {
+ "name": "L2_Batch",
+ "description": "Curr Batch",
+ "tipoMem": "String",
+ "memAddr": "L2_Batch",
+ "index": 0,
+ "size": 50,
+ "func": "POINT",
+ "period": 120,
+ "factor": 1
+ },
+ "L1_Grower": {
+ "name": "L1_Grower",
+ "description": "Grower Data",
+ "tipoMem": "String",
+ "memAddr": "L1_Grower",
+ "index": 0,
+ "size": 50,
+ "func": "POINT",
+ "period": 120,
+ "factor": 1
+ },
+ "L2_Grower": {
+ "name": "L2_Grower",
+ "description": "Grower Data",
+ "tipoMem": "String",
+ "memAddr": "L2_Grower",
+ "index": 0,
+ "size": 50,
+ "func": "POINT",
+ "period": 120,
+ "factor": 1
+ },
+ "L1_Variety": {
+ "name": "L1_Variety",
+ "description": "Variety Data",
+ "tipoMem": "String",
+ "memAddr": "L1_Variety",
+ "index": 0,
+ "size": 50,
+ "func": "POINT",
+ "period": 120,
+ "factor": 1
+ },
+ "L2_Variety": {
+ "name": "L2_Variety",
+ "description": "Variety Data",
+ "tipoMem": "String",
+ "memAddr": "L2_Variety",
+ "index": 0,
+ "size": 50,
+ "func": "POINT",
+ "period": 120,
+ "factor": 1
+ }
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-WS/DATA/CONF/IMI_GOMBA.ini b/IOB-WIN-WS/DATA/CONF/IMI_GOMBA.ini
new file mode 100644
index 00000000..abcc3af2
--- /dev/null
+++ b/IOB-WIN-WS/DATA/CONF/IMI_GOMBA.ini
@@ -0,0 +1,80 @@
+;Configurazione IOB-WIN
+[IOB]
+;Accesso gestione sync pesate con bilancia GOMBA via SOAP
+CNCTYPE=SOAP_GOMBA
+PING_MS_TIMEOUT=500
+MinDeltaSec=5
+DIS_EXE_TASK=FALSE
+DIS_STATE_CH=FALSE
+
+[MACHINE]
+VENDOR=Gomba
+MODEL=Bilancia Gomba
+
+[CNC]
+;IP=172.28.31.56
+IP=308gomba
+PORT=8000
+GETPRGNAME=false
+
+[SERVER]
+MPIP=http://192.168.0.110
+MPURL=/MP/IO
+CMDBASE=/IOB/input/
+CMDFLOG=/IOB/flog/
+CMDALIVE=/IOB
+CMDENABLED=/IOB/enabled/
+CMDADV1=?valore=
+CMDREBO=/sendReboot.aspx?idxMacchina=
+CMDRAWTRANSF=/IOB/rawTransfJson/
+
+[MEMORY]
+ADDR_READ=DB9999.DBB0
+ADDR_WRITE=DB9999.DBB0
+SIZE_READ=0
+SIZE_WRITE=0
+;BIT0=CONN
+;BIT1=DB60.DBB1
+;BIT2=PZCOUNT.STD.DB700.DBW22
+;BIT3=DB60.DBB3
+;BIT4=DB60.DBB4
+
+
+[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]
+AUTO_CHANGE_ODL=TRUE
+CHANGE_ODL_MODE=DAILY
+PZCOUNT_MODE=GOMBA
+DISABLE_PZCOUNT=TRUE
+ENABLE_SEND_PZC_BLOCK=TRUE
+MIN_SEND_PZC_BLOCK=0
+MAX_SEND_PZC_BLOCK=100
+ENABLE_DYN_DATA=TRUE
+FORCE_DYN_DATA=TRUE
+DEM_FACT_DYN_DATA=5
+ENABLE_DATA_FILTER=TRUE
+ENABLE_CLI_RESTART=TRUE
+DISABLE_SEND_WDST=TRUE
+VetoReadSec=5
+
+; clock base (da 10ms)
+timerIntMs=20
+
+; conf specifica (NON necessaria)
+PARAM_CONF=IMI_GOMBA.json
+
+[BRANCH]
+NAME=master
\ No newline at end of file
diff --git a/IOB-WIN-WS/DATA/CONF/IMI_GOMBA.json b/IOB-WIN-WS/DATA/CONF/IMI_GOMBA.json
new file mode 100644
index 00000000..da14d2eb
--- /dev/null
+++ b/IOB-WIN-WS/DATA/CONF/IMI_GOMBA.json
@@ -0,0 +1,138 @@
+{
+ "mMapWrite": {
+ "reqPesata": {
+ "name": "reqPesata",
+ "description": "Registra Peso IN/OUT",
+ "memAddr": "000",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 1,
+ "displOrdinal": 1
+ },
+ "RM": {
+ "name": "RM",
+ "description": "Codice Pesata",
+ "memAddr": "000",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 1,
+ "displOrdinal": 3
+ },
+ "Cod1": {
+ "name": "Cod1",
+ "description": "Codice Cliente",
+ "memAddr": "000",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 1,
+ "displOrdinal": 4
+ },
+ "Cod2": {
+ "name": "Cod2",
+ "description": "Targa Automezzo",
+ "memAddr": "000",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 1,
+ "displOrdinal": 5
+ },
+ "Cod3": {
+ "name": "Cod3",
+ "description": "Codice Articolo",
+ "memAddr": "000",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 1,
+ "displOrdinal": 6
+ },
+ "Cod4": {
+ "name": "Cod4",
+ "description": "Note Ingresso",
+ "memAddr": "000",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 1,
+ "displOrdinal": 7
+ },
+ "Cod5": {
+ "name": "Cod5",
+ "description": "Note Uscita",
+ "memAddr": "000",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 1,
+ "displOrdinal": 8
+ },
+ "Cod6": {
+ "name": "Cod6",
+ "description": "Note",
+ "memAddr": "000",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 1,
+ "displOrdinal": 9
+ }
+ },
+ "mMapRead": {
+ "logReq": {
+ "name": "logReq",
+ "description": "Esito Comando Pesata",
+ "memAddr": "000",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 1,
+ "displOrdinal": 2
+ },
+ "lastWeightIn": {
+ "name": "lastWeightIn",
+ "description": "Ultima Pesata IN (kg)",
+ "memAddr": "lastWeightIn",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 0,
+ "func": "MAX",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 10
+ },
+ "lastWeightOut": {
+ "name": "lastWeightOut",
+ "description": "Ultima Pesata OUT (kg)",
+ "memAddr": "lastWeightOut",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 0,
+ "func": "MAX",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 11
+ },
+ "lastRecIn": {
+ "name": "lastRecIn",
+ "description": "Ultimo record IN",
+ "memAddr": "lastRecIn",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 0,
+ "func": "MAX",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 12
+ },
+ "lastRecOut": {
+ "name": "lastRecOut",
+ "description": "Ultimo record OUT",
+ "memAddr": "lastRecOut",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 0,
+ "func": "MAX",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 13
+ }
+ },
+ "optKVP": {
+ "numLastWeight": 100
+ }
+}
diff --git a/IOB-WIN-WS/DATA/CONF/L020.ini b/IOB-WIN-WS/DATA/CONF/L020.ini
new file mode 100644
index 00000000..68d6a858
--- /dev/null
+++ b/IOB-WIN-WS/DATA/CONF/L020.ini
@@ -0,0 +1,75 @@
+;Configurazione IOB-WIN
+[IOB]
+CNCTYPE=REST_CITIZEN
+
+[MACHINE]
+VENDOR=Citizen_Mecmatica
+MODEL=Citizen
+
+[CNC]
+IP=192.168.80.61
+PORT=8733
+GETPRGNAME=true
+
+[SERVER]
+MPIP=192.168.111.104
+MPURL=/MP/IO
+CMDBASE=/IOB/input/
+CMDFLOG=/IOB/flog/
+CMDALIVE=/IOB
+CMDENABLED=/IOB/enabled/
+CMDADV1=?valore=
+CMDREBO=/sendReboot.aspx?idxMacchina=
+
+[MEMORY]
+;BIT0=CONN
+;BIT1=Y12.6
+;BIT2=PZCOUNT.PAR.6711
+;BIT3=Y12.4
+;BIT5=X18.3
+;BIT6=X11.3
+AREAD_START=0
+AREAD_SIZE=9999
+AREAG_SIZE=48
+AREAR_START=0
+AREAR_SIZE=64
+AREAX_START=0
+AREAX_SIZE=64
+AREAY_START=0
+AREAY_SIZE=64
+PAR_START=6711
+PAR_SIZE=3
+
+[BLINK]
+;MAX_COUNTER_BLINK = 30
+MAX_COUNTER_BLINK = 15
+;bit0 = 0
+;bit1 = 0
+;bit2 = 1
+;bit3 = 1
+;bit4 = 1
+;bit5 = 0
+;bit6 = 0
+;bit7 = 0
+BLINK_FILT=0
+;BLINK_FILT=28
+
+[OPTPAR]
+;PZCOUNT_MODE=STD|BIT
+;PZCOUNT_MODE=STD.PAR.6711
+;PZGTOT_MODE=STD.PAR.6712
+;PZREQ_MODE=STD.PAR.6713
+ENABLE_PZ_RESET=TRUE
+ENABLE_PZ_RESET_stopSetup=TRUE
+;gestione invio pezzi in blocco
+ENABLE_SEND_PZC_BLOCK=TRUE
+MIN_SEND_PZC_BLOCK=10
+MAX_SEND_PZC_BLOCK=100
+;DynData
+ENABLE_DYN_DATA=TRUE
+DISABLE_SEND_WDST=TRUE
+PARAM_CONF=L020.json
+REST_CONF=L020.json
+
+[BRANCH]
+NAME=master
\ No newline at end of file
diff --git a/IOB-WIN-WS/DATA/CONF/L020.json b/IOB-WIN-WS/DATA/CONF/L020.json
new file mode 100644
index 00000000..16b0469d
--- /dev/null
+++ b/IOB-WIN-WS/DATA/CONF/L020.json
@@ -0,0 +1,288 @@
+{
+ "mMapRead": {
+ "qtyWrk": {
+ "name": "qtyWrk",
+ "description": "Contatore Parziale",
+ "memAddr": "",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 5
+ },
+ "qtyTot": {
+ "name": "qtyTot",
+ "description": "Contatore Assoluto",
+ "memAddr": "",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 6
+ },
+ "qtyReq": {
+ "name": "qtyReq",
+ "description": "Qty Richiesta",
+ "memAddr": "",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 4
+ },
+ "gLamp": {
+ "name": "gLamp",
+ "description": "Lamp G",
+ "memAddr": "",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 7
+ },
+ "yLamp": {
+ "name": "yLamp",
+ "description": "Lamp Y",
+ "memAddr": "",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 8
+ },
+ "rLamp": {
+ "name": "rLamp",
+ "description": "Lamp R",
+ "memAddr": "",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 9
+ },
+ "pName": {
+ "name": "pName",
+ "description": "Programma",
+ "memAddr": "",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 10
+ },
+ "Alarms": {
+ "name": "Alarms",
+ "description": "Allarm Status",
+ "memAddr": "",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 11
+ },
+ "cTime": {
+ "name": "cTime",
+ "description": "Ultimo T.Ciclo",
+ "memAddr": "",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 12
+ },
+ "DYNDATA": {
+ "name": "DYNDATA",
+ "description": "DynData check",
+ "memAddr": "",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 13
+ },
+ "token": {
+ "name": "token",
+ "description": "Token Rest",
+ "memAddr": "",
+ "tipoMem": "String",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 14
+ }
+ },
+ "mMapWrite": {
+ "setArt": {
+ "name": "setArt",
+ "description": "Articolo",
+ "memAddr": "",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 1
+ },
+ "setComm": {
+ "name": "setComm",
+ "description": "Commessa",
+ "memAddr": "",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 2
+ },
+ "setPzComm": {
+ "name": "setPzComm",
+ "description": "Qty Commessa",
+ "memAddr": "",
+ "tipoMem": "Int",
+ "index": 0,
+ "size": 4,
+ "func": "POINT",
+ "period": 60,
+ "factor": 1,
+ "displOrdinal": 3
+ }
+ },
+ "timeOutSec": 60,
+ "apiUrl": "http://192.168.80.61:8733/DRIVER_MES/rest/",
+ "samplePeriod": 1000,
+ "numErrDisconnect": 5,
+ "CallList": {
+ "GetConnection": {
+ "Method": "Get",
+ "Url": "checkconnection",
+ "Name": "Connection",
+ "OutVarName": "Connected"
+ },
+ "GetToken": {
+ "Method": "Get",
+ "Url": "gettoken/mecmaticames/mecmatica@mes",
+ "OutVarName": "token",
+ "SamplePeriod": 1000
+ },
+ "GetLampGreen": {
+ "Method": "Get",
+ "Url": "getsingleladderio/[[token]]/Y/8E",
+ "Name": "Lampada Verde",
+ "OutVarName": "LampGreen",
+ "ListPrevCall": [ "GetToken" ],
+ "SamplePeriod": 1000
+ },
+ "GetLampYellow": {
+ "Method": "Get",
+ "Url": "getsingleladderio/[[token]]/Y/21",
+ "Name": "Lampada Gialla",
+ "OutVarName": "LampYellow",
+ "ListPrevCall": [ "GetToken" ],
+ "SamplePeriod": 1000
+ },
+ "GetLampRed": {
+ "Method": "Get",
+ "Url": "getsingleladderio/[[token]]/Y/22",
+ "Name": "Lampada Rossa",
+ "OutVarName": "LampRed",
+ "ListPrevCall": [ "GetToken" ],
+ "SamplePeriod": 1000
+ },
+ "GetQtyTot": {
+ "Method": "Get",
+ "Url": "gettotalquantity/[[token]]",
+ "Name": "Contapezzi Assoluto",
+ "OutVarName": "ContapezziAssoluto",
+ "ListPrevCall": [ "GetToken" ]
+ },
+ "GetQtyReq": {
+ "Method": "Get",
+ "Url": "getneededquantity/[[token]]",
+ "Name": "Qta Richiesta",
+ "OutVarName": "setPzComm",
+ "ListPrevCall": [ "GetToken" ]
+ },
+ "GetQtyProd": {
+ "Method": "Get",
+ "Url": "getworkedquantity/[[token]]",
+ "Name": "Contapezzi Parziale",
+ "OutVarName": "ContapezziParziale",
+ "ListPrevCall": [ "GetToken" ]
+ },
+ "GetCycleTime": {
+ "Method": "Get",
+ "Url": "getcycletime/[[token]]",
+ "Name": "tempoCiclo (sec)",
+ "OutVarName": "LastTC",
+ "ListPrevCall": [ "GetToken" ]
+ },
+ "GetProgName": {
+ "Method": "Get",
+ "Url": "getmainprogram/[[token]]",
+ "Name": "Programma MAIN",
+ "OutVarName": "PROG",
+ "ListPrevCall": [ "GetToken" ]
+ },
+ "GetCurrAlarm": {
+ "Method": "Get",
+ "Url": "getalarm/[[token]]",
+ "Name": "Allarme attivo",
+ "OutVarName": "AlarmActive",
+ "ListPrevCall": [ "GetToken" ],
+ "SamplePeriod": 2000
+ },
+ "GetAllAlarmLog": {
+ "Method": "Get",
+ "Url": "getallalarmlog/[[token]]",
+ "Name": "Log Allarmi (last)",
+ "OutVarName": "",
+ "ListPrevCall": [ "GetToken" ],
+ "SamplePeriod": 20000
+ },
+ "SetJobData": {
+ "Method": "Post",
+ "Url": "SetJobData",
+ "Name": "Invio Parametri Jobs",
+ "OutVarName": "",
+ "ListPrevCall": [ "GetToken" ]
+ },
+ "SetNeededQuantity_disab": {
+ "Method": "Post",
+ "Url": "SetNeededQuantity",
+ "Name": "Invio Qty Richiesta (disabilitato)",
+ "OutVarName": "",
+ "ListPrevCall": [ "GetToken" ]
+ },
+ "SetWorkedQuantity": {
+ "Method": "Post",
+ "Url": "SetWorkedQuantity",
+ "Name": "Invio Qty Lavorata",
+ "OutVarName": "",
+ "ListPrevCall": [ "GetToken" ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-WS/DATA/CONF/L020_Rest.wrong.json b/IOB-WIN-WS/DATA/CONF/L020_Rest.wrong.json
new file mode 100644
index 00000000..7d130a3b
--- /dev/null
+++ b/IOB-WIN-WS/DATA/CONF/L020_Rest.wrong.json
@@ -0,0 +1,129 @@
+{
+ "timeOutSec": 60,
+ "apiUrl": "http://192.168.80.61:8733/DRIVER_MES/rest/",
+ "mMapRead": {
+ },
+ "mMapWrite": {
+ },
+ "CallList": {
+ "GetConnection": {
+ "Method": "Get",
+ "Url": "checkconnection",
+ "Name": "Connection",
+ "OutVarName": "Connected"
+ },
+ "GetToken": {
+ "Method": "Get",
+ "Url": "gettoken/mecmaticames/mecmatica@mes",
+ "OutVarName": "token",
+ "SamplePeriod": 1000
+ },
+ "GetLampGreen": {
+ "Method": "Get",
+ "Url": "getsingleladderio/[[token]]/Y/8E",
+ "Name": "Lampada Verde",
+ "OutVarName": "LampGreen",
+ "ListPrevCall": [ "GetToken" ],
+ "SamplePeriod": 1000
+ },
+ "GetLampYellow": {
+ "Method": "Get",
+ "Url": "getsingleladderio/[[token]]/Y/21",
+ "Name": "Lampada Gialla",
+ "OutVarName": "LampYellow",
+ "ListPrevCall": [ "GetToken" ],
+ "SamplePeriod": 1000
+ },
+ "GetLampRed": {
+ "Method": "Get",
+ "Url": "getsingleladderio/[[token]]/Y/22",
+ "Name": "Lampada Rossa",
+ "OutVarName": "LampRed",
+ "ListPrevCall": [ "GetToken" ],
+ "SamplePeriod": 1000
+ },
+ //"GetStateAlarm": {
+ // "Method": "Get",
+ // "Url": "getsingleladderio/[[token]]/Y/200",
+ // "Name": "Macchina in Allarme",
+ // "OutVarName": "AlarmState",
+ // "ListPrevCall": [ "GetToken" ],
+ // "SamplePeriod": 2000
+ //},
+ //"GetStateCaution": {
+ // "Method": "Get",
+ // "Url": "getsingleladderio/[[token]]/Y/201",
+ // "Name": "Macchina in Caution",
+ // "OutVarName": "CautionState",
+ // "ListPrevCall": [ "GetToken" ],
+ // "SamplePeriod": 2000
+ //},
+ //"GetStateStart": {
+ // "Method": "Get",
+ // "Url": "getsingleladderio/[[token]]/Y/222",
+ // "Name": "Macchina in Start",
+ // "OutVarName": "StartState",
+ // "ListPrevCall": [ "GetToken" ],
+ // "SamplePeriod": 2000
+ //},
+ //"GetStateStop": {
+ // "Method": "Get",
+ // "Url": "getsingleladderio/[[token]]/Y/223",
+ // "Name": "Macchina in Stop",
+ // "OutVarName": "StopState",
+ // "ListPrevCall": [ "GetToken" ],
+ // "SamplePeriod": 2000
+ //},
+ "GetQtyTot": {
+ "Method": "Get",
+ "Url": "gettotalquantity/[[token]]",
+ "Name": "Contapezzi Assoluto",
+ "OutVarName": "ContapezziAssoluto",
+ "ListPrevCall": [ "GetToken" ]
+ },
+ "GetQtyReq": {
+ "Method": "Get",
+ "Url": "getneededquantity/[[token]]",
+ "Name": "Qta Richiesta",
+ "OutVarName": "setPzComm",
+ "ListPrevCall": [ "GetToken" ]
+ },
+ "GetQtyProd": {
+ "Method": "Get",
+ "Url": "getworkedquantity/[[token]]",
+ "Name": "Contapezzi Parziale",
+ "OutVarName": "ContapezziParziale",
+ "ListPrevCall": [ "GetToken" ]
+ },
+ "GetCycleTime": {
+ "Method": "Get",
+ "Url": "getcycletime/[[token]]",
+ "Name": "tempoCiclo (sec)",
+ "OutVarName": "LastTC",
+ "ListPrevCall": [ "GetToken" ]
+ },
+ "GetProgName": {
+ "Method": "Get",
+ "Url": "getmainprogram/[[token]]",
+ "Name": "Programma MAIN",
+ "OutVarName": "PROG",
+ "ListPrevCall": [ "GetToken" ]
+ },
+ "GetCurrAlarm": {
+ "Method": "Get",
+ "Url": "getalarm/[[token]]",
+ "Name": "Allarme attivo",
+ "OutVarName": "AlarmActive",
+ "ListPrevCall": [ "GetToken" ],
+ "SamplePeriod": 2000
+ },
+ "GetAllAlarmLog": {
+ "Method": "Get",
+ "Url": "getallalarmlog/[[token]]",
+ "Name": "Log Allarmi (last)",
+ "OutVarName": "",
+ "ListPrevCall": [ "GetToken" ],
+ "SamplePeriod": 20000
+ }
+ }
+}
\ No newline at end of file
diff --git a/IOB-WIN-WS/DATA/DAT/PersistData.dat b/IOB-WIN-WS/DATA/DAT/PersistData.dat
deleted file mode 100644
index 5f282702..00000000
--- a/IOB-WIN-WS/DATA/DAT/PersistData.dat
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/IOB-WIN-WS/DATA/DAT/SimData.dat b/IOB-WIN-WS/DATA/DAT/SimData.dat
deleted file mode 100644
index c59e4823..00000000
--- a/IOB-WIN-WS/DATA/DAT/SimData.dat
+++ /dev/null
@@ -1,959 +0,0 @@
-;------------------------------------------------------------------------------------
-; filevalori simulati x provare sistema dati e filtraggio... commenti iniziano per ';', valori formato data#valore#counter
-; NOTE FILE:
-; - bit come macchine std IOB
-; B0 = POWERON
-; B1 = RUN
-; B2 = CONTAPEZZO
-; B3 = ALLARME
-; B4 = MANUALE
-; B5 = NA
-; B6 = NA
-; B7 = NA
-; - segnali alternanti su 00011100
-;------------------------------------------------------------------------------------
-;
-;----------------------------
-; inizio da spenta
-0
-0
-; indico accesa
-1
-1
-1
-; allarme (BLINK)
-9
-9
-9
-9
-9
-1
-1
-1
-1
-1
-1
-9
-9
-9
-9
-9
-1
-1
-1
-1
-1
-19
-9
-9
-9
-9
-1
-1
-1
-1
-1
-1
-; allarme manuale (2 blink, periodo diverso)
-25
-25
-17
-17
-9
-9
-1
-1
-25
-25
-17
-17
-9
-9
-1
-1
-25
-25
-17
-17
-9
-9
-1
-1
-25
-25
-17
-17
-9
-9
-1
-1
-25
-25
-17
-17
-9
-9
-1
-1
-; indico manuale
-17
-17
-17
-17
-17
-17
-17
-17
-17
-17
-1
-1
-1
-1
-1
-1
-1
-1
-17
-17
-17
-17
-17
-17
-17
-17
-17
-17
-1
-1
-1
-1
-1
-1
-1
-1
-17
-17
-17
-17
-17
-17
-17
-17
-17
-17
-1
-1
-1
-1
-1
-1
-1
-1
-; RUN!
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-; contapezzo
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-; RUN
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-; contapezzo
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-; RUN
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-; contapezzo
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-; RUN
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-; allarme (BLINK)
-9
-9
-9
-9
-9
-1
-1
-1
-1
-1
-1
-9
-9
-9
-9
-9
-1
-1
-1
-1
-1
-19
-9
-9
-9
-9
-1
-1
-1
-1
-1
-1
-; allarme manuale (2 blink, periodo diverso)
-25
-25
-17
-17
-9
-9
-1
-1
-25
-25
-17
-17
-9
-9
-1
-1
-25
-25
-17
-17
-9
-9
-1
-1
-25
-25
-17
-17
-9
-9
-1
-1
-25
-25
-17
-17
-9
-9
-1
-1
-; indico manuale
-17
-17
-17
-17
-17
-17
-17
-17
-17
-17
-1
-1
-1
-1
-1
-1
-1
-1
-17
-17
-17
-17
-17
-17
-17
-17
-17
-17
-1
-1
-1
-1
-1
-1
-1
-1
-17
-17
-17
-17
-17
-17
-17
-17
-17
-17
-1
-1
-1
-1
-1
-1
-1
-1
-; RUN!
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-; contapezzo
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-; RUN
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-; contapezzo
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-7
-7
-7
-7
-7
-3
-3
-3
-3
-3
-3
-; RUN
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
\ No newline at end of file
diff --git a/IOB-WIN-WS/DATA/HIST/.placeholder b/IOB-WIN-WS/DATA/HIST/.placeholder
deleted file mode 100644
index 5f282702..00000000
--- a/IOB-WIN-WS/DATA/HIST/.placeholder
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/IOB-WIN-WS/IOB-WIN-WS.csproj b/IOB-WIN-WS/IOB-WIN-WS.csproj
index dda7835f..70c1b4fb 100644
--- a/IOB-WIN-WS/IOB-WIN-WS.csproj
+++ b/IOB-WIN-WS/IOB-WIN-WS.csproj
@@ -193,9 +193,16 @@
Always
+
+
+
+
Always
+
+
+
Always
@@ -214,15 +221,6 @@
Always
-
- Always
-
-
- Always
-
-
- Always
-
Always