restructured WaterMeter

This commit is contained in:
Thomas Wiedebusch
2023-04-26 10:14:09 +02:00
parent 9c328a057c
commit dc16f86930
51 changed files with 3596 additions and 242 deletions
+335 -67
View File
@@ -73,8 +73,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RequestProtocol", "Hardware
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StreamingProtocol", "Hardware\WaterMeter\Genesis\Protocols\StreamingProtocol\StreamingProtocol.csproj", "{29617814-313E-409E-AA5D-59C78A9D4DF1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolCore", "Hardware\WaterMeter\Genesis\Protocols\ProtocolCore\ProtocolCore.csproj", "{8BDD2789-96D4-43EA-AAD7-0F49D0347998}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortCore", "Hardware\Interfaces\Ports\PortCore\PortCore.csproj", "{2E139F63-B6FE-4EA9-A098-85364FE9B26C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SerialPorts", "Hardware\Interfaces\Ports\SerialPorts\SerialPorts.csproj", "{72037E89-4F63-4B3F-BEFF-4138E578CE99}"
@@ -165,6 +163,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MagFluxToolBox", "Ui\MagFlu
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MagFluxConfig", "Hardware\WaterMeter\MagFlux\MagFluxConfig\MagFluxConfig.csproj", "{70398B99-B134-4BBD-968B-7399B70C3CE2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MagFluxCore", "Hardware\WaterMeter\MagFlux\MagFluxCore\MagFluxCore.csproj", "{B5DA260C-71CC-45CA-B79E-D1B376AF718C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RequestProtocol", "Hardware\WaterMeter\MagFlux\Protocols\RequestProtocol\RequestProtocol.csproj", "{00748F11-4B49-4D8B-93C4-4A11A210CCE2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StreamingProtocol", "Hardware\WaterMeter\MagFlux\Protocols\StreamingProtocol\StreamingProtocol.csproj", "{D6B81C60-2763-4C4D-989F-90822F53B01A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataPackages", "Hardware\WaterMeter\MagFlux\DataPackages\DataPackages.csproj", "{BA17D20E-0CEB-4B27-9772-2392BD750ED5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolCore", "Hardware\WaterMeter\ProtocolCore\ProtocolCore.csproj", "{8BDD2789-96D4-43EA-AAD7-0F49D0347998}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
Utils\DateTimeServerShared\DateTimeServerShared.projitems*{4806d89a-fbfb-41bc-aaa7-2242444bf55a}*SharedItemsImports = 4
@@ -1225,70 +1233,6 @@ Global
{29617814-313E-409E-AA5D-59C78A9D4DF1}.XP32bit|x64.Build.0 = XP32bit|x64
{29617814-313E-409E-AA5D-59C78A9D4DF1}.XP32bit|x86.ActiveCfg = XP32bit|x86
{29617814-313E-409E-AA5D-59C78A9D4DF1}.XP32bit|x86.Build.0 = XP32bit|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|Any CPU.ActiveCfg = _MANUAL_CONTROL|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|Any CPU.Build.0 = _MANUAL_CONTROL|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|Mixed Platforms.Build.0 = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|x64.ActiveCfg = _MANUAL_CONTROL|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|x64.Build.0 = _MANUAL_CONTROL|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|x86.ActiveCfg = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|x86.Build.0 = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|Any CPU.ActiveCfg = PerformTest|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|Any CPU.Build.0 = PerformTest|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|Mixed Platforms.ActiveCfg = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|Mixed Platforms.Build.0 = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|x64.ActiveCfg = PerformTest|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|x64.Build.0 = PerformTest|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|x86.ActiveCfg = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|x86.Build.0 = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|x64.ActiveCfg = Debug|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|x64.Build.0 = Debug|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|x86.ActiveCfg = Debug|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|x86.Build.0 = Debug|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = PerformTest|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|Any CPU.Build.0 = PerformTest|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|x64.ActiveCfg = PerformTest|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|x64.Build.0 = PerformTest|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|x86.ActiveCfg = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|x86.Build.0 = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|Any CPU.ActiveCfg = PerformTest|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|Any CPU.Build.0 = PerformTest|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|Mixed Platforms.ActiveCfg = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|Mixed Platforms.Build.0 = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|x64.ActiveCfg = PerformTest|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|x64.Build.0 = PerformTest|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|x86.ActiveCfg = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|x86.Build.0 = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|Any CPU.Build.0 = Release|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|Mixed Platforms.ActiveCfg = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|Mixed Platforms.Build.0 = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|x64.ActiveCfg = Release|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|x64.Build.0 = Release|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|x86.ActiveCfg = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|x86.Build.0 = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|Mixed Platforms.Build.0 = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|x64.ActiveCfg = Release|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|x64.Build.0 = Release|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|x86.ActiveCfg = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|x86.Build.0 = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|Mixed Platforms.Build.0 = XP32bit|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|x64.ActiveCfg = XP32bit|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|x64.Build.0 = XP32bit|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|x86.ActiveCfg = XP32bit|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|x86.Build.0 = XP32bit|x86
{2E139F63-B6FE-4EA9-A098-85364FE9B26C}._MANUAL_CONTROL|Any CPU.ActiveCfg = _MANUAL_CONTROL|Any CPU
{2E139F63-B6FE-4EA9-A098-85364FE9B26C}._MANUAL_CONTROL|Any CPU.Build.0 = _MANUAL_CONTROL|Any CPU
{2E139F63-B6FE-4EA9-A098-85364FE9B26C}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = _MANUAL_CONTROL|Any CPU
@@ -3719,6 +3663,326 @@ Global
{70398B99-B134-4BBD-968B-7399B70C3CE2}.XP32bit|x64.Build.0 = Release|Any CPU
{70398B99-B134-4BBD-968B-7399B70C3CE2}.XP32bit|x86.ActiveCfg = Release|Any CPU
{70398B99-B134-4BBD-968B-7399B70C3CE2}.XP32bit|x86.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.COM|Any CPU.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.COM|Any CPU.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.COM|Mixed Platforms.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.COM|Mixed Platforms.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.COM|x64.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.COM|x64.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.COM|x86.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.COM|x86.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Debug|x64.ActiveCfg = Debug|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Debug|x64.Build.0 = Debug|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Debug|x86.ActiveCfg = Debug|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Debug|x86.Build.0 = Debug|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.GenesisDisplayTool_V01|Any CPU.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.GenesisDisplayTool_V01|x64.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.GenesisDisplayTool_V01|x64.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.GenesisDisplayTool_V01|x86.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.GenesisDisplayTool_V01|x86.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.PerformTest|Any CPU.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.PerformTest|Any CPU.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.PerformTest|Mixed Platforms.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.PerformTest|Mixed Platforms.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.PerformTest|x64.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.PerformTest|x64.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.PerformTest|x86.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.PerformTest|x86.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Release|Any CPU.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Release|x64.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Release|x64.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Release|x86.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.Release|x86.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.ReleaseTest|x64.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.ReleaseTest|x86.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.XP32bit|x64.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.XP32bit|x64.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.XP32bit|x86.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.XP32bit|x86.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.COM|Any CPU.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.COM|Any CPU.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.COM|Mixed Platforms.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.COM|Mixed Platforms.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.COM|x64.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.COM|x64.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.COM|x86.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.COM|x86.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Debug|x64.ActiveCfg = Debug|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Debug|x64.Build.0 = Debug|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Debug|x86.ActiveCfg = Debug|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Debug|x86.Build.0 = Debug|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.GenesisDisplayTool_V01|Any CPU.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.GenesisDisplayTool_V01|x64.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.GenesisDisplayTool_V01|x64.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.GenesisDisplayTool_V01|x86.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.GenesisDisplayTool_V01|x86.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.PerformTest|Any CPU.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.PerformTest|Any CPU.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.PerformTest|Mixed Platforms.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.PerformTest|Mixed Platforms.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.PerformTest|x64.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.PerformTest|x64.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.PerformTest|x86.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.PerformTest|x86.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Release|Any CPU.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Release|x64.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Release|x64.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Release|x86.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.Release|x86.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.ReleaseTest|x64.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.ReleaseTest|x86.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.XP32bit|x64.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.XP32bit|x64.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.XP32bit|x86.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.XP32bit|x86.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.COM|Any CPU.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.COM|Any CPU.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.COM|Mixed Platforms.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.COM|Mixed Platforms.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.COM|x64.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.COM|x64.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.COM|x86.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.COM|x86.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Debug|x64.ActiveCfg = Debug|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Debug|x64.Build.0 = Debug|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Debug|x86.ActiveCfg = Debug|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Debug|x86.Build.0 = Debug|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.GenesisDisplayTool_V01|Any CPU.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.GenesisDisplayTool_V01|x64.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.GenesisDisplayTool_V01|x64.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.GenesisDisplayTool_V01|x86.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.GenesisDisplayTool_V01|x86.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.PerformTest|Any CPU.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.PerformTest|Any CPU.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.PerformTest|Mixed Platforms.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.PerformTest|Mixed Platforms.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.PerformTest|x64.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.PerformTest|x64.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.PerformTest|x86.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.PerformTest|x86.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Release|Any CPU.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Release|x64.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Release|x64.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Release|x86.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.Release|x86.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.ReleaseTest|x64.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.ReleaseTest|x86.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.XP32bit|x64.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.XP32bit|x64.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.XP32bit|x86.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.XP32bit|x86.Build.0 = Release|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}._MANUAL_CONTROL|Any CPU.ActiveCfg = _MANUAL_CONTROL|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}._MANUAL_CONTROL|Any CPU.Build.0 = _MANUAL_CONTROL|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = _MANUAL_CONTROL|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}._MANUAL_CONTROL|Mixed Platforms.Build.0 = _MANUAL_CONTROL|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}._MANUAL_CONTROL|x64.ActiveCfg = _MANUAL_CONTROL|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}._MANUAL_CONTROL|x64.Build.0 = _MANUAL_CONTROL|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}._MANUAL_CONTROL|x86.ActiveCfg = _MANUAL_CONTROL|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}._MANUAL_CONTROL|x86.Build.0 = _MANUAL_CONTROL|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.COM|Any CPU.ActiveCfg = COM|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.COM|Any CPU.Build.0 = COM|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.COM|Mixed Platforms.ActiveCfg = COM|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.COM|Mixed Platforms.Build.0 = COM|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.COM|x64.ActiveCfg = COM|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.COM|x64.Build.0 = COM|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.COM|x86.ActiveCfg = COM|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.COM|x86.Build.0 = COM|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Debug|Mixed Platforms.Build.0 = Debug|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Debug|x64.ActiveCfg = Debug|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Debug|x64.Build.0 = Debug|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Debug|x86.ActiveCfg = Debug|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Debug|x86.Build.0 = Debug|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = _MANUAL_CONTROL|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.GenesisDisplayTool_V01|Any CPU.Build.0 = _MANUAL_CONTROL|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = _MANUAL_CONTROL|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = _MANUAL_CONTROL|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.GenesisDisplayTool_V01|x64.ActiveCfg = _MANUAL_CONTROL|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.GenesisDisplayTool_V01|x64.Build.0 = _MANUAL_CONTROL|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.GenesisDisplayTool_V01|x86.ActiveCfg = _MANUAL_CONTROL|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.GenesisDisplayTool_V01|x86.Build.0 = _MANUAL_CONTROL|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.PerformTest|Any CPU.ActiveCfg = PerformTest|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.PerformTest|Any CPU.Build.0 = PerformTest|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.PerformTest|Mixed Platforms.ActiveCfg = PerformTest|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.PerformTest|Mixed Platforms.Build.0 = PerformTest|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.PerformTest|x64.ActiveCfg = PerformTest|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.PerformTest|x64.Build.0 = PerformTest|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.PerformTest|x86.ActiveCfg = PerformTest|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.PerformTest|x86.Build.0 = PerformTest|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Release|Any CPU.Build.0 = Release|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Release|Mixed Platforms.ActiveCfg = Release|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Release|Mixed Platforms.Build.0 = Release|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Release|x64.ActiveCfg = Release|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Release|x64.Build.0 = Release|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Release|x86.ActiveCfg = Release|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.Release|x86.Build.0 = Release|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.ReleaseTest|Mixed Platforms.Build.0 = Release|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.ReleaseTest|x64.ActiveCfg = Release|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.ReleaseTest|x64.Build.0 = Release|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.ReleaseTest|x86.ActiveCfg = Release|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.ReleaseTest|x86.Build.0 = Release|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.XP32bit|Mixed Platforms.Build.0 = XP32bit|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.XP32bit|x64.ActiveCfg = XP32bit|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.XP32bit|x64.Build.0 = XP32bit|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.XP32bit|x86.ActiveCfg = XP32bit|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.XP32bit|x86.Build.0 = XP32bit|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|Any CPU.ActiveCfg = _MANUAL_CONTROL|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|Any CPU.Build.0 = _MANUAL_CONTROL|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|Mixed Platforms.Build.0 = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|x64.ActiveCfg = _MANUAL_CONTROL|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|x64.Build.0 = _MANUAL_CONTROL|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|x86.ActiveCfg = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}._MANUAL_CONTROL|x86.Build.0 = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|Any CPU.ActiveCfg = _MANUAL_CONTROL|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|Any CPU.Build.0 = _MANUAL_CONTROL|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|Mixed Platforms.ActiveCfg = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|Mixed Platforms.Build.0 = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|x64.ActiveCfg = _MANUAL_CONTROL|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|x64.Build.0 = _MANUAL_CONTROL|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|x86.ActiveCfg = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.COM|x86.Build.0 = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|Mixed Platforms.Build.0 = Debug|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|x64.ActiveCfg = Debug|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|x64.Build.0 = Debug|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|x86.ActiveCfg = Debug|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Debug|x86.Build.0 = Debug|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = _MANUAL_CONTROL|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|Any CPU.Build.0 = _MANUAL_CONTROL|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|x64.ActiveCfg = _MANUAL_CONTROL|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|x64.Build.0 = _MANUAL_CONTROL|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|x86.ActiveCfg = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.GenesisDisplayTool_V01|x86.Build.0 = _MANUAL_CONTROL|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|Any CPU.ActiveCfg = PerformTest|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|Any CPU.Build.0 = PerformTest|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|Mixed Platforms.ActiveCfg = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|Mixed Platforms.Build.0 = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|x64.ActiveCfg = PerformTest|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|x64.Build.0 = PerformTest|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|x86.ActiveCfg = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.PerformTest|x86.Build.0 = PerformTest|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|Any CPU.Build.0 = Release|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|Mixed Platforms.ActiveCfg = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|Mixed Platforms.Build.0 = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|x64.ActiveCfg = Release|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|x64.Build.0 = Release|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|x86.ActiveCfg = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.Release|x86.Build.0 = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|Mixed Platforms.Build.0 = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|x64.ActiveCfg = Release|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|x64.Build.0 = Release|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|x86.ActiveCfg = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|x86.Build.0 = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|Mixed Platforms.Build.0 = XP32bit|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|x64.ActiveCfg = XP32bit|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|x64.Build.0 = XP32bit|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|x86.ActiveCfg = XP32bit|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|x86.Build.0 = XP32bit|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -3750,7 +4014,6 @@ Global
{04201E95-90A0-4B73-A72F-379739B2A3AE} = {B5F43F61-4448-4992-85B5-7EDFB82FD643}
{D32ED790-7E1E-435B-8619-9F906C992066} = {45631019-6C25-429E-AD17-F7425E462CC8}
{29617814-313E-409E-AA5D-59C78A9D4DF1} = {45631019-6C25-429E-AD17-F7425E462CC8}
{8BDD2789-96D4-43EA-AAD7-0F49D0347998} = {45631019-6C25-429E-AD17-F7425E462CC8}
{2E139F63-B6FE-4EA9-A098-85364FE9B26C} = {B9444AB7-1EB1-484A-8DE6-4EEE03498CD7}
{72037E89-4F63-4B3F-BEFF-4138E578CE99} = {B9444AB7-1EB1-484A-8DE6-4EEE03498CD7}
{EC10DAFE-88CF-42D5-99E7-D247938B6430} = {B98D02A6-6AE6-4736-BAA0-E53B0653B2D4}
@@ -3793,6 +4056,11 @@ Global
{F14940F8-3C86-4BB7-A915-B021E4B3052D} = {B4F8545B-F379-42A5-BDE9-763FD7B79598}
{A5E7CE52-3101-4E9B-B896-C2C0FADE4812} = {03D4F23E-7E4A-4091-BC96-036C996D351A}
{70398B99-B134-4BBD-968B-7399B70C3CE2} = {C9393A97-C0BB-4D59-A879-B572BE04CE15}
{B5DA260C-71CC-45CA-B79E-D1B376AF718C} = {C9393A97-C0BB-4D59-A879-B572BE04CE15}
{00748F11-4B49-4D8B-93C4-4A11A210CCE2} = {94579693-7AC6-4FF0-B540-1F3780E1BCFA}
{D6B81C60-2763-4C4D-989F-90822F53B01A} = {94579693-7AC6-4FF0-B540-1F3780E1BCFA}
{BA17D20E-0CEB-4B27-9772-2392BD750ED5} = {C9393A97-C0BB-4D59-A879-B572BE04CE15}
{8BDD2789-96D4-43EA-AAD7-0F49D0347998} = {5563DD3B-2287-4BED-97BF-F0389FF505AF}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4BCB7B69-696C-436A-86F7-C91EA5588164}
+1
View File
@@ -36,6 +36,7 @@
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=a44a776d_002Dd671_002D4675_002Dac7b_002Db6775ec7f289/@EntryIndexedValue">&lt;SessionState ContinuousTestingIsOn="True" ContinuousTestingMode="1" IsActive="True" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;Solution /&gt;&#xD;
&lt;/SessionState&gt;</s:String>
@@ -246,6 +246,10 @@
<Project>{F4AAF7E6-7333-4284-B735-E32DEB076C64}</Project>
<Name>Registers</Name>
</ProjectReference>
<ProjectReference Include="..\Hardware\WaterMeter\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
<ProjectReference Include="..\Hardware\WaterMeter\WaterMeterCore\WaterMeterCore.csproj">
<Project>{8203ABB8-38E5-472E-A742-33F38B7A74A6}</Project>
<Name>WaterMeterCore</Name>
@@ -13,6 +13,7 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
using Xylem.Common.Ui.CordonelPreadjustmentUi.Helper.Extensions;
namespace CordonelPreadjustmentUi
@@ -215,13 +215,8 @@
<Compile Include="..\..\..\..\.shared\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
<Compile Include="EventArguments\BaseDataEventArgs.cs" />
<Compile Include="EventArguments\CalibDataEventArgs.cs" />
<Compile Include="EventArguments\FlowDataEventArgs.cs" />
<Compile Include="EventArguments\RegisterUpdateEventArgs.cs" />
<Compile Include="EventArguments\RequestResponseDataEventArgs.cs" />
<Compile Include="MeasurementRecords\CalibrationRecord.cs" />
<Compile Include="MeasurementRecords\MagFluxRecord.cs" />
<Compile Include="MeasurementRecords\FlowTestRecord.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RadioConfigurationParams.cs" />
@@ -254,6 +249,7 @@
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
@@ -307,6 +307,10 @@
<Project>{63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}</Project>
<Name>TransmitProtocol</Name>
</ProjectReference>
<ProjectReference Include="..\..\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\WaterMeterCore\WaterMeterCore.csproj">
<Project>{8203ABB8-38E5-472E-A742-33F38B7A74A6}</Project>
<Name>WaterMeterCore</Name>
@@ -331,10 +335,6 @@
<Project>{AC434B18-4D7B-49BA-9AD5-0527C79E8297}</Project>
<Name>GenesisPwd</Name>
</ProjectReference>
<ProjectReference Include="..\Protocols\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
<ProjectReference Include="..\Protocols\RequestProtocol\RequestProtocol.csproj">
<Project>{D32ED790-7E1E-435B-8619-9F906C992066}</Project>
<Name>RequestProtocol</Name>
@@ -27,12 +27,13 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisPwd;
using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.ProtocolCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol;
using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts;
using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.EventArguments;
using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
using Xylem.Common.Hardware.WaterMeter.WaterMeterRegisters;
@@ -8,9 +8,10 @@ using NLog;
using Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig;
using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.ProtocolCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol
{
@@ -238,6 +238,10 @@
<Project>{63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}</Project>
<Name>TransmitProtocol</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\DataPackages\DataPackages.csproj">
<Project>{0E524D43-7B66-45CD-AA74-41D51AFC3D99}</Project>
<Name>DataPackages</Name>
@@ -250,10 +254,6 @@
<Project>{F4AAF7E6-7333-4284-B735-E32DEB076C64}</Project>
<Name>Registers</Name>
</ProjectReference>
<ProjectReference Include="..\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
@@ -29,28 +29,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol
private const Double AmplitudeToVoltFactor = 1.0 / 0x400000 / 1000.0; // 2^22 100 0000 0000 0000 0000 0000b
private const Double PulseWidthToRelFactor = 1.0 / 0x100; // 2^8
// protocol 'l' MagFlux
private const Double MaxMagFluxVolumeRaw = UInt64.MaxValue;//0x10000000000000000; //2^64
private const Double DefaultMagFluxOverflowVolumeCm = MaxMagFluxVolumeRaw / MilliLitersToCmFactor;
/// <summary>
/// Default data for
/// </summary>
private readonly MagFluxRecord _dataMagFluxDefault = new MagFluxRecord
{
VolumeCm = 0.0,
TimeS = 0.0,
FlowRateCmPh = 0.0,
StatusBits = 0,
UniqueId = "?",
SensorId = "?",
Crc = 0xFFFF,
OverflowVolumeCm = DefaultMagFluxOverflowVolumeCm,
OverflowTimeS = CpuTimeOverflowS,
IsValid = false
};
/// <summary>
/// Default data for
/// Default data for flow tests of Genesis
/// </summary>
private readonly FlowTestRecord _dataDefault = new FlowTestRecord
{
@@ -62,6 +42,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol
IsValid = false
};
/// <summary>
/// Default data for calibration of Genesis
/// </summary>
private readonly CalibrationRecord _rawDataDefault = new CalibrationRecord
{
Channel = 0,
@@ -93,7 +76,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol
private CalibrationRecord _dataCalibRec;
private FlowTestRecord _dataFlowTestRec;
private MagFluxRecord _dataMagFluxRec;
private readonly Boolean _ignoreCorruptedData;
/// <summary>
@@ -101,7 +83,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol
/// </summary>
public StreamingDecoder(Boolean ignoreCorruptedData = true)
{
_dataMagFluxRec = _dataMagFluxDefault;
_dataFlowTestRec = _dataDefault;
_dataCalibRec = _rawDataDefault;
_ignoreCorruptedData = ignoreCorruptedData;
@@ -115,14 +96,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol
get; private set;
}
/// <summary>
/// Data of MagFlux
/// </summary>
public MagFluxRecord DataMagFlux
{
get; private set;
}
/// <summary>
/// Flow test data
/// </summary>
@@ -148,11 +121,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol
//_rawMsgForCrc = rawMsg;
// extract message and split it to fields
//MagFlux test string from Jan Bennett 2023-03-14_16-16-31_fromTO.log
//rawMsg = "@l 1bd911f 95b8d4 40cf9b5c 0 26004f5232500120373235 0 5863"
//DUT:Debug version, DUT:Vol FWD [mL], DUT:Time [s], DUT:Flow_LPS, DUT:StatusBitsHex, DUT:UniqueId, DUT:SensorId, DUT:CRC
//dec_AT_l, 29200671, 149.7219849, 6.487714767, 0, 4.59406E+25, 0, 22627 (0x5863)
//DN50
//2022-07-21 07:22:06.9871 | @f 8497D 062E4216 9B2A
//2022-07-21 07:22:06.9871 | @h 1 0 0A1F59C4 00017A43 00115C45 72E1596B 00000400 00001998 7D91B652 7D4F37E6 000191E6 0C 062E4A9C 5331
@@ -202,15 +170,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol
switch (rawMsgFields[0])
{
case "@l":
_dataMagFluxRec.IsValid = rawRecordIsValid;
if (rawRecordIsValid || !_ignoreCorruptedData)
{
DecodeProtocolL(ref _dataMagFluxRec, rawMsgFields);
DataMagFlux = _dataMagFluxRec;
}
break;
case "@f":
_dataFlowTestRec.IsValid = rawRecordIsValid;
if (rawRecordIsValid || !_ignoreCorruptedData)
@@ -246,41 +205,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol
return rawRecordIsValid;
}
/// <summary>
/// Extracting message from string fields for protocol 'l'
/// </summary>
/// <param name="dataMagFluxRec">reference to mag flux record</param>
/// <param name="fields">fields holding the separated values for decoding</param>
/// <remarks date="2023-Mar-09" author="T.Wiedebusch">
/// - Initial.
/// </remarks>
private static void DecodeProtocolL(ref MagFluxRecord dataMagFluxRec, IList<String> fields)
{
// time stamp attachment
dataMagFluxRec.DecodedTime = DateTimeOffset.UtcNow;
// extract received CRC
dataMagFluxRec.Crc = UInt16.Parse(fields[(Int32)ProtLsubString.Crc], NumberStyles.HexNumber);
// build result values, the display volume can be positive or negative!
dataMagFluxRec.VolumeCm = UInt64.Parse(fields[(Int32)ProtLsubString.DisplayVolume],
NumberStyles.AllowHexSpecifier) * MilliLitersToCmFactor;
dataMagFluxRec.TimeS = UInt32.Parse(fields[(Int32)ProtLsubString.CpuTime],
NumberStyles.AllowHexSpecifier) * CpuTimeToSecondsFactor;
// parse the floating point value of the flow rate which is a string containing the hex value as 32 bit
var hex = UInt32.Parse(fields[(Int32)ProtLsubString.FlowRate], NumberStyles.AllowHexSpecifier);
var floatValues = BitConverter.GetBytes(hex);
dataMagFluxRec.FlowRateCmPh = BitConverter.ToSingle(floatValues, 0) *
LitersPerSecondToCmPerHourFactor;
// get status and identifiers
dataMagFluxRec.StatusBits = UInt32.Parse(fields[(Int32)ProtLsubString.StatusBits],
NumberStyles.AllowHexSpecifier);
dataMagFluxRec.UniqueId = fields[(Int32)ProtLsubString.UniqueId];
dataMagFluxRec.SensorId = fields[(Int32)ProtLsubString.SensorId];
}
/// <summary>
/// Extracting message from string fields for protocol 'f'
/// </summary>
@@ -480,19 +404,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol
NumberStyles.AllowHexSpecifier) * CpuTimeToSecondsFactor;
}
/// field position in protocol 'l'
private enum ProtLsubString
{
//do not remove this needed for position in record
ProtType,
DisplayVolume,
CpuTime,
FlowRate,
StatusBits,
UniqueId,
SensorId,
Crc
}
/// field position in protocol 'f'
private enum ProtFsubString
{
@@ -1,7 +1,7 @@
using System;
using Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments;
using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.ProtocolCore;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol
{
@@ -228,14 +228,14 @@
<Project>{2E139F63-B6FE-4EA9-A098-85364FE9B26C}</Project>
<Name>PortCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\DataPackages\DataPackages.csproj">
<Project>{0e524d43-7b66-45cd-aa74-41d51afc3d99}</Project>
<Name>DataPackages</Name>
</ProjectReference>
<ProjectReference Include="..\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
@@ -0,0 +1,261 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{BA17D20E-0CEB-4B27-9772-2392BD750ED5}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Xylem.Common.Hardware.WaterMeter.MagFlux.DataPackages</RootNamespace>
<AssemblyName>Xylem.Common.Hardware.WaterMeter.MagFlux.DataPackages</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<RestorePackages>true</RestorePackages>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
<DocumentationFile>bin\Debug\Xylem.Common.Hardware.WaterMeter.MagFlux.DataPackages.xml</DocumentationFile>
<LangVersion>7.0</LangVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
<LangVersion>7.0</LangVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'COM|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\COM\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<LangVersion>7.0</LangVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile>bin\x86\Debug\Xylem.Common.Hardware.WaterMeter.MagFlux.DataPackages.xml</DocumentationFile>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<LangVersion>6</LangVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'COM|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\COM\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'XP32bit|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\XP32bit\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile>bin\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.xml</DocumentationFile>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<LangVersion>7.0</LangVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'XP32bit|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\XP32bit\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile>bin\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.xml</DocumentationFile>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile>bin\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.xml</DocumentationFile>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'COM|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\COM\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'XP32bit|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\XP32bit\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile>bin\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.xml</DocumentationFile>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>false</SignAssembly>
</PropertyGroup>
<PropertyGroup>
<AssemblyOriginatorKeyFile>
</AssemblyOriginatorKeyFile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'PerformTest|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\PerformTest\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile>bin\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.xml</DocumentationFile>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<LangVersion>7.0</LangVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'PerformTest|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\PerformTest\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile>bin\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.xml</DocumentationFile>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'PerformTest|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\PerformTest\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile>bin\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.xml</DocumentationFile>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '_MANUAL_CONTROL|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\_MANUAL_CONTROL\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile>bin\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.xml</DocumentationFile>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<LangVersion>7.0</LangVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '_MANUAL_CONTROL|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\_MANUAL_CONTROL\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile>bin\x86\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.xml</DocumentationFile>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>6</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '_MANUAL_CONTROL|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\_MANUAL_CONTROL\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DocumentationFile>bin\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.xml</DocumentationFile>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\..\..\..\.shared\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
<Compile Include="EventArguments\MagFluxFlowDataEventArgs.cs" />
<Compile Include="EventArguments\RequestResponseDataEventArgs.cs" />
<Compile Include="MeasurementRecords\MagFluxRecord.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\..\..\..\..\ServiceFwUpdate\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\..\..\..\packages\NLog.4.6.7\lib\net40-client\NLog.dll</HintPath>
</Reference>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\CommonCore\CommonCore.csproj">
<Project>{1B02C79E-0B19-43E2-8F6B-71EF0C786C97}</Project>
<Name>CommonCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Metrology\Measurements\Measurements.csproj">
<Project>{6CCDB656-C676-4360-BABA-C4596AAD175D}</Project>
<Name>Measurements</Name>
</ProjectReference>
<ProjectReference Include="..\..\Genesis\Registers\Registers.csproj">
<Project>{F4AAF7E6-7333-4284-B735-E32DEB076C64}</Project>
<Name>Registers</Name>
</ProjectReference>
<ProjectReference Include="..\..\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
@@ -0,0 +1,21 @@
using System;
using Xylem.Common.Hardware.WaterMeter.MagFlux.DataPackages.MeasurementRecords;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
namespace Xylem.Common.Hardware.WaterMeter.MagFlux.DataPackages.EventArguments
{
/// <inheritdoc />
public class MagFluxFlowDataEventArgs : BaseDataEventArgs
{
/// <summary>
/// new record from Stream
/// </summary>
public MagFluxRecord NewData;
/// <inheritdoc />
public override Object GetEventData()
{
return NewData;
}
}
}
@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
namespace Xylem.Common.Hardware.WaterMeter.MagFlux.DataPackages.EventArguments
{
/// <inheritdoc />
/// <summary>
/// EventArgs for Request Responses
/// </summary>
public class RequestResponseDataEventArgs : BaseDataEventArgs
{
/// <summary>
/// Request response from meter
/// </summary>
public List<Byte> RequestResponseData;
/// <inheritdoc />
public override Object GetEventData()
{
return RequestResponseData;
}
}
}
@@ -2,7 +2,7 @@
using System.Text;
using Xylem.Common.Metrology.Measurements;
namespace Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords
namespace Xylem.Common.Hardware.WaterMeter.MagFlux.DataPackages.MeasurementRecords
{
/// <inheritdoc />
/// <summary>
@@ -0,0 +1,10 @@
using System.Runtime.InteropServices;
using System.Reflection;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die einer Assembly zugeordnet sind.
[assembly: AssemblyTitle("Xylem.Common.Hardware.WaterMeter.MagFlux.DataPackages")]
[assembly: AssemblyDescription("")]
[assembly: Guid("DBE76882-217A-4446-89BB-8F5E8CD8CB65")]
@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{B5DA260C-71CC-45CA-B79E-D1B376AF718C}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Xylem.Common.Hardware.WaterMeter.MagFlux.MagFluxCore</RootNamespace>
<AssemblyName>Xylem.Common.Hardware.WaterMeter.MagFlux.MagFluxCore</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\..\..\..\packages\NLog.4.6.7\lib\net45\NLog.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Transactions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="MagFluxMeter.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\..\..\MJK\Code\C#\modbus_master_csharp\src\modbus_master_csharp\modbus_master_csharp.csproj">
<Project>{f14940f8-3c86-4bb7-a915-b021e4b3052d}</Project>
<Name>modbus_master_csharp</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\CommonCore.Configuration\CommonCore.Configuration.csproj">
<Project>{9eb1f659-6f73-4f65-bcab-4114fd94f5fc}</Project>
<Name>CommonCore.Configuration</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\CommonCore\CommonCore.csproj">
<Project>{1b02c79e-0b19-43e2-8f6b-71ef0c786c97}</Project>
<Name>CommonCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\CommonCore\ThreadWatcher\ThreadWatcher.csproj">
<Project>{94ca71f3-c5d7-4ec6-ba47-fa8eea3c9406}</Project>
<Name>ThreadWatcher</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Metrology\Measurements\Measurements.csproj">
<Project>{6ccdb656-c676-4360-baba-c4596aad175d}</Project>
<Name>Measurements</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\SoftwareAccessHelper\SoftwareAccessHelper.csproj">
<Project>{a33e3c6d-eaae-4a20-a0ee-f9e6922fd029}</Project>
<Name>SoftwareAccessHelper</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Tools\Tools.JsonToXlsHelper\Tools.JsonToXlsHelper.csproj">
<Project>{20f137fd-c25e-42b7-a68f-58c746475897}</Project>
<Name>Tools.JsonToXlsHelper</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Utils\Logging\Logging.csproj">
<Project>{4b88b0d3-e791-4774-9521-eabeacdc420e}</Project>
<Name>Logging</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Interfaces\Ports\PortCore\PortCore.csproj">
<Project>{2e139f63-b6fe-4ea9-a098-85364fe9b26c}</Project>
<Name>PortCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Interfaces\Ports\SerialPorts\SerialPorts.csproj">
<Project>{72037e89-4f63-4b3f-beff-4138e578ce99}</Project>
<Name>SerialPorts</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Interfaces\Protocols\TransmitProtocol\TransmitProtocol.csproj">
<Project>{63e0ac5e-b7c8-4363-a2fe-be489e648ff0}</Project>
<Name>TransmitProtocol</Name>
</ProjectReference>
<ProjectReference Include="..\..\Genesis\Protocols\StreamingProtocol\StreamingProtocol.csproj">
<Project>{29617814-313e-409e-aa5d-59c78a9d4df1}</Project>
<Name>StreamingProtocol</Name>
</ProjectReference>
<ProjectReference Include="..\..\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\WaterMeterCore\WaterMeterCore.csproj">
<Project>{8203abb8-38e5-472e-a742-33f38b7a74a6}</Project>
<Name>WaterMeterCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\WaterMeterCore\WaterMeterRegisters\WaterMeterRegisters.csproj">
<Project>{26afcf1e-1287-48b8-a506-32b1e8a0dd0e}</Project>
<Name>WaterMeterRegisters</Name>
</ProjectReference>
<ProjectReference Include="..\MagFluxConfig\MagFluxConfig.csproj">
<Project>{70398b99-b134-4bbd-968b-7399b70c3ce2}</Project>
<Name>MagFluxConfig</Name>
</ProjectReference>
<ProjectReference Include="..\Protocols\RequestProtocol\RequestProtocol.csproj">
<Project>{00748F11-4B49-4D8B-93C4-4A11A210CCE2}</Project>
<Name>RequestProtocol</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
@@ -0,0 +1,543 @@
using System;
using NLog;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using Xylem.Common.CommonCore.Consts;
using Xylem.Common.Hardware.Interfaces.Ports.PortCore;
using Xylem.Common.Hardware.Interfaces.Ports.SerialPorts;
using Xylem.Common.Hardware.Interfaces.Protocols.TransmitProtocol;
using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol;
using Xylem.Common.Hardware.WaterMeter.MagFlux.MagFluxConfig;
using Xylem.Common.Hardware.WaterMeter.MagFlux.Protocols.RequestProtocol;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
using Xylem.Common.Logic.SoftwareAccessHelper;
using Xylem.Common.Metrology.Measurements;
using Xylem.Common.Metrology.Measurements.Consts;
using Xylem.Common.Utils.Logging;
using Timer = System.Timers.Timer;
namespace Xylem.Common.Hardware.WaterMeter.MagFlux.MagFluxCore
{
/// <inheritdoc cref="IMeter" />
/// <summary>
/// MagFlux meter is the core class for the MJK MagFlux water meter.
/// One meter always is always linked to two port, one for communication and one for LED streaming.
/// </summary>
public class MagFluxMeter : IMeter, IMeterEvents
{
#region class handling
/// <summary>
/// Ctor - default
/// </summary>
/// <remarks date="2023-Apr-20" author="Thomas Wiedebusch">
/// - Initial
/// </remarks>
public MagFluxMeter()
{
SetLogger();
}
/// <inheritdoc />
public void Dispose()
{
throw new NotImplementedException();
}
/// <summary>
/// Ctor
/// </summary>
/// <param name="slot">Slot number for test-bench </param>
/// <param name="requestPort"><see cref="PortConfig" /> for request Port</param>
/// <param name="streamingPort"><see cref="PortConfig" /> for streaming Port</param>
/// <param name="ignoreCorruptedData">don´t send CRC error or telegrams with error flag to caller</param>
/// <param name="password">
/// If you have a password for highest access level you need, if you don't want to access the meter
/// (just read led record) than you can leave it null
/// </param>
/// <remarks date="2023-Apr-20" author="Thomas Wiedebusch">
/// - Initial
/// </remarks>
public MagFluxMeter(Int32 slot, PortConfig? requestPort, PortConfig? streamingPort,
Boolean ignoreCorruptedData = true, String password = null)
{
_logger = NLogHelper.CreateOrGetMultiLogger($"Slot:{slot}", "Slot", "Meter", "MeterBase", "MeterBase");
SetupMagFluxMeter(slot, requestPort, streamingPort, ignoreCorruptedData, password);
}
#endregion
#region variables and properties
/// <summary>
/// Represent pcb serial number
/// </summary>
public String PcbId
{
get; private set;
}
private String _currentActionText = "";
/// <summary>
/// Hold the current process name e.g. FlowTest, Preadjustemtn for logging
/// </summary>
public String CurrentActionText
{
get
{
return _currentActionText;
}
set
{
_currentActionText = value;
SetLogger();
}
}
/// <summary>
/// Add on ctor a password and it will be used for login in if no other password is set
/// </summary>
private String _password;
/// <summary>
/// request port assignment/info
/// </summary>
public IPort RequestPort
{
get; private set;
}
/// <summary>
/// request protocol assignment/info
/// </summary>
public RequestProtocol RequestProtocol;
/// <summary>
/// streaming port assignment/info
/// </summary>
public IPort StreamingPort
{
get; private set;
}
/// <summary>
/// streaming protocol assignment/info
/// </summary>
public StreamingProtocol StreamingProtocol;
/// <inheritdoc />
public String SerialNumber
{
get; set;
}
/// <inheritdoc />
public ProcessState ProcessStatus
{
get;
}
/// <inheritdoc />
public ErrorState ErrorStatus
{
get;
}
/// <inheritdoc />
public Int32 Slot
{
get; set;
}
/// <inheritdoc />
public Int32 IntermediateUpdateTimeS
{
get; set;
}
/// <summary>
/// Process configuration
/// </summary>
public ProcessConfig Configuration = new ProcessConfig();
/// <summary>
/// Transmit protocol access for underlie objects to change response timeout
/// </summary>
public ITransmitProtocol TransmitProtocol;
//initially do not signal event
private readonly AutoResetEvent _onSyncKeepSessionThread = new AutoResetEvent(false);
private Thread _keepSessionThread;
private Timer _keepSessionTimer;
private readonly CancellationTokenSource _keepSessionToken = new CancellationTokenSource();
private ILogger _logger;
private ILogger _loggerRawData;
#endregion
#region events
/// <inheritdoc />
event EventHandler IMeter.OnProcessStatusChanged
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeterEvents.OnErrorStatusChanged
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeterEvents.OnInitCompleted
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeterEvents.OnMeasurementInitCompleted
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeterEvents.OnMeasurementCompleted
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeterEvents.OnCalibInitCompleted
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeterEvents.OnCalibCompleted
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeterEvents.OnProcessStatusChanged
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeter.OnErrorStatusChanged
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeter.OnInitCompleted
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeter.OnMeasurementInitCompleted
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeter.OnMeasurementCompleted
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeter.OnCalibInitCompleted
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
event EventHandler IMeter.OnCalibCompleted
{
add => throw new NotImplementedException();
remove => throw new NotImplementedException();
}
/// <inheritdoc />
public event EventHandler OnDisposeCompleted;
#endregion
#region MagFlux handling
/// <summary>
/// just internal setup. called on ctor or from vb6 setup function
/// </summary>
/// <param name="slot">Slot Number for test-bench </param>
/// <param name="requestPort"><see cref="PortConfig" /> for RFID/UART/IrDA Port</param>
/// <param name="streamingPort"><see cref="PortConfig" /> for LED Port</param>
/// <param name="ignoreCorruptedData">don´t send CRC error or telegrams with error flag to caller</param>
/// <param name="password">
/// If you have a password for highest access level you need, if you don't want to access the meter
/// (just read led record) than you can leave it nullS
/// </param>
public void SetupMagFluxMeter(Int32 slot, PortConfig? requestPort, PortConfig? streamingPort,
Boolean ignoreCorruptedData = true, String password = "")
{
Slot = slot;
SetLogger();
_password = password;
if (requestPort != null)
{
String requestIdent;
if (requestPort.Value.Type == "Xylem.Common.Hardware.Interfaces.Ports.SerialPorts.UartSerialPort")
{
requestIdent = $"Slot:{Slot}, Port:{requestPort.Value.PortName}, Protocol:Request, Type:UART -";
//CRC calculation does include the CRC itself filled with 0x0000 in advance
RequestProtocol = new RequestProtocol(requestIdent);
TransmitProtocol = new UartTransmitProtocol(requestPort.Value.PortName);
RequestProtocol.SetTransmitProtocol(TransmitProtocol);
RequestPort = new UartSerialPort(requestIdent, requestPort.Value.GetSerialPort(),
TransmitProtocol.GetTransmitPortSettings());
}
}
if (streamingPort != null)
{
var ledTransmit = new LedTransmitProtocol(streamingPort.Value.PortName);
var streamingIdent = $"Slot:{Slot}/{streamingPort.Value.PortName}-Protocol:LED";
StreamingPort = new LedSerialPort(streamingIdent, streamingPort.Value.GetSerialPort(),
ledTransmit.GetTransmitPortSettings());
StreamingProtocol = new StreamingProtocol(streamingIdent, ignoreCorruptedData);
}
Configuration = new ProcessConfig(ProgramConfig.ConfigFileName);
_logger.Debug($"Slot:{Slot} - Setup done");
}
#endregion
#region logging
private void SetLogger()
{
if (_logger != null)
{
LogManager.Flush();
}
if (string.IsNullOrEmpty(CurrentActionText))
{
_logger = NLogHelper.CreateOrGetMultiLogger($"Slot:{Slot}", $"", "Meter", "MeterBase", "MeterBase");
}
else
{
var id = !string.IsNullOrEmpty(SerialNumber) ? $"SN{SerialNumber}" : $"PCB{PcbId}";
_logger = NLogHelper.CreateOrGetMultiLogger($"Slot:{Slot}_{id}_{CurrentActionText}", $"Slot", "Meter", "MeterBase", "MeterBase");
if (StreamingPort != null && StreamingPort is LedSerialPort)
{
var streamingIdent = $"LedRawData_Slot_{Slot}_{id}_{CurrentActionText}";
((LedSerialPort)StreamingPort).Ident = streamingIdent;
((LedSerialPort)StreamingPort).RefreshLogger();
if (!string.IsNullOrEmpty(SerialNumber) && CurrentActionText.Contains("PG"))
{
var pathMain = NLogHelper.GetPath(_logger);
var pathRaw = NLogHelper.GetPath(((LedSerialPort)StreamingPort).GetRawLogger());
var basePath = Path.GetDirectoryName(pathMain);
//
var testRunString = CurrentActionText.Replace("PG", "");
var lastChat = pathMain.LastIndexOf('\\');
pathMain = pathMain.Substring(lastChat + 1);
pathRaw = Path.GetFileName(pathRaw);
var tmpUrl = $"http://10.49.40.25/MeterProcessState/api/TestBench/SetMeterLogPathInfo?SerialNumber={SerialNumber}&TestRunId={testRunString}&BasePath={basePath}&MainLogName={pathMain}&LEDName={pathRaw}";
_logger.Debug($"Request Url: { tmpUrl}");
//ToDO: Update to service URl
LocalWebRequest.GetRequest(tmpUrl);
}
}
}
}
#endregion
/// <inheritdoc />
public void ConnectMeter()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void SetupFromConfigFile(Int32 slot, Boolean ignoreCorruptedData = true)
{
throw new NotImplementedException();
}
/// <inheritdoc />
public Boolean Logout()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public Boolean Login()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public Boolean Login(String password, Boolean runImmediately = true, Boolean skipReadMeterFwAndAssignRegisters = false)
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void InitMeasurement()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void StartMeasurement()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void StopMeasurement()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public MeasurementResults GetMainMeasurementResult(Double? refVolume, Double? refTimeS,
Boolean intermediateMeasurement = false)
{
throw new NotImplementedException();
}
/// <inheritdoc />
public List<MeasurementResults> GetAllMeasurementResults(Double? refVolume, Double? refTimeS, Boolean intermediateMeasurement = false,
Int32? channel = null)
{
throw new NotImplementedException();
}
/// <inheritdoc />
public MeasurementStates GetMeasurementState(Int32? onlyChannelNr = null)
{
throw new NotImplementedException();
}
/// <inheritdoc />
public Boolean RequestIntermediateMeasurementState(Int32? onlyChannelNr = null)
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void InitCalibration()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void StartCalibration()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void StopCalibration()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public MeasurementStates GetCalibrationState()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void BuildAndCheckCalibFactorsAllChannels(Double refVolumeCm, Double? refTimeS = null, Double reqDeviationPercent = 0,
Double maxCalibFactorTolerancePercent = 0)
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void SetCalibFactorsAllChannels(Boolean justLog = false)
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void SetLcdText(Boolean release, Byte[] textInHex)
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void SetProcessState(DisplayCodes newState, Boolean webRequest = true)
{
throw new NotImplementedException();
}
/// <inheritdoc />
public DisplayCodes GetLastProcessState()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void WriteLog(String text)
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void LogRawData(Boolean on)
{
throw new NotImplementedException();
}
/// <inheritdoc />
public Boolean CheckStateAfterMeasurement()
{
throw new NotImplementedException();
}
/// <inheritdoc />
public void DisposeMeter()
{
throw new NotImplementedException();
}
}
}
@@ -0,0 +1,36 @@
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("MagFluxCore")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Xylem")]
[assembly: AssemblyProduct("MagFluxCore")]
[assembly: AssemblyCopyright("Copyright © Xylem 2023")]
[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("b5da260c-71cc-45ca-b79e-d1b376af718c")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NLog" version="4.6.7" targetFramework="net48" />
</packages>
@@ -0,0 +1,36 @@
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("Xylem.Common.Hardware.WaterMeter.MagFlux.Protocols.RequestProtocol")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Xylem")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("Copyright © Xylem 2023")]
[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("00748f11-4b49-4d8b-93c4-4a11a210cce2")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
@@ -0,0 +1,39 @@
using System;
using modbus_master_csharp.Device;
using NLog;
using Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
using Xylem.Common.Utils.Logging;
namespace Xylem.Common.Hardware.WaterMeter.MagFlux.Protocols.RequestProtocol
{
/// <summary>
/// Wrapper for MagFlux request protocol implemented in <see cref="IMagFluxRequestProtocol"/>
/// </summary>
public class RequestProtocol : BaseProtocol
{
private readonly String _ident;
private readonly ILogger _logger;
/// <inheritdoc />
public RequestProtocol(String ident) : base(ident)
{
_ident = ident;
_logger = NLogHelper.CreateOrGetMultiLogger(ident, "", "RequestProtocol", "MeterBase", "MeterBase");
}
/// <inheritdoc />
/// <inheritdoc />
public override event EventHandler<BasePortDataEventArgs> OnRecordReadyToSend;
/// <inheritdoc />
public override event EventHandler<BaseDataEventArgs> OnRecordIsDecoded;
public override void DecodeRecord(IPortDataEventArgs data)
{
throw new System.NotImplementedException();
}
}
}
@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{00748F11-4B49-4D8B-93C4-4A11A210CCE2}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Xylem.Common.Hardware.WaterMeter.MagFlux.Protocols.RequestProtocol</RootNamespace>
<AssemblyName>Xylem.Common.Hardware.WaterMeter.MagFlux.Protocols.RequestProtocol</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\..\..\..\..\packages\NLog.4.6.7\lib\net45\NLog.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Transactions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="RequestProtocol.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\..\..\..\MJK\Code\C#\modbus_master_csharp\src\modbus_master_csharp\modbus_master_csharp.csproj">
<Project>{f14940f8-3c86-4bb7-a915-b021e4b3052d}</Project>
<Name>modbus_master_csharp</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\..\Utils\Logging\Logging.csproj">
<Project>{4B88B0D3-E791-4774-9521-EABEACDC420E}</Project>
<Name>Logging</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Interfaces\Ports\PortCore\PortCore.csproj">
<Project>{2E139F63-B6FE-4EA9-A098-85364FE9B26C}</Project>
<Name>PortCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\DataPackages\DataPackages.csproj">
<Project>{BA17D20E-0CEB-4B27-9772-2392BD750ED5}</Project>
<Name>DataPackages</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NLog" version="4.6.7" targetFramework="net48" />
</packages>
@@ -0,0 +1,36 @@
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("Xylem.Common.Hardware.WaterMeter.MagFlux.Protocols.StreamingProtocol")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Xylem")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("Copyright © Xylem 2023")]
[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("d6b81c60-2763-4c4d-989f-90822f53b01a")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
@@ -0,0 +1,193 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using Xylem.Common.Hardware.WaterMeter.MagFlux.DataPackages.MeasurementRecords;
using Xylem.Common.Utils.Crc16Ccitt;
namespace Xylem.Common.Hardware.WaterMeter.MagFlux.Protocols.StreamingProtocol
{
/// <summary>
/// Data fields and definitions for GENESIS streaming protocol
/// </summary>
public class StreamingDecoder
{
private const Double MilliLitersToCmFactor = 1.0E-6;
private const Double CpuTimeToSecondsFactor = 1.0 / 0x10000;
private const Double CpuTimeOverflowS = 0x100000000 * CpuTimeToSecondsFactor;
private const Double LitersPerSecondToCmPerHourFactor = 3600.0 / 1000.0;
private const Double DefaultVolumeScaleRawPerMl = 1024.0;
private const Double DefaultVolumeFactorRawToCm = MilliLitersToCmFactor / DefaultVolumeScaleRawPerMl;
private const Double MaxGenesisAccuVolumeRaw = UInt32.MaxValue; //0x100000000; //2^32
private const Double DefaultAccuDutOverflowVolumeCm = MaxGenesisAccuVolumeRaw * DefaultVolumeFactorRawToCm;
private const Double DisplayMlSetupDutOverflowVolumeCm = 1000.0; //overflow of LCD if set to ml
private const Double TofToSecondsFactor38Bit = 1.0 / 0x4000000000; // 2^38
private const Double AmplitudeToVoltFactor = 1.0 / 0x400000 / 1000.0; // 2^22 100 0000 0000 0000 0000 0000b
private const Double PulseWidthToRelFactor = 1.0 / 0x100; // 2^8
// protocol 'l' MagFlux
private const Double MaxMagFluxVolumeRaw = UInt64.MaxValue;//0x10000000000000000; //2^64
private const Double DefaultMagFluxOverflowVolumeCm = MaxMagFluxVolumeRaw / MilliLitersToCmFactor;
/// <summary>
/// Default data for
/// </summary>
private readonly MagFluxRecord _dataMagFluxDefault = new MagFluxRecord
{
VolumeCm = 0.0,
TimeS = 0.0,
FlowRateCmPh = 0.0,
StatusBits = 0,
UniqueId = "?",
SensorId = "?",
Crc = 0xFFFF,
OverflowVolumeCm = DefaultMagFluxOverflowVolumeCm,
OverflowTimeS = CpuTimeOverflowS,
IsValid = false
};
private MagFluxRecord _dataMagFluxRec;
private readonly Boolean _ignoreCorruptedData;
/// <summary>
/// Constructor initializes all decoded members with default values
/// </summary>
public StreamingDecoder(Boolean ignoreCorruptedData = true)
{
_dataMagFluxRec = _dataMagFluxDefault;
_ignoreCorruptedData = ignoreCorruptedData;
}
/// <summary>
/// Data of MagFlux
/// </summary>
public MagFluxRecord DataMagFlux
{
get; private set;
}
/// <summary>
/// Decoding the raw message
/// </summary>
/// <param name="rawMsg">message received as one line delimited with LF</param>
/// <returns>true if decoding was successful and data has been validated</returns>
/// <remarks date="2023-Mar-09" author="T.Wiedebusch">
/// - Modified using common CRC check before branching to the protocol specific decoder.
/// </remarks>
public Boolean DecodeMsg(String rawMsg)
{
var rawRecordIsValid = false;
try
{
// save the raw message for CRC calculation before separation to fields
//_rawMsgForCrc = rawMsg;
// extract message and split it to fields
//MagFlux test string from Jan Bennett 2023-03-14_16-16-31_fromTO.log
//rawMsg = "@l 1bd911f 95b8d4 40cf9b5c 0 26004f5232500120373235 0 5863"
//DUT:Debug version, DUT:Vol FWD [mL], DUT:Time [s], DUT:Flow_LPS, DUT:StatusBitsHex, DUT:UniqueId, DUT:SensorId, DUT:CRC
//dec_AT_l, 29200671, 149.7219849, 6.487714767, 0, 4.59406E+25, 0, 22627 (0x5863)
// The received message is a string with a line delimiter.
rawMsg = rawMsg.Replace('\n', ' ');
// The raw message fields are the separated values from the received string with a blank as field separator
var rawMsgFields = rawMsg.Split(' ');
// The last element is the CRC, the CRC can be separated, calculated and validated before trying to decode the content
var rawRecordForCrc = "";
// get all fields excluding the CRC (length - 1)
for (var x = 0; x < rawMsgFields.Length - 1; x++)
{
rawRecordForCrc += rawMsgFields[x];
// add the field delimiter from raw data
rawRecordForCrc += " ";
}
// extract bytes of raw message for CRC calculation each character, CRC field is already removed
var byteArraySize = rawRecordForCrc.Length;
var byteArray = new Byte[byteArraySize];
for (var i = 0; i < byteArraySize; i++)
{
byteArray[i] = (Byte)rawRecordForCrc[i];
}
// calculate the CRC from the received data
var calculatedCrc = Crc16Ccitt.CalculateMsb1021(byteArray);
// extract received CRC
var receivedCrc = UInt16.Parse(rawMsgFields[rawMsgFields.Length - 1], NumberStyles.HexNumber);
// compare received with calculated CRC and remind valid decoding
rawRecordIsValid = calculatedCrc == receivedCrc;
switch (rawMsgFields[0])
{
case "@l":
_dataMagFluxRec.IsValid = rawRecordIsValid;
if (rawRecordIsValid || !_ignoreCorruptedData)
{
DecodeProtocolL(ref _dataMagFluxRec, rawMsgFields);
DataMagFlux = _dataMagFluxRec;
}
break;
}
}
catch (Exception)
{
// ignored
}
return rawRecordIsValid;
}
/// <summary>
/// Extracting message from string fields for protocol 'l'
/// </summary>
/// <param name="dataMagFluxRec">reference to mag flux record</param>
/// <param name="fields">fields holding the separated values for decoding</param>
/// <remarks date="2023-Mar-09" author="T.Wiedebusch">
/// - Initial.
/// </remarks>
private static void DecodeProtocolL(ref MagFluxRecord dataMagFluxRec, IList<String> fields)
{
// time stamp attachment
dataMagFluxRec.DecodedTime = DateTimeOffset.UtcNow;
// extract received CRC
dataMagFluxRec.Crc = UInt16.Parse(fields[(Int32)ProtLsubString.Crc], NumberStyles.HexNumber);
// build result values, the display volume can be positive or negative!
dataMagFluxRec.VolumeCm = UInt64.Parse(fields[(Int32)ProtLsubString.DisplayVolume],
NumberStyles.AllowHexSpecifier) * MilliLitersToCmFactor;
dataMagFluxRec.TimeS = UInt32.Parse(fields[(Int32)ProtLsubString.CpuTime],
NumberStyles.AllowHexSpecifier) * CpuTimeToSecondsFactor;
// parse the floating point value of the flow rate which is a string containing the hex value as 32 bit
var hex = UInt32.Parse(fields[(Int32)ProtLsubString.FlowRate], NumberStyles.AllowHexSpecifier);
var floatValues = BitConverter.GetBytes(hex);
dataMagFluxRec.FlowRateCmPh = BitConverter.ToSingle(floatValues, 0) *
LitersPerSecondToCmPerHourFactor;
// get status and identifiers
dataMagFluxRec.StatusBits = UInt32.Parse(fields[(Int32)ProtLsubString.StatusBits],
NumberStyles.AllowHexSpecifier);
dataMagFluxRec.UniqueId = fields[(Int32)ProtLsubString.UniqueId];
dataMagFluxRec.SensorId = fields[(Int32)ProtLsubString.SensorId];
}
/// field position in protocol 'l'
private enum ProtLsubString
{
//do not remove this needed for position in record
ProtType,
DisplayVolume,
CpuTime,
FlowRate,
StatusBits,
UniqueId,
SensorId,
Crc
}
}
}
@@ -0,0 +1,63 @@
using System;
using Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments;
using Xylem.Common.Hardware.WaterMeter.MagFlux.DataPackages.EventArguments;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
namespace Xylem.Common.Hardware.WaterMeter.MagFlux.Protocols.StreamingProtocol
{
/// <inheritdoc />
/// <summary>
/// Layer between <see cref="StreamingDecoder" /> CRC16CCITT handler and Events
/// block trashy telegrams
/// </summary>
public class StreamingProtocol : BaseProtocol
{
/// <summary>
/// Decode data and hold results
/// </summary>
private StreamingDecoder _streamingDecode;
private readonly Boolean _ignoreCorruptedData;
/// <inheritdoc />
public override event EventHandler<BaseDataEventArgs> OnRecordIsDecoded;
/// <inheritdoc />
public override void DecodeRecord(IPortDataEventArgs dataArgs)
{
var data = (String)dataArgs.GetData();
//Data decoding
_streamingDecode = new StreamingDecoder(_ignoreCorruptedData);
_streamingDecode.DecodeMsg(data);
//Event for new data
if (_streamingDecode.DataMagFlux != null)
{
_streamingDecode.DataMagFlux.SyncMarkRecord = dataArgs.GetSyncMarkRecord();
_streamingDecode.DataMagFlux.ReceivedTime = dataArgs.GetReceivedTime();
if (_streamingDecode.DataMagFlux.IsValid)
{
OnRecordIsDecoded?.Invoke(this,
new MagFluxFlowDataEventArgs { NewData = _streamingDecode.DataMagFlux, RawData = data });
}
else if (!_ignoreCorruptedData)
{
OnRecordIsDecoded?.Invoke(this,
new MagFluxFlowDataEventArgs { NewData = _streamingDecode.DataMagFlux, RawData = data });
}
}
//toDo: handle trashy telegrams
}
/// <inheritdoc />
public StreamingProtocol(String ident, Boolean ignoreCorruptedData = true) : base(ident)
{
_ignoreCorruptedData = ignoreCorruptedData;
}
}
}
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D6B81C60-2763-4C4D-989F-90822F53B01A}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Xylem.Common.Hardware.WaterMeter.MagFlux.Protocols.StreamingProtocol</RootNamespace>
<AssemblyName>Xylem.Common.Hardware.WaterMeter.MagFlux.Protocols.StreamingProtocol</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="StreamingDecoder.cs" />
<Compile Include="StreamingProtocol.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\CommonCore\CommonCore.csproj">
<Project>{1B02C79E-0B19-43E2-8F6B-71EF0C786C97}</Project>
<Name>CommonCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\..\Metrology\Measurements\Measurements.csproj">
<Project>{6CCDB656-C676-4360-BABA-C4596AAD175D}</Project>
<Name>Measurements</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\..\Utils\Crc16Ccitt\Crc16Ccitt.csproj">
<Project>{91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}</Project>
<Name>Crc16Ccitt</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Interfaces\Ports\PortCore\PortCore.csproj">
<Project>{2E139F63-B6FE-4EA9-A098-85364FE9B26C}</Project>
<Name>PortCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\DataPackages\DataPackages.csproj">
<Project>{BA17D20E-0CEB-4B27-9772-2392BD750ED5}</Project>
<Name>DataPackages</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
@@ -4,9 +4,9 @@ using System.Threading;
using Xylem.Common.CommonCore.ThreadWatcher;
using Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments;
using Xylem.Common.Hardware.Interfaces.Protocols.TransmitProtocol;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.ProtocolCore
namespace Xylem.Common.Hardware.WaterMeter.ProtocolCore
{
/// <inheritdoc />
/// <summary>
@@ -1,6 +1,6 @@
using System;
namespace Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments
namespace Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments
{
/// <inheritdoc />
@@ -1,7 +1,7 @@
using System;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords;
namespace Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments
namespace Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments
{
/// <inheritdoc />
public class CalibDataEventArgs : BaseDataEventArgs
@@ -1,7 +1,7 @@
using System;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords;
namespace Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments
namespace Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments
{
/// <inheritdoc />
public class FlowDataEventArgs : BaseDataEventArgs
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
namespace Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments
namespace Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments
{
/// <inheritdoc />
/// <summary>
@@ -1,9 +1,9 @@
using System;
using Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments;
using Xylem.Common.Hardware.Interfaces.Protocols.TransmitProtocol;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
namespace Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.ProtocolCore
namespace Xylem.Common.Hardware.WaterMeter.ProtocolCore
{
/// <inheritdoc />
/// <summary>
@@ -1,7 +1,7 @@
using System.Runtime.InteropServices;
using System.Reflection;
[assembly: AssemblyTitle("Xylem.Common.Hardware.WaterMeter.Protocols.ProtocolCore")]
[assembly: AssemblyTitle("Xylem.Common.Hardware.WaterMeter.ProtocolCore")]
[assembly: AssemblyDescription("")]
[assembly: Guid("1A402949-095C-4039-8AE3-6594A7FB2242")]
@@ -7,8 +7,8 @@
<ProjectGuid>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.ProtocolCore</RootNamespace>
<AssemblyName>Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.ProtocolCore</AssemblyName>
<RootNamespace>Xylem.Common.Hardware.WaterMeter.ProtocolCore</RootNamespace>
<AssemblyName>Xylem.Common.Hardware.WaterMeter.ProtocolCore</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
@@ -51,7 +51,7 @@
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<LangVersion>6</LangVersion>
<DocumentationFile>bin\x86\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.ProtocolCore.xml</DocumentationFile>
<DocumentationFile>bin\x86\Debug\Xylem.Common.Hardware.WaterMeter.ProtocolCore.xml</DocumentationFile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
@@ -174,37 +174,32 @@
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\..\..\..\..\..\ServiceFwUpdate\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\..\..\..\..\packages\NLog.4.6.7\lib\net40-client\NLog.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\..\..\..\.shared\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
<Compile Include="BaseProtocol.cs" />
<Compile Include="EventArguments\BaseDataEventArgs.cs" />
<Compile Include="EventArguments\CalibDataEventArgs.cs" />
<Compile Include="EventArguments\FlowDataEventArgs.cs" />
<Compile Include="EventArguments\RequestResponseDataEventArgs.cs" />
<Compile Include="IProtocol.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\CommonCore\ThreadWatcher\ThreadWatcher.csproj">
<ProjectReference Include="..\..\..\CommonCore\ThreadWatcher\ThreadWatcher.csproj">
<Project>{94ca71f3-c5d7-4ec6-ba47-fa8eea3c9406}</Project>
<Name>ThreadWatcher</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Interfaces\Ports\PortCore\PortCore.csproj">
<ProjectReference Include="..\..\Interfaces\Ports\PortCore\PortCore.csproj">
<Project>{2e139f63-b6fe-4ea9-a098-85364fe9b26c}</Project>
<Name>PortCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Interfaces\Protocols\TransmitProtocol\TransmitProtocol.csproj">
<ProjectReference Include="..\..\Interfaces\Protocols\TransmitProtocol\TransmitProtocol.csproj">
<Project>{63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}</Project>
<Name>TransmitProtocol</Name>
</ProjectReference>
<ProjectReference Include="..\..\DataPackages\DataPackages.csproj">
<ProjectReference Include="..\Genesis\DataPackages\DataPackages.csproj">
<Project>{0e524d43-7b66-45cd-aa74-41d51afc3d99}</Project>
<Name>DataPackages</Name>
</ProjectReference>
@@ -212,6 +207,7 @@
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net40" />
<package id="NLog" version="4.6.7" targetFramework="net40" />
</packages>
+4 -10
View File
@@ -625,18 +625,10 @@
<Project>{2c6378c6-6ba1-4cee-8992-8404d8369a90}</Project>
<Name>GenesisFile</Name>
</ProjectReference>
<ProjectReference Include="..\..\Hardware\WaterMeter\Genesis\GenesisPwd\GenesisPwd.csproj">
<Project>{ac434b18-4d7b-49ba-9ad5-0527c79e8297}</Project>
<Name>GenesisPwd</Name>
</ProjectReference>
<ProjectReference Include="..\..\Hardware\WaterMeter\Genesis\GenesisStatus\GenesisStatus.csproj">
<Project>{0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}</Project>
<Name>GenesisStatus</Name>
</ProjectReference>
<ProjectReference Include="..\..\Hardware\WaterMeter\Genesis\Protocols\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\Hardware\WaterMeter\Genesis\Protocols\RequestProtocol\RequestProtocol.csproj">
<Project>{d32ed790-7e1e-435b-8619-9f906c992066}</Project>
<Name>RequestProtocol</Name>
@@ -649,6 +641,10 @@
<Project>{f4aaf7e6-7333-4284-b735-e32deb076c64}</Project>
<Name>Registers</Name>
</ProjectReference>
<ProjectReference Include="..\..\Hardware\WaterMeter\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\Hardware\WaterMeter\WaterMeterCore\WaterMeterCore.csproj">
<Project>{8203abb8-38e5-472e-a742-33f38b7a74a6}</Project>
<Name>WaterMeterCore</Name>
@@ -710,8 +706,6 @@
<Content Include="RegAsm4.exe">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<None Include="Resources\SensusLogoXylem2.JPG" />
<None Include="Resources\SensusLogoXylem1.JPG" />
<None Include="Resources\SensusLogoXylem.JPG" />
</ItemGroup>
<ItemGroup>
+1 -1
View File
@@ -8,9 +8,9 @@ using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;
using Xylem.Common.CommonCore.Consts;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Metrology.Measurements;
using Xylem.Common.Utils.Logging;
@@ -198,10 +198,6 @@
<Project>{04201e95-90a0-4b73-a72f-379739b2a3ae}</Project>
<Name>GenesisCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\Hardware\WaterMeter\Genesis\Protocols\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\Hardware\WaterMeter\Genesis\Protocols\RequestProtocol\RequestProtocol.csproj">
<Project>{D32ED790-7E1E-435B-8619-9F906C992066}</Project>
<Name>RequestProtocol</Name>
@@ -214,6 +210,10 @@
<Project>{F4AAF7E6-7333-4284-B735-E32DEB076C64}</Project>
<Name>Registers</Name>
</ProjectReference>
<ProjectReference Include="..\..\Hardware\WaterMeter\ProtocolCore\ProtocolCore.csproj">
<Project>{8BDD2789-96D4-43EA-AAD7-0F49D0347998}</Project>
<Name>ProtocolCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\Hardware\WaterMeter\WaterMeterCore\WaterMeterCore.csproj">
<Project>{8203abb8-38e5-472e-a742-33f38b7a74a6}</Project>
<Name>WaterMeterCore</Name>
@@ -13,6 +13,8 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Logic.SoftwareAccessHelper;
@@ -14,6 +14,7 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.ProtocolCore.EventArguments;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Logic.SoftwareAccessHelper;
+656
View File
@@ -0,0 +1,656 @@
namespace Xylem.Common.Ui.MagFluxToolBox
{
partial class FrmTest
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.grpSetup = new System.Windows.Forms.GroupBox();
this.btnClearDisplay = new System.Windows.Forms.Button();
this.label10 = new System.Windows.Forms.Label();
this.tbxRadio = new System.Windows.Forms.TextBox();
this.tbxRegion = new System.Windows.Forms.TextBox();
this.label8 = new System.Windows.Forms.Label();
this.tbxPcbId = new System.Windows.Forms.TextBox();
this.tbxMeterFw = new System.Windows.Forms.TextBox();
this.tbxMeterMeterSize = new System.Windows.Forms.TextBox();
this.tbxMeterLutCrc = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.lblFwVersion = new System.Windows.Forms.Label();
this.btnConnect = new System.Windows.Forms.Button();
this.lblConnectPcb = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.cbComSlot = new System.Windows.Forms.ComboBox();
this.lblWaitingForMeterResponse = new System.Windows.Forms.Label();
this.btnStopFwUpdate = new System.Windows.Forms.Button();
this.btnDownloadLutFile = new System.Windows.Forms.Button();
this.lblOverall = new System.Windows.Forms.Label();
this.barSingleProgressUpdate = new System.Windows.Forms.ProgressBar();
this.lblActualProcess = new System.Windows.Forms.Label();
this.barOverallProgressUpdate = new System.Windows.Forms.ProgressBar();
this.tmrProgressUpdate = new System.Windows.Forms.Timer(this.components);
this.dlgOpenLuFile = new System.Windows.Forms.OpenFileDialog();
this.lblFwUpdateInfo = new System.Windows.Forms.Label();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.btnLoadfromDb = new System.Windows.Forms.Button();
this.label4 = new System.Windows.Forms.Label();
this.rbtProd = new System.Windows.Forms.RadioButton();
this.cbxDbLuts = new System.Windows.Forms.ComboBox();
this.rbtDb = new System.Windows.Forms.RadioButton();
this.rbtFile = new System.Windows.Forms.RadioButton();
this.lblSelectDb = new System.Windows.Forms.Label();
this.tbxFileMeterSize = new System.Windows.Forms.TextBox();
this.tbxFileCrc = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.lblLutFileLoadedInfo = new System.Windows.Forms.Label();
this.tbxLutFilePathName = new System.Windows.Forms.TextBox();
this.lvlSelechtFile = new System.Windows.Forms.Label();
this.btnOpenLutFile = new System.Windows.Forms.Button();
this.label9 = new System.Windows.Forms.Label();
this.lblUpdateTime = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.grpSetup.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// grpSetup
//
this.grpSetup.Controls.Add(this.btnClearDisplay);
this.grpSetup.Controls.Add(this.label10);
this.grpSetup.Controls.Add(this.tbxRadio);
this.grpSetup.Controls.Add(this.tbxRegion);
this.grpSetup.Controls.Add(this.label8);
this.grpSetup.Controls.Add(this.tbxPcbId);
this.grpSetup.Controls.Add(this.tbxMeterFw);
this.grpSetup.Controls.Add(this.tbxMeterMeterSize);
this.grpSetup.Controls.Add(this.tbxMeterLutCrc);
this.grpSetup.Controls.Add(this.label5);
this.grpSetup.Controls.Add(this.label6);
this.grpSetup.Controls.Add(this.lblFwVersion);
this.grpSetup.Controls.Add(this.btnConnect);
this.grpSetup.Controls.Add(this.lblConnectPcb);
this.grpSetup.Controls.Add(this.label2);
this.grpSetup.Controls.Add(this.cbComSlot);
this.grpSetup.Location = new System.Drawing.Point(12, 69);
this.grpSetup.Name = "grpSetup";
this.grpSetup.Size = new System.Drawing.Size(257, 273);
this.grpSetup.TabIndex = 24;
this.grpSetup.TabStop = false;
this.grpSetup.Text = "Cordonel";
//
// btnClearDisplay
//
this.btnClearDisplay.Location = new System.Drawing.Point(128, 239);
this.btnClearDisplay.Name = "btnClearDisplay";
this.btnClearDisplay.Size = new System.Drawing.Size(116, 25);
this.btnClearDisplay.TabIndex = 33;
this.btnClearDisplay.Text = "Release Display";
this.btnClearDisplay.UseVisualStyleBackColor = true;
this.btnClearDisplay.Click += new System.EventHandler(this.btnClearDisplay_Click);
//
// label10
//
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(10, 212);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(116, 13);
this.label10.TabIndex = 36;
this.label10.Text = "Radio frequency[MHz]:";
//
// tbxRadio
//
this.tbxRadio.Location = new System.Drawing.Point(128, 208);
this.tbxRadio.Name = "tbxRadio";
this.tbxRadio.ReadOnly = true;
this.tbxRadio.Size = new System.Drawing.Size(68, 20);
this.tbxRadio.TabIndex = 35;
//
// tbxRegion
//
this.tbxRegion.Location = new System.Drawing.Point(128, 178);
this.tbxRegion.Name = "tbxRegion";
this.tbxRegion.ReadOnly = true;
this.tbxRegion.Size = new System.Drawing.Size(68, 20);
this.tbxRegion.TabIndex = 34;
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(10, 182);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(44, 13);
this.label8.TabIndex = 33;
this.label8.Text = "Region:";
//
// tbxPcbId
//
this.tbxPcbId.Location = new System.Drawing.Point(128, 59);
this.tbxPcbId.Name = "tbxPcbId";
this.tbxPcbId.ReadOnly = true;
this.tbxPcbId.Size = new System.Drawing.Size(68, 20);
this.tbxPcbId.TabIndex = 32;
//
// tbxMeterFw
//
this.tbxMeterFw.Location = new System.Drawing.Point(128, 88);
this.tbxMeterFw.Name = "tbxMeterFw";
this.tbxMeterFw.ReadOnly = true;
this.tbxMeterFw.Size = new System.Drawing.Size(68, 20);
this.tbxMeterFw.TabIndex = 31;
//
// tbxMeterMeterSize
//
this.tbxMeterMeterSize.Location = new System.Drawing.Point(128, 148);
this.tbxMeterMeterSize.Name = "tbxMeterMeterSize";
this.tbxMeterMeterSize.ReadOnly = true;
this.tbxMeterMeterSize.Size = new System.Drawing.Size(68, 20);
this.tbxMeterMeterSize.TabIndex = 30;
//
// tbxMeterLutCrc
//
this.tbxMeterLutCrc.Location = new System.Drawing.Point(128, 118);
this.tbxMeterLutCrc.Name = "tbxMeterLutCrc";
this.tbxMeterLutCrc.ReadOnly = true;
this.tbxMeterLutCrc.Size = new System.Drawing.Size(68, 20);
this.tbxMeterLutCrc.TabIndex = 29;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(10, 152);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(60, 13);
this.label5.TabIndex = 28;
this.label5.Text = "Meter Size:";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(10, 122);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(86, 13);
this.label6.TabIndex = 27;
this.label6.Text = "Meter LUT CRC:";
//
// lblFwVersion
//
this.lblFwVersion.AutoSize = true;
this.lblFwVersion.Location = new System.Drawing.Point(10, 92);
this.lblFwVersion.Name = "lblFwVersion";
this.lblFwVersion.Size = new System.Drawing.Size(57, 13);
this.lblFwVersion.TabIndex = 25;
this.lblFwVersion.Text = "Meter FW:";
//
// btnConnect
//
this.btnConnect.Location = new System.Drawing.Point(128, 24);
this.btnConnect.Name = "btnConnect";
this.btnConnect.Size = new System.Drawing.Size(116, 25);
this.btnConnect.TabIndex = 24;
this.btnConnect.Text = "Connect";
this.btnConnect.UseVisualStyleBackColor = true;
this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
//
// lblConnectPcb
//
this.lblConnectPcb.AutoSize = true;
this.lblConnectPcb.Location = new System.Drawing.Point(10, 62);
this.lblConnectPcb.Name = "lblConnectPcb";
this.lblConnectPcb.Size = new System.Drawing.Size(33, 13);
this.lblConnectPcb.TabIndex = 23;
this.lblConnectPcb.Text = "NOT ";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(10, 30);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(28, 13);
this.label2.TabIndex = 20;
this.label2.Text = "Slot:";
//
// cbComSlot
//
this.cbComSlot.FormattingEnabled = true;
this.cbComSlot.Items.AddRange(new object[] {
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20"});
this.cbComSlot.Location = new System.Drawing.Point(44, 27);
this.cbComSlot.Name = "cbComSlot";
this.cbComSlot.Size = new System.Drawing.Size(37, 21);
this.cbComSlot.TabIndex = 5;
this.cbComSlot.Text = "1";
this.cbComSlot.SelectedIndexChanged += new System.EventHandler(this.cbComSlot_SelectedIndexChanged);
//
// lblWaitingForMeterResponse
//
this.lblWaitingForMeterResponse.AutoSize = true;
this.lblWaitingForMeterResponse.ForeColor = System.Drawing.Color.Red;
this.lblWaitingForMeterResponse.Location = new System.Drawing.Point(529, 351);
this.lblWaitingForMeterResponse.Name = "lblWaitingForMeterResponse";
this.lblWaitingForMeterResponse.Size = new System.Drawing.Size(182, 13);
this.lblWaitingForMeterResponse.TabIndex = 18;
this.lblWaitingForMeterResponse.Text = "WAITING FOR METER RESPONSE";
//
// btnStopFwUpdate
//
this.btnStopFwUpdate.Location = new System.Drawing.Point(310, 216);
this.btnStopFwUpdate.Name = "btnStopFwUpdate";
this.btnStopFwUpdate.Size = new System.Drawing.Size(116, 25);
this.btnStopFwUpdate.TabIndex = 8;
this.btnStopFwUpdate.Text = "STOP";
this.btnStopFwUpdate.UseVisualStyleBackColor = true;
this.btnStopFwUpdate.Click += new System.EventHandler(this.btnStopFwUpdate_Click);
//
// btnDownloadLutFile
//
this.btnDownloadLutFile.Location = new System.Drawing.Point(310, 183);
this.btnDownloadLutFile.Name = "btnDownloadLutFile";
this.btnDownloadLutFile.Size = new System.Drawing.Size(116, 25);
this.btnDownloadLutFile.TabIndex = 0;
this.btnDownloadLutFile.Text = "Download";
this.btnDownloadLutFile.UseVisualStyleBackColor = true;
this.btnDownloadLutFile.Click += new System.EventHandler(this.btnDownloadLutFile_Click);
//
// lblOverall
//
this.lblOverall.AutoSize = true;
this.lblOverall.Location = new System.Drawing.Point(18, 388);
this.lblOverall.Name = "lblOverall";
this.lblOverall.Size = new System.Drawing.Size(80, 13);
this.lblOverall.TabIndex = 7;
this.lblOverall.Text = "Overall process";
//
// barSingleProgressUpdate
//
this.barSingleProgressUpdate.Location = new System.Drawing.Point(9, 367);
this.barSingleProgressUpdate.Name = "barSingleProgressUpdate";
this.barSingleProgressUpdate.Size = new System.Drawing.Size(702, 18);
this.barSingleProgressUpdate.TabIndex = 6;
this.barSingleProgressUpdate.Visible = false;
//
// lblActualProcess
//
this.lblActualProcess.AutoSize = true;
this.lblActualProcess.Location = new System.Drawing.Point(18, 351);
this.lblActualProcess.Name = "lblActualProcess";
this.lblActualProcess.Size = new System.Drawing.Size(76, 13);
this.lblActualProcess.TabIndex = 4;
this.lblActualProcess.Text = "Process status";
//
// barOverallProgressUpdate
//
this.barOverallProgressUpdate.Location = new System.Drawing.Point(9, 404);
this.barOverallProgressUpdate.Name = "barOverallProgressUpdate";
this.barOverallProgressUpdate.Size = new System.Drawing.Size(702, 18);
this.barOverallProgressUpdate.TabIndex = 3;
this.barOverallProgressUpdate.Visible = false;
//
// tmrProgressUpdate
//
this.tmrProgressUpdate.Interval = 200;
this.tmrProgressUpdate.Tick += new System.EventHandler(this.tmrProgressUpdate_Tick);
//
// dlgOpenLuFile
//
this.dlgOpenLuFile.Filter = "metrology lookup tables (*.lut)|*.lut";
//
// lblFwUpdateInfo
//
this.lblFwUpdateInfo.AutoSize = true;
this.lblFwUpdateInfo.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblFwUpdateInfo.Location = new System.Drawing.Point(18, 32);
this.lblFwUpdateInfo.Name = "lblFwUpdateInfo";
this.lblFwUpdateInfo.Size = new System.Drawing.Size(72, 13);
this.lblFwUpdateInfo.TabIndex = 27;
this.lblFwUpdateInfo.Text = "Version: 0.0.0";
//
// pictureBox1
//
this.pictureBox1.Location = new System.Drawing.Point(609, 9);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(102, 54);
this.pictureBox1.TabIndex = 29;
this.pictureBox1.TabStop = false;
//
// openFileDialog1
//
this.openFileDialog1.FileName = "openFileDialog1";
//
// groupBox1
//
this.groupBox1.Controls.Add(this.btnLoadfromDb);
this.groupBox1.Controls.Add(this.label4);
this.groupBox1.Controls.Add(this.rbtProd);
this.groupBox1.Controls.Add(this.cbxDbLuts);
this.groupBox1.Controls.Add(this.rbtDb);
this.groupBox1.Controls.Add(this.rbtFile);
this.groupBox1.Controls.Add(this.lblSelectDb);
this.groupBox1.Controls.Add(this.tbxFileMeterSize);
this.groupBox1.Controls.Add(this.tbxFileCrc);
this.groupBox1.Controls.Add(this.label3);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.lblLutFileLoadedInfo);
this.groupBox1.Controls.Add(this.btnDownloadLutFile);
this.groupBox1.Controls.Add(this.tbxLutFilePathName);
this.groupBox1.Controls.Add(this.lvlSelechtFile);
this.groupBox1.Controls.Add(this.btnStopFwUpdate);
this.groupBox1.Controls.Add(this.btnOpenLutFile);
this.groupBox1.Location = new System.Drawing.Point(275, 69);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(436, 273);
this.groupBox1.TabIndex = 28;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Lookup Table File";
//
// btnLoadfromDb
//
this.btnLoadfromDb.Location = new System.Drawing.Point(310, 118);
this.btnLoadfromDb.Name = "btnLoadfromDb";
this.btnLoadfromDb.Size = new System.Drawing.Size(116, 26);
this.btnLoadfromDb.TabIndex = 20;
this.btnLoadfromDb.Text = "Load from Db";
this.btnLoadfromDb.UseVisualStyleBackColor = true;
this.btnLoadfromDb.Click += new System.EventHandler(this.btnLoadfromDb_Click);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(12, 30);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(68, 13);
this.label4.TabIndex = 19;
this.label4.Text = "LUT Source:";
//
// rbtProd
//
this.rbtProd.AutoSize = true;
this.rbtProd.Location = new System.Drawing.Point(270, 28);
this.rbtProd.Name = "rbtProd";
this.rbtProd.Size = new System.Drawing.Size(96, 17);
this.rbtProd.TabIndex = 18;
this.rbtProd.TabStop = true;
this.rbtProd.Text = "Prod Database";
this.rbtProd.UseVisualStyleBackColor = true;
this.rbtProd.CheckedChanged += new System.EventHandler(this.rbtProd_CheckedChanged);
this.rbtProd.Click += new System.EventHandler(this.SwitchView);
//
// cbxDbLuts
//
this.cbxDbLuts.FormattingEnabled = true;
this.cbxDbLuts.Location = new System.Drawing.Point(90, 58);
this.cbxDbLuts.Name = "cbxDbLuts";
this.cbxDbLuts.Size = new System.Drawing.Size(333, 21);
this.cbxDbLuts.TabIndex = 17;
this.cbxDbLuts.Visible = false;
this.cbxDbLuts.SelectedIndexChanged += new System.EventHandler(this.cbxDbLuts_SelectedIndexChanged);
//
// rbtDb
//
this.rbtDb.AutoSize = true;
this.rbtDb.Location = new System.Drawing.Point(144, 28);
this.rbtDb.Name = "rbtDb";
this.rbtDb.Size = new System.Drawing.Size(120, 17);
this.rbtDb.TabIndex = 16;
this.rbtDb.TabStop = true;
this.rbtDb.Text = "Research Database";
this.rbtDb.UseVisualStyleBackColor = true;
this.rbtDb.Click += new System.EventHandler(this.SwitchView);
//
// rbtFile
//
this.rbtFile.AutoSize = true;
this.rbtFile.Location = new System.Drawing.Point(87, 28);
this.rbtFile.Name = "rbtFile";
this.rbtFile.Size = new System.Drawing.Size(41, 17);
this.rbtFile.TabIndex = 15;
this.rbtFile.TabStop = true;
this.rbtFile.Text = "File";
this.rbtFile.UseVisualStyleBackColor = true;
this.rbtFile.Click += new System.EventHandler(this.SwitchView);
//
// lblSelectDb
//
this.lblSelectDb.AutoSize = true;
this.lblSelectDb.Location = new System.Drawing.Point(12, 62);
this.lblSelectDb.Name = "lblSelectDb";
this.lblSelectDb.Size = new System.Drawing.Size(64, 13);
this.lblSelectDb.TabIndex = 14;
this.lblSelectDb.Text = "Select LUT:";
this.lblSelectDb.Visible = false;
//
// tbxFileMeterSize
//
this.tbxFileMeterSize.Location = new System.Drawing.Point(91, 148);
this.tbxFileMeterSize.Name = "tbxFileMeterSize";
this.tbxFileMeterSize.ReadOnly = true;
this.tbxFileMeterSize.Size = new System.Drawing.Size(68, 20);
this.tbxFileMeterSize.TabIndex = 13;
//
// tbxFileCrc
//
this.tbxFileCrc.Location = new System.Drawing.Point(91, 118);
this.tbxFileCrc.Name = "tbxFileCrc";
this.tbxFileCrc.ReadOnly = true;
this.tbxFileCrc.Size = new System.Drawing.Size(68, 20);
this.tbxFileCrc.TabIndex = 12;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(12, 152);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(79, 13);
this.label3.TabIndex = 11;
this.label3.Text = "File Meter Size:";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 121);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(75, 13);
this.label1.TabIndex = 10;
this.label1.Text = "File LUT CRC:";
//
// lblLutFileLoadedInfo
//
this.lblLutFileLoadedInfo.AutoSize = true;
this.lblLutFileLoadedInfo.Location = new System.Drawing.Point(190, 121);
this.lblLutFileLoadedInfo.Name = "lblLutFileLoadedInfo";
this.lblLutFileLoadedInfo.Size = new System.Drawing.Size(97, 13);
this.lblLutFileLoadedInfo.TabIndex = 9;
this.lblLutFileLoadedInfo.Text = "LUT file not loaded";
//
// tbxLutFilePathName
//
this.tbxLutFilePathName.Location = new System.Drawing.Point(90, 85);
this.tbxLutFilePathName.Name = "tbxLutFilePathName";
this.tbxLutFilePathName.ReadOnly = true;
this.tbxLutFilePathName.Size = new System.Drawing.Size(333, 20);
this.tbxLutFilePathName.TabIndex = 2;
this.tbxLutFilePathName.Visible = false;
//
// lvlSelechtFile
//
this.lvlSelechtFile.AutoSize = true;
this.lvlSelechtFile.Location = new System.Drawing.Point(12, 88);
this.lvlSelechtFile.Name = "lvlSelechtFile";
this.lvlSelechtFile.Size = new System.Drawing.Size(63, 13);
this.lvlSelechtFile.TabIndex = 1;
this.lvlSelechtFile.Text = "Path Name:";
this.lvlSelechtFile.Visible = false;
//
// btnOpenLutFile
//
this.btnOpenLutFile.Location = new System.Drawing.Point(310, 150);
this.btnOpenLutFile.Name = "btnOpenLutFile";
this.btnOpenLutFile.Size = new System.Drawing.Size(116, 26);
this.btnOpenLutFile.TabIndex = 0;
this.btnOpenLutFile.Text = "Open";
this.btnOpenLutFile.UseVisualStyleBackColor = true;
this.btnOpenLutFile.Click += new System.EventHandler(this.btnOpenLutFile_Click);
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(247, 351);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(101, 13);
this.label9.TabIndex = 30;
this.label9.Text = "UpdateTime [min:s]:";
//
// lblUpdateTime
//
this.lblUpdateTime.AutoSize = true;
this.lblUpdateTime.Location = new System.Drawing.Point(354, 351);
this.lblUpdateTime.Name = "lblUpdateTime";
this.lblUpdateTime.Size = new System.Drawing.Size(28, 13);
this.lblUpdateTime.TabIndex = 31;
this.lblUpdateTime.Text = "0:00";
//
// label7
//
this.label7.AutoSize = true;
this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label7.Location = new System.Drawing.Point(16, 9);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(159, 16);
this.label7.TabIndex = 32;
this.label7.Text = "Cordonel LUT Update";
//
// FrmLutUpdate
//
this.AccessibleRole = System.Windows.Forms.AccessibleRole.Sound;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(723, 432);
this.Controls.Add(this.label7);
this.Controls.Add(this.lblUpdateTime);
this.Controls.Add(this.label9);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.lblWaitingForMeterResponse);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.lblOverall);
this.Controls.Add(this.lblFwUpdateInfo);
this.Controls.Add(this.barSingleProgressUpdate);
this.Controls.Add(this.lblActualProcess);
this.Controls.Add(this.grpSetup);
this.Controls.Add(this.barOverallProgressUpdate);
this.MaximizeBox = false;
this.MaximumSize = new System.Drawing.Size(739, 500);
this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(739, 405);
this.Name = "FrmLutUpdate";
this.Text = "Metrology Lookup Table Update";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmTest_FormClosing);
this.Load += new System.EventHandler(this.FrmTest_Load);
this.grpSetup.ResumeLayout(false);
this.grpSetup.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.GroupBox grpSetup;
private System.Windows.Forms.Button btnConnect;
private System.Windows.Forms.Label lblConnectPcb;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ComboBox cbComSlot;
private System.Windows.Forms.Button btnDownloadLutFile;
private System.Windows.Forms.ProgressBar barOverallProgressUpdate;
private System.Windows.Forms.Timer tmrProgressUpdate;
private System.Windows.Forms.Label lblActualProcess;
private System.Windows.Forms.Label lblOverall;
private System.Windows.Forms.ProgressBar barSingleProgressUpdate;
private System.Windows.Forms.OpenFileDialog dlgOpenLuFile;
private System.Windows.Forms.Label lblFwUpdateInfo;
private System.Windows.Forms.Button btnStopFwUpdate;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private System.Windows.Forms.Label lblWaitingForMeterResponse;
private System.Windows.Forms.Label lblFwVersion;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.TextBox tbxLutFilePathName;
private System.Windows.Forms.Label lvlSelechtFile;
private System.Windows.Forms.Button btnOpenLutFile;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.Label lblUpdateTime;
private System.Windows.Forms.Label lblLutFileLoadedInfo;
private System.Windows.Forms.TextBox tbxFileMeterSize;
private System.Windows.Forms.TextBox tbxFileCrc;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox tbxMeterMeterSize;
private System.Windows.Forms.TextBox tbxMeterLutCrc;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox tbxMeterFw;
private System.Windows.Forms.TextBox tbxPcbId;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.TextBox tbxRegion;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label lblSelectDb;
private System.Windows.Forms.RadioButton rbtDb;
private System.Windows.Forms.RadioButton rbtFile;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.RadioButton rbtProd;
private System.Windows.Forms.ComboBox cbxDbLuts;
private System.Windows.Forms.Button btnLoadfromDb;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.TextBox tbxRadio;
private System.Windows.Forms.Button btnClearDisplay;
}
}
+818
View File
@@ -0,0 +1,818 @@
using System;
using System.Drawing;
using System.Globalization;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Xylem.Common.Hardware.WaterMeter.MagFlux.MagFluxCore;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Utils.ProcessExec.EventArguments;
namespace Xylem.Common.Ui.MagFluxToolBox
{
/// <summary>
/// Test form for MagFlux operation
/// </summary>
public partial class FrmTest : Form
{
#region Variables
private readonly MeterBatch _meterBatch = new MeterBatch();
private MagFluxMeter _magFluxMeter;
private const String StrConnecting = "Connecting to PCB";
private const String StrNotConnected = "NOT CONNECTED";
private const String StrPartPcbConnected = "PCB ID: ";
private const String StrOverallProcess = "Overall Process";
private String _lastFwUpdateState;
private Int32 _lastSingleProgress;
private DateTimeOffset _startTime;
private Boolean _resetTimeMeasurement;
private readonly Boolean _updateGui = true;
private Boolean _tryConnectPcb;
private Boolean _lutFileSuccessfulWritten;
private const String StrUpdateErrorMessage = "METROLOGY LOOKUP TABLE UPDATE FAILED!";
private const String StrUpdateSuccessMessage = "Metrology lookup table successfulley written!";
private const String StrLutFileInvalid = "LUT FILE INVALID";
private const String StrLutFileValid = "LUT file loaded";
// external update remarks form
// private readonly FrmHistory _frmHistory = new FrmHistory();
private readonly Version _version;
// status information
private static readonly Color ColorDefault = Color.Black;
private static readonly Color ColorSuccess = Color.Green;
private static readonly Color ColorProcessFailed = Color.Red;
//private static readonly Color ColorOngoingProcess = Color.Blue;
//private static readonly Color ColorUnknownStatus = Color.Gray;
//private const String SuccessSign = @"✔";
//private const String FailedSign = @"✘";
private const String StrSeparator = "-----------------------------------------------------" +
"-----------------------------------------------------";
#endregion
#region FormControls
/// <summary>
/// Ctor FW update
/// </summary>
public FrmTest()
{
InitializeComponent();
var cultureInfo = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = cultureInfo;
Thread.CurrentThread.CurrentCulture = cultureInfo;
_version = Assembly.GetExecutingAssembly().GetName().Version;
}
/// <summary>
/// Clear data table and set genesis to not connected
/// </summary>
private void Init()
{
ProcessViewControl(false);
lblConnectPcb.Text = StrNotConnected;
lblConnectPcb.ForeColor = Color.Red;
lblWaitingForMeterResponse.Visible = false;
btnConnect.Enabled = true;
btnDownloadLutFile.ForeColor = Color.DarkGreen;
btnStopFwUpdate.ForeColor = Color.Red;
SetControlDownloadsLocked();
btnStopFwUpdate.Enabled = false;
btnOpenLutFile.Enabled = true;
btnClearDisplay.Enabled = false;
tbxPcbId.Visible = false;
}
private void FrmTest_Load(Object sender, EventArgs e)
{
var version = Assembly.GetExecutingAssembly().GetName().Version;
lblFwUpdateInfo.Text = $@"Version: {version.Major}.{version.Minor}.{version.Build}";
_resetTimeMeasurement = true;
Init();
LogText($"MagFluxToolBox: {_version.Major}.{_version.Minor}.{_version.Build}");
LogText(StrSeparator);
}
private void FrmTest_FormClosing(Object sender, FormClosingEventArgs e)
{
_magFluxMeter?.Logout();
_meterBatch?.RemoveAllMeters();
_meterBatch?.Dispose();
Dispose();
}
private void cbComSlot_SelectedIndexChanged(Object sender, EventArgs e)
{
_resetTimeMeasurement = true;
Init();
}
#endregion
#region ActivationControls
private void SetControlDownloadsLocked()
{
btnDownloadLutFile.Enabled = false;
btnStopFwUpdate.Enabled = false;
btnConnect.Enabled = true;
}
private void SetControlsDownloadIsOngoing()
{
btnConnect.Enabled = false;
btnOpenLutFile.Enabled = false;
btnDownloadLutFile.Enabled = false;
btnClearDisplay.Enabled = false;
btnStopFwUpdate.Enabled = true;
}
private void SetControlsDownloadIsFinished()
{
btnConnect.Enabled = true;
btnOpenLutFile.Enabled = true;
btnDownloadLutFile.Enabled = true;
btnStopFwUpdate.Enabled = false;
btnClearDisplay.Enabled = true;
}
private void SetControlsDownloadEnabled()
{
btnConnect.Enabled = true;
btnOpenLutFile.Enabled = true;
btnDownloadLutFile.Enabled = true;
btnStopFwUpdate.Enabled = false;
btnClearDisplay.Enabled = true;
}
#endregion
#region BoardControls
private void Connect()
{
try
{
Init();
if (string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) ||
!int.TryParse(cbComSlot.SelectedItem.ToString(), out var slotNr))
{
return;
}
lblOverall.Text = @"Establish data base connection..";
Task.Factory.StartNew(() =>
{
ViewProgressPcb(true);
_magFluxMeter?.DisposeMeter();
//dispose old meter
_meterBatch.RemoveAllMeters();
_magFluxMeter = null;
Thread.Sleep(200);
//assign new meter and assign meter to FW update file if this exists
_magFluxMeter = new MagFluxMeter();
_magFluxMeter.SetupFromConfigFile(slotNr);
_meterBatch.AddMeter(_magFluxMeter);
_magFluxMeter.Configuration.UseRegisterWatchService = false;
_magFluxMeter.Configuration.UseMinMaxCheck = false;
_meterBatch.MetersLogin();
//if (!_magFluxMeter.IsLoggedOn)
//{
// //this is needed from meter as an unsuccessfully login requires a delay for the next trial
// Thread.Sleep(2000);
// _meterBatch.MetersLogin();
//}
//if (!_magFluxMeter.IsLoggedOn)
//{
// return;
//}
Invoke(new Action(() =>
{
//lblConnectPcb.Text = StrPartPcbConnected;
//tbxPcbId.Text = _magFluxMeter.PcbId;
//tbxPcbId.Visible = true;
//tbxMeterFw.Text = _magFluxMeter.FwVersion;
//tbxMeterMeterSize.Text = _magFluxMeter.MeterSize;
//tbxMeterLutCrc.Text = _magFluxMeter.LutCrc;
//tbxRegion.Text = _magFluxMeter.Region;
//LogText("Meter FW Version: " + _magFluxMeter.FwVersion);
//LogText("Meter LUT CRC: " + _magFluxMeter.LutCrc);
//LogText("Meter Size: " + _magFluxMeter.MeterSize);
//LogText("Meter Region: " + _magFluxMeter.Region);
//if (_magFluxMeter.RadioFrequencyMhz != null)
//{
// tbxRadio.Text = $@"{_magFluxMeter.RadioFrequencyMhz}";
// LogText($"Meter radio frequency [MHz]: {_magFluxMeter.RadioFrequencyMhz}");
//}
lblConnectPcb.ForeColor = Color.Green;
CheckUpdateEnabled();
_magFluxMeter.Logout();
LogInstalledMeterFw();
}));
}).ContinueWith(delegate
{
ViewProgressPcb(false);
});
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
LogErrorText(ex.Message);
}
}
#endregion
#region ProcessControls
private void ViewProgressPcb(Boolean isActive)
{
if (_updateGui)
{
if (isActive)
{
Invoke(new Action(() =>
{
_tryConnectPcb = true;
ProcessViewControl(true);
lblActualProcess.Text = StrConnecting;
lblOverall.Text = StrOverallProcess;
}));
}
else
{
Invoke(new Action(() =>
{
_tryConnectPcb = false;
ProcessViewControl(false);
btnClearDisplay.Enabled = true;
}));
}
}
}
/// <summary>
/// View all process bars and labels
/// </summary>
private void ProcessViewControl(Boolean view)
{
if (view)
{
lblActualProcess.Visible = true;
lblOverall.Visible = true;
barOverallProgressUpdate.Visible = true;
barSingleProgressUpdate.Visible = true;
_lastFwUpdateState = "";
tmrProgressUpdate.Enabled = true;
}
else
{
lblActualProcess.Visible = false;
lblOverall.Visible = false;
barOverallProgressUpdate.Visible = false;
barSingleProgressUpdate.Visible = false;
tmrProgressUpdate.Enabled = false;
_lastFwUpdateState = "";
lblWaitingForMeterResponse.Visible = false;
lblActualProcess.Text = "";
lblOverall.Text = "";
}
//common actions and settings
lblActualProcess.Update();
lblOverall.Update();
barOverallProgressUpdate.Value = 0;
barOverallProgressUpdate.Update();
barSingleProgressUpdate.Value = 0;
barSingleProgressUpdate.Update();
Update();
}
private void StartStopDownload(Boolean isActive)
{
if (isActive)
{
Invoke(new Action(() =>
{
ProcessViewControl(true);
tmrProgressUpdate.Enabled = true;
}));
}
else
{
Invoke(new Action(() =>
{
ProcessViewControl(false);
SetControlsDownloadIsFinished();
//// update the display of the meter size, LUT CRC and region
//tbxMeterFw.Text = _magFluxMeter.FwVersion;
//tbxMeterMeterSize.Text = _magFluxMeter.MeterSize;
//tbxMeterLutCrc.Text = _magFluxMeter.LutCrc;
//tbxRegion.Text = _magFluxMeter.Region;
//if (!_lutFileSuccessfulWritten)
//{
// lblLutFileLoadedInfo.ForeColor = Color.Red;
// lblLutFileLoadedInfo.Text = StrUpdateErrorMessage;
// var txt = StrUpdateErrorMessage;
// if (!string.IsNullOrEmpty(_meterLutUpdate?.ErrorMessage))
// {
// txt += "\n";
// txt += _meterLutUpdate?.ErrorMessage;
// }
// LogErrorText(txt);
// MessageBoxShow(txt, @"FAILED",
// MessageBoxButtons.OK, MessageBoxIcon.Error);
//}
//else
//{
// LogSuccessText(StrUpdateSuccessMessage);
// MessageBoxShow(StrUpdateSuccessMessage, @"SUCCESS",
// MessageBoxButtons.OK, MessageBoxIcon.Information);
//}
}));
}
}
/// <summary>
/// Display installed meter FW.
/// </summary>
/// <remarks date="2022-Mar-25" author="Thomas Wiedebusch">
/// - Init.
/// </remarks>
private void LogInstalledMeterFw()
{
//if (_magFluxMeter == null)
// return;
//LogText(StrSeparator);
//LogText($"PCB ID: {_magFluxMeter.PcbId}");
//LogText($"Core Version: {GenesisMeter.BuildFwVersionString(_magFluxMeter.CoreRevision)}");
//LogText("");
//LogText("Installed Applications:");
//foreach (var app in _magFluxMeter.MeterAppListVersion)
//{
// var versionString = app.IsInstalled ? $"V: {app.StrVersion} - CRC: 0x{app.Crc:X4}" :
// "App NOT Installed";
// LogText($"AppId: 0x{app.AppId:X2} - {versionString} - " + $"AppName: {app.AppName}");
// if (app.IsInstalled)
// {
// var appVersion = new CordonelAppVersion(app.AppId, app.StrVersion);
// // Copy metrology update permission
// if (app.AppName == MeterFwUpdateCapability.MetrologyName &&
// _magFluxMeter.MetrologyUpgradePermission != MeterFwUpdateCapability.MetrologyUpgradePermitted)
// {
// appVersion.IsUpdateable = false;
// }
// }
//}
//LogText(StrSeparator);
}
/// <summary>
/// Output exclusively to user update remarks text window.
/// </summary>
/// <remarks date="2021-Apr-26" author="Thomas Wiedebusch">
/// - Color added.
/// </remarks>
private void LogText(String txtHistory)
{
InfoWindowColoredText(txtHistory, ColorDefault);
}
/// <summary>
/// Output exclusively to user update remarks text window.
/// </summary>
private void LogErrorText(String txtHistory)
{
InfoWindowColoredText(txtHistory, ColorProcessFailed);
}
/// <summary>
/// Output exclusively to user update remarks text window.
/// </summary>
private void LogSuccessText(String txtHistory)
{
InfoWindowColoredText(txtHistory, ColorSuccess);
}
/// <summary>
/// Output exclusively to user update remarks text window.
/// </summary>
private void InfoWindowColoredText(String txtHistory, Color color)
{
//if (_frmHistory?.rtbHistory == null)
// return;
//Invoke(new Action(() =>
//{
// _frmHistory.rtbHistory.SuspendLayout();
// _frmHistory.rtbHistory.SelectionStart = _frmHistory.rtbHistory.Text.Length;
// _frmHistory.rtbHistory.SelectionLength = 0;
// _frmHistory.rtbHistory.SelectionColor = color;
// _frmHistory.rtbHistory.AppendText($"{txtHistory}{Environment.NewLine}");
// _frmHistory.rtbHistory.SelectionColor = _frmHistory.rtbHistory.ForeColor;
// _frmHistory.rtbHistory.ScrollToCaret();
// _frmHistory.rtbHistory.ResumeLayout();
//}));
}
#endregion
#region Checks
private void CheckUpdateEnabled()
{
//this check has been placed here to force display update
if (_magFluxMeter != null )
{
SetControlsDownloadEnabled();
return;
}
SetControlDownloadsLocked();
}
#endregion
#region Events
/// <summary>
/// Process update event for displaying messages in history window
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <remarks date="2020-Dec-10" author="Thomas Wiedebusch">
/// - Initial
/// </remarks>
public virtual void ProcessUpdate_Event(Object sender, ProcessExecEventArgs e)
{
LogText(e.OverallProcessMessage);
}
#endregion
#region TimerControls
private void tmrProgressUpdate_Tick(Object sender, EventArgs e)
{
//cbxManualControl.Visible = true;
if (_tryConnectPcb)
{
barOverallProgressUpdate.Value = barOverallProgressUpdate.Value + 1 > 100 ? 0 :
barOverallProgressUpdate.Value + 1;
barSingleProgressUpdate.Value = barSingleProgressUpdate.Value + 4 > 100 ? 0 :
barSingleProgressUpdate.Value + 4;
lblOverall.Text = StrOverallProcess;
}
else
{
//lblOverall.Text = _meterLutUpdate?.GetLutUpdateStateOperation();
//lblActualProcess.Text = _meterLutUpdate?.GetActualOperation();
//var overallProgress = (Int32)(_meterLutUpdate?.OverallProcessCtrPercent ?? 0);
//if (overallProgress < 0)
// overallProgress = 0;
//barOverallProgressUpdate.Value = overallProgress > 100 ? 100 : overallProgress;
//barOverallProgressUpdate.Update();
//var singleProgress = (Int32)(_meterLutUpdate?.SingleFileProcessCtrPercent ?? 0);
//if (_meterLutUpdate?.GetActualOperation() != _lastFwUpdateState)
//{
// _lastFwUpdateState = _meterLutUpdate?.GetActualOperation();
// lblWaitingForMeterResponse.Visible = false;
//}
//else
//{
// //if the communication gets frozen
// lblWaitingForMeterResponse.Visible = _lastSingleProgress == singleProgress;
//}
//barSingleProgressUpdate.Value = singleProgress > 100 ? 100 : singleProgress;
//_lastSingleProgress = singleProgress;
//barSingleProgressUpdate.Update();
}
SetTimeDisplay();
Update();
}
private void SetTimeDisplay()
{
var time = DateTimeOffset.UtcNow;
var timeSpan = time - _startTime;
lblUpdateTime.Text = $@"{(UInt32)timeSpan.TotalMinutes}:{timeSpan.Seconds:00}";
}
#endregion
#region Buttons
private void btnConnect_Click(Object sender, EventArgs e)
{
if (_resetTimeMeasurement)
{
_startTime = DateTimeOffset.UtcNow;
_resetTimeMeasurement = false;
}
Connect();
}
private void btnOpenLutFile_Click(Object sender, EventArgs e)
{
//if (dlgOpenLuFile.ShowDialog() != DialogResult.OK)
//{
// return;
//}
//var lutFilePathName = dlgOpenLuFile.FileName;
//lblLutFileLoadedInfo.Text = "";
//tbxLutFilePathName.Text = lutFilePathName;
//if (_meterLutUpdate == null)
//{
// _meterLutUpdate = new MeterLutUpdate(_magFluxMeter);
// _meterLutUpdate.OnProcessUpdate += ProcessUpdate_Event;
//}
//if (_meterLutUpdate == null)
//{
// return;
//}
//if (_meterLutUpdate.LoadLutFile(lutFilePathName))
//{
// lblLutFileLoadedInfo.ForeColor = Color.Green;
// lblLutFileLoadedInfo.Text = StrLutFileValid;
// tbxFileCrc.Text = $@"0x{_meterLutUpdate.LutFile.FileCrc:X4}";
// tbxFileMeterSize.Text = MeterSizeConverter.ConvertMeterSizeEnumToSizeName(_meterLutUpdate.LutFile.MeterSize);
// _lutFileValid = true;
// LogText("File Meter Size: " + tbxFileMeterSize.Text);
// LogText("File LUT CRC: " + tbxFileCrc.Text);
// LogText(StrSeparator);
//}
//else
//{
// var txt = "";
// if (!string.IsNullOrEmpty(_meterLutUpdate?.ErrorMessage))
// {
// txt += _meterLutUpdate?.ErrorMessage;
// }
// else
// {
// txt = StrLutFileInvalid;
// }
// LogErrorText(txt);
// lblLutFileLoadedInfo.ForeColor = Color.Red;
// lblLutFileLoadedInfo.Text = txt;
// tbxFileCrc.Text = @" --- ";
// tbxFileMeterSize.Text = @" --- ";
// _lutFileValid = false;
//}
//CheckUpdateEnabled();
//_resetTimeMeasurement = true;
}
/// <summary>
/// Download LUT file
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDownloadLutFile_Click(Object sender, EventArgs e)
{
if (_magFluxMeter == null )
{
return;
}
lblLutFileLoadedInfo.Text = "";
SetControlsDownloadIsOngoing();
StartStopDownload(true);
_startTime = DateTimeOffset.UtcNow;
_resetTimeMeasurement = false;
}
private void btnStopFwUpdate_Click(Object sender, EventArgs e)
{
// if (_meterLutUpdate != null)
// {
// _meterLutUpdate.StopUpdateProcess = true;
// }
}
#endregion
#region ExternalCalls
/// <summary>
///
/// </summary>
public MsgEventArgs LastMsgEvent;
/// <inheritdoc />
public class MsgEventArgs : EventArgs
{
/// <summary>
/// Text to display
/// </summary>
public String Text;
/// <summary>
/// Headline
/// </summary>
public String Caption;
/// <summary>
/// Buttons
/// </summary>
public MessageBoxButtons Buttons;
/// <summary>
/// Icon
/// </summary>
public MessageBoxIcon Icon;
}
/// <summary>
/// Message pop up event handler
/// </summary>
public event EventHandler<MsgEventArgs> OnMsgPopUp;
private void MessageBoxShow(String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon)
{
if (_updateGui)
{
MessageBox.Show(text, caption, buttons, icon);
}
else
{
LastMsgEvent = new MsgEventArgs() { Text = text, Caption = caption, Buttons = buttons, Icon = icon };
OnMsgPopUp?.Invoke(this, LastMsgEvent);
}
}
#endregion
private void SwitchView(Object sender, EventArgs e)
{
btnLoadfromDb.Enabled = false;
var file = rbtFile.Checked;
cbxDbLuts.Visible = !file;
lblSelectDb.Visible = !file;
btnLoadfromDb.Visible = !file;
lvlSelechtFile.Visible = file;
tbxLutFilePathName.Visible = file;
btnOpenLutFile.Visible = file;
if (!file)
{
LoadDbLuts(rbtProd.Checked);
}
}
private void LoadDbLuts(Boolean prod)
{
//var sbUrl = new StringBuilder();
//sbUrl.Append("http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetLutFiles");
////sbUrl.Append("http://localhost:56011/api/FileUpToDate/GetLutFiles");
////sbUrl.Append($"?DataLength={_DataLength}");
////sbUrl.Append($"&version={_Version}");
////sbUrl.Append($"&crc={_FileCrc}");
////sbUrl.Append($"&Metersize={_MeterSize.GetHashCode()}");
////sbUrl.Append($"&Region={_StrLutRegion}");
//try
//{
// var ret = LocalWebRequest.GetRequest(sbUrl.ToString(), 80000);
// var a = JsonConvert.DeserializeObject<List<CordonelMetrologyLut>>(ret);
// cbxDbLuts.SelectedIndex = -1;
// cbxDbLuts.Items.Clear();
// foreach (var item in a)
// {
// if (!prod || item.CurrentVersionForProd)
// {
// cbxDbLuts.Items.Add(item);
// }
// }
//}
//catch (Exception ex)
//{
// MessageBox.Show(ex.Message);
//}
}
private void cbxDbLuts_SelectedIndexChanged(Object sender, EventArgs e)
{
//if (cbxDbLuts.SelectedItem is CordonelMetrologyLut)
//{
// btnLoadfromDb.Enabled = true;
//}
//else
//{
// btnLoadfromDb.Enabled = false;
//}
}
private void btnLoadfromDb_Click(Object sender, EventArgs e)
{
//if (cbxDbLuts.SelectedItem is CordonelMetrologyLut lut)
//{
// lblLutFileLoadedInfo.Text = "";
// tbxLutFilePathName.Text = $"fromDB{lut.FileName}";
// if (_meterLutUpdate == null)
// {
// _meterLutUpdate = new MeterLutUpdate(_magFluxMeter);
// _meterLutUpdate.OnProcessUpdate += ProcessUpdate_Event;
// }
// if (_meterLutUpdate == null)
// {
// return;
// }
// if (_meterLutUpdate.LoadLutFromStream(lut.FileName, lut.FileContent.ToList()))
// {
// lblLutFileLoadedInfo.ForeColor = Color.Green;
// lblLutFileLoadedInfo.Text = StrLutFileValid;
// tbxFileCrc.Text = $@"0x{_meterLutUpdate.LutFile.FileCrc:X4}";
// tbxFileMeterSize.Text = MeterSizeConverter.ConvertMeterSizeEnumToSizeName(_meterLutUpdate.LutFile.MeterSize);
// _lutFileValid = true;
// LogText("File Meter Size: " + tbxFileMeterSize.Text);
// LogText("File LUT CRC: " + tbxFileCrc.Text);
// LogText(StrSeparator);
// }
// else
// {
// var txt = "";
// if (!string.IsNullOrEmpty(_meterLutUpdate?.ErrorMessage))
// {
// txt += _meterLutUpdate?.ErrorMessage;
// }
// else
// {
// txt = StrLutFileInvalid;
// }
// LogErrorText(txt);
// lblLutFileLoadedInfo.ForeColor = Color.Red;
// lblLutFileLoadedInfo.Text = txt;
// tbxFileCrc.Text = @" --- ";
// tbxFileMeterSize.Text = @" --- ";
// _lutFileValid = false;
// }
// CheckUpdateEnabled();
// _resetTimeMeasurement = true;
//}
}
private void rbtProd_CheckedChanged(Object sender, EventArgs e)
{
}
private void btnClearDisplay_Click(Object sender, EventArgs e)
{
// if (_magFluxMeter == null)
// return;
// lblOverall.Text = @"Set display to normal operation";
// lblOverall.Visible = true;
// Update();
// if (!_magFluxMeter.IsLoggedOn)
// {
// _magFluxMeter.ReLogin();
// }
// _magFluxMeter.SetLcdText(true, new Byte[] { 0x00, 0x00, 0x00, 0x00 });
// _magFluxMeter.Logout();
// lblOverall.Visible = false;
}
}
}
+129
View File
@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="tmrProgressUpdate.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>274, 17</value>
</metadata>
<metadata name="dlgOpenLuFile.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>144, 17</value>
</metadata>
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>432, 17</value>
</metadata>
</root>
+19 -1
View File
@@ -6,7 +6,7 @@
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{A5E7CE52-3101-4E9B-B896-C2C0FADE4812}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>MagFluxToolBox</RootNamespace>
<RootNamespace>Xylem.Common.Ui.MagFluxToolBox</RootNamespace>
<AssemblyName>MagFluxToolBox</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
@@ -57,6 +57,12 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="FrmTest.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmTest.Designer.cs">
<DependentUpon>FrmTest.cs</DependentUpon>
</Compile>
<Compile Include="FrmMainForm.cs">
<SubType>Form</SubType>
</Compile>
@@ -71,6 +77,10 @@
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="FrmTest.resx">
<DependentUpon>FrmTest.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="FrmMainForm.resx">
<DependentUpon>FrmMainForm.cs</DependentUpon>
<SubType>Designer</SubType>
@@ -120,6 +130,10 @@
<Project>{70398b99-b134-4bbd-968b-7399b70c3ce2}</Project>
<Name>MagFluxConfig</Name>
</ProjectReference>
<ProjectReference Include="..\..\Hardware\WaterMeter\MagFlux\MagFluxCore\MagFluxCore.csproj">
<Project>{b5da260c-71cc-45ca-b79e-d1b376af718c}</Project>
<Name>MagFluxCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\Hardware\WaterMeter\WaterMeterCore\WaterMeterCore.csproj">
<Project>{8203abb8-38e5-472e-a742-33f38b7a74a6}</Project>
<Name>WaterMeterCore</Name>
@@ -132,6 +146,10 @@
<Project>{4B88B0D3-E791-4774-9521-EABEACDC420E}</Project>
<Name>Logging</Name>
</ProjectReference>
<ProjectReference Include="..\..\Utils\ProcessExec\ProcessExec.csproj">
<Project>{2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}</Project>
<Name>ProcessExec</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="NlogConfig.xml">
+2 -2
View File
@@ -8,7 +8,7 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace MagFluxToolBox.Properties {
namespace Xylem.Common.Ui.MagFluxToolBox.Properties {
using System;
@@ -39,7 +39,7 @@ namespace MagFluxToolBox.Properties {
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MagFluxToolBox.Properties.Resources", typeof(Resources).Assembly);
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Xylem.Common.Ui.MagFluxToolBox.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
+5 -9
View File
@@ -8,21 +8,17 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace MagFluxToolBox.Properties
{
namespace Xylem.Common.Ui.MagFluxToolBox.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
{
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.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
{
public static Settings Default {
get {
return defaultInstance;
}
}
+2 -2
View File
@@ -69,7 +69,7 @@
// pictureBox1
//
this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.pictureBox1.Image = global::MagFluxToolBox.Properties.Resources.MagFluxVerySmall;
this.pictureBox1.Image = global::Xylem.Common.Ui.MagFluxToolBox.Properties.Resources.MagFluxVerySmall;
this.pictureBox1.Location = new System.Drawing.Point(12, 5);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(85, 96);
@@ -79,7 +79,7 @@
// picLogo
//
this.picLogo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.picLogo.Image = global::MagFluxToolBox.Properties.Resources.MjK_LogoSmall;
this.picLogo.Image = global::Xylem.Common.Ui.MagFluxToolBox.Properties.Resources.MjK_LogoSmall;
this.picLogo.InitialImage = null;
this.picLogo.Location = new System.Drawing.Point(293, 5);
this.picLogo.Name = "picLogo";