diff --git a/GenesisCordonelTester/API/InterfaceGCIToLaatzen.cs b/GenesisCordonelTester/API/InterfaceGCIToLaatzen.cs index 050b5f307..e90e6327c 100644 --- a/GenesisCordonelTester/API/InterfaceGCIToLaatzen.cs +++ b/GenesisCordonelTester/API/InterfaceGCIToLaatzen.cs @@ -2,6 +2,7 @@ using Newtonsoft.Json; using NLog; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.Data; @@ -11,6 +12,7 @@ using System.IO; using System.Linq; using System.Net; using System.Reflection; +using System.Security.Policy; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -20,6 +22,7 @@ using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.Interfaces.Ports.PortCore; using Xylem.Common.Hardware.WaterMeter.Genesis.Applications.Const; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; +using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; using Xylem.Common.Hardware.WaterMeter.Genesis.Registers.DataTypes; @@ -27,9 +30,9 @@ using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; using Xylem.Common.Logic.ProductionOrderCore.TestResults; using Xylem.Common.Logic.SoftwareAccessHelper; using Xylem.Common.Utils.Logging; +using static Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.GenesisMeter; using Access = Xylem.Common.Hardware.WaterMeter.Genesis.Registers.Access; using Register = Xylem.Common.Hardware.WaterMeter.Genesis.Registers.Register; -using System.Collections.Concurrent; namespace GenesisCordonelInterface.API { @@ -69,7 +72,7 @@ namespace GenesisCordonelInterface.API /// } /// /// - internal class InterfaceGCIToLaatzen + public class InterfaceGCIToLaatzen { #region Declaration region private static readonly Lazy Logger = new Lazy(() => NLogHelper.CreateOrGetLogger("GenesisCordonelInterface")); @@ -97,6 +100,17 @@ namespace GenesisCordonelInterface.API get; set; } + + /// + /// Gets a value indicating whether the meter is connected and logged on. + /// + public bool IsConnected + { + get + { + return _currentGenesis != null && _currentGenesis.IsLoggedOn; + } + } #endregion #region API - Port Detection region(extracted from FrmSetup:DgvConfig_CellContentClick) @@ -267,6 +281,72 @@ namespace GenesisCordonelInterface.API #endregion + #region Password and Login + /// + /// Sets meter password. + /// + public bool SetMeterPassword(string password) + { + EnsureConnected(); + + if (string.IsNullOrWhiteSpace(password)) + throw new ArgumentException("Password cannot be null or empty.", nameof(password)); + + try + { + // Replace this with the real Genesis API call if available. + // Example: + // return _currentGenesis.SetMeterPassword(password); + + var result = WriteRegister("SECURITY_Password", password, true, true); + return result.Success; + } + catch (Exception ex) + { + Logger.Value.Error(ex, "SetMeterPassword failed."); + return false; + } + } + + /// + /// Performs login using provided password. + /// + public bool Login(string password) + { + if (_currentGenesis == null) + throw new InvalidOperationException("Genesis meter is not initialized. Call Connect first."); + + if (string.IsNullOrWhiteSpace(password)) + throw new ArgumentException("Password cannot be null or empty.", nameof(password)); + + try + { + // IMPORTANT: + // Replace with actual Genesis API method if available + + // Variant A – direct login method (preferred) + // return _currentGenesis.Login(password); + + // Variant B – if password must be set first + // _currentGenesis.Password = password; + // return _currentGenesis.Login(); + + // TEMP fallback (if no direct method known) + bool result = _currentGenesis.Login(); + + if (!result) + Logger.Value.Warn("Login failed."); + + return result; + } + catch (Exception ex) + { + Logger.Value.Error(ex, "Login failed."); + return false; + } + } + #endregion + #region API - Connect /// /// Represents the result of a connect operation. @@ -359,7 +439,7 @@ namespace GenesisCordonelInterface.API /// } /// /// - public ConnectResult Connect(int slotNo, bool useOfflinePasswords) + public ConnectResult Connect(int slotNo, PasswordSource usePasswordSource, List externPasswords) { try { @@ -371,10 +451,12 @@ namespace GenesisCordonelInterface.API _currentGenesis = null; _currentGenesis = new GenesisMeter(); - _currentGenesis.UseOfflinePasswords = useOfflinePasswords; + _currentGenesis.UseOfflinePasswords = usePasswordSource == PasswordSource.OfflineFile; + _currentGenesis.usePasswordSource = usePasswordSource; _currentGenesis.SetupFromConfigFile(slotNo); _meterBatch.AddMeter(_currentGenesis); + _meterBatch._externPasswords = externPasswords; _meterBatch.MetersLogin(); if (!_currentGenesis.IsLoggedOn && string.IsNullOrEmpty(_currentGenesis.PcbId)) @@ -442,5 +524,380 @@ namespace GenesisCordonelInterface.API #endregion + #region Meter Registers + /// + /// Result of a register read operation. + /// + public class RegisterReadResult + { + /// + /// Indicates whether the read operation was successful. + /// + public bool Success { get; set; } + + /// + /// Name of the register. + /// + public string RegisterName { get; set; } + + /// + /// Raw bytes returned from the device. + /// + public byte[] RawBytes { get; set; } + + /// + /// Raw value formatted as hexadecimal string. + /// + public string RawHex { get; set; } + + /// + /// Converted value based on register data type (if possible). + /// + public object TypedValue { get; set; } + + /// + /// String representation of the converted value. + /// + public string TypedValueText { get; set; } + + /// + /// Data type of the register. + /// + public string DataType { get; set; } + + /// + /// Error message if operation failed. + /// + public string ErrorMessage { get; set; } + } + + /// + /// Result of a register write operation. + /// + public class RegisterWriteResult + { + /// + /// Indicates whether the write operation was successful. + /// + public bool Success { get; set; } + + /// + /// Name of the register. + /// + public string RegisterName { get; set; } + + /// + /// Value that was written to the register. + /// + public object WrittenValue { get; set; } + + /// + /// Indicates whether configuration was stored to the device. + /// + public bool StoreToDevice { get; set; } + + /// + /// Indicates whether system state refresh was triggered. + /// + public bool RefreshSystemState { get; set; } + + /// + /// Error message if operation failed. + /// + public string ErrorMessage { get; set; } + } + + //Helper methods + + /// + /// Ensures that the meter is connected and logged on. + /// + private void EnsureConnected() + { + if (_currentGenesis == null) + throw new InvalidOperationException("Genesis meter is not initialized. Call Connect first."); + + if (!_currentGenesis.IsLoggedOn) + throw new InvalidOperationException("Genesis meter is not logged on. Call Connect first."); + } + + /// + /// Finds register definition by name. + /// + private RegisterDefinition FindRegisterDefinition(string registerName) + { + if (string.IsNullOrWhiteSpace(registerName)) + throw new ArgumentException("Register name cannot be null or empty.", nameof(registerName)); + + var match = _currentGenesis + .GetRegistersDic() + .Keys + .FirstOrDefault(r => string.Equals(r.GetIdent(), registerName, StringComparison.OrdinalIgnoreCase)); + + if (match == null) + throw new KeyNotFoundException($"Register '{registerName}' was not found."); + + return match; + } + + /// + /// Converts byte array to hex string. + /// + private string ToHex(byte[] data) + { + if (data == null || data.Length == 0) + return string.Empty; + + return BitConverter.ToString(data).Replace("-", " "); + } + + //Read register + /// + /// Reads register value by register name. + /// + public RegisterReadResult ReadRegister(string registerName) + { + try + { + EnsureConnected(); + + var register = FindRegisterDefinition(registerName); + var raw = _currentGenesis.ReadRegister(registerName); + + object typedValue = null; + string typedValueText = null; + + try + { + typedValue = ConvertRegisterValue(register, raw); + typedValueText = typedValue?.ToString(); + } + catch + { + // Ignore conversion errors, raw value is still valid + } + + return new RegisterReadResult + { + Success = true, + RegisterName = registerName, + RawBytes = raw, + RawHex = ToHex(raw), + TypedValue = typedValue, + TypedValueText = typedValueText, + DataType = register.DataType?.Name + }; + } + catch (Exception ex) + { + Logger.Value.Error(ex, $"ReadRegister failed for '{registerName}'."); + + return new RegisterReadResult + { + Success = false, + RegisterName = registerName, + ErrorMessage = ex.Message + }; + } + } + + //Typed conversion + /// + /// Converts raw register value to a typed value based on register definition. + /// + private object ConvertRegisterValue(RegisterDefinition register, byte[] raw) + { + var typeName = register.DataType?.Name; + + switch (typeName) + { + case "Boolean": + return RegisterConverter.ByteArrayToValue(raw); + + case "Byte": + return RegisterConverter.ByteArrayToValue(raw); + + case "Int32": + return RegisterConverter.ByteArrayToValue(raw); + + case "UInt32": + return RegisterConverter.ByteArrayToValue(raw); + + case "Double": + return RegisterConverter.ByteArrayToValue(raw); + + case "Single": + return RegisterConverter.ByteArrayToValue(raw); + + case "String": + return Encoding.ASCII.GetString(raw).TrimEnd('\0'); + + default: + return ToHex(raw); + } + } + + //Generic login + + /// + /// Reads register and converts it directly to specified type. + /// + public T ReadRegisterValue(string registerName) + { + EnsureConnected(); + + var raw = _currentGenesis.ReadRegister(registerName); + return RegisterConverter.ByteArrayToValue(raw); + } + + //Write register + /// + /// Writes value to register. + /// + public RegisterWriteResult WriteRegister( + string registerName, + object value, + bool storeToDevice = false, + bool refreshSystemState = false) + { + try + { + EnsureConnected(); + + bool writeOk = _currentGenesis.WriteRegister(registerName, value); + + if (!writeOk) + { + return new RegisterWriteResult + { + Success = false, + RegisterName = registerName, + WrittenValue = value, + ErrorMessage = "Write operation failed." + }; + } + + if (storeToDevice) + { + if (!_currentGenesis.StoreAllConfigurations()) + { + return new RegisterWriteResult + { + Success = false, + RegisterName = registerName, + WrittenValue = value, + ErrorMessage = "StoreAllConfigurations failed." + }; + } + } + + if (refreshSystemState) + { + if (!_currentGenesis.WriteRegister("SENSUSRADIO_SYSTEMSTATE", 0xFF, true, false)) + { + return new RegisterWriteResult + { + Success = false, + RegisterName = registerName, + WrittenValue = value, + ErrorMessage = "System state refresh failed." + }; + } + } + + return new RegisterWriteResult + { + Success = true, + RegisterName = registerName, + WrittenValue = value, + StoreToDevice = storeToDevice, + RefreshSystemState = refreshSystemState + }; + } + catch (Exception ex) + { + Logger.Value.Error(ex, $"WriteRegister failed for '{registerName}'."); + + return new RegisterWriteResult + { + Success = false, + RegisterName = registerName, + WrittenValue = value, + ErrorMessage = ex.Message + }; + } + } + + //Bulk operations + + /// + /// Reads multiple registers. + /// + public List ReadRegisters(IEnumerable registerNames) + { + var result = new List(); + + foreach (var name in registerNames) + { + result.Add(ReadRegister(name)); + } + + return result; + } + + /// + /// Writes multiple registers. + /// + public List WriteRegisters( + Dictionary registerValues, + bool storeToDevice = false, + bool refreshSystemState = false) + { + var results = new List(); + + int index = 0; + int total = registerValues.Count; + + foreach (var pair in registerValues) + { + bool doStore = storeToDevice && index == total - 1; + bool doRefresh = refreshSystemState && index == total - 1; + + results.Add(WriteRegister(pair.Key, pair.Value, doStore, doRefresh)); + index++; + } + + return results; + } + + //Disconnect + + /// + /// Disconnects from the meter and releases resources. + /// + public void Disconnect() + { + try + { + if (_currentGenesis != null && _currentGenesis.IsLoggedOn) + { + _currentGenesis.Logout(); + } + } + catch (Exception ex) + { + Logger.Value.Error(ex, "Disconnect failed."); + } + finally + { + _meterBatch.RemoveAllMeters(); + _currentGenesis?.DisposeMeter(); + _currentGenesis = null; + _currentPcbId = string.Empty; + } + } + + #endregion + } } diff --git a/GenesisCordonelTester/API/InterfaceOutsideToGCI.cs b/GenesisCordonelTester/API/InterfaceOutsideToGCI.cs index 83adfc331..24b1d6d3e 100644 --- a/GenesisCordonelTester/API/InterfaceOutsideToGCI.cs +++ b/GenesisCordonelTester/API/InterfaceOutsideToGCI.cs @@ -1,12 +1,99 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace GenesisCordonelInterface.API { - internal class InterfaceOutsideToGCI + /// + /// Outside-facing facade for Genesis Cordonel Interface. + /// Exposes only selected operations intended for external callers. + /// + public class InterfaceOutsideToGCI { + private readonly InterfaceGCIToLaatzen _innerMeterAPI; + + /// + /// Initializes a new instance of the class. + /// + public InterfaceOutsideToGCI() + { + _innerMeterAPI = new InterfaceGCIToLaatzen(); + } + + /// + /// Gets a value indicating whether the meter is currently connected and logged on. + /// + public bool IsConnected + { + get + { + return _innerMeterAPI.IsConnected; + } + } + + /// + /// Connects to the meter on the specified slot. + /// + /// Slot number. + /// Specifies whether offline passwords should be used. + /// Connect operation result. + public InterfaceGCIToLaatzen.ConnectResult Connect(int slotNo, int usePasswordSource, List externPasswords) + { + return _innerMeterAPI.Connect(slotNo, usePasswordSource, externPasswords); + } + + /// + /// Disconnects from the currently connected meter. + /// + public void Disconnect() + { + _innerMeterAPI.Disconnect(); + } + + /// + /// Reads PCB ID from the specified slot. + /// + /// Slot number. + /// PCB ID string. + public string GetPcbId(int slot) + { + return _innerMeterAPI.GetPcbId(slot); + } + + /// + /// Reads a register by name. + /// + /// Register name. + /// Register read result. + public InterfaceGCIToLaatzen.RegisterReadResult ReadRegister(string registerName) + { + return _innerMeterAPI.ReadRegister(registerName); + } + + /// + /// Writes a value to a register. + /// + /// Register name. + /// Value to write. + /// Specifies whether configuration should be stored after write. + /// Specifies whether system state refresh should be triggered after write. + /// Register write result. + public InterfaceGCIToLaatzen.RegisterWriteResult WriteRegister( + string registerName, + object value, + bool storeToDevice = false, + bool refreshSystemState = false) + { + return _innerMeterAPI.WriteRegister(registerName, value, storeToDevice, refreshSystemState); + } + + /// + /// Sets meter password. + /// + /// Password value. + /// True if operation succeeded; otherwise false. + public bool SetMeterPassword(string password) + { + return _innerMeterAPI.SetMeterPassword(password); + } } -} +} \ No newline at end of file diff --git a/GenesisCordonelTester/API/InterfaceToApp.cs b/GenesisCordonelTester/API/InterfaceToApp.cs deleted file mode 100644 index 5ba631011..000000000 --- a/GenesisCordonelTester/API/InterfaceToApp.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace GenesisCordonelInterface.API -{ - internal class InterfaceToApp - { - } -} diff --git a/GenesisCordonelTester/API/InterfaceToLaatzen.cs b/GenesisCordonelTester/API/InterfaceToLaatzen.cs deleted file mode 100644 index 943b382e8..000000000 --- a/GenesisCordonelTester/API/InterfaceToLaatzen.cs +++ /dev/null @@ -1,446 +0,0 @@ -using Logic.ProductionToProductMapper.Cordonel; -using Newtonsoft.Json; -using NLog; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Net; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; -using Xylem.Common.CommonCore.Configuration; -using Xylem.Common.CommonCore.Consts; -using Xylem.Common.Hardware.Interfaces.Ports.PortCore; -using Xylem.Common.Hardware.WaterMeter.Genesis.Applications.Const; -using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; -using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts; -using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; -using Xylem.Common.Hardware.WaterMeter.Genesis.Registers.DataTypes; -using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; -using Xylem.Common.Logic.ProductionOrderCore.TestResults; -using Xylem.Common.Logic.SoftwareAccessHelper; -using Xylem.Common.Utils.Logging; -using Access = Xylem.Common.Hardware.WaterMeter.Genesis.Registers.Access; -using Register = Xylem.Common.Hardware.WaterMeter.Genesis.Registers.Register; -using System.Collections.Concurrent; - -namespace GenesisCordonelInterface.API -{ - /// - /// Provides a public API for Genesis meter operations. - /// - /// This class exposes reusable functionality extracted from the original UI code - /// so it can be used from other projects within the solution. - /// - /// The API is intended to gradually consolidate meter-related operations such as: - /// - port detection - /// - PCB ID reading - /// - communication setup - /// - requests and commands - /// - additional service actions - /// - /// - /// This class should contain business logic only and should not depend on UI elements - /// such as forms, controls, MessageBox, or DataGridView. - /// - /// UI-specific code should remain outside this class and call this API instead. - /// - /// - /// - /// var api = new Api2(); - /// - /// var request = api.DetectRequestPort(3); - /// if (request.Success) - /// { - /// Console.WriteLine($"PCB ID: {request.PcbId}"); - /// } - /// - /// var streaming = api.DetectStreamingPort(3); - /// if (streaming.Success) - /// { - /// Console.WriteLine($"Streaming port: {streaming.PortName}"); - /// } - /// - /// - internal class InterfaceToLaatzen - { - #region Declaration region - private static readonly Lazy Logger = new Lazy(() => NLogHelper.CreateOrGetLogger("GenesisCordonelInterface")); - - public class regStore - { - public String PcbId; - public DateTimeOffset created; - public List keyValues; - } - - public class regDefValue - { - public RegisterDefinition def; - public String value; - } - - private GenesisMeter _currentGenesis; - private MeterBatch _meterBatch = new MeterBatch(); - private regStore _regsToStore; - private String _currentPcbId = ""; - - private Boolean IsBusy - { - get; - set; - } - #endregion - - #region API - Port Detection region(extracted from FrmSetup:DgvConfig_CellContentClick) - - public class PortDetectionResult - { - /// - /// Indicates whether the detection was successful. - /// - public bool Success { get; set; } - - /// - /// Slot number used for the detection. - /// - public int Slot { get; set; } - - /// - /// Name of the detected communication port. - /// - public string PortName { get; set; } - - /// - /// PCB ID read from the device (available for request detection). - /// - public string PcbId { get; set; } - - /// - /// Error message describing why detection failed (if not successful). - /// - public string ErrorMessage { get; set; } - } - - /// - /// Slot number. - /// - /// Result containing success status and detected port name. - /// - /// - /// - /// var api = new Api2(); - /// var result = api.DetectStreamingPort(3); - /// - /// if (result.Success) - /// { - /// Console.WriteLine($"Port: {result.PortName}"); - /// } - /// else - /// { - /// Console.WriteLine("Streaming detection failed"); - /// } - /// - /// - public PortDetectionResult DetectStreamingPort(int slot) - { - if (slot <= 0) - throw new ArgumentOutOfRangeException(nameof(slot)); - - using (var mb = new MeterBatch()) - using (var meter = new GenesisMeter()) - { - meter.SetupFromConfigFile(slot, false); - mb.AddMeter(meter); - - var rawData = new ConcurrentBag(); - - meter.StreamingPort.OnRawRecordReceived += (o, rawMsg) => - { - var data = (string)rawMsg.GetData(); - rawData.Add(data); - }; - - Thread.Sleep(500); - - var success = rawData.Any(); - var portName = meter.StreamingPort.GetPortName(); - - return new PortDetectionResult - { - Success = success, - Slot = slot, - PortName = portName, - ErrorMessage = success ? null : "No streaming data received." - }; - } - } - - /// - /// Detects the request port by attempting to read the PCB ID. - /// - /// Slot number. - /// - /// Result containing success status, port name, and PCB ID if successful. - /// - /// - /// - /// var api = new Api2(); - /// var result = api.DetectRequestPort(3); - /// - /// if (result.Success) - /// { - /// Console.WriteLine($"PCB ID: {result.PcbId}"); - /// } - /// else - /// { - /// Console.WriteLine("Detection failed"); - /// } - /// - /// - public PortDetectionResult DetectRequestPort(int slot) - { - if (slot <= 0) - throw new ArgumentOutOfRangeException(nameof(slot)); - - using (var mb = new MeterBatch()) - using (var meter = new GenesisMeter()) - { - meter.SetupFromConfigFile(slot, false); - mb.AddMeter(meter); - - meter.Logout(); - - var pcbId = meter.GetPcbId(); - var success = !string.IsNullOrEmpty(pcbId); - var portName = meter.RequestPort.GetPortName(); - - return new PortDetectionResult - { - Success = success, - Slot = slot, - PortName = portName, - PcbId = pcbId, - ErrorMessage = success ? null : "PCB ID was empty." - }; - } - } - #endregion - - #region API - PCB ID region - - /// - /// Reads PCB ID for the specified slot. - /// - /// Slot number. - /// PCB ID read from the meter. - /// - /// - /// var api = new Api2(); - /// string pcbId = api.GetPcbId(3); - /// Console.WriteLine(pcbId); - /// - /// - public string GetPcbId(int slot) - { - if (slot <= 0) - throw new ArgumentOutOfRangeException(nameof(slot), "Slot number must be greater than zero."); - - using (var mb = new MeterBatch()) - using (var meter = new GenesisMeter()) - { - meter.SetupFromConfigFile(slot, false); - mb.AddMeter(meter); - - meter.Logout(); - - return meter.GetPcbId(); - } - } - - #endregion - - #region API - Connect - /// - /// Represents the result of a connect operation. - /// - public class ConnectResult - { - /// - /// Indicates whether the connect operation was successful. - /// - public bool Success { get; set; } - - /// - /// Slot number used for connect. - /// - public int Slot { get; set; } - - /// - /// Connected PCB ID. - /// - public string PcbId { get; set; } - - /// - /// Indicates whether the meter is logged on. - /// - public bool IsLoggedOn { get; set; } - - /// - /// Firmware version reported by the meter. - /// - public string FwVersion { get; set; } - - /// - /// Interface version from configuration. - /// - public string InterfaceVersion { get; set; } - - /// - /// Indicates whether the loaded configuration supports the detected firmware version. - /// - public bool InterfaceSupportsFwVersion { get; set; } - - /// - /// Registers available after successful connect. - /// - public List Registers { get; set; } = new List(); - - /// - /// Error message if connect failed. - /// - public string ErrorMessage { get; set; } - } - - /// - /// Represents one register returned after connect. - /// - public class RegisterSnapshot - { - public string Name { get; set; } - public string Type { get; set; } - public string RawValue { get; set; } - public string Min { get; set; } - public string Max { get; set; } - public string Description { get; set; } - public string Version { get; set; } - public string IsAvailable { get; set; } - public string Privilege { get; set; } - } - - /// - /// Connects to a Genesis meter for the specified slot. - /// - /// Slot number. - /// Specifies whether offline passwords should be used. - /// - /// Connect operation result including PCB ID, firmware/configuration info, and register snapshots. - /// - /// - /// - /// var api = new GenesisAPI(); - /// var result = api.Connect(3, true); - /// - /// if (result.Success) - /// { - /// Console.WriteLine(result.PcbId); - /// Console.WriteLine(result.InterfaceVersion); - /// } - /// else - /// { - /// Console.WriteLine(result.ErrorMessage); - /// } - /// - /// - public ConnectResult Connect(int slotNo, bool useOfflinePasswords) - { - try - { - if (slotNo <= 0) - throw new ArgumentOutOfRangeException(nameof(slotNo), "Slot number must be greater than zero."); - - _currentGenesis?.DisposeMeter(); - _meterBatch.RemoveAllMeters(); - _currentGenesis = null; - - _currentGenesis = new GenesisMeter(); - _currentGenesis.UseOfflinePasswords = useOfflinePasswords; - _currentGenesis.SetupFromConfigFile(slotNo); - _meterBatch.AddMeter(_currentGenesis); - - _meterBatch.MetersLogin(); - - if (!_currentGenesis.IsLoggedOn && string.IsNullOrEmpty(_currentGenesis.PcbId)) - { - return new ConnectResult - { - Success = false, - Slot = slotNo, - IsLoggedOn = false, - PcbId = _currentGenesis.PcbId, - ErrorMessage = "Cannot read out PcbId. Access to Cordonel denied." - }; - } - - var result = new ConnectResult - { - Success = _currentGenesis.IsLoggedOn, - Slot = slotNo, - PcbId = _currentGenesis.PcbId, - IsLoggedOn = _currentGenesis.IsLoggedOn, - FwVersion = _currentGenesis.FwVersion, - InterfaceVersion = _currentGenesis.InterfaceInfo?.InterfaceVersion, - InterfaceSupportsFwVersion = _currentGenesis.InterfaceSupportsFwVersion - }; - - foreach (var item in _currentGenesis.GetRegistersDic()) - { - var from = item.Key.RegisterDetail.Version.First.HasValue - ? item.Key.RegisterDetail.Version.First.Value.ToString() - : "-"; - - var to = item.Key.RegisterDetail.Version.Last.HasValue - ? item.Key.RegisterDetail.Version.Last.Value.ToString() - : "-"; - - result.Registers.Add(new RegisterSnapshot - { - Name = item.Key.GetIdent(), - Type = item.Key.DataType.Name, - RawValue = BitConverter.ToString(item.Value).Replace("-", " "), - Min = item.Key.Minimum?.ToString(), - Max = item.Key.Maximum?.ToString(), - Description = item.Key.RegisterDetail.Description, - Version = $"from {from} to {to}", - IsAvailable = item.Key.IsAvailable.ToString(), - Privilege = item.Key.RegisterDetail.Privilege.Lvl8.ToString() - }); - } - - return result; - } - catch (Exception ex) - { - _meterBatch.RemoveAllMeters(); - _currentGenesis?.DisposeMeter(); - - return new ConnectResult - { - Success = false, - Slot = slotNo, - ErrorMessage = ex.Message - }; - } - } - - #endregion - - } -} diff --git a/GenesisCordonelTester/GenesisCordonelInterface.csproj b/GenesisCordonelTester/GenesisCordonelInterface.csproj index 5009c91c4..d1fad80b9 100644 --- a/GenesisCordonelTester/GenesisCordonelInterface.csproj +++ b/GenesisCordonelTester/GenesisCordonelInterface.csproj @@ -56,31 +56,33 @@ - - + + - + Form - + FrmConfigurations.cs - - + + Form + + FrmCordonelPreadjustmentUI.cs - + Form - + FrmRegisterStore.cs - + Form - + FrmSetup.cs @@ -91,6 +93,12 @@ + + UserControl + + + PreAdjustmentControl.cs + ResXFileCodeGenerator Resources.Designer.cs @@ -101,7 +109,7 @@ Resources.resx True - + FrmSetup.cs @@ -111,6 +119,9 @@ PreserveNewest + + PreAdjustmentControl.cs + SettingsSingleFileGenerator diff --git a/GenesisCordonelTester/UI/FrmConfigurations.Designer.cs b/GenesisCordonelTester/UI/FrmConfigurations.Designer.cs deleted file mode 100644 index 9597c03de..000000000 --- a/GenesisCordonelTester/UI/FrmConfigurations.Designer.cs +++ /dev/null @@ -1,553 +0,0 @@ -namespace Xylem.Common.Ui.GenesisToolBox -{ - partial class FrmConfigurations - { - /// - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.lblState = new System.Windows.Forms.Label(); - this.btnConnect = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.cbComSlot = new System.Windows.Forms.ComboBox(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.cbPulseWiegth = new System.Windows.Forms.ComboBox(); - this.panel1 = new System.Windows.Forms.Panel(); - this.rbEvenDistOff = new System.Windows.Forms.RadioButton(); - this.rbEvenDistOn = new System.Windows.Forms.RadioButton(); - this.lblPrencesInMin = new System.Windows.Forms.Label(); - this.label13 = new System.Windows.Forms.Label(); - this.label14 = new System.Windows.Forms.Label(); - this.lblPulseWeightInternal = new System.Windows.Forms.Label(); - this.label11 = new System.Windows.Forms.Label(); - this.label10 = new System.Windows.Forms.Label(); - this.nudPulseResolution = new System.Windows.Forms.NumericUpDown(); - this.cbxPulseMode = new System.Windows.Forms.ComboBox(); - this.cbxPulseLength = new System.Windows.Forms.ComboBox(); - this.label8 = new System.Windows.Forms.Label(); - this.label9 = new System.Windows.Forms.Label(); - this.nudAdapterPresence = new System.Windows.Forms.NumericUpDown(); - this.rbTestModeOff = new System.Windows.Forms.RadioButton(); - this.rbTestModeOn = new System.Windows.Forms.RadioButton(); - this.lblPulsesequence = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.btnDisplayDefault = new System.Windows.Forms.Button(); - this.btnWrite = new System.Windows.Forms.Button(); - this.btnRead = new System.Windows.Forms.Button(); - this.btnLogout = new System.Windows.Forms.Button(); - this.lblPulseWeightMl = new System.Windows.Forms.Label(); - this.label12 = new System.Windows.Forms.Label(); - this.lblP2000PulseSetup = new System.Windows.Forms.Label(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.panel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nudPulseResolution)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nudAdapterPresence)).BeginInit(); - this.SuspendLayout(); - // - // lblState - // - this.lblState.AutoSize = true; - this.lblState.Location = new System.Drawing.Point(12, 51); - this.lblState.Name = "lblState"; - this.lblState.Size = new System.Drawing.Size(78, 13); - this.lblState.TabIndex = 9; - this.lblState.Text = "Not connected"; - // - // btnConnect - // - this.btnConnect.Location = new System.Drawing.Point(212, 8); - this.btnConnect.Name = "btnConnect"; - this.btnConnect.Size = new System.Drawing.Size(85, 30); - this.btnConnect.TabIndex = 8; - this.btnConnect.Text = "Connect"; - this.btnConnect.UseVisualStyleBackColor = true; - this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(12, 21); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(25, 13); - this.label1.TabIndex = 7; - this.label1.Text = "Slot"; - // - // cbComSlot - // - this.cbComSlot.FormattingEnabled = true; - this.cbComSlot.Location = new System.Drawing.Point(83, 12); - this.cbComSlot.Name = "cbComSlot"; - this.cbComSlot.Size = new System.Drawing.Size(104, 21); - this.cbComSlot.TabIndex = 6; - this.cbComSlot.Text = "1"; - // - // tabControl1 - // - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Location = new System.Drawing.Point(6, 92); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(574, 324); - this.tabControl1.TabIndex = 11; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.lblP2000PulseSetup); - this.tabPage1.Controls.Add(this.label12); - this.tabPage1.Controls.Add(this.lblPulseWeightMl); - this.tabPage1.Controls.Add(this.cbPulseWiegth); - this.tabPage1.Controls.Add(this.panel1); - this.tabPage1.Controls.Add(this.lblPrencesInMin); - this.tabPage1.Controls.Add(this.label13); - this.tabPage1.Controls.Add(this.label14); - this.tabPage1.Controls.Add(this.lblPulseWeightInternal); - this.tabPage1.Controls.Add(this.label11); - this.tabPage1.Controls.Add(this.label10); - this.tabPage1.Controls.Add(this.nudPulseResolution); - this.tabPage1.Controls.Add(this.cbxPulseMode); - this.tabPage1.Controls.Add(this.cbxPulseLength); - this.tabPage1.Controls.Add(this.label8); - this.tabPage1.Controls.Add(this.label9); - this.tabPage1.Controls.Add(this.nudAdapterPresence); - this.tabPage1.Controls.Add(this.rbTestModeOff); - this.tabPage1.Controls.Add(this.rbTestModeOn); - this.tabPage1.Controls.Add(this.lblPulsesequence); - this.tabPage1.Controls.Add(this.label7); - this.tabPage1.Controls.Add(this.label6); - this.tabPage1.Controls.Add(this.label5); - this.tabPage1.Controls.Add(this.label4); - this.tabPage1.Controls.Add(this.label3); - this.tabPage1.Controls.Add(this.label2); - this.tabPage1.Controls.Add(this.btnDisplayDefault); - this.tabPage1.Controls.Add(this.btnWrite); - this.tabPage1.Controls.Add(this.btnRead); - this.tabPage1.Location = new System.Drawing.Point(4, 22); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(566, 298); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "Pluse"; - this.tabPage1.UseVisualStyleBackColor = true; - this.tabPage1.Click += new System.EventHandler(this.tabPage1_Click); - // - // cbPulseWiegth - // - this.cbPulseWiegth.FormattingEnabled = true; - this.cbPulseWiegth.Items.AddRange(new object[] { - " 1 l/Imp.", - "10 l/Imp.", - "100 l/Imp.", - "1.000 l/Imp.", - "1 Gallons/Imp.", - "10 Gallons/Imp.", - "100 Gallons/Imp.", - "1.000 Gallons/Imp.", - "1 Cub. Feet/Imp.", - "10 Cub. Feet/Imp.", - "100 Cub. Feet/Imp.", - "1.000 Cub. Feet/Imp.", - "1 Barrel/Imp.", - "10 Barrels/Imp.", - "100 Barrels/Imp.", - "1.000 Barrels/Imp.", - "ohne"}); - this.cbPulseWiegth.Location = new System.Drawing.Point(237, 180); - this.cbPulseWiegth.Name = "cbPulseWiegth"; - this.cbPulseWiegth.Size = new System.Drawing.Size(111, 21); - this.cbPulseWiegth.TabIndex = 37; - this.cbPulseWiegth.SelectedIndexChanged += new System.EventHandler(this.cbPulseWiegth_SelectedIndexChanged); - // - // panel1 - // - this.panel1.Controls.Add(this.rbEvenDistOff); - this.panel1.Controls.Add(this.rbEvenDistOn); - this.panel1.Location = new System.Drawing.Point(237, 74); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(124, 21); - this.panel1.TabIndex = 36; - // - // rbEvenDistOff - // - this.rbEvenDistOff.AutoSize = true; - this.rbEvenDistOff.Location = new System.Drawing.Point(59, 3); - this.rbEvenDistOff.Name = "rbEvenDistOff"; - this.rbEvenDistOff.Size = new System.Drawing.Size(39, 17); - this.rbEvenDistOff.TabIndex = 27; - this.rbEvenDistOff.TabStop = true; - this.rbEvenDistOff.Text = "Off"; - this.rbEvenDistOff.UseVisualStyleBackColor = true; - // - // rbEvenDistOn - // - this.rbEvenDistOn.AutoSize = true; - this.rbEvenDistOn.Location = new System.Drawing.Point(3, 3); - this.rbEvenDistOn.Name = "rbEvenDistOn"; - this.rbEvenDistOn.Size = new System.Drawing.Size(39, 17); - this.rbEvenDistOn.TabIndex = 26; - this.rbEvenDistOn.TabStop = true; - this.rbEvenDistOn.Text = "On"; - this.rbEvenDistOn.UseVisualStyleBackColor = true; - // - // lblPrencesInMin - // - this.lblPrencesInMin.AutoSize = true; - this.lblPrencesInMin.Location = new System.Drawing.Point(401, 34); - this.lblPrencesInMin.Name = "lblPrencesInMin"; - this.lblPrencesInMin.Size = new System.Drawing.Size(13, 13); - this.lblPrencesInMin.TabIndex = 35; - this.lblPrencesInMin.Text = "0"; - // - // label13 - // - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(485, 34); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(54, 13); - this.label13.TabIndex = 34; - this.label13.Text = "in minutes"; - // - // label14 - // - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(354, 34); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(41, 13); - this.label14.TabIndex = 33; - this.label14.Text = "internal"; - // - // lblPulseWeightInternal - // - this.lblPulseWeightInternal.AutoSize = true; - this.lblPulseWeightInternal.Location = new System.Drawing.Point(467, 206); - this.lblPulseWeightInternal.Name = "lblPulseWeightInternal"; - this.lblPulseWeightInternal.Size = new System.Drawing.Size(13, 13); - this.lblPulseWeightInternal.TabIndex = 32; - this.lblPulseWeightInternal.Text = "0"; - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(467, 183); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(72, 13); - this.label11.TabIndex = 31; - this.label11.Text = "in internal unit"; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(354, 183); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(28, 13); - this.label10.TabIndex = 30; - this.label10.Text = "in ml"; - // - // nudPulseResolution - // - this.nudPulseResolution.Location = new System.Drawing.Point(237, 152); - this.nudPulseResolution.Maximum = new decimal(new int[] { - 7, - 0, - 0, - 0}); - this.nudPulseResolution.Name = "nudPulseResolution"; - this.nudPulseResolution.Size = new System.Drawing.Size(111, 20); - this.nudPulseResolution.TabIndex = 28; - this.nudPulseResolution.Value = new decimal(new int[] { - 7, - 0, - 0, - 0}); - // - // cbxPulseMode - // - this.cbxPulseMode.FormattingEnabled = true; - this.cbxPulseMode.Location = new System.Drawing.Point(237, 127); - this.cbxPulseMode.Name = "cbxPulseMode"; - this.cbxPulseMode.Size = new System.Drawing.Size(111, 21); - this.cbxPulseMode.TabIndex = 27; - // - // cbxPulseLength - // - this.cbxPulseLength.FormattingEnabled = true; - this.cbxPulseLength.Location = new System.Drawing.Point(237, 103); - this.cbxPulseLength.Name = "cbxPulseLength"; - this.cbxPulseLength.Size = new System.Drawing.Size(111, 21); - this.cbxPulseLength.TabIndex = 26; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(6, 178); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(169, 13); - this.label8.TabIndex = 23; - this.label8.Text = "METROLOGYASST_PulseWeight"; - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(6, 154); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(185, 13); - this.label9.TabIndex = 22; - this.label9.Text = "METROLOGYASST_PulseResolution"; - // - // nudAdapterPresence - // - this.nudAdapterPresence.Location = new System.Drawing.Point(237, 27); - this.nudAdapterPresence.Name = "nudAdapterPresence"; - this.nudAdapterPresence.Size = new System.Drawing.Size(111, 20); - this.nudAdapterPresence.TabIndex = 21; - this.nudAdapterPresence.ValueChanged += new System.EventHandler(this.nudAdapterPresence_ValueChanged); - // - // rbTestModeOff - // - this.rbTestModeOff.AutoSize = true; - this.rbTestModeOff.Location = new System.Drawing.Point(293, 8); - this.rbTestModeOff.Name = "rbTestModeOff"; - this.rbTestModeOff.Size = new System.Drawing.Size(39, 17); - this.rbTestModeOff.TabIndex = 18; - this.rbTestModeOff.TabStop = true; - this.rbTestModeOff.Text = "Off"; - this.rbTestModeOff.UseVisualStyleBackColor = true; - // - // rbTestModeOn - // - this.rbTestModeOn.AutoSize = true; - this.rbTestModeOn.Location = new System.Drawing.Point(237, 8); - this.rbTestModeOn.Name = "rbTestModeOn"; - this.rbTestModeOn.Size = new System.Drawing.Size(39, 17); - this.rbTestModeOn.TabIndex = 17; - this.rbTestModeOn.TabStop = true; - this.rbTestModeOn.Text = "On"; - this.rbTestModeOn.UseVisualStyleBackColor = true; - // - // lblPulsesequence - // - this.lblPulsesequence.AutoSize = true; - this.lblPulsesequence.Location = new System.Drawing.Point(234, 58); - this.lblPulsesequence.Name = "lblPulsesequence"; - this.lblPulsesequence.Size = new System.Drawing.Size(13, 13); - this.lblPulsesequence.TabIndex = 16; - this.lblPulsesequence.Text = "0"; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(5, 10); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(55, 13); - this.label7.TabIndex = 15; - this.label7.Text = "TestMode"; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(6, 130); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(162, 13); - this.label6.TabIndex = 14; - this.label6.Text = "METROLOGYASST_PulseMode"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(6, 106); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(168, 13); - this.label5.TabIndex = 13; - this.label5.Text = "METROLOGYASST_PulseLength"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(6, 82); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(212, 13); - this.label4.TabIndex = 12; - this.label4.Text = "METROLOGYASST_PulseEvenDistribution"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(5, 58); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(114, 13); - this.label3.TabIndex = 11; - this.label3.Text = "IRDA_PulseSequence"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(5, 34); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(142, 13); - this.label2.TabIndex = 10; - this.label2.Text = "IRDA_AdapterPresenceLimit"; - // - // btnDisplayDefault - // - this.btnDisplayDefault.Location = new System.Drawing.Point(282, 239); - this.btnDisplayDefault.Name = "btnDisplayDefault"; - this.btnDisplayDefault.Size = new System.Drawing.Size(113, 53); - this.btnDisplayDefault.TabIndex = 8; - this.btnDisplayDefault.Text = "Set DisplayDefault"; - this.btnDisplayDefault.UseVisualStyleBackColor = true; - this.btnDisplayDefault.Click += new System.EventHandler(this.btnDisplayDefault_Click); - // - // btnWrite - // - this.btnWrite.Location = new System.Drawing.Point(147, 239); - this.btnWrite.Name = "btnWrite"; - this.btnWrite.Size = new System.Drawing.Size(129, 53); - this.btnWrite.TabIndex = 1; - this.btnWrite.Text = "Write"; - this.btnWrite.UseVisualStyleBackColor = true; - this.btnWrite.Click += new System.EventHandler(this.btnWrite_Click); - // - // btnRead - // - this.btnRead.Location = new System.Drawing.Point(3, 239); - this.btnRead.Name = "btnRead"; - this.btnRead.Size = new System.Drawing.Size(129, 53); - this.btnRead.TabIndex = 0; - this.btnRead.Text = "Read"; - this.btnRead.UseVisualStyleBackColor = true; - this.btnRead.Click += new System.EventHandler(this.btnRead_Click); - // - // btnLogout - // - this.btnLogout.Location = new System.Drawing.Point(303, 8); - this.btnLogout.Name = "btnLogout"; - this.btnLogout.Size = new System.Drawing.Size(85, 30); - this.btnLogout.TabIndex = 12; - this.btnLogout.Text = "Logout"; - this.btnLogout.UseVisualStyleBackColor = true; - this.btnLogout.Click += new System.EventHandler(this.btnLogout_Click); - // - // lblPulseWeightMl - // - this.lblPulseWeightMl.AutoSize = true; - this.lblPulseWeightMl.Location = new System.Drawing.Point(354, 206); - this.lblPulseWeightMl.Name = "lblPulseWeightMl"; - this.lblPulseWeightMl.Size = new System.Drawing.Size(13, 13); - this.lblPulseWeightMl.TabIndex = 38; - this.lblPulseWeightMl.Text = "0"; - // - // label12 - // - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(466, 223); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(94, 13); - this.label12.TabIndex = 39; - this.label12.Text = "p2000 PulseSetup"; - // - // lblP2000PulseSetup - // - this.lblP2000PulseSetup.AutoSize = true; - this.lblP2000PulseSetup.Location = new System.Drawing.Point(467, 249); - this.lblP2000PulseSetup.Name = "lblP2000PulseSetup"; - this.lblP2000PulseSetup.Size = new System.Drawing.Size(13, 13); - this.lblP2000PulseSetup.TabIndex = 40; - this.lblP2000PulseSetup.Text = "0"; - // - // FrmConfigurations - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(587, 450); - this.Controls.Add(this.btnLogout); - this.Controls.Add(this.tabControl1); - this.Controls.Add(this.lblState); - this.Controls.Add(this.btnConnect); - this.Controls.Add(this.label1); - this.Controls.Add(this.cbComSlot); - this.Name = "FrmConfigurations"; - this.Text = "FrmConfigurations"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmConfigurations_FormClosing); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage1.PerformLayout(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nudPulseResolution)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nudAdapterPresence)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label lblState; - private System.Windows.Forms.Button btnConnect; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ComboBox cbComSlot; - private System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.Button btnLogout; - private System.Windows.Forms.Button btnWrite; - private System.Windows.Forms.Button btnRead; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Button btnDisplayDefault; - private System.Windows.Forms.Label lblPulsesequence; - private System.Windows.Forms.RadioButton rbTestModeOff; - private System.Windows.Forms.RadioButton rbTestModeOn; - private System.Windows.Forms.NumericUpDown nudAdapterPresence; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.NumericUpDown nudPulseResolution; - private System.Windows.Forms.ComboBox cbxPulseMode; - private System.Windows.Forms.ComboBox cbxPulseLength; - private System.Windows.Forms.Label lblPulseWeightInternal; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.Label lblPrencesInMin; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.RadioButton rbEvenDistOff; - private System.Windows.Forms.RadioButton rbEvenDistOn; - private System.Windows.Forms.ComboBox cbPulseWiegth; - private System.Windows.Forms.Label lblPulseWeightMl; - private System.Windows.Forms.Label lblP2000PulseSetup; - private System.Windows.Forms.Label label12; - } -} \ No newline at end of file diff --git a/GenesisCordonelTester/UI/FrmConfigurations.cs b/GenesisCordonelTester/UI/FrmConfigurations.cs deleted file mode 100644 index 35babda24..000000000 --- a/GenesisCordonelTester/UI/FrmConfigurations.cs +++ /dev/null @@ -1,405 +0,0 @@ -using GenesisCordonelInterface.API; -using Newtonsoft.Json; -using NLog; -using System; -using System.Collections.Generic; -using System.IO; -using System.Windows.Forms; -using Xylem.Common.CommonCore.Consts; -using Xylem.Common.Hardware.Interfaces.Ports.PortCore; -using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; -using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; -using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; -using Xylem.Common.Utils.Logging; - -namespace Xylem.Common.Ui.GenesisToolBox -{ - public enum METROLOGYASST_PulseMode - { - OFF = 0, /* No pulse output */ - FOR_REV_AB, /* Forward/reverse on A/B */ - FOR_REV_BA, /* Forward/reverse on B/A */ - PUL_DIR_AB, /* Pulse/direction on A/B */ - PUL_DIR_BA, /* Pulse/direction on B/A */ - PUL_BAL_A, /* Balanced pulse on A? */ - PUL_BAL_B, /* Balanced pulse on B? */ - TEST_PUL_DIR_AB, /* Test mode, pulse/direction on A/B */ - }; - - public enum METROLOGYASST_PulseLength - { - L_1MS_NotSupported = 0, /* 1ms pulse <- not supported */ - L_2MS_NotSupported, /* 2ms pulse <- not supported */ - L_5MS, /* 5ms pulse */ - L_10MS, /* 10ms pulse */ - L_20MS, /* 20ms pulse */ - L_50MS, /* 50ms pulse */ - L_100MS_NotSupported, /* 100ms pulse <- not supported */ - L_200MS, /* 200ms pulse */ - L_500MS, /* 500ms pulse */ - L_DYNAMIC, /* Dynamic pulse width */ - L_1_5MS, /* 1.5ms pulse */ - }; - - - - - - - - - - public partial class FrmConfigurations : Form - { - private static readonly NLog.ILogger Logger = NLog.LogManager.GetLogger("GenesisCordonelInterface"); - private readonly InterfaceToLaatzen interfaceToLaatzen = new InterfaceToLaatzen(); - - private GenesisMeter _currentGenesis; - private String _currentPcbId; - private MeterBatch _meterBatch = new MeterBatch(); - - public FrmConfigurations() - { - InitializeComponent(); - - cbxPulseLength.DataSource = Enum.GetValues(typeof(METROLOGYASST_PulseLength)); - cbxPulseMode.DataSource = Enum.GetValues(typeof(METROLOGYASST_PulseMode)); - _meterBatch = new MeterBatch(); - - var configfile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(Xylem.Common.Hardware.WaterMeter.Genesis), ProgramConfig.SerialConfigFileName); - - if (!File.Exists(configfile)) - { - throw new ApplicationException($"Configuration file {configfile} not found "); - } - var tr = new StreamReader(configfile); - var meterConfigList = JsonConvert.DeserializeObject(tr.ReadToEnd()); - cbComSlot.Items.Clear(); - var listSlots = new List(); - foreach (var item in meterConfigList) - { - cbComSlot.Items.Add(item.Slot); - listSlots.Add(item.Slot); - } - if (cbComSlot.Items.Count >= 1) - { - cbComSlot.SelectedItem = cbComSlot.Items[0]; - } - - //foreach (var info in typeof(Register).GetNestedTypes()) - //{ - // cbPreselection.Items.Add(info.Name); - //} - } - - private void btnLogout_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null && _currentGenesis.IsLoggedOn) - { - _currentGenesis.Logout(); - } - - _currentPcbId = ""; - - } - - private void btnConnect_Click(Object sender, EventArgs e) - { - if (cbComSlot.SelectedItem != null) // && cbComSlot.SelectedValue is ListBoxItem) - { - Int32 slotNR = 0; - if (!string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) && - int.TryParse(cbComSlot.SelectedItem.ToString(), out slotNR)) - { - conntect(slotNR); - } - } - } - - private void btnRead_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null && _currentGenesis.IsLoggedOn) - { - Boolean TriggerTest = false; - Boolean PulseEvenDistributio = false; - Byte AdapterPresenceLimit; - Byte PulseSequence; - Int32 PulseLength; - Int32 PulseMode; - Byte PulseResolution = 0; - UInt32 PulseWeight; - - - TriggerTest = RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister("GENESISFLOW_TriggerTest")); - - try - { - PulseEvenDistributio = RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister("METROLOGYASST_PulseEvenDistribution")); - PulseResolution = RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister("METROLOGYASST_PulseResolution")); - - } - catch (Exception) - { - - - } - - - AdapterPresenceLimit = RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister("IRDA_AdapterPresenceLimit")); - PulseSequence = RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister("IRDA_PulseSequence")); - - PulseLength = RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister("METROLOGYASST_PulseLength")); - - PulseMode = RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister("METROLOGYASST_PulseMode")); - PulseWeight = RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister("METROLOGYASST_PulseWeight")); - - rbTestModeOn.Checked = false; - rbTestModeOff.Checked = true; - if (TriggerTest) - { - rbTestModeOff.Checked = false; - rbTestModeOn.Checked = true; - } - - - rbEvenDistOn.Checked = false; - rbEvenDistOff.Checked = true; - if (PulseEvenDistributio) - { - rbEvenDistOff.Checked = false; - rbEvenDistOn.Checked = true; - } - - nudAdapterPresence.Value = AdapterPresenceLimit; - - lblPulsesequence.Text = PulseSequence.ToString(); - - cbxPulseLength.SelectedItem = ((METROLOGYASST_PulseLength)PulseLength); - - cbxPulseMode.SelectedItem = ((METROLOGYASST_PulseMode)PulseMode); - nudPulseResolution.Value = PulseResolution; - lblPulseWeightMl.Text = (PulseWeight * (Decimal)0.03125).ToString(); - lblPulseWeightInternal.Text = PulseWeight.ToString(); - cbPulseWiegth.SelectedText = getText(PulseWeight); - - - } - - - - } - - private void btnWrite_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null && _currentGenesis.IsLoggedOn) - { - Boolean TriggerTest = rbTestModeOn.Checked; - Boolean PulseEvenDistributio = rbEvenDistOn.Checked; - Byte AdapterPresenceLimit = (Byte)nudAdapterPresence.Value; - - Int32 PulseLength = ((METROLOGYASST_PulseLength)cbxPulseLength.SelectedItem).GetHashCode(); - Int32 PulseMode = ((METROLOGYASST_PulseMode)cbxPulseMode.SelectedItem).GetHashCode(); - Byte PulseResolution = (Byte)nudPulseResolution.Value; - - - UInt32 PulseWeight = getValue(cbPulseWiegth.SelectedText); - - actionResult = null; - - - - try - { - setActionResult(_currentGenesis.WriteRegister("METROLOGYASST_PulseEvenDistribution", PulseEvenDistributio)); - // setActionResult(_currentGenesis.WriteRegister("METROLOGYASST_PulseResolution", PulseResolution)); - - } - catch (Exception) - { - - - } - if (TriggerTest) - { - setActionResult(_currentGenesis.WriteRegister("GENESISFLOW_TriggerTest", 1)); - } - else - { - setActionResult(_currentGenesis.WriteRegister("GENESISFLOW_TriggerActive", 1)); - } - - setActionResult(_currentGenesis.WriteRegister("IRDA_AdapterPresenceLimit", AdapterPresenceLimit)); - setActionResult(_currentGenesis.WriteRegister("METROLOGYASST_PulseLength", PulseLength)); - - setActionResult(_currentGenesis.WriteRegister("METROLOGYASST_PulseMode", PulseMode)); - setActionResult(_currentGenesis.WriteRegister("METROLOGYASST_PulseWeight", PulseWeight)); - - - setActionResult(_currentGenesis.StoreAllConfigurations()); - setActionResult(_currentGenesis.WriteRegister("SENSUSRADIO_SYSTEMSTATE", 0xFF, true, false)); - - - } - } - - private void tabPage1_Click(Object sender, EventArgs e) - { - - } - - - - private void conntect(Int32 slotNR) - { - try - { - _meterBatch.RemoveAllMeters(); - _currentGenesis = new GenesisMeter(); - //_currentGenesis.IsDevelopmentUsage = true; //Make sure to set this before login - try - { - _currentGenesis.SetupFromConfigFile(slotNR); - _currentGenesis.EnableAutoLogon(); - _meterBatch.AddMeter(_currentGenesis); - } - catch (Exception ex) - { - Logger.Error(ex, $"Slot #{slotNR} failed: {ex.Message}"); - } - _currentGenesis.Login(); - _currentPcbId = _currentGenesis.PcbId; - - } - catch (Exception ex) - { - Logger.Error(ex, ex.Message); - } - } - - private void nudAdapterPresence_ValueChanged(Object sender, EventArgs e) - { - lblPrencesInMin.Text = (nudAdapterPresence.Value * 15).ToString(); - } - - private void nudPulseWeight_ValueChanged(Object sender, EventArgs e) - { - - } - - private void btnDisplayDefault_Click(Object sender, EventArgs e) - { - - if (_currentGenesis != null && _currentGenesis.IsLoggedOn) - { - actionResult = null; - setActionResult(_currentGenesis.WriteRegister("GENESISFLOW_SealDisplay", 0)); - setActionResult(_currentGenesis.WriteRegister("CUSTOMER_Locale", 0)); - setActionResult(_currentGenesis.WriteRegister("GENESISFLOW_DisplayPow10", 253)); - setActionResult(_currentGenesis.WriteRegister("GENESISFLOW_DisplayUnits", 0)); - setActionResult(_currentGenesis.WriteRegister("METROLOGYASST_FlowUnits", 1)); - setActionResult(_currentGenesis.StoreAllConfigurations()); - setActionResult(_currentGenesis.WriteRegister("SENSUSRADIO_SYSTEMSTATE", 0xFF, true, false)); - } - } - - private void setActionResult(Boolean v) - { - if (!actionResult.HasValue) - { - actionResult = v; - } - if (!v) - { - actionResult = false; - } - - } - - private Boolean? actionResult = null; - - private void FrmConfigurations_FormClosing(Object sender, FormClosingEventArgs e) - { - _meterBatch.Dispose(); - } - - private void cbPulseWiegth_SelectedIndexChanged(Object sender, EventArgs e) - { - var PInternal = getValue(cbPulseWiegth.SelectedItem.ToString().Trim()); - lblPulseWeightMl.Text = (PInternal * (Decimal)0.03125).ToString(); - lblPulseWeightInternal.Text = (PInternal).ToString(); - - var PulseFQm3 = (PInternal * (Decimal)0.03125); - lblP2000PulseSetup.Text = (1000000 / PulseFQm3).ToString(); - - } - private String getText(UInt32 v) - { - - String intHelper = "NA"; - switch (v) - { - - case 0x00007D00: intHelper = "1 l/Imp."; break; - case 0x0004E200: intHelper = "10 l/Imp."; break; - case 0x0030D400: intHelper = "100 l/Imp."; break; - case 0x01E84800: intHelper = "1.000 l/Imp."; break; - case 0x0001D92D: intHelper = "1 Gallons/Imp."; break; - case 0x00127BC3: intHelper = "10 Gallons/Imp."; break; - case 0x00B8D5A0: intHelper = "100 Gallons/Imp."; break; - case 0x07382500: intHelper = "1.000 Gallons/Imp."; break; - case 0x000DD399: intHelper = "1 Cub. Feet/Imp."; break; - case 0x008A4400: intHelper = "10 Cub. Feet/Imp."; break; - case 0x0566D000: intHelper = "100 Cub. Feet/Imp."; break; - case 0x36042000: intHelper = "1.000 Cub. Feet/Imp."; break; - case 0x004DA169: intHelper = "1 Barrel/Imp."; break; - case 0x03084E1E: intHelper = "10 Barrels/Imp."; break; - case 0x1E530D2F: intHelper = "100 Barrels/Imp."; break; - case 0xFFF0279D: intHelper = "1.000 Barrels/Imp."; break; - case 0x00000000: intHelper = "ohne"; break; - - - default: intHelper = "ohne"; break; - } - return intHelper; - - } - private UInt32 getValue(String v) - { - - UInt32 intHelper = 0; - switch (v.Replace(" ", "")) - { - case "1l/Imp.": intHelper = 0x00007D00; break; - case "10l/Imp.": intHelper = 0x0004E200; break; - case "100l/Imp.": intHelper = 0x0030D400; break; - case "1.000l/Imp.": intHelper = 0x01E84800; break; - case "1Gallons/Imp.": intHelper = 0x0001D92D; break; - case "10Gallons/Imp.": intHelper = 0x00127BC3; break; - case "100Gallons/Imp.": intHelper = 0x00B8D5A0; break; - case "1.000Gallons/Imp.": intHelper = 0x07382500; break; - case "1Cub.Feet/Imp.": intHelper = 0x000DD399; break; - case "10Cub.Feet/Imp.": intHelper = 0x008A4400; break; - case "100Cub.Feet/Imp.": intHelper = 0x0566D000; break; - case "1.000Cub.Feet/Imp.": intHelper = 0x36042000; break; - case "1Barrel/Imp.": intHelper = 0x004DA169; break; - case "10Barrels/Imp.": intHelper = 0x03084E1E; break; - case "100Barrels/Imp.": intHelper = 0x1E530D2F; break; - case "1.000Barrels/Imp.": intHelper = 0xFFF0279D; break; - case "ohne": intHelper = 0; break; - - - default: intHelper = 0; break; - } - return intHelper; - - } - - - - - - - - } -} - diff --git a/GenesisCordonelTester/UI/FrmCordonelPreadjustmentUI.Designer.cs b/GenesisCordonelTester/UI/FrmCordonelPreadjustmentUI.Designer.cs deleted file mode 100644 index a88472043..000000000 --- a/GenesisCordonelTester/UI/FrmCordonelPreadjustmentUI.Designer.cs +++ /dev/null @@ -1,1810 +0,0 @@ -namespace GenesisCordonelInterface.UI -{ - partial class FrmCordonelPreadjustmentUI - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - this.tab_Maintab = new System.Windows.Forms.TabControl(); - this.tab_Report = new System.Windows.Forms.TabPage(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.groupBox_report = new System.Windows.Forms.GroupBox(); - this.gB_ReportTitlepage = new System.Windows.Forms.GroupBox(); - this.rTB_ReportEnterSerialNumber = new System.Windows.Forms.RichTextBox(); - this.label_Report_EnterSerialNumber = new System.Windows.Forms.Label(); - this.l_ReportIntro = new System.Windows.Forms.Label(); - this.rtB_ReportTitlepageIntro = new System.Windows.Forms.RichTextBox(); - this.rTB_ReportEnterTitle = new System.Windows.Forms.RichTextBox(); - this.label_Report_EnterTitle = new System.Windows.Forms.Label(); - this.label_Report_EnterOperator = new System.Windows.Forms.Label(); - this.rTB_ReportEnterDate = new System.Windows.Forms.RichTextBox(); - this.rTB_ReportEnterOperator = new System.Windows.Forms.RichTextBox(); - this.label_Report_EnterDate = new System.Windows.Forms.Label(); - this.btn_Report_Generate = new System.Windows.Forms.Button(); - this.tab_Settings = new System.Windows.Forms.TabPage(); - this.cB_SinglePath = new System.Windows.Forms.CheckBox(); - this.lbLanguage = new System.Windows.Forms.ListBox(); - this.gB_ComportSetup = new System.Windows.Forms.GroupBox(); - this.BtnOpenSetup = new System.Windows.Forms.Button(); - this.gB_SettingsTempMonitor = new System.Windows.Forms.GroupBox(); - this.nUD_SettingsTempMonitorDeviation = new System.Windows.Forms.NumericUpDown(); - this.nUD_SettingsTempMonitorLowerValue = new System.Windows.Forms.NumericUpDown(); - this.nUD_SettingsTempMonitorUpperValue = new System.Windows.Forms.NumericUpDown(); - this.l_SettingsTempMonitorDeviation = new System.Windows.Forms.Label(); - this.l_SettingsTempMonitorLowerValue = new System.Windows.Forms.Label(); - this.l_SettingsTempMonitorUpperValue = new System.Windows.Forms.Label(); - this.gB_Settings_TemperatureCalibration = new System.Windows.Forms.GroupBox(); - this.cB_TempOnly = new System.Windows.Forms.CheckBox(); - this.cB_TempManualAcquisition = new System.Windows.Forms.CheckBox(); - this.lThermo2 = new System.Windows.Forms.Label(); - this.lPasswordThermo1 = new System.Windows.Forms.Label(); - this.tB_PasswordThermo2 = new System.Windows.Forms.TextBox(); - this.tB_PasswordThermo1 = new System.Windows.Forms.TextBox(); - this.gB_Passwords = new System.Windows.Forms.GroupBox(); - this.tB_PasswordMeter5 = new System.Windows.Forms.TextBox(); - this.tB_PasswordMeter10 = new System.Windows.Forms.TextBox(); - this.tB_PasswordMeter9 = new System.Windows.Forms.TextBox(); - this.tB_PasswordMeter8 = new System.Windows.Forms.TextBox(); - this.tB_PasswordMeter7 = new System.Windows.Forms.TextBox(); - this.tB_PasswordMeter6 = new System.Windows.Forms.TextBox(); - this.tB_PasswordMeter4 = new System.Windows.Forms.TextBox(); - this.tB_PasswordMeter3 = new System.Windows.Forms.TextBox(); - this.tB_PasswordMeter2 = new System.Windows.Forms.TextBox(); - this.tB_PasswordMeter1 = new System.Windows.Forms.TextBox(); - this.l_PasswordMeter10 = new System.Windows.Forms.Label(); - this.l_PasswordMeter9 = new System.Windows.Forms.Label(); - this.l_PasswordMeter8 = new System.Windows.Forms.Label(); - this.l_PasswordMeter7 = new System.Windows.Forms.Label(); - this.l_PasswordMeter6 = new System.Windows.Forms.Label(); - this.l_PasswordMeter5 = new System.Windows.Forms.Label(); - this.l_PasswordMeter4 = new System.Windows.Forms.Label(); - this.l_PasswordMeter3 = new System.Windows.Forms.Label(); - this.l_PasswordMeter2 = new System.Windows.Forms.Label(); - this.l_PasswordMeter1 = new System.Windows.Forms.Label(); - this.gB_Settings_Preparation = new System.Windows.Forms.GroupBox(); - this.nUD_Settings_Samplerate = new System.Windows.Forms.NumericUpDown(); - this.label1 = new System.Windows.Forms.Label(); - this.nUD_Settings_Preparation_StabiTime = new System.Windows.Forms.NumericUpDown(); - this.l_Settings_Preparation_StabiTime = new System.Windows.Forms.Label(); - this.gB_Settings_ZeroflowOffsetTest = new System.Windows.Forms.GroupBox(); - this.cB_OffsetTestLogFiles = new System.Windows.Forms.CheckBox(); - this.nUD_Settings_ZeroflowOffsetTestActivityCheckInterval = new System.Windows.Forms.NumericUpDown(); - this.l_Settings_ZeroflowOffsetTestActivityCheckInterval = new System.Windows.Forms.Label(); - this.l_Settings_ZeroflowOffsetTestNumberOfLines = new System.Windows.Forms.Label(); - this.nUD_Settings_ZeroflowOffsetTestNumberOfLines = new System.Windows.Forms.NumericUpDown(); - this.l_Settings_ZeroFlowTestSettlingTime = new System.Windows.Forms.Label(); - this.nUD_Settings_ZeroflowOffsetTestSettlingTime = new System.Windows.Forms.NumericUpDown(); - this.l_Settings_ZeroFlowTestOffsetLimit = new System.Windows.Forms.Label(); - this.nUD_Settings_ZeroflowOffsetTestOffsetLimit = new System.Windows.Forms.NumericUpDown(); - this.l_Settings_ZeroflowOffsetTestLowerLimit = new System.Windows.Forms.Label(); - this.l_Settings_ZeroflowOffsetTestUpperLimit = new System.Windows.Forms.Label(); - this.nUD_Settings_ZeroflowOffsetTestLowerLimit = new System.Windows.Forms.NumericUpDown(); - this.nUD_Settings_ZeroflowOffsetTestUpperLimit = new System.Windows.Forms.NumericUpDown(); - this.gB_Settings_AmplitudeTest = new System.Windows.Forms.GroupBox(); - this.cB_AmpLogFiles = new System.Windows.Forms.CheckBox(); - this.nUD_Settings_AmplitudeActivityCheckInterval = new System.Windows.Forms.NumericUpDown(); - this.l_Settings_AmplitudeActivityCheckInterval = new System.Windows.Forms.Label(); - this.cB_MeanAmplitudeFiles = new System.Windows.Forms.CheckBox(); - this.nUD_PercentageStop = new System.Windows.Forms.NumericUpDown(); - this.l_PercentageStop = new System.Windows.Forms.Label(); - this.l_PercentageStart = new System.Windows.Forms.Label(); - this.nUD_PercentageStart = new System.Windows.Forms.NumericUpDown(); - this.l__Settings_AmplitudeTestMinDistance = new System.Windows.Forms.Label(); - this.nUD_Settings_AmplitudeTestMinDistance = new System.Windows.Forms.NumericUpDown(); - this.l_Settings_AmplitudeTestLowerLimit = new System.Windows.Forms.Label(); - this.l_Settings_AmplitudeTestUpperLimit = new System.Windows.Forms.Label(); - this.nUD_Settings_AmplitudeTestLowerLimit = new System.Windows.Forms.NumericUpDown(); - this.nUD_Settings_AmplitudeTestUpperLimit = new System.Windows.Forms.NumericUpDown(); - this.pB_Logo3 = new System.Windows.Forms.PictureBox(); - this.pB_AvailableImages = new System.Windows.Forms.PictureBox(); - this.tab_About = new System.Windows.Forms.TabPage(); - this.pictureBox3 = new System.Windows.Forms.PictureBox(); - this.pictureBox2 = new System.Windows.Forms.PictureBox(); - this.l_BasedOn = new System.Windows.Forms.Label(); - this.l_Author = new System.Windows.Forms.Label(); - this.pB_DocumentVersion = new System.Windows.Forms.PictureBox(); - this.pB_Logo2 = new System.Windows.Forms.PictureBox(); - this.l_Version = new System.Windows.Forms.Label(); - this.l_About_Info = new System.Windows.Forms.Label(); - this.l_About_Author = new System.Windows.Forms.Label(); - this.l_About_Version = new System.Windows.Forms.Label(); - this.tab_ZeroFlowCal = new System.Windows.Forms.TabPage(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.richTextBox1 = new System.Windows.Forms.RichTextBox(); - this.button1 = new System.Windows.Forms.Button(); - this.gB_TempMeters = new System.Windows.Forms.GroupBox(); - this.nudTempSlot = new System.Windows.Forms.NumericUpDown(); - this.btnTempRaspi = new System.Windows.Forms.Button(); - this.btn_LoadTempe = new System.Windows.Forms.Button(); - this.tab_Maintab.SuspendLayout(); - this.tab_Report.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.groupBox_report.SuspendLayout(); - this.gB_ReportTitlepage.SuspendLayout(); - this.tab_Settings.SuspendLayout(); - this.gB_ComportSetup.SuspendLayout(); - this.gB_SettingsTempMonitor.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_SettingsTempMonitorDeviation)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_SettingsTempMonitorLowerValue)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_SettingsTempMonitorUpperValue)).BeginInit(); - this.gB_Settings_TemperatureCalibration.SuspendLayout(); - this.gB_Passwords.SuspendLayout(); - this.gB_Settings_Preparation.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_Samplerate)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_Preparation_StabiTime)).BeginInit(); - this.gB_Settings_ZeroflowOffsetTest.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_ZeroflowOffsetTestActivityCheckInterval)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_ZeroflowOffsetTestNumberOfLines)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_ZeroflowOffsetTestSettlingTime)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_ZeroflowOffsetTestOffsetLimit)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_ZeroflowOffsetTestLowerLimit)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_ZeroflowOffsetTestUpperLimit)).BeginInit(); - this.gB_Settings_AmplitudeTest.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_AmplitudeActivityCheckInterval)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_PercentageStop)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_PercentageStart)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_AmplitudeTestMinDistance)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_AmplitudeTestLowerLimit)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_AmplitudeTestUpperLimit)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pB_Logo3)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pB_AvailableImages)).BeginInit(); - this.tab_About.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pB_DocumentVersion)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pB_Logo2)).BeginInit(); - this.tabPage1.SuspendLayout(); - this.gB_TempMeters.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nudTempSlot)).BeginInit(); - this.SuspendLayout(); - // - // tab_Maintab - // - this.tab_Maintab.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tab_Maintab.Controls.Add(this.tab_Report); - this.tab_Maintab.Controls.Add(this.tab_Settings); - this.tab_Maintab.Controls.Add(this.tab_About); - this.tab_Maintab.Controls.Add(this.tab_ZeroFlowCal); - this.tab_Maintab.Controls.Add(this.tabPage1); - this.tab_Maintab.Location = new System.Drawing.Point(11, 11); - this.tab_Maintab.Margin = new System.Windows.Forms.Padding(2); - this.tab_Maintab.Name = "tab_Maintab"; - this.tab_Maintab.SelectedIndex = 0; - this.tab_Maintab.Size = new System.Drawing.Size(1036, 678); - this.tab_Maintab.SizeMode = System.Windows.Forms.TabSizeMode.FillToRight; - this.tab_Maintab.TabIndex = 2; - this.tab_Maintab.Selected += new System.Windows.Forms.TabControlEventHandler(this.tab_Maintab_Selected); - // - // tab_Report - // - this.tab_Report.BackColor = System.Drawing.Color.Honeydew; - this.tab_Report.Controls.Add(this.pictureBox1); - this.tab_Report.Controls.Add(this.groupBox_report); - this.tab_Report.Location = new System.Drawing.Point(4, 22); - this.tab_Report.Margin = new System.Windows.Forms.Padding(2); - this.tab_Report.Name = "tab_Report"; - this.tab_Report.Padding = new System.Windows.Forms.Padding(2); - this.tab_Report.Size = new System.Drawing.Size(1028, 652); - this.tab_Report.TabIndex = 1; - this.tab_Report.Text = "Report"; - // - // pictureBox1 - // - this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.pictureBox1.BackColor = System.Drawing.Color.Transparent; - this.pictureBox1.ErrorImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.ErrorImage"))); - this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); - this.pictureBox1.InitialImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.InitialImage"))); - this.pictureBox1.Location = new System.Drawing.Point(942, 35); - this.pictureBox1.Margin = new System.Windows.Forms.Padding(2); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(53, 40); - this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pictureBox1.TabIndex = 27; - this.pictureBox1.TabStop = false; - // - // groupBox_report - // - this.groupBox_report.Anchor = System.Windows.Forms.AnchorStyles.None; - this.groupBox_report.Controls.Add(this.gB_ReportTitlepage); - this.groupBox_report.Controls.Add(this.btn_Report_Generate); - this.groupBox_report.Location = new System.Drawing.Point(274, 1); - this.groupBox_report.Margin = new System.Windows.Forms.Padding(2); - this.groupBox_report.Name = "groupBox_report"; - this.groupBox_report.Padding = new System.Windows.Forms.Padding(2); - this.groupBox_report.Size = new System.Drawing.Size(444, 654); - this.groupBox_report.TabIndex = 2; - this.groupBox_report.TabStop = false; - this.groupBox_report.Text = "Select Options"; - // - // gB_ReportTitlepage - // - this.gB_ReportTitlepage.Controls.Add(this.rTB_ReportEnterSerialNumber); - this.gB_ReportTitlepage.Controls.Add(this.label_Report_EnterSerialNumber); - this.gB_ReportTitlepage.Controls.Add(this.l_ReportIntro); - this.gB_ReportTitlepage.Controls.Add(this.rtB_ReportTitlepageIntro); - this.gB_ReportTitlepage.Controls.Add(this.rTB_ReportEnterTitle); - this.gB_ReportTitlepage.Controls.Add(this.label_Report_EnterTitle); - this.gB_ReportTitlepage.Controls.Add(this.label_Report_EnterOperator); - this.gB_ReportTitlepage.Controls.Add(this.rTB_ReportEnterDate); - this.gB_ReportTitlepage.Controls.Add(this.rTB_ReportEnterOperator); - this.gB_ReportTitlepage.Controls.Add(this.label_Report_EnterDate); - this.gB_ReportTitlepage.Location = new System.Drawing.Point(18, 16); - this.gB_ReportTitlepage.Margin = new System.Windows.Forms.Padding(2); - this.gB_ReportTitlepage.Name = "gB_ReportTitlepage"; - this.gB_ReportTitlepage.Padding = new System.Windows.Forms.Padding(2); - this.gB_ReportTitlepage.Size = new System.Drawing.Size(400, 378); - this.gB_ReportTitlepage.TabIndex = 16; - this.gB_ReportTitlepage.TabStop = false; - this.gB_ReportTitlepage.Text = "Titelpage"; - // - // rTB_ReportEnterSerialNumber - // - this.rTB_ReportEnterSerialNumber.Location = new System.Drawing.Point(181, 91); - this.rTB_ReportEnterSerialNumber.Margin = new System.Windows.Forms.Padding(2); - this.rTB_ReportEnterSerialNumber.Name = "rTB_ReportEnterSerialNumber"; - this.rTB_ReportEnterSerialNumber.Size = new System.Drawing.Size(177, 21); - this.rTB_ReportEnterSerialNumber.TabIndex = 18; - this.rTB_ReportEnterSerialNumber.Text = ""; - // - // label_Report_EnterSerialNumber - // - this.label_Report_EnterSerialNumber.AutoSize = true; - this.label_Report_EnterSerialNumber.Location = new System.Drawing.Point(27, 91); - this.label_Report_EnterSerialNumber.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label_Report_EnterSerialNumber.Name = "label_Report_EnterSerialNumber"; - this.label_Report_EnterSerialNumber.Size = new System.Drawing.Size(138, 13); - this.label_Report_EnterSerialNumber.TabIndex = 17; - this.label_Report_EnterSerialNumber.Text = "Please enter Serial Number:"; - // - // l_ReportIntro - // - this.l_ReportIntro.AutoSize = true; - this.l_ReportIntro.Location = new System.Drawing.Point(27, 116); - this.l_ReportIntro.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_ReportIntro.Name = "l_ReportIntro"; - this.l_ReportIntro.Size = new System.Drawing.Size(82, 13); - this.l_ReportIntro.TabIndex = 16; - this.l_ReportIntro.Text = "Enter Comment:"; - // - // rtB_ReportTitlepageIntro - // - this.rtB_ReportTitlepageIntro.Location = new System.Drawing.Point(30, 132); - this.rtB_ReportTitlepageIntro.Margin = new System.Windows.Forms.Padding(2); - this.rtB_ReportTitlepageIntro.Name = "rtB_ReportTitlepageIntro"; - this.rtB_ReportTitlepageIntro.Size = new System.Drawing.Size(345, 224); - this.rtB_ReportTitlepageIntro.TabIndex = 15; - this.rtB_ReportTitlepageIntro.Text = resources.GetString("rtB_ReportTitlepageIntro.Text"); - // - // rTB_ReportEnterTitle - // - this.rTB_ReportEnterTitle.Location = new System.Drawing.Point(181, 23); - this.rTB_ReportEnterTitle.Margin = new System.Windows.Forms.Padding(2); - this.rTB_ReportEnterTitle.Name = "rTB_ReportEnterTitle"; - this.rTB_ReportEnterTitle.Size = new System.Drawing.Size(177, 21); - this.rTB_ReportEnterTitle.TabIndex = 10; - this.rTB_ReportEnterTitle.Text = "Zeroflow Calibration Report"; - // - // label_Report_EnterTitle - // - this.label_Report_EnterTitle.AutoSize = true; - this.label_Report_EnterTitle.Location = new System.Drawing.Point(27, 26); - this.label_Report_EnterTitle.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label_Report_EnterTitle.Name = "label_Report_EnterTitle"; - this.label_Report_EnterTitle.Size = new System.Drawing.Size(88, 13); - this.label_Report_EnterTitle.TabIndex = 9; - this.label_Report_EnterTitle.Text = "Please enter title:"; - // - // label_Report_EnterOperator - // - this.label_Report_EnterOperator.AutoSize = true; - this.label_Report_EnterOperator.Location = new System.Drawing.Point(27, 70); - this.label_Report_EnterOperator.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label_Report_EnterOperator.Name = "label_Report_EnterOperator"; - this.label_Report_EnterOperator.Size = new System.Drawing.Size(111, 13); - this.label_Report_EnterOperator.TabIndex = 14; - this.label_Report_EnterOperator.Text = "Please enter operator:"; - // - // rTB_ReportEnterDate - // - this.rTB_ReportEnterDate.Location = new System.Drawing.Point(181, 46); - this.rTB_ReportEnterDate.Margin = new System.Windows.Forms.Padding(2); - this.rTB_ReportEnterDate.Name = "rTB_ReportEnterDate"; - this.rTB_ReportEnterDate.Size = new System.Drawing.Size(177, 21); - this.rTB_ReportEnterDate.TabIndex = 12; - this.rTB_ReportEnterDate.Text = ""; - // - // rTB_ReportEnterOperator - // - this.rTB_ReportEnterOperator.Location = new System.Drawing.Point(181, 69); - this.rTB_ReportEnterOperator.Margin = new System.Windows.Forms.Padding(2); - this.rTB_ReportEnterOperator.Name = "rTB_ReportEnterOperator"; - this.rTB_ReportEnterOperator.Size = new System.Drawing.Size(177, 21); - this.rTB_ReportEnterOperator.TabIndex = 13; - this.rTB_ReportEnterOperator.Text = "[John Doe]"; - // - // label_Report_EnterDate - // - this.label_Report_EnterDate.AutoSize = true; - this.label_Report_EnterDate.Location = new System.Drawing.Point(27, 48); - this.label_Report_EnterDate.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label_Report_EnterDate.Name = "label_Report_EnterDate"; - this.label_Report_EnterDate.Size = new System.Drawing.Size(93, 13); - this.label_Report_EnterDate.TabIndex = 11; - this.label_Report_EnterDate.Text = "Please enter date:"; - // - // btn_Report_Generate - // - this.btn_Report_Generate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btn_Report_Generate.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btn_Report_Generate.Location = new System.Drawing.Point(144, 477); - this.btn_Report_Generate.Margin = new System.Windows.Forms.Padding(2); - this.btn_Report_Generate.Name = "btn_Report_Generate"; - this.btn_Report_Generate.Size = new System.Drawing.Size(168, 112); - this.btn_Report_Generate.TabIndex = 0; - this.btn_Report_Generate.Text = "Generate Report"; - this.btn_Report_Generate.UseVisualStyleBackColor = true; - // - // tab_Settings - // - this.tab_Settings.BackColor = System.Drawing.Color.Honeydew; - this.tab_Settings.Controls.Add(this.cB_SinglePath); - this.tab_Settings.Controls.Add(this.lbLanguage); - this.tab_Settings.Controls.Add(this.gB_ComportSetup); - this.tab_Settings.Controls.Add(this.gB_SettingsTempMonitor); - this.tab_Settings.Controls.Add(this.gB_Settings_TemperatureCalibration); - this.tab_Settings.Controls.Add(this.gB_Passwords); - this.tab_Settings.Controls.Add(this.gB_Settings_Preparation); - this.tab_Settings.Controls.Add(this.gB_Settings_ZeroflowOffsetTest); - this.tab_Settings.Controls.Add(this.gB_Settings_AmplitudeTest); - this.tab_Settings.Controls.Add(this.pB_Logo3); - this.tab_Settings.Controls.Add(this.pB_AvailableImages); - this.tab_Settings.Location = new System.Drawing.Point(4, 22); - this.tab_Settings.Margin = new System.Windows.Forms.Padding(2); - this.tab_Settings.Name = "tab_Settings"; - this.tab_Settings.Padding = new System.Windows.Forms.Padding(2); - this.tab_Settings.Size = new System.Drawing.Size(1028, 652); - this.tab_Settings.TabIndex = 8; - this.tab_Settings.Text = "Settings"; - // - // cB_SinglePath - // - this.cB_SinglePath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.cB_SinglePath.AutoSize = true; - this.cB_SinglePath.Location = new System.Drawing.Point(821, 268); - this.cB_SinglePath.Margin = new System.Windows.Forms.Padding(2); - this.cB_SinglePath.Name = "cB_SinglePath"; - this.cB_SinglePath.Size = new System.Drawing.Size(87, 17); - this.cB_SinglePath.TabIndex = 66; - this.cB_SinglePath.Text = "Single PATH"; - this.cB_SinglePath.UseVisualStyleBackColor = true; - // - // lbLanguage - // - this.lbLanguage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.lbLanguage.FormattingEnabled = true; - this.lbLanguage.Items.AddRange(new object[] { - "Deutsch", - "English"}); - this.lbLanguage.Location = new System.Drawing.Point(709, 220); - this.lbLanguage.Margin = new System.Windows.Forms.Padding(2); - this.lbLanguage.Name = "lbLanguage"; - this.lbLanguage.Size = new System.Drawing.Size(97, 30); - this.lbLanguage.TabIndex = 65; - // - // gB_ComportSetup - // - this.gB_ComportSetup.Controls.Add(this.BtnOpenSetup); - this.gB_ComportSetup.Location = new System.Drawing.Point(336, 366); - this.gB_ComportSetup.Margin = new System.Windows.Forms.Padding(2); - this.gB_ComportSetup.Name = "gB_ComportSetup"; - this.gB_ComportSetup.Padding = new System.Windows.Forms.Padding(2); - this.gB_ComportSetup.Size = new System.Drawing.Size(272, 87); - this.gB_ComportSetup.TabIndex = 30; - this.gB_ComportSetup.TabStop = false; - this.gB_ComportSetup.Text = "COM Port Setup"; - // - // BtnOpenSetup - // - this.BtnOpenSetup.Location = new System.Drawing.Point(5, 29); - this.BtnOpenSetup.Name = "BtnOpenSetup"; - this.BtnOpenSetup.Size = new System.Drawing.Size(262, 37); - this.BtnOpenSetup.TabIndex = 0; - this.BtnOpenSetup.Text = "Open Setup"; - this.BtnOpenSetup.UseVisualStyleBackColor = true; - // - // gB_SettingsTempMonitor - // - this.gB_SettingsTempMonitor.Controls.Add(this.nUD_SettingsTempMonitorDeviation); - this.gB_SettingsTempMonitor.Controls.Add(this.nUD_SettingsTempMonitorLowerValue); - this.gB_SettingsTempMonitor.Controls.Add(this.nUD_SettingsTempMonitorUpperValue); - this.gB_SettingsTempMonitor.Controls.Add(this.l_SettingsTempMonitorDeviation); - this.gB_SettingsTempMonitor.Controls.Add(this.l_SettingsTempMonitorLowerValue); - this.gB_SettingsTempMonitor.Controls.Add(this.l_SettingsTempMonitorUpperValue); - this.gB_SettingsTempMonitor.Location = new System.Drawing.Point(336, 456); - this.gB_SettingsTempMonitor.Margin = new System.Windows.Forms.Padding(2); - this.gB_SettingsTempMonitor.Name = "gB_SettingsTempMonitor"; - this.gB_SettingsTempMonitor.Padding = new System.Windows.Forms.Padding(2); - this.gB_SettingsTempMonitor.Size = new System.Drawing.Size(274, 171); - this.gB_SettingsTempMonitor.TabIndex = 32; - this.gB_SettingsTempMonitor.TabStop = false; - this.gB_SettingsTempMonitor.Text = "Temperature Monitoring"; - // - // nUD_SettingsTempMonitorDeviation - // - this.nUD_SettingsTempMonitorDeviation.DecimalPlaces = 1; - this.nUD_SettingsTempMonitorDeviation.Increment = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.nUD_SettingsTempMonitorDeviation.Location = new System.Drawing.Point(130, 106); - this.nUD_SettingsTempMonitorDeviation.Margin = new System.Windows.Forms.Padding(2); - this.nUD_SettingsTempMonitorDeviation.Maximum = new decimal(new int[] { - 5, - 0, - 0, - 0}); - this.nUD_SettingsTempMonitorDeviation.Name = "nUD_SettingsTempMonitorDeviation"; - this.nUD_SettingsTempMonitorDeviation.Size = new System.Drawing.Size(96, 20); - this.nUD_SettingsTempMonitorDeviation.TabIndex = 5; - this.nUD_SettingsTempMonitorDeviation.Value = new decimal(new int[] { - 5, - 0, - 0, - 65536}); - // - // nUD_SettingsTempMonitorLowerValue - // - this.nUD_SettingsTempMonitorLowerValue.DecimalPlaces = 1; - this.nUD_SettingsTempMonitorLowerValue.Increment = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.nUD_SettingsTempMonitorLowerValue.Location = new System.Drawing.Point(130, 67); - this.nUD_SettingsTempMonitorLowerValue.Margin = new System.Windows.Forms.Padding(2); - this.nUD_SettingsTempMonitorLowerValue.Maximum = new decimal(new int[] { - 30, - 0, - 0, - 0}); - this.nUD_SettingsTempMonitorLowerValue.Name = "nUD_SettingsTempMonitorLowerValue"; - this.nUD_SettingsTempMonitorLowerValue.Size = new System.Drawing.Size(96, 20); - this.nUD_SettingsTempMonitorLowerValue.TabIndex = 4; - this.nUD_SettingsTempMonitorLowerValue.Value = new decimal(new int[] { - 10, - 0, - 0, - 0}); - // - // nUD_SettingsTempMonitorUpperValue - // - this.nUD_SettingsTempMonitorUpperValue.DecimalPlaces = 1; - this.nUD_SettingsTempMonitorUpperValue.Increment = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.nUD_SettingsTempMonitorUpperValue.Location = new System.Drawing.Point(130, 34); - this.nUD_SettingsTempMonitorUpperValue.Margin = new System.Windows.Forms.Padding(2); - this.nUD_SettingsTempMonitorUpperValue.Maximum = new decimal(new int[] { - 50, - 0, - 0, - 0}); - this.nUD_SettingsTempMonitorUpperValue.Name = "nUD_SettingsTempMonitorUpperValue"; - this.nUD_SettingsTempMonitorUpperValue.Size = new System.Drawing.Size(96, 20); - this.nUD_SettingsTempMonitorUpperValue.TabIndex = 3; - this.nUD_SettingsTempMonitorUpperValue.Value = new decimal(new int[] { - 35, - 0, - 0, - 0}); - // - // l_SettingsTempMonitorDeviation - // - this.l_SettingsTempMonitorDeviation.AutoSize = true; - this.l_SettingsTempMonitorDeviation.Location = new System.Drawing.Point(24, 106); - this.l_SettingsTempMonitorDeviation.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_SettingsTempMonitorDeviation.Name = "l_SettingsTempMonitorDeviation"; - this.l_SettingsTempMonitorDeviation.Size = new System.Drawing.Size(75, 13); - this.l_SettingsTempMonitorDeviation.TabIndex = 2; - this.l_SettingsTempMonitorDeviation.Text = "Deviation [°C]:"; - // - // l_SettingsTempMonitorLowerValue - // - this.l_SettingsTempMonitorLowerValue.AutoSize = true; - this.l_SettingsTempMonitorLowerValue.Location = new System.Drawing.Point(24, 67); - this.l_SettingsTempMonitorLowerValue.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_SettingsTempMonitorLowerValue.Name = "l_SettingsTempMonitorLowerValue"; - this.l_SettingsTempMonitorLowerValue.Size = new System.Drawing.Size(89, 13); - this.l_SettingsTempMonitorLowerValue.TabIndex = 1; - this.l_SettingsTempMonitorLowerValue.Text = "Lower Value [°C]:"; - // - // l_SettingsTempMonitorUpperValue - // - this.l_SettingsTempMonitorUpperValue.AutoSize = true; - this.l_SettingsTempMonitorUpperValue.Location = new System.Drawing.Point(24, 34); - this.l_SettingsTempMonitorUpperValue.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_SettingsTempMonitorUpperValue.Name = "l_SettingsTempMonitorUpperValue"; - this.l_SettingsTempMonitorUpperValue.Size = new System.Drawing.Size(89, 13); - this.l_SettingsTempMonitorUpperValue.TabIndex = 0; - this.l_SettingsTempMonitorUpperValue.Text = "Upper Value [°C]:"; - // - // gB_Settings_TemperatureCalibration - // - this.gB_Settings_TemperatureCalibration.Controls.Add(this.cB_TempOnly); - this.gB_Settings_TemperatureCalibration.Controls.Add(this.cB_TempManualAcquisition); - this.gB_Settings_TemperatureCalibration.Controls.Add(this.lThermo2); - this.gB_Settings_TemperatureCalibration.Controls.Add(this.lPasswordThermo1); - this.gB_Settings_TemperatureCalibration.Controls.Add(this.tB_PasswordThermo2); - this.gB_Settings_TemperatureCalibration.Controls.Add(this.tB_PasswordThermo1); - this.gB_Settings_TemperatureCalibration.Location = new System.Drawing.Point(624, 72); - this.gB_Settings_TemperatureCalibration.Margin = new System.Windows.Forms.Padding(2); - this.gB_Settings_TemperatureCalibration.Name = "gB_Settings_TemperatureCalibration"; - this.gB_Settings_TemperatureCalibration.Padding = new System.Windows.Forms.Padding(2); - this.gB_Settings_TemperatureCalibration.Size = new System.Drawing.Size(272, 144); - this.gB_Settings_TemperatureCalibration.TabIndex = 28; - this.gB_Settings_TemperatureCalibration.TabStop = false; - this.gB_Settings_TemperatureCalibration.Text = "Temperature Calibration"; - // - // cB_TempOnly - // - this.cB_TempOnly.AutoSize = true; - this.cB_TempOnly.Location = new System.Drawing.Point(42, 96); - this.cB_TempOnly.Margin = new System.Windows.Forms.Padding(2); - this.cB_TempOnly.Name = "cB_TempOnly"; - this.cB_TempOnly.Size = new System.Drawing.Size(126, 17); - this.cB_TempOnly.TabIndex = 18; - this.cB_TempOnly.Text = "Temp calibration only"; - this.cB_TempOnly.UseVisualStyleBackColor = true; - // - // cB_TempManualAcquisition - // - this.cB_TempManualAcquisition.AutoSize = true; - this.cB_TempManualAcquisition.Checked = true; - this.cB_TempManualAcquisition.CheckState = System.Windows.Forms.CheckState.Checked; - this.cB_TempManualAcquisition.Location = new System.Drawing.Point(42, 117); - this.cB_TempManualAcquisition.Margin = new System.Windows.Forms.Padding(2); - this.cB_TempManualAcquisition.Name = "cB_TempManualAcquisition"; - this.cB_TempManualAcquisition.Size = new System.Drawing.Size(178, 17); - this.cB_TempManualAcquisition.TabIndex = 17; - this.cB_TempManualAcquisition.Text = "Manual Temperature Acquisition"; - this.cB_TempManualAcquisition.UseVisualStyleBackColor = true; - // - // lThermo2 - // - this.lThermo2.AutoSize = true; - this.lThermo2.Location = new System.Drawing.Point(18, 69); - this.lThermo2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.lThermo2.Name = "lThermo2"; - this.lThermo2.Size = new System.Drawing.Size(52, 13); - this.lThermo2.TabIndex = 16; - this.lThermo2.Text = "Thermo2:"; - // - // lPasswordThermo1 - // - this.lPasswordThermo1.AutoSize = true; - this.lPasswordThermo1.Location = new System.Drawing.Point(18, 35); - this.lPasswordThermo1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.lPasswordThermo1.Name = "lPasswordThermo1"; - this.lPasswordThermo1.Size = new System.Drawing.Size(52, 13); - this.lPasswordThermo1.TabIndex = 15; - this.lPasswordThermo1.Text = "Thermo1:"; - // - // tB_PasswordThermo2 - // - this.tB_PasswordThermo2.Location = new System.Drawing.Point(90, 64); - this.tB_PasswordThermo2.Margin = new System.Windows.Forms.Padding(2); - this.tB_PasswordThermo2.Name = "tB_PasswordThermo2"; - this.tB_PasswordThermo2.Size = new System.Drawing.Size(121, 20); - this.tB_PasswordThermo2.TabIndex = 14; - // - // tB_PasswordThermo1 - // - this.tB_PasswordThermo1.Location = new System.Drawing.Point(90, 35); - this.tB_PasswordThermo1.Margin = new System.Windows.Forms.Padding(2); - this.tB_PasswordThermo1.Name = "tB_PasswordThermo1"; - this.tB_PasswordThermo1.Size = new System.Drawing.Size(121, 20); - this.tB_PasswordThermo1.TabIndex = 13; - // - // gB_Passwords - // - this.gB_Passwords.Controls.Add(this.tB_PasswordMeter5); - this.gB_Passwords.Controls.Add(this.tB_PasswordMeter10); - this.gB_Passwords.Controls.Add(this.tB_PasswordMeter9); - this.gB_Passwords.Controls.Add(this.tB_PasswordMeter8); - this.gB_Passwords.Controls.Add(this.tB_PasswordMeter7); - this.gB_Passwords.Controls.Add(this.tB_PasswordMeter6); - this.gB_Passwords.Controls.Add(this.tB_PasswordMeter4); - this.gB_Passwords.Controls.Add(this.tB_PasswordMeter3); - this.gB_Passwords.Controls.Add(this.tB_PasswordMeter2); - this.gB_Passwords.Controls.Add(this.tB_PasswordMeter1); - this.gB_Passwords.Controls.Add(this.l_PasswordMeter10); - this.gB_Passwords.Controls.Add(this.l_PasswordMeter9); - this.gB_Passwords.Controls.Add(this.l_PasswordMeter8); - this.gB_Passwords.Controls.Add(this.l_PasswordMeter7); - this.gB_Passwords.Controls.Add(this.l_PasswordMeter6); - this.gB_Passwords.Controls.Add(this.l_PasswordMeter5); - this.gB_Passwords.Controls.Add(this.l_PasswordMeter4); - this.gB_Passwords.Controls.Add(this.l_PasswordMeter3); - this.gB_Passwords.Controls.Add(this.l_PasswordMeter2); - this.gB_Passwords.Controls.Add(this.l_PasswordMeter1); - this.gB_Passwords.Location = new System.Drawing.Point(40, 352); - this.gB_Passwords.Margin = new System.Windows.Forms.Padding(2); - this.gB_Passwords.Name = "gB_Passwords"; - this.gB_Passwords.Padding = new System.Windows.Forms.Padding(2); - this.gB_Passwords.Size = new System.Drawing.Size(272, 288); - this.gB_Passwords.TabIndex = 30; - this.gB_Passwords.TabStop = false; - this.gB_Passwords.Text = "Passwords"; - // - // tB_PasswordMeter5 - // - this.tB_PasswordMeter5.Location = new System.Drawing.Point(106, 130); - this.tB_PasswordMeter5.Margin = new System.Windows.Forms.Padding(2); - this.tB_PasswordMeter5.Name = "tB_PasswordMeter5"; - this.tB_PasswordMeter5.Size = new System.Drawing.Size(130, 20); - this.tB_PasswordMeter5.TabIndex = 44; - // - // tB_PasswordMeter10 - // - this.tB_PasswordMeter10.Location = new System.Drawing.Point(106, 254); - this.tB_PasswordMeter10.Margin = new System.Windows.Forms.Padding(2); - this.tB_PasswordMeter10.Name = "tB_PasswordMeter10"; - this.tB_PasswordMeter10.Size = new System.Drawing.Size(130, 20); - this.tB_PasswordMeter10.TabIndex = 43; - // - // tB_PasswordMeter9 - // - this.tB_PasswordMeter9.Location = new System.Drawing.Point(106, 230); - this.tB_PasswordMeter9.Margin = new System.Windows.Forms.Padding(2); - this.tB_PasswordMeter9.Name = "tB_PasswordMeter9"; - this.tB_PasswordMeter9.Size = new System.Drawing.Size(130, 20); - this.tB_PasswordMeter9.TabIndex = 42; - // - // tB_PasswordMeter8 - // - this.tB_PasswordMeter8.Location = new System.Drawing.Point(106, 206); - this.tB_PasswordMeter8.Margin = new System.Windows.Forms.Padding(2); - this.tB_PasswordMeter8.Name = "tB_PasswordMeter8"; - this.tB_PasswordMeter8.Size = new System.Drawing.Size(130, 20); - this.tB_PasswordMeter8.TabIndex = 41; - // - // tB_PasswordMeter7 - // - this.tB_PasswordMeter7.Location = new System.Drawing.Point(106, 178); - this.tB_PasswordMeter7.Margin = new System.Windows.Forms.Padding(2); - this.tB_PasswordMeter7.Name = "tB_PasswordMeter7"; - this.tB_PasswordMeter7.Size = new System.Drawing.Size(130, 20); - this.tB_PasswordMeter7.TabIndex = 40; - // - // tB_PasswordMeter6 - // - this.tB_PasswordMeter6.Location = new System.Drawing.Point(106, 154); - this.tB_PasswordMeter6.Margin = new System.Windows.Forms.Padding(2); - this.tB_PasswordMeter6.Name = "tB_PasswordMeter6"; - this.tB_PasswordMeter6.Size = new System.Drawing.Size(130, 20); - this.tB_PasswordMeter6.TabIndex = 39; - // - // tB_PasswordMeter4 - // - this.tB_PasswordMeter4.Location = new System.Drawing.Point(106, 106); - this.tB_PasswordMeter4.Margin = new System.Windows.Forms.Padding(2); - this.tB_PasswordMeter4.Name = "tB_PasswordMeter4"; - this.tB_PasswordMeter4.Size = new System.Drawing.Size(130, 20); - this.tB_PasswordMeter4.TabIndex = 37; - // - // tB_PasswordMeter3 - // - this.tB_PasswordMeter3.Location = new System.Drawing.Point(106, 77); - this.tB_PasswordMeter3.Margin = new System.Windows.Forms.Padding(2); - this.tB_PasswordMeter3.Name = "tB_PasswordMeter3"; - this.tB_PasswordMeter3.Size = new System.Drawing.Size(130, 20); - this.tB_PasswordMeter3.TabIndex = 36; - // - // tB_PasswordMeter2 - // - this.tB_PasswordMeter2.Location = new System.Drawing.Point(106, 53); - this.tB_PasswordMeter2.Margin = new System.Windows.Forms.Padding(2); - this.tB_PasswordMeter2.Name = "tB_PasswordMeter2"; - this.tB_PasswordMeter2.Size = new System.Drawing.Size(130, 20); - this.tB_PasswordMeter2.TabIndex = 35; - // - // tB_PasswordMeter1 - // - this.tB_PasswordMeter1.Location = new System.Drawing.Point(106, 29); - this.tB_PasswordMeter1.Margin = new System.Windows.Forms.Padding(2); - this.tB_PasswordMeter1.Name = "tB_PasswordMeter1"; - this.tB_PasswordMeter1.Size = new System.Drawing.Size(130, 20); - this.tB_PasswordMeter1.TabIndex = 34; - // - // l_PasswordMeter10 - // - this.l_PasswordMeter10.AutoSize = true; - this.l_PasswordMeter10.Location = new System.Drawing.Point(28, 254); - this.l_PasswordMeter10.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_PasswordMeter10.Name = "l_PasswordMeter10"; - this.l_PasswordMeter10.Size = new System.Drawing.Size(60, 13); - this.l_PasswordMeter10.TabIndex = 33; - this.l_PasswordMeter10.Text = "METER10:"; - // - // l_PasswordMeter9 - // - this.l_PasswordMeter9.AutoSize = true; - this.l_PasswordMeter9.Location = new System.Drawing.Point(28, 230); - this.l_PasswordMeter9.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_PasswordMeter9.Name = "l_PasswordMeter9"; - this.l_PasswordMeter9.Size = new System.Drawing.Size(54, 13); - this.l_PasswordMeter9.TabIndex = 32; - this.l_PasswordMeter9.Text = "METER9:"; - // - // l_PasswordMeter8 - // - this.l_PasswordMeter8.AutoSize = true; - this.l_PasswordMeter8.Location = new System.Drawing.Point(28, 205); - this.l_PasswordMeter8.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_PasswordMeter8.Name = "l_PasswordMeter8"; - this.l_PasswordMeter8.Size = new System.Drawing.Size(54, 13); - this.l_PasswordMeter8.TabIndex = 31; - this.l_PasswordMeter8.Text = "METER8:"; - // - // l_PasswordMeter7 - // - this.l_PasswordMeter7.AutoSize = true; - this.l_PasswordMeter7.Location = new System.Drawing.Point(28, 180); - this.l_PasswordMeter7.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_PasswordMeter7.Name = "l_PasswordMeter7"; - this.l_PasswordMeter7.Size = new System.Drawing.Size(54, 13); - this.l_PasswordMeter7.TabIndex = 30; - this.l_PasswordMeter7.Text = "METER7:"; - // - // l_PasswordMeter6 - // - this.l_PasswordMeter6.AutoSize = true; - this.l_PasswordMeter6.Location = new System.Drawing.Point(28, 155); - this.l_PasswordMeter6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_PasswordMeter6.Name = "l_PasswordMeter6"; - this.l_PasswordMeter6.Size = new System.Drawing.Size(54, 13); - this.l_PasswordMeter6.TabIndex = 29; - this.l_PasswordMeter6.Text = "METER6:"; - // - // l_PasswordMeter5 - // - this.l_PasswordMeter5.AutoSize = true; - this.l_PasswordMeter5.Location = new System.Drawing.Point(28, 130); - this.l_PasswordMeter5.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_PasswordMeter5.Name = "l_PasswordMeter5"; - this.l_PasswordMeter5.Size = new System.Drawing.Size(54, 13); - this.l_PasswordMeter5.TabIndex = 28; - this.l_PasswordMeter5.Text = "METER5:"; - // - // l_PasswordMeter4 - // - this.l_PasswordMeter4.AutoSize = true; - this.l_PasswordMeter4.Location = new System.Drawing.Point(28, 106); - this.l_PasswordMeter4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_PasswordMeter4.Name = "l_PasswordMeter4"; - this.l_PasswordMeter4.Size = new System.Drawing.Size(54, 13); - this.l_PasswordMeter4.TabIndex = 27; - this.l_PasswordMeter4.Text = "METER4:"; - // - // l_PasswordMeter3 - // - this.l_PasswordMeter3.AutoSize = true; - this.l_PasswordMeter3.Location = new System.Drawing.Point(28, 81); - this.l_PasswordMeter3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_PasswordMeter3.Name = "l_PasswordMeter3"; - this.l_PasswordMeter3.Size = new System.Drawing.Size(54, 13); - this.l_PasswordMeter3.TabIndex = 26; - this.l_PasswordMeter3.Text = "METER3:"; - // - // l_PasswordMeter2 - // - this.l_PasswordMeter2.AutoSize = true; - this.l_PasswordMeter2.Location = new System.Drawing.Point(28, 56); - this.l_PasswordMeter2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_PasswordMeter2.Name = "l_PasswordMeter2"; - this.l_PasswordMeter2.Size = new System.Drawing.Size(54, 13); - this.l_PasswordMeter2.TabIndex = 25; - this.l_PasswordMeter2.Text = "METER2:"; - // - // l_PasswordMeter1 - // - this.l_PasswordMeter1.AutoSize = true; - this.l_PasswordMeter1.Location = new System.Drawing.Point(28, 31); - this.l_PasswordMeter1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_PasswordMeter1.Name = "l_PasswordMeter1"; - this.l_PasswordMeter1.Size = new System.Drawing.Size(54, 13); - this.l_PasswordMeter1.TabIndex = 24; - this.l_PasswordMeter1.Text = "METER1:"; - // - // gB_Settings_Preparation - // - this.gB_Settings_Preparation.Controls.Add(this.nUD_Settings_Samplerate); - this.gB_Settings_Preparation.Controls.Add(this.label1); - this.gB_Settings_Preparation.Controls.Add(this.nUD_Settings_Preparation_StabiTime); - this.gB_Settings_Preparation.Controls.Add(this.l_Settings_Preparation_StabiTime); - this.gB_Settings_Preparation.Location = new System.Drawing.Point(336, 270); - this.gB_Settings_Preparation.Margin = new System.Windows.Forms.Padding(2); - this.gB_Settings_Preparation.Name = "gB_Settings_Preparation"; - this.gB_Settings_Preparation.Padding = new System.Windows.Forms.Padding(2); - this.gB_Settings_Preparation.Size = new System.Drawing.Size(272, 87); - this.gB_Settings_Preparation.TabIndex = 29; - this.gB_Settings_Preparation.TabStop = false; - this.gB_Settings_Preparation.Text = "Preparation"; - // - // nUD_Settings_Samplerate - // - this.nUD_Settings_Samplerate.Location = new System.Drawing.Point(168, 46); - this.nUD_Settings_Samplerate.Margin = new System.Windows.Forms.Padding(2); - this.nUD_Settings_Samplerate.Maximum = new decimal(new int[] { - 25, - 0, - 0, - 0}); - this.nUD_Settings_Samplerate.Minimum = new decimal(new int[] { - 10, - 0, - 0, - 0}); - this.nUD_Settings_Samplerate.Name = "nUD_Settings_Samplerate"; - this.nUD_Settings_Samplerate.Size = new System.Drawing.Size(62, 20); - this.nUD_Settings_Samplerate.TabIndex = 19; - this.nUD_Settings_Samplerate.Value = new decimal(new int[] { - 10, - 0, - 0, - 0}); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(24, 48); - this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(71, 13); - this.label1.TabIndex = 20; - this.label1.Text = "Sample Rate:"; - // - // nUD_Settings_Preparation_StabiTime - // - this.nUD_Settings_Preparation_StabiTime.Location = new System.Drawing.Point(168, 22); - this.nUD_Settings_Preparation_StabiTime.Margin = new System.Windows.Forms.Padding(2); - this.nUD_Settings_Preparation_StabiTime.Maximum = new decimal(new int[] { - 2000, - 0, - 0, - 0}); - this.nUD_Settings_Preparation_StabiTime.Minimum = new decimal(new int[] { - 5, - 0, - 0, - 0}); - this.nUD_Settings_Preparation_StabiTime.Name = "nUD_Settings_Preparation_StabiTime"; - this.nUD_Settings_Preparation_StabiTime.Size = new System.Drawing.Size(62, 20); - this.nUD_Settings_Preparation_StabiTime.TabIndex = 18; - this.nUD_Settings_Preparation_StabiTime.Value = new decimal(new int[] { - 6, - 0, - 0, - 0}); - // - // l_Settings_Preparation_StabiTime - // - this.l_Settings_Preparation_StabiTime.AutoSize = true; - this.l_Settings_Preparation_StabiTime.Location = new System.Drawing.Point(24, 24); - this.l_Settings_Preparation_StabiTime.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_Settings_Preparation_StabiTime.Name = "l_Settings_Preparation_StabiTime"; - this.l_Settings_Preparation_StabiTime.Size = new System.Drawing.Size(106, 13); - this.l_Settings_Preparation_StabiTime.TabIndex = 18; - this.l_Settings_Preparation_StabiTime.Text = "Stabilization Time (s):"; - // - // gB_Settings_ZeroflowOffsetTest - // - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.cB_OffsetTestLogFiles); - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.nUD_Settings_ZeroflowOffsetTestActivityCheckInterval); - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.l_Settings_ZeroflowOffsetTestActivityCheckInterval); - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.l_Settings_ZeroflowOffsetTestNumberOfLines); - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.nUD_Settings_ZeroflowOffsetTestNumberOfLines); - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.l_Settings_ZeroFlowTestSettlingTime); - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.nUD_Settings_ZeroflowOffsetTestSettlingTime); - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.l_Settings_ZeroFlowTestOffsetLimit); - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.nUD_Settings_ZeroflowOffsetTestOffsetLimit); - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.l_Settings_ZeroflowOffsetTestLowerLimit); - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.l_Settings_ZeroflowOffsetTestUpperLimit); - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.nUD_Settings_ZeroflowOffsetTestLowerLimit); - this.gB_Settings_ZeroflowOffsetTest.Controls.Add(this.nUD_Settings_ZeroflowOffsetTestUpperLimit); - this.gB_Settings_ZeroflowOffsetTest.Location = new System.Drawing.Point(332, 28); - this.gB_Settings_ZeroflowOffsetTest.Margin = new System.Windows.Forms.Padding(2); - this.gB_Settings_ZeroflowOffsetTest.Name = "gB_Settings_ZeroflowOffsetTest"; - this.gB_Settings_ZeroflowOffsetTest.Padding = new System.Windows.Forms.Padding(2); - this.gB_Settings_ZeroflowOffsetTest.Size = new System.Drawing.Size(272, 229); - this.gB_Settings_ZeroflowOffsetTest.TabIndex = 28; - this.gB_Settings_ZeroflowOffsetTest.TabStop = false; - this.gB_Settings_ZeroflowOffsetTest.Text = "Zeroflow Offset Test"; - // - // cB_OffsetTestLogFiles - // - this.cB_OffsetTestLogFiles.AutoSize = true; - this.cB_OffsetTestLogFiles.Checked = true; - this.cB_OffsetTestLogFiles.CheckState = System.Windows.Forms.CheckState.Checked; - this.cB_OffsetTestLogFiles.Location = new System.Drawing.Point(58, 31); - this.cB_OffsetTestLogFiles.Margin = new System.Windows.Forms.Padding(2); - this.cB_OffsetTestLogFiles.Name = "cB_OffsetTestLogFiles"; - this.cB_OffsetTestLogFiles.Size = new System.Drawing.Size(115, 17); - this.cB_OffsetTestLogFiles.TabIndex = 18; - this.cB_OffsetTestLogFiles.Text = "Generate Log Files"; - this.cB_OffsetTestLogFiles.UseVisualStyleBackColor = true; - // - // nUD_Settings_ZeroflowOffsetTestActivityCheckInterval - // - this.nUD_Settings_ZeroflowOffsetTestActivityCheckInterval.Location = new System.Drawing.Point(168, 192); - this.nUD_Settings_ZeroflowOffsetTestActivityCheckInterval.Margin = new System.Windows.Forms.Padding(2); - this.nUD_Settings_ZeroflowOffsetTestActivityCheckInterval.Maximum = new decimal(new int[] { - 15, - 0, - 0, - 0}); - this.nUD_Settings_ZeroflowOffsetTestActivityCheckInterval.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nUD_Settings_ZeroflowOffsetTestActivityCheckInterval.Name = "nUD_Settings_ZeroflowOffsetTestActivityCheckInterval"; - this.nUD_Settings_ZeroflowOffsetTestActivityCheckInterval.Size = new System.Drawing.Size(62, 20); - this.nUD_Settings_ZeroflowOffsetTestActivityCheckInterval.TabIndex = 19; - this.nUD_Settings_ZeroflowOffsetTestActivityCheckInterval.Value = new decimal(new int[] { - 2, - 0, - 0, - 0}); - // - // l_Settings_ZeroflowOffsetTestActivityCheckInterval - // - this.l_Settings_ZeroflowOffsetTestActivityCheckInterval.AutoSize = true; - this.l_Settings_ZeroflowOffsetTestActivityCheckInterval.Location = new System.Drawing.Point(25, 194); - this.l_Settings_ZeroflowOffsetTestActivityCheckInterval.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_Settings_ZeroflowOffsetTestActivityCheckInterval.Name = "l_Settings_ZeroflowOffsetTestActivityCheckInterval"; - this.l_Settings_ZeroflowOffsetTestActivityCheckInterval.Size = new System.Drawing.Size(130, 13); - this.l_Settings_ZeroflowOffsetTestActivityCheckInterval.TabIndex = 18; - this.l_Settings_ZeroflowOffsetTestActivityCheckInterval.Text = "Activity Check Interval (s):"; - // - // l_Settings_ZeroflowOffsetTestNumberOfLines - // - this.l_Settings_ZeroflowOffsetTestNumberOfLines.AutoSize = true; - this.l_Settings_ZeroflowOffsetTestNumberOfLines.Location = new System.Drawing.Point(25, 170); - this.l_Settings_ZeroflowOffsetTestNumberOfLines.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_Settings_ZeroflowOffsetTestNumberOfLines.Name = "l_Settings_ZeroflowOffsetTestNumberOfLines"; - this.l_Settings_ZeroflowOffsetTestNumberOfLines.Size = new System.Drawing.Size(83, 13); - this.l_Settings_ZeroflowOffsetTestNumberOfLines.TabIndex = 17; - this.l_Settings_ZeroflowOffsetTestNumberOfLines.Text = "Number of lines:"; - // - // nUD_Settings_ZeroflowOffsetTestNumberOfLines - // - this.nUD_Settings_ZeroflowOffsetTestNumberOfLines.Location = new System.Drawing.Point(168, 168); - this.nUD_Settings_ZeroflowOffsetTestNumberOfLines.Margin = new System.Windows.Forms.Padding(2); - this.nUD_Settings_ZeroflowOffsetTestNumberOfLines.Maximum = new decimal(new int[] { - 50000, - 0, - 0, - 0}); - this.nUD_Settings_ZeroflowOffsetTestNumberOfLines.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nUD_Settings_ZeroflowOffsetTestNumberOfLines.Name = "nUD_Settings_ZeroflowOffsetTestNumberOfLines"; - this.nUD_Settings_ZeroflowOffsetTestNumberOfLines.Size = new System.Drawing.Size(62, 20); - this.nUD_Settings_ZeroflowOffsetTestNumberOfLines.TabIndex = 16; - this.nUD_Settings_ZeroflowOffsetTestNumberOfLines.Value = new decimal(new int[] { - 9000, - 0, - 0, - 0}); - // - // l_Settings_ZeroFlowTestSettlingTime - // - this.l_Settings_ZeroFlowTestSettlingTime.AutoSize = true; - this.l_Settings_ZeroFlowTestSettlingTime.Location = new System.Drawing.Point(25, 144); - this.l_Settings_ZeroFlowTestSettlingTime.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_Settings_ZeroFlowTestSettlingTime.Name = "l_Settings_ZeroFlowTestSettlingTime"; - this.l_Settings_ZeroFlowTestSettlingTime.Size = new System.Drawing.Size(81, 13); - this.l_Settings_ZeroFlowTestSettlingTime.TabIndex = 15; - this.l_Settings_ZeroFlowTestSettlingTime.Text = "Settling time (s):"; - // - // nUD_Settings_ZeroflowOffsetTestSettlingTime - // - this.nUD_Settings_ZeroflowOffsetTestSettlingTime.Location = new System.Drawing.Point(168, 142); - this.nUD_Settings_ZeroflowOffsetTestSettlingTime.Margin = new System.Windows.Forms.Padding(2); - this.nUD_Settings_ZeroflowOffsetTestSettlingTime.Maximum = new decimal(new int[] { - 2000, - 0, - 0, - 0}); - this.nUD_Settings_ZeroflowOffsetTestSettlingTime.Name = "nUD_Settings_ZeroflowOffsetTestSettlingTime"; - this.nUD_Settings_ZeroflowOffsetTestSettlingTime.Size = new System.Drawing.Size(62, 20); - this.nUD_Settings_ZeroflowOffsetTestSettlingTime.TabIndex = 14; - this.nUD_Settings_ZeroflowOffsetTestSettlingTime.Value = new decimal(new int[] { - 60, - 0, - 0, - 0}); - // - // l_Settings_ZeroFlowTestOffsetLimit - // - this.l_Settings_ZeroFlowTestOffsetLimit.AutoSize = true; - this.l_Settings_ZeroFlowTestOffsetLimit.Location = new System.Drawing.Point(25, 119); - this.l_Settings_ZeroFlowTestOffsetLimit.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_Settings_ZeroFlowTestOffsetLimit.Name = "l_Settings_ZeroFlowTestOffsetLimit"; - this.l_Settings_ZeroFlowTestOffsetLimit.Size = new System.Drawing.Size(82, 13); - this.l_Settings_ZeroFlowTestOffsetLimit.TabIndex = 13; - this.l_Settings_ZeroFlowTestOffsetLimit.Text = "Offset Limit (ps):"; - // - // nUD_Settings_ZeroflowOffsetTestOffsetLimit - // - this.nUD_Settings_ZeroflowOffsetTestOffsetLimit.Location = new System.Drawing.Point(168, 117); - this.nUD_Settings_ZeroflowOffsetTestOffsetLimit.Margin = new System.Windows.Forms.Padding(2); - this.nUD_Settings_ZeroflowOffsetTestOffsetLimit.Maximum = new decimal(new int[] { - 600, - 0, - 0, - 0}); - this.nUD_Settings_ZeroflowOffsetTestOffsetLimit.Minimum = new decimal(new int[] { - 50, - 0, - 0, - 0}); - this.nUD_Settings_ZeroflowOffsetTestOffsetLimit.Name = "nUD_Settings_ZeroflowOffsetTestOffsetLimit"; - this.nUD_Settings_ZeroflowOffsetTestOffsetLimit.Size = new System.Drawing.Size(62, 20); - this.nUD_Settings_ZeroflowOffsetTestOffsetLimit.TabIndex = 12; - this.nUD_Settings_ZeroflowOffsetTestOffsetLimit.Value = new decimal(new int[] { - 300, - 0, - 0, - 0}); - // - // l_Settings_ZeroflowOffsetTestLowerLimit - // - this.l_Settings_ZeroflowOffsetTestLowerLimit.AutoSize = true; - this.l_Settings_ZeroflowOffsetTestLowerLimit.Location = new System.Drawing.Point(24, 95); - this.l_Settings_ZeroflowOffsetTestLowerLimit.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_Settings_ZeroflowOffsetTestLowerLimit.Name = "l_Settings_ZeroflowOffsetTestLowerLimit"; - this.l_Settings_ZeroflowOffsetTestLowerLimit.Size = new System.Drawing.Size(126, 13); - this.l_Settings_ZeroflowOffsetTestLowerLimit.TabIndex = 3; - this.l_Settings_ZeroflowOffsetTestLowerLimit.Text = "Lower Voltage Limit (mV):"; - // - // l_Settings_ZeroflowOffsetTestUpperLimit - // - this.l_Settings_ZeroflowOffsetTestUpperLimit.AutoSize = true; - this.l_Settings_ZeroflowOffsetTestUpperLimit.Location = new System.Drawing.Point(24, 67); - this.l_Settings_ZeroflowOffsetTestUpperLimit.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_Settings_ZeroflowOffsetTestUpperLimit.Name = "l_Settings_ZeroflowOffsetTestUpperLimit"; - this.l_Settings_ZeroflowOffsetTestUpperLimit.Size = new System.Drawing.Size(126, 13); - this.l_Settings_ZeroflowOffsetTestUpperLimit.TabIndex = 2; - this.l_Settings_ZeroflowOffsetTestUpperLimit.Text = "Upper Voltage Limit (mV):"; - // - // nUD_Settings_ZeroflowOffsetTestLowerLimit - // - this.nUD_Settings_ZeroflowOffsetTestLowerLimit.Location = new System.Drawing.Point(168, 91); - this.nUD_Settings_ZeroflowOffsetTestLowerLimit.Margin = new System.Windows.Forms.Padding(2); - this.nUD_Settings_ZeroflowOffsetTestLowerLimit.Maximum = new decimal(new int[] { - 600, - 0, - 0, - 0}); - this.nUD_Settings_ZeroflowOffsetTestLowerLimit.Name = "nUD_Settings_ZeroflowOffsetTestLowerLimit"; - this.nUD_Settings_ZeroflowOffsetTestLowerLimit.Size = new System.Drawing.Size(62, 20); - this.nUD_Settings_ZeroflowOffsetTestLowerLimit.TabIndex = 1; - this.nUD_Settings_ZeroflowOffsetTestLowerLimit.Value = new decimal(new int[] { - 200, - 0, - 0, - 0}); - // - // nUD_Settings_ZeroflowOffsetTestUpperLimit - // - this.nUD_Settings_ZeroflowOffsetTestUpperLimit.Location = new System.Drawing.Point(168, 67); - this.nUD_Settings_ZeroflowOffsetTestUpperLimit.Margin = new System.Windows.Forms.Padding(2); - this.nUD_Settings_ZeroflowOffsetTestUpperLimit.Maximum = new decimal(new int[] { - 3000, - 0, - 0, - 0}); - this.nUD_Settings_ZeroflowOffsetTestUpperLimit.Name = "nUD_Settings_ZeroflowOffsetTestUpperLimit"; - this.nUD_Settings_ZeroflowOffsetTestUpperLimit.Size = new System.Drawing.Size(62, 20); - this.nUD_Settings_ZeroflowOffsetTestUpperLimit.TabIndex = 0; - this.nUD_Settings_ZeroflowOffsetTestUpperLimit.Value = new decimal(new int[] { - 650, - 0, - 0, - 0}); - // - // gB_Settings_AmplitudeTest - // - this.gB_Settings_AmplitudeTest.Controls.Add(this.cB_AmpLogFiles); - this.gB_Settings_AmplitudeTest.Controls.Add(this.nUD_Settings_AmplitudeActivityCheckInterval); - this.gB_Settings_AmplitudeTest.Controls.Add(this.l_Settings_AmplitudeActivityCheckInterval); - this.gB_Settings_AmplitudeTest.Controls.Add(this.cB_MeanAmplitudeFiles); - this.gB_Settings_AmplitudeTest.Controls.Add(this.nUD_PercentageStop); - this.gB_Settings_AmplitudeTest.Controls.Add(this.l_PercentageStop); - this.gB_Settings_AmplitudeTest.Controls.Add(this.l_PercentageStart); - this.gB_Settings_AmplitudeTest.Controls.Add(this.nUD_PercentageStart); - this.gB_Settings_AmplitudeTest.Controls.Add(this.l__Settings_AmplitudeTestMinDistance); - this.gB_Settings_AmplitudeTest.Controls.Add(this.nUD_Settings_AmplitudeTestMinDistance); - this.gB_Settings_AmplitudeTest.Controls.Add(this.l_Settings_AmplitudeTestLowerLimit); - this.gB_Settings_AmplitudeTest.Controls.Add(this.l_Settings_AmplitudeTestUpperLimit); - this.gB_Settings_AmplitudeTest.Controls.Add(this.nUD_Settings_AmplitudeTestLowerLimit); - this.gB_Settings_AmplitudeTest.Controls.Add(this.nUD_Settings_AmplitudeTestUpperLimit); - this.gB_Settings_AmplitudeTest.Location = new System.Drawing.Point(40, 28); - this.gB_Settings_AmplitudeTest.Margin = new System.Windows.Forms.Padding(2); - this.gB_Settings_AmplitudeTest.Name = "gB_Settings_AmplitudeTest"; - this.gB_Settings_AmplitudeTest.Padding = new System.Windows.Forms.Padding(2); - this.gB_Settings_AmplitudeTest.Size = new System.Drawing.Size(272, 320); - this.gB_Settings_AmplitudeTest.TabIndex = 27; - this.gB_Settings_AmplitudeTest.TabStop = false; - this.gB_Settings_AmplitudeTest.Text = "Amplitude Test"; - // - // cB_AmpLogFiles - // - this.cB_AmpLogFiles.AutoSize = true; - this.cB_AmpLogFiles.Checked = true; - this.cB_AmpLogFiles.CheckState = System.Windows.Forms.CheckState.Checked; - this.cB_AmpLogFiles.Location = new System.Drawing.Point(42, 38); - this.cB_AmpLogFiles.Margin = new System.Windows.Forms.Padding(2); - this.cB_AmpLogFiles.Name = "cB_AmpLogFiles"; - this.cB_AmpLogFiles.Size = new System.Drawing.Size(115, 17); - this.cB_AmpLogFiles.TabIndex = 20; - this.cB_AmpLogFiles.Text = "Generate Log Files"; - this.cB_AmpLogFiles.UseVisualStyleBackColor = true; - // - // nUD_Settings_AmplitudeActivityCheckInterval - // - this.nUD_Settings_AmplitudeActivityCheckInterval.Location = new System.Drawing.Point(168, 283); - this.nUD_Settings_AmplitudeActivityCheckInterval.Margin = new System.Windows.Forms.Padding(2); - this.nUD_Settings_AmplitudeActivityCheckInterval.Maximum = new decimal(new int[] { - 15, - 0, - 0, - 0}); - this.nUD_Settings_AmplitudeActivityCheckInterval.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nUD_Settings_AmplitudeActivityCheckInterval.Name = "nUD_Settings_AmplitudeActivityCheckInterval"; - this.nUD_Settings_AmplitudeActivityCheckInterval.Size = new System.Drawing.Size(62, 20); - this.nUD_Settings_AmplitudeActivityCheckInterval.TabIndex = 20; - this.nUD_Settings_AmplitudeActivityCheckInterval.Value = new decimal(new int[] { - 2, - 0, - 0, - 0}); - // - // l_Settings_AmplitudeActivityCheckInterval - // - this.l_Settings_AmplitudeActivityCheckInterval.AutoSize = true; - this.l_Settings_AmplitudeActivityCheckInterval.Location = new System.Drawing.Point(19, 283); - this.l_Settings_AmplitudeActivityCheckInterval.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_Settings_AmplitudeActivityCheckInterval.Name = "l_Settings_AmplitudeActivityCheckInterval"; - this.l_Settings_AmplitudeActivityCheckInterval.Size = new System.Drawing.Size(130, 13); - this.l_Settings_AmplitudeActivityCheckInterval.TabIndex = 20; - this.l_Settings_AmplitudeActivityCheckInterval.Text = "Activity Check Interval (s):"; - // - // cB_MeanAmplitudeFiles - // - this.cB_MeanAmplitudeFiles.AutoSize = true; - this.cB_MeanAmplitudeFiles.Checked = true; - this.cB_MeanAmplitudeFiles.CheckState = System.Windows.Forms.CheckState.Checked; - this.cB_MeanAmplitudeFiles.Location = new System.Drawing.Point(43, 67); - this.cB_MeanAmplitudeFiles.Margin = new System.Windows.Forms.Padding(2); - this.cB_MeanAmplitudeFiles.Name = "cB_MeanAmplitudeFiles"; - this.cB_MeanAmplitudeFiles.Size = new System.Drawing.Size(154, 17); - this.cB_MeanAmplitudeFiles.TabIndex = 10; - this.cB_MeanAmplitudeFiles.Text = "Generate Mean Value Files"; - this.cB_MeanAmplitudeFiles.UseVisualStyleBackColor = true; - // - // nUD_PercentageStop - // - this.nUD_PercentageStop.Location = new System.Drawing.Point(168, 250); - this.nUD_PercentageStop.Margin = new System.Windows.Forms.Padding(2); - this.nUD_PercentageStop.Maximum = new decimal(new int[] { - 50, - 0, - 0, - 0}); - this.nUD_PercentageStop.Minimum = new decimal(new int[] { - 30, - 0, - 0, - 0}); - this.nUD_PercentageStop.Name = "nUD_PercentageStop"; - this.nUD_PercentageStop.Size = new System.Drawing.Size(62, 20); - this.nUD_PercentageStop.TabIndex = 9; - this.nUD_PercentageStop.Value = new decimal(new int[] { - 35, - 0, - 0, - 0}); - // - // l_PercentageStop - // - this.l_PercentageStop.AutoSize = true; - this.l_PercentageStop.Location = new System.Drawing.Point(19, 250); - this.l_PercentageStop.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_PercentageStop.Name = "l_PercentageStop"; - this.l_PercentageStop.Size = new System.Drawing.Size(120, 13); - this.l_PercentageStop.TabIndex = 8; - this.l_PercentageStop.Text = "Percentage Stop Value:"; - // - // l_PercentageStart - // - this.l_PercentageStart.AutoSize = true; - this.l_PercentageStart.Location = new System.Drawing.Point(19, 216); - this.l_PercentageStart.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_PercentageStart.Name = "l_PercentageStart"; - this.l_PercentageStart.Size = new System.Drawing.Size(120, 13); - this.l_PercentageStart.TabIndex = 7; - this.l_PercentageStart.Text = "Percentage Start Value:"; - // - // nUD_PercentageStart - // - this.nUD_PercentageStart.Location = new System.Drawing.Point(168, 216); - this.nUD_PercentageStart.Margin = new System.Windows.Forms.Padding(2); - this.nUD_PercentageStart.Maximum = new decimal(new int[] { - 20, - 0, - 0, - 0}); - this.nUD_PercentageStart.Name = "nUD_PercentageStart"; - this.nUD_PercentageStart.Size = new System.Drawing.Size(62, 20); - this.nUD_PercentageStart.TabIndex = 6; - this.nUD_PercentageStart.Value = new decimal(new int[] { - 5, - 0, - 0, - 0}); - // - // l__Settings_AmplitudeTestMinDistance - // - this.l__Settings_AmplitudeTestMinDistance.AutoSize = true; - this.l__Settings_AmplitudeTestMinDistance.Location = new System.Drawing.Point(19, 182); - this.l__Settings_AmplitudeTestMinDistance.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l__Settings_AmplitudeTestMinDistance.Name = "l__Settings_AmplitudeTestMinDistance"; - this.l__Settings_AmplitudeTestMinDistance.Size = new System.Drawing.Size(74, 13); - this.l__Settings_AmplitudeTestMinDistance.TabIndex = 5; - this.l__Settings_AmplitudeTestMinDistance.Text = "min. Distance:"; - // - // nUD_Settings_AmplitudeTestMinDistance - // - this.nUD_Settings_AmplitudeTestMinDistance.Location = new System.Drawing.Point(168, 182); - this.nUD_Settings_AmplitudeTestMinDistance.Margin = new System.Windows.Forms.Padding(2); - this.nUD_Settings_AmplitudeTestMinDistance.Maximum = new decimal(new int[] { - 10, - 0, - 0, - 0}); - this.nUD_Settings_AmplitudeTestMinDistance.Name = "nUD_Settings_AmplitudeTestMinDistance"; - this.nUD_Settings_AmplitudeTestMinDistance.Size = new System.Drawing.Size(62, 20); - this.nUD_Settings_AmplitudeTestMinDistance.TabIndex = 4; - this.nUD_Settings_AmplitudeTestMinDistance.Value = new decimal(new int[] { - 7, - 0, - 0, - 0}); - // - // l_Settings_AmplitudeTestLowerLimit - // - this.l_Settings_AmplitudeTestLowerLimit.AutoSize = true; - this.l_Settings_AmplitudeTestLowerLimit.Location = new System.Drawing.Point(19, 149); - this.l_Settings_AmplitudeTestLowerLimit.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_Settings_AmplitudeTestLowerLimit.Name = "l_Settings_AmplitudeTestLowerLimit"; - this.l_Settings_AmplitudeTestLowerLimit.Size = new System.Drawing.Size(128, 13); - this.l_Settings_AmplitudeTestLowerLimit.TabIndex = 3; - this.l_Settings_AmplitudeTestLowerLimit.Text = "Optimal Point Lower Limit:"; - // - // l_Settings_AmplitudeTestUpperLimit - // - this.l_Settings_AmplitudeTestUpperLimit.AutoSize = true; - this.l_Settings_AmplitudeTestUpperLimit.Location = new System.Drawing.Point(19, 115); - this.l_Settings_AmplitudeTestUpperLimit.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_Settings_AmplitudeTestUpperLimit.Name = "l_Settings_AmplitudeTestUpperLimit"; - this.l_Settings_AmplitudeTestUpperLimit.Size = new System.Drawing.Size(128, 13); - this.l_Settings_AmplitudeTestUpperLimit.TabIndex = 2; - this.l_Settings_AmplitudeTestUpperLimit.Text = "Optimal Point Upper Limit:"; - // - // nUD_Settings_AmplitudeTestLowerLimit - // - this.nUD_Settings_AmplitudeTestLowerLimit.Location = new System.Drawing.Point(168, 149); - this.nUD_Settings_AmplitudeTestLowerLimit.Margin = new System.Windows.Forms.Padding(2); - this.nUD_Settings_AmplitudeTestLowerLimit.Maximum = new decimal(new int[] { - 30, - 0, - 0, - 0}); - this.nUD_Settings_AmplitudeTestLowerLimit.Name = "nUD_Settings_AmplitudeTestLowerLimit"; - this.nUD_Settings_AmplitudeTestLowerLimit.Size = new System.Drawing.Size(62, 20); - this.nUD_Settings_AmplitudeTestLowerLimit.TabIndex = 1; - this.nUD_Settings_AmplitudeTestLowerLimit.Value = new decimal(new int[] { - 12, - 0, - 0, - 0}); - // - // nUD_Settings_AmplitudeTestUpperLimit - // - this.nUD_Settings_AmplitudeTestUpperLimit.Location = new System.Drawing.Point(168, 115); - this.nUD_Settings_AmplitudeTestUpperLimit.Margin = new System.Windows.Forms.Padding(2); - this.nUD_Settings_AmplitudeTestUpperLimit.Maximum = new decimal(new int[] { - 40, - 0, - 0, - 0}); - this.nUD_Settings_AmplitudeTestUpperLimit.Name = "nUD_Settings_AmplitudeTestUpperLimit"; - this.nUD_Settings_AmplitudeTestUpperLimit.Size = new System.Drawing.Size(62, 20); - this.nUD_Settings_AmplitudeTestUpperLimit.TabIndex = 0; - this.nUD_Settings_AmplitudeTestUpperLimit.Value = new decimal(new int[] { - 32, - 0, - 0, - 0}); - // - // pB_Logo3 - // - this.pB_Logo3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.pB_Logo3.Image = ((System.Drawing.Image)(resources.GetObject("pB_Logo3.Image"))); - this.pB_Logo3.InitialImage = null; - this.pB_Logo3.Location = new System.Drawing.Point(887, 21); - this.pB_Logo3.Margin = new System.Windows.Forms.Padding(2); - this.pB_Logo3.Name = "pB_Logo3"; - this.pB_Logo3.Size = new System.Drawing.Size(91, 38); - this.pB_Logo3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pB_Logo3.TabIndex = 31; - this.pB_Logo3.TabStop = false; - // - // pB_AvailableImages - // - this.pB_AvailableImages.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.pB_AvailableImages.BackColor = System.Drawing.Color.Transparent; - this.pB_AvailableImages.Image = ((System.Drawing.Image)(resources.GetObject("pB_AvailableImages.Image"))); - this.pB_AvailableImages.Location = new System.Drawing.Point(910, 82); - this.pB_AvailableImages.Margin = new System.Windows.Forms.Padding(2); - this.pB_AvailableImages.Name = "pB_AvailableImages"; - this.pB_AvailableImages.Size = new System.Drawing.Size(53, 40); - this.pB_AvailableImages.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pB_AvailableImages.TabIndex = 26; - this.pB_AvailableImages.TabStop = false; - // - // tab_About - // - this.tab_About.BackColor = System.Drawing.Color.Honeydew; - this.tab_About.Controls.Add(this.pictureBox3); - this.tab_About.Controls.Add(this.pictureBox2); - this.tab_About.Controls.Add(this.l_BasedOn); - this.tab_About.Controls.Add(this.l_Author); - this.tab_About.Controls.Add(this.pB_DocumentVersion); - this.tab_About.Controls.Add(this.pB_Logo2); - this.tab_About.Controls.Add(this.l_Version); - this.tab_About.Controls.Add(this.l_About_Info); - this.tab_About.Controls.Add(this.l_About_Author); - this.tab_About.Controls.Add(this.l_About_Version); - this.tab_About.Location = new System.Drawing.Point(4, 22); - this.tab_About.Margin = new System.Windows.Forms.Padding(2); - this.tab_About.Name = "tab_About"; - this.tab_About.Padding = new System.Windows.Forms.Padding(2); - this.tab_About.Size = new System.Drawing.Size(1028, 652); - this.tab_About.TabIndex = 7; - this.tab_About.Text = "About"; - // - // pictureBox3 - // - this.pictureBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.pictureBox3.BackColor = System.Drawing.Color.Transparent; - this.pictureBox3.ErrorImage = ((System.Drawing.Image)(resources.GetObject("pictureBox3.ErrorImage"))); - this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image"))); - this.pictureBox3.InitialImage = ((System.Drawing.Image)(resources.GetObject("pictureBox3.InitialImage"))); - this.pictureBox3.Location = new System.Drawing.Point(907, 83); - this.pictureBox3.Margin = new System.Windows.Forms.Padding(2); - this.pictureBox3.Name = "pictureBox3"; - this.pictureBox3.Size = new System.Drawing.Size(53, 40); - this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pictureBox3.TabIndex = 55; - this.pictureBox3.TabStop = false; - // - // pictureBox2 - // - this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image"))); - this.pictureBox2.Location = new System.Drawing.Point(564, 222); - this.pictureBox2.Margin = new System.Windows.Forms.Padding(2); - this.pictureBox2.Name = "pictureBox2"; - this.pictureBox2.Size = new System.Drawing.Size(340, 362); - this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pictureBox2.TabIndex = 54; - this.pictureBox2.TabStop = false; - // - // l_BasedOn - // - this.l_BasedOn.AutoSize = true; - this.l_BasedOn.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_BasedOn.Location = new System.Drawing.Point(150, 192); - this.l_BasedOn.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_BasedOn.Name = "l_BasedOn"; - this.l_BasedOn.Size = new System.Drawing.Size(81, 20); - this.l_BasedOn.TabIndex = 9; - this.l_BasedOn.Text = "Based on:"; - // - // l_Author - // - this.l_Author.AutoSize = true; - this.l_Author.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_Author.Location = new System.Drawing.Point(231, 133); - this.l_Author.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_Author.Name = "l_Author"; - this.l_Author.Size = new System.Drawing.Size(0, 20); - this.l_Author.TabIndex = 7; - // - // pB_DocumentVersion - // - this.pB_DocumentVersion.Image = ((System.Drawing.Image)(resources.GetObject("pB_DocumentVersion.Image"))); - this.pB_DocumentVersion.Location = new System.Drawing.Point(84, 222); - this.pB_DocumentVersion.Margin = new System.Windows.Forms.Padding(2); - this.pB_DocumentVersion.Name = "pB_DocumentVersion"; - this.pB_DocumentVersion.Size = new System.Drawing.Size(449, 277); - this.pB_DocumentVersion.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pB_DocumentVersion.TabIndex = 6; - this.pB_DocumentVersion.TabStop = false; - // - // pB_Logo2 - // - this.pB_Logo2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.pB_Logo2.Image = ((System.Drawing.Image)(resources.GetObject("pB_Logo2.Image"))); - this.pB_Logo2.InitialImage = null; - this.pB_Logo2.Location = new System.Drawing.Point(887, 21); - this.pB_Logo2.Margin = new System.Windows.Forms.Padding(2); - this.pB_Logo2.Name = "pB_Logo2"; - this.pB_Logo2.Size = new System.Drawing.Size(91, 38); - this.pB_Logo2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pB_Logo2.TabIndex = 5; - this.pB_Logo2.TabStop = false; - // - // l_Version - // - this.l_Version.AutoSize = true; - this.l_Version.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_Version.Location = new System.Drawing.Point(168, 108); - this.l_Version.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_Version.Name = "l_Version"; - this.l_Version.Size = new System.Drawing.Size(188, 20); - this.l_Version.TabIndex = 4; - this.l_Version.Text = "Version 0.22/ 2019-02-08"; - // - // l_About_Info - // - this.l_About_Info.AutoSize = true; - this.l_About_Info.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_About_Info.Location = new System.Drawing.Point(150, 516); - this.l_About_Info.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_About_Info.Name = "l_About_Info"; - this.l_About_Info.Size = new System.Drawing.Size(295, 20); - this.l_About_Info.TabIndex = 3; - this.l_About_Info.Text = "Supports GENESIS protocol version \"h\""; - // - // l_About_Author - // - this.l_About_Author.AutoSize = true; - this.l_About_Author.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_About_Author.Location = new System.Drawing.Point(370, 246); - this.l_About_Author.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_About_Author.Name = "l_About_Author"; - this.l_About_Author.Size = new System.Drawing.Size(13, 20); - this.l_About_Author.TabIndex = 2; - this.l_About_Author.Text = " "; - // - // l_About_Version - // - this.l_About_Version.AutoSize = true; - this.l_About_Version.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_About_Version.Location = new System.Drawing.Point(162, 54); - this.l_About_Version.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_About_Version.Name = "l_About_Version"; - this.l_About_Version.Size = new System.Drawing.Size(540, 37); - this.l_About_Version.TabIndex = 1; - this.l_About_Version.Text = "GENESIS Zeroflow calibration tool"; - // - // tab_ZeroFlowCal - // - this.tab_ZeroFlowCal.AutoScroll = true; - this.tab_ZeroFlowCal.BackColor = System.Drawing.Color.Honeydew; - this.tab_ZeroFlowCal.Location = new System.Drawing.Point(4, 22); - this.tab_ZeroFlowCal.Margin = new System.Windows.Forms.Padding(10); - this.tab_ZeroFlowCal.Name = "tab_ZeroFlowCal"; - this.tab_ZeroFlowCal.Padding = new System.Windows.Forms.Padding(2); - this.tab_ZeroFlowCal.Size = new System.Drawing.Size(1028, 652); - this.tab_ZeroFlowCal.TabIndex = 15; - this.tab_ZeroFlowCal.Text = "Zero flow calibration"; - this.tab_ZeroFlowCal.Click += new System.EventHandler(this.tab_ZeroFlowCal_Click); - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.richTextBox1); - this.tabPage1.Controls.Add(this.button1); - this.tabPage1.Controls.Add(this.gB_TempMeters); - this.tabPage1.Location = new System.Drawing.Point(4, 22); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(1028, 652); - this.tabPage1.TabIndex = 16; - this.tabPage1.Text = "tabPage1"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // richTextBox1 - // - this.richTextBox1.Location = new System.Drawing.Point(6, 355); - this.richTextBox1.Name = "richTextBox1"; - this.richTextBox1.Size = new System.Drawing.Size(861, 272); - this.richTextBox1.TabIndex = 75; - this.richTextBox1.Text = ""; - // - // button1 - // - this.button1.Location = new System.Drawing.Point(6, 309); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(861, 40); - this.button1.TabIndex = 74; - this.button1.Text = "GetLogs"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // gB_TempMeters - // - this.gB_TempMeters.Controls.Add(this.nudTempSlot); - this.gB_TempMeters.Controls.Add(this.btnTempRaspi); - this.gB_TempMeters.Controls.Add(this.btn_LoadTempe); - this.gB_TempMeters.Location = new System.Drawing.Point(4, 13); - this.gB_TempMeters.Margin = new System.Windows.Forms.Padding(10); - this.gB_TempMeters.Name = "gB_TempMeters"; - this.gB_TempMeters.Padding = new System.Windows.Forms.Padding(2); - this.gB_TempMeters.Size = new System.Drawing.Size(863, 274); - this.gB_TempMeters.TabIndex = 73; - this.gB_TempMeters.TabStop = false; - this.gB_TempMeters.Text = "Temp. Meters"; - // - // nudTempSlot - // - this.nudTempSlot.Location = new System.Drawing.Point(17, 214); - this.nudTempSlot.Name = "nudTempSlot"; - this.nudTempSlot.Size = new System.Drawing.Size(280, 20); - this.nudTempSlot.TabIndex = 97; - // - // btnTempRaspi - // - this.btnTempRaspi.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnTempRaspi.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnTempRaspi.Location = new System.Drawing.Point(159, 239); - this.btnTempRaspi.Margin = new System.Windows.Forms.Padding(2); - this.btnTempRaspi.Name = "btnTempRaspi"; - this.btnTempRaspi.Size = new System.Drawing.Size(138, 31); - this.btnTempRaspi.TabIndex = 96; - this.btnTempRaspi.Text = "loadTemp (TOF)"; - this.btnTempRaspi.UseVisualStyleBackColor = true; - this.btnTempRaspi.Click += new System.EventHandler(this.btnTempRaspi_Click); - // - // btn_LoadTempe - // - this.btn_LoadTempe.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btn_LoadTempe.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btn_LoadTempe.Location = new System.Drawing.Point(17, 239); - this.btn_LoadTempe.Margin = new System.Windows.Forms.Padding(2); - this.btn_LoadTempe.Name = "btn_LoadTempe"; - this.btn_LoadTempe.Size = new System.Drawing.Size(138, 31); - this.btn_LoadTempe.TabIndex = 95; - this.btn_LoadTempe.Text = "loadTemp (@H)"; - this.btn_LoadTempe.UseVisualStyleBackColor = true; - this.btn_LoadTempe.Click += new System.EventHandler(this.btn_LoadTempe_Click); - // - // MainForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1058, 688); - this.Controls.Add(this.tab_Maintab); - this.Name = "MainForm"; - this.Text = "Form1"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); - this.Load += new System.EventHandler(this.MainForm_Load); - this.tab_Maintab.ResumeLayout(false); - this.tab_Report.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.groupBox_report.ResumeLayout(false); - this.gB_ReportTitlepage.ResumeLayout(false); - this.gB_ReportTitlepage.PerformLayout(); - this.tab_Settings.ResumeLayout(false); - this.tab_Settings.PerformLayout(); - this.gB_ComportSetup.ResumeLayout(false); - this.gB_SettingsTempMonitor.ResumeLayout(false); - this.gB_SettingsTempMonitor.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_SettingsTempMonitorDeviation)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_SettingsTempMonitorLowerValue)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_SettingsTempMonitorUpperValue)).EndInit(); - this.gB_Settings_TemperatureCalibration.ResumeLayout(false); - this.gB_Settings_TemperatureCalibration.PerformLayout(); - this.gB_Passwords.ResumeLayout(false); - this.gB_Passwords.PerformLayout(); - this.gB_Settings_Preparation.ResumeLayout(false); - this.gB_Settings_Preparation.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_Samplerate)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_Preparation_StabiTime)).EndInit(); - this.gB_Settings_ZeroflowOffsetTest.ResumeLayout(false); - this.gB_Settings_ZeroflowOffsetTest.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_ZeroflowOffsetTestActivityCheckInterval)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_ZeroflowOffsetTestNumberOfLines)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_ZeroflowOffsetTestSettlingTime)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_ZeroflowOffsetTestOffsetLimit)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_ZeroflowOffsetTestLowerLimit)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_ZeroflowOffsetTestUpperLimit)).EndInit(); - this.gB_Settings_AmplitudeTest.ResumeLayout(false); - this.gB_Settings_AmplitudeTest.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_AmplitudeActivityCheckInterval)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_PercentageStop)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_PercentageStart)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_AmplitudeTestMinDistance)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_AmplitudeTestLowerLimit)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.nUD_Settings_AmplitudeTestUpperLimit)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pB_Logo3)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pB_AvailableImages)).EndInit(); - this.tab_About.ResumeLayout(false); - this.tab_About.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pB_DocumentVersion)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pB_Logo2)).EndInit(); - this.tabPage1.ResumeLayout(false); - this.gB_TempMeters.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.nudTempSlot)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TabControl tab_Maintab; - private System.Windows.Forms.TabPage tab_Report; - private System.Windows.Forms.PictureBox pictureBox1; - private System.Windows.Forms.GroupBox groupBox_report; - private System.Windows.Forms.GroupBox gB_ReportTitlepage; - private System.Windows.Forms.RichTextBox rTB_ReportEnterSerialNumber; - private System.Windows.Forms.Label label_Report_EnterSerialNumber; - private System.Windows.Forms.Label l_ReportIntro; - private System.Windows.Forms.RichTextBox rtB_ReportTitlepageIntro; - private System.Windows.Forms.RichTextBox rTB_ReportEnterTitle; - private System.Windows.Forms.Label label_Report_EnterTitle; - private System.Windows.Forms.Label label_Report_EnterOperator; - private System.Windows.Forms.RichTextBox rTB_ReportEnterDate; - private System.Windows.Forms.RichTextBox rTB_ReportEnterOperator; - private System.Windows.Forms.Label label_Report_EnterDate; - private System.Windows.Forms.Button btn_Report_Generate; - private System.Windows.Forms.TabPage tab_Settings; - private System.Windows.Forms.CheckBox cB_SinglePath; - private System.Windows.Forms.ListBox lbLanguage; - private System.Windows.Forms.GroupBox gB_ComportSetup; - private System.Windows.Forms.Button BtnOpenSetup; - private System.Windows.Forms.GroupBox gB_SettingsTempMonitor; - private System.Windows.Forms.NumericUpDown nUD_SettingsTempMonitorDeviation; - private System.Windows.Forms.NumericUpDown nUD_SettingsTempMonitorLowerValue; - private System.Windows.Forms.NumericUpDown nUD_SettingsTempMonitorUpperValue; - private System.Windows.Forms.Label l_SettingsTempMonitorDeviation; - private System.Windows.Forms.Label l_SettingsTempMonitorLowerValue; - private System.Windows.Forms.Label l_SettingsTempMonitorUpperValue; - private System.Windows.Forms.GroupBox gB_Settings_TemperatureCalibration; - private System.Windows.Forms.CheckBox cB_TempManualAcquisition; - private System.Windows.Forms.Label lThermo2; - private System.Windows.Forms.Label lPasswordThermo1; - private System.Windows.Forms.TextBox tB_PasswordThermo2; - private System.Windows.Forms.TextBox tB_PasswordThermo1; - private System.Windows.Forms.GroupBox gB_Passwords; - private System.Windows.Forms.TextBox tB_PasswordMeter5; - private System.Windows.Forms.TextBox tB_PasswordMeter10; - private System.Windows.Forms.TextBox tB_PasswordMeter9; - private System.Windows.Forms.TextBox tB_PasswordMeter8; - private System.Windows.Forms.TextBox tB_PasswordMeter7; - private System.Windows.Forms.TextBox tB_PasswordMeter6; - private System.Windows.Forms.TextBox tB_PasswordMeter4; - private System.Windows.Forms.TextBox tB_PasswordMeter3; - private System.Windows.Forms.TextBox tB_PasswordMeter2; - private System.Windows.Forms.TextBox tB_PasswordMeter1; - private System.Windows.Forms.Label l_PasswordMeter10; - private System.Windows.Forms.Label l_PasswordMeter9; - private System.Windows.Forms.Label l_PasswordMeter8; - private System.Windows.Forms.Label l_PasswordMeter7; - private System.Windows.Forms.Label l_PasswordMeter6; - private System.Windows.Forms.Label l_PasswordMeter5; - private System.Windows.Forms.Label l_PasswordMeter4; - private System.Windows.Forms.Label l_PasswordMeter3; - private System.Windows.Forms.Label l_PasswordMeter2; - private System.Windows.Forms.Label l_PasswordMeter1; - private System.Windows.Forms.GroupBox gB_Settings_Preparation; - private System.Windows.Forms.NumericUpDown nUD_Settings_Preparation_StabiTime; - private System.Windows.Forms.Label l_Settings_Preparation_StabiTime; - private System.Windows.Forms.GroupBox gB_Settings_ZeroflowOffsetTest; - private System.Windows.Forms.CheckBox cB_OffsetTestLogFiles; - private System.Windows.Forms.NumericUpDown nUD_Settings_ZeroflowOffsetTestActivityCheckInterval; - private System.Windows.Forms.Label l_Settings_ZeroflowOffsetTestActivityCheckInterval; - private System.Windows.Forms.Label l_Settings_ZeroflowOffsetTestNumberOfLines; - private System.Windows.Forms.NumericUpDown nUD_Settings_ZeroflowOffsetTestNumberOfLines; - private System.Windows.Forms.Label l_Settings_ZeroFlowTestSettlingTime; - private System.Windows.Forms.NumericUpDown nUD_Settings_ZeroflowOffsetTestSettlingTime; - private System.Windows.Forms.Label l_Settings_ZeroFlowTestOffsetLimit; - private System.Windows.Forms.NumericUpDown nUD_Settings_ZeroflowOffsetTestOffsetLimit; - private System.Windows.Forms.Label l_Settings_ZeroflowOffsetTestLowerLimit; - private System.Windows.Forms.Label l_Settings_ZeroflowOffsetTestUpperLimit; - private System.Windows.Forms.NumericUpDown nUD_Settings_ZeroflowOffsetTestLowerLimit; - private System.Windows.Forms.NumericUpDown nUD_Settings_ZeroflowOffsetTestUpperLimit; - private System.Windows.Forms.GroupBox gB_Settings_AmplitudeTest; - private System.Windows.Forms.CheckBox cB_AmpLogFiles; - private System.Windows.Forms.NumericUpDown nUD_Settings_AmplitudeActivityCheckInterval; - private System.Windows.Forms.Label l_Settings_AmplitudeActivityCheckInterval; - private System.Windows.Forms.CheckBox cB_MeanAmplitudeFiles; - private System.Windows.Forms.NumericUpDown nUD_PercentageStop; - private System.Windows.Forms.Label l_PercentageStop; - private System.Windows.Forms.Label l_PercentageStart; - private System.Windows.Forms.NumericUpDown nUD_PercentageStart; - private System.Windows.Forms.Label l__Settings_AmplitudeTestMinDistance; - private System.Windows.Forms.NumericUpDown nUD_Settings_AmplitudeTestMinDistance; - private System.Windows.Forms.Label l_Settings_AmplitudeTestLowerLimit; - private System.Windows.Forms.Label l_Settings_AmplitudeTestUpperLimit; - private System.Windows.Forms.NumericUpDown nUD_Settings_AmplitudeTestLowerLimit; - private System.Windows.Forms.NumericUpDown nUD_Settings_AmplitudeTestUpperLimit; - private System.Windows.Forms.PictureBox pB_Logo3; - private System.Windows.Forms.PictureBox pB_AvailableImages; - private System.Windows.Forms.TabPage tab_About; - private System.Windows.Forms.PictureBox pictureBox3; - private System.Windows.Forms.PictureBox pictureBox2; - private System.Windows.Forms.Label l_BasedOn; - private System.Windows.Forms.Label l_Author; - private System.Windows.Forms.PictureBox pB_DocumentVersion; - private System.Windows.Forms.PictureBox pB_Logo2; - private System.Windows.Forms.Label l_Version; - private System.Windows.Forms.Label l_About_Info; - private System.Windows.Forms.Label l_About_Author; - private System.Windows.Forms.Label l_About_Version; - private System.Windows.Forms.TabPage tab_ZeroFlowCal; - private System.Windows.Forms.CheckBox cB_TempOnly; - private System.Windows.Forms.NumericUpDown nUD_Settings_Samplerate; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.GroupBox gB_TempMeters; - private System.Windows.Forms.Button btn_LoadTempe; - private System.Windows.Forms.NumericUpDown nudTempSlot; - private System.Windows.Forms.Button btnTempRaspi; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.RichTextBox richTextBox1; - } -} - diff --git a/GenesisCordonelTester/UI/FrmCordonelPreadjustmentUI.cs b/GenesisCordonelTester/UI/FrmCordonelPreadjustmentUI.cs deleted file mode 100644 index d6cec41bd..000000000 --- a/GenesisCordonelTester/UI/FrmCordonelPreadjustmentUI.cs +++ /dev/null @@ -1,274 +0,0 @@ -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; -using Xylem.Common.CommonCore.Consts; -using Xylem.Common.Hardware.Interfaces.Ports.PortCore; -using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig; -using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; -using Xylem.Common.Ui.CordonelPreadjustmentUi; - -namespace GenesisCordonelInterface.UI -{ - /*public partial class FrmCordonelPreadjustmentUI : Form - { - private PreAdjustmentControl preadjustCtl; - private PreAdjustmentSettingsContainer mainSettings = new PreAdjustmentSettingsContainer(); - public FrmCordonelPreadjustmentUI() - { - InitializeComponent(); - } - - private void MainForm_Load(object sender, EventArgs e) - { - - - preadjustCtl = new PreAdjustmentControl(mainSettings); - tab_ZeroFlowCal.Controls.Add(preadjustCtl); - - - - - cB_SinglePath.Checked = mainSettings.NumberOfPaths == 1 ? true : false; - nUD_SettingsTempMonitorLowerValue.Value = (decimal)mainSettings.LowerTempLimit; - nUD_SettingsTempMonitorUpperValue.Value = (decimal)mainSettings.UpperTempLimit; - nUD_SettingsTempMonitorDeviation.Value = (decimal)mainSettings.TempDeviationLimit; - // nUD_SettingsPreparationMetersize.Value = mainSettings.MeterSize.GetHashCode(); - - - cB_OffsetTestLogFiles.Checked = mainSettings.OffsetTestGenerateLogfiles; - nUD_Settings_ZeroflowOffsetTestActivityCheckInterval.Value = mainSettings.OffsetTestActivityCheckInverval; - nUD_Settings_ZeroflowOffsetTestNumberOfLines.Value = mainSettings.OffsetTestNumberOfLines; - nUD_Settings_ZeroflowOffsetTestSettlingTime.Value = mainSettings.OffsetTestSettlingTime; - nUD_Settings_ZeroflowOffsetTestOffsetLimit.Value = mainSettings.OffsetTestOffsetLimitPS; - nUD_Settings_ZeroflowOffsetTestLowerLimit.Value = mainSettings.OffsetTestLowerVoltageLimitMV; - nUD_Settings_ZeroflowOffsetTestUpperLimit.Value = mainSettings.OffsetTestUpperVoltageLimitMV; - - cB_AmpLogFiles.Checked = mainSettings.AmpTestGenerateLogfiles; - nUD_Settings_AmplitudeActivityCheckInterval.Value = mainSettings.AmpTestActivityCheckInverval; - cB_MeanAmplitudeFiles.Checked = mainSettings.AmpTestGenerateMeanValuesFile; - nUD_PercentageStop.Value = mainSettings.AmpTestPercentageStop; - nUD_PercentageStart.Value = mainSettings.AmpTestPercentageStart; - nUD_Settings_AmplitudeTestMinDistance.Value = mainSettings.AmpTestAmpTestDistance; - - nUD_Settings_AmplitudeTestLowerLimit.Value = mainSettings.AmpTestFirstHitLevelPropMin; - nUD_Settings_AmplitudeTestUpperLimit.Value = mainSettings.AmpTestFirstHitLevelPropMax; - - - nUD_Settings_Samplerate.Value = mainSettings.Samplerate; - - - - } - - private void tab_Maintab_Selected(object sender, TabControlEventArgs e) - { - if (e.TabPage.Name == tab_ZeroFlowCal.Name) - { - try - { - var _serialConfigFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Genesis", ProgramConfig.SerialConfigFileName); - - - SlotConfig[] meterConfigList; - using (var tr = new StreamReader(_serialConfigFile)) - { - var _fileString = tr.ReadToEnd(); - meterConfigList = JsonConvert.DeserializeObject(_fileString); - } - mainSettings.Meters = new List(); - mainSettings.TempMeters = new List(); - foreach (var item in meterConfigList) - { - if (item.Type != SlotType.TemperatureMeter) - { - mainSettings.Meters.Add(item.Slot); - } - else - { - mainSettings.TempMeters.Add(item.Slot); - } - } - } - catch (Exception ex) - { - MessageBox.Show($"use default meters because of {ex.Message}"); - } - - - - - - mainSettings.NumberOfPaths = cB_SinglePath.Checked ? 1 : 3; - mainSettings.LowerTempLimit = (double)nUD_SettingsTempMonitorLowerValue.Value; - mainSettings.UpperTempLimit = (double)nUD_SettingsTempMonitorUpperValue.Value; - mainSettings.TempDeviationLimit = (double)nUD_SettingsTempMonitorDeviation.Value; - //mainSettings.MeterSize = (Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts.MeterSize)nUD_SettingsPreparationMetersize.Value; - mainSettings.TempOnly = cB_TempOnly.Checked; - - mainSettings.SetTempUseTempFlansh(true); - - if (cB_TempManualAcquisition.Checked) - { - mainSettings.SetTempUseManualInput(true); - mainSettings.SetTempUseTempFlansh(false); - } - else - { - mainSettings.SetTempUseTempFlansh(true); - mainSettings.SetTempUseManualInput(false); - } - - - mainSettings.OffsetTestGenerateLogfiles = cB_OffsetTestLogFiles.Checked; - mainSettings.OffsetTestActivityCheckInverval = (int)nUD_Settings_ZeroflowOffsetTestActivityCheckInterval.Value; - mainSettings.OffsetTestNumberOfLines = (int)nUD_Settings_ZeroflowOffsetTestNumberOfLines.Value; - mainSettings.OffsetTestSettlingTime = (int)nUD_Settings_ZeroflowOffsetTestSettlingTime.Value; - mainSettings.OffsetTestOffsetLimitPS = (int)nUD_Settings_ZeroflowOffsetTestOffsetLimit.Value; - mainSettings.OffsetTestLowerVoltageLimitMV = (int)nUD_Settings_ZeroflowOffsetTestLowerLimit.Value; - mainSettings.OffsetTestUpperVoltageLimitMV = (int)nUD_Settings_ZeroflowOffsetTestUpperLimit.Value; - - mainSettings.AmpTestGenerateLogfiles = cB_AmpLogFiles.Checked; - mainSettings.AmpTestActivityCheckInverval = (int)nUD_Settings_AmplitudeActivityCheckInterval.Value; - mainSettings.AmpTestGenerateMeanValuesFile = cB_MeanAmplitudeFiles.Checked; - mainSettings.AmpTestPercentageStop = (int)nUD_PercentageStop.Value; - mainSettings.AmpTestPercentageStart = (int)nUD_PercentageStart.Value; - mainSettings.AmpTestAmpTestDistance = (int)nUD_Settings_AmplitudeTestMinDistance.Value; - - - mainSettings.AmpTestFirstHitLevelPropMin = (int)nUD_Settings_AmplitudeTestLowerLimit.Value; - mainSettings.AmpTestFirstHitLevelPropMax = (int)nUD_Settings_AmplitudeTestUpperLimit.Value; - - mainSettings.Samplerate = (int)nUD_Settings_Samplerate.Value; - - preadjustCtl.SetSettings(mainSettings); - - - } - - - - } - - private void MainForm_FormClosing(object sender, FormClosingEventArgs e) - { - if (preadjustCtl != null) - { - preadjustCtl.CloseConnections(); - preadjustCtl.Dispose(); - } - if (ThermoMeterBatch != null) - { - ThermoMeterBatch.Dispose(); - } - if (TempMeterStateCtls != null) - { - foreach (var item in TempMeterStateCtls) - { - item.Dispose(); - } - - } - - - } - private MeterBatch ThermoMeterBatch = new MeterBatch(); - private List TempMeterStateCtls = new List(); - private void tmpStart(int slot, bool RaspiMode = false) - { - var ctlZehn = new TempMeterStateControl(slot); - ctlZehn.Location = new Point(5 + ((TempMeterStateCtls.Count + 1) * ctlZehn.Width), 15); - TempMeterStateCtls.Add(ctlZehn); - gB_TempMeters.Controls.Add(ctlZehn); - ctlZehn.Enabled = true; - - - - - var currentMeter = new ZeroFlowGenesisMeter(ctlZehn.Slot, 3, !RaspiMode); - - currentMeter.LogOnEnable = true; - currentMeter.LoginFailed = false; - currentMeter.PreparationFailed = false; - currentMeter.AmplitudeFailed = false; - currentMeter.ZeroFlowOffsetFailed = false; - currentMeter.AmplitudeFailed = false; - currentMeter.CompletionFailed = false; - currentMeter.Ok = false; - currentMeter.EmptyPipeCheckEnable = false; - currentMeter.EmptyPipeCheckFailed = false; - - ThermoMeterBatch.AddMeter(currentMeter); - ctlZehn.IsEnabled = true; - - - ctlZehn.Meter = currentMeter; - ctlZehn.EnableOpening = true; - - ctlZehn.Ok = ctlZehn.Meter.CheckStreamingPort(); - - ctlZehn.SetUi(); - - ctlZehn.Meter.StartRecordData(); - ctlZehn.Meter.LogRawData(true); - if (RaspiMode) - - { - ctlZehn.StartTempWatch(MeterStateControl.TempMode.CalcTof); - - } - else - { - ctlZehn.StartTempWatch(MeterStateControl.TempMode.Meter); - } - ctlZehn.SetTemperature(0); - ctlZehn.DisableTemperatureinput(true); - ctlZehn.IsEnabled = true; - - - } - - - private void btn_LoadTempe_Click(object sender, EventArgs e) - { - - tmpStart((int)nudTempSlot.Value, false); - - - } - - private void btnTempRaspi_Click(object sender, EventArgs e) - { - tmpStart((int)nudTempSlot.Value, true); - } - - private void button1_Click(object sender, EventArgs e) - { - if (TempMeterStateCtls != null) - { - StringBuilder sb = new StringBuilder(); - - foreach (var item in TempMeterStateCtls) - { - sb.AppendLine(); - sb.AppendLine($"##########Meter{item.Slot}#############"); - sb.Append(item.GetLog()); - sb.AppendLine(); - } - richTextBox1.Text = sb.ToString(); - richTextBox1.ScrollToCaret(); - } - - } - - private void tab_ZeroFlowCal_Click(object sender, EventArgs e) - { - - } - }*/ -} diff --git a/GenesisCordonelTester/UI/FrmRegisterStore.Designer.cs b/GenesisCordonelTester/UI/FrmRegisterStore.Designer.cs deleted file mode 100644 index 467ea1a8b..000000000 --- a/GenesisCordonelTester/UI/FrmRegisterStore.Designer.cs +++ /dev/null @@ -1,410 +0,0 @@ -namespace GenesisCordonelInterface.UI -{ - partial class FrmRegisterStore - { - - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.cbComSlot = new System.Windows.Forms.ComboBox(); - this.label1 = new System.Windows.Forms.Label(); - this.btnReadRegister = new System.Windows.Forms.Button(); - this.registerGridView = new System.Windows.Forms.DataGridView(); - this.btnConnect = new System.Windows.Forms.Button(); - this.lblState = new System.Windows.Forms.Label(); - this.timProgress = new System.Windows.Forms.Timer(this.components); - this.btnGetPCbID = new System.Windows.Forms.Button(); - this.pnlBussy = new System.Windows.Forms.Panel(); - this.lblProgress = new System.Windows.Forms.Label(); - this.lblAction = new System.Windows.Forms.Label(); - this.probarBusy = new System.Windows.Forms.ProgressBar(); - this.label3 = new System.Windows.Forms.Label(); - this.btnReadFwVersions = new System.Windows.Forms.Button(); - this.btnCalibrationRestore = new System.Windows.Forms.Button(); - this.btnBatteryIdle = new System.Windows.Forms.Button(); - this.btnSetDefaultPulse = new System.Windows.Forms.Button(); - this.btnStoreAll = new System.Windows.Forms.Button(); - this.btnRegisterToFile = new System.Windows.Forms.Button(); - this.timer1 = new System.Windows.Forms.Timer(this.components); - this.btnBatLife = new System.Windows.Forms.Button(); - this.btnRadioPressure = new System.Windows.Forms.Button(); - this.nundCalResultID = new System.Windows.Forms.NumericUpDown(); - this.lblGtbVersion = new System.Windows.Forms.Label(); - this.lblConfigVersion = new System.Windows.Forms.Label(); - this.btnFileToRegister = new System.Windows.Forms.Button(); - this.cbxUseOfflinePwds = new System.Windows.Forms.CheckBox(); - ((System.ComponentModel.ISupportInitialize)(this.registerGridView)).BeginInit(); - this.pnlBussy.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nundCalResultID)).BeginInit(); - this.SuspendLayout(); - // - // cbComSlot - // - this.cbComSlot.FormattingEnabled = true; - this.cbComSlot.Location = new System.Drawing.Point(44, 91); - this.cbComSlot.Name = "cbComSlot"; - this.cbComSlot.Size = new System.Drawing.Size(58, 21); - this.cbComSlot.TabIndex = 0; - this.cbComSlot.Text = "1"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(10, 94); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(28, 13); - this.label1.TabIndex = 1; - this.label1.Text = "Slot:"; - this.label1.Click += new System.EventHandler(this.label1_Click); - // - // btnRead - // - this.btnReadRegister.Location = new System.Drawing.Point(251, 123); - this.btnReadRegister.Name = "btnReadRegister"; - this.btnReadRegister.Size = new System.Drawing.Size(110, 30); - this.btnReadRegister.TabIndex = 2; - this.btnReadRegister.Text = "Read Meter"; - this.btnReadRegister.UseVisualStyleBackColor = true; - this.btnReadRegister.Click += new System.EventHandler(this.btnRead_Click); - // - // registerGridView - // - this.registerGridView.AllowUserToAddRows = false; - this.registerGridView.AllowUserToDeleteRows = false; - this.registerGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.registerGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.registerGridView.Location = new System.Drawing.Point(8, 171); - this.registerGridView.Name = "registerGridView"; - this.registerGridView.Size = new System.Drawing.Size(778, 370); - this.registerGridView.TabIndex = 3; - this.registerGridView.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.registerGridView_CellClick); - this.registerGridView.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.registerGridView_CellEndEdit); - // - // btnConnect - // - this.btnConnect.Location = new System.Drawing.Point(125, 87); - this.btnConnect.Name = "btnConnect"; - this.btnConnect.Size = new System.Drawing.Size(110, 30); - this.btnConnect.TabIndex = 4; - this.btnConnect.Text = "Connect"; - this.btnConnect.UseVisualStyleBackColor = true; - this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click); - // - // lblState - // - this.lblState.AutoSize = true; - this.lblState.Location = new System.Drawing.Point(12, 132); - this.lblState.Name = "lblState"; - this.lblState.Size = new System.Drawing.Size(78, 13); - this.lblState.TabIndex = 5; - this.lblState.Text = "Not connected"; - this.lblState.Click += new System.EventHandler(this.lblState_Click); - // - // timProgress - // - this.timProgress.Tick += new System.EventHandler(this.TimeProgress_tick); - // - // btnGetPCbID - // - this.btnGetPCbID.Location = new System.Drawing.Point(399, 16); - this.btnGetPCbID.Name = "btnGetPCbID"; - this.btnGetPCbID.Size = new System.Drawing.Size(110, 30); - this.btnGetPCbID.TabIndex = 11; - this.btnGetPCbID.Text = "Get PCB ID"; - this.btnGetPCbID.UseVisualStyleBackColor = true; - this.btnGetPCbID.Click += new System.EventHandler(this.btnGetPCbID_Click); - // - // pnlBussy - // - this.pnlBussy.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.pnlBussy.BackColor = System.Drawing.Color.Transparent; - this.pnlBussy.Controls.Add(this.lblProgress); - this.pnlBussy.Controls.Add(this.lblAction); - this.pnlBussy.Controls.Add(this.probarBusy); - this.pnlBussy.Controls.Add(this.label3); - this.pnlBussy.Location = new System.Drawing.Point(8, 171); - this.pnlBussy.Name = "pnlBussy"; - this.pnlBussy.Size = new System.Drawing.Size(803, 398); - this.pnlBussy.TabIndex = 51; - this.pnlBussy.Visible = false; - // - // lblProgress - // - this.lblProgress.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.lblProgress.AutoSize = true; - this.lblProgress.Location = new System.Drawing.Point(240, 334); - this.lblProgress.Name = "lblProgress"; - this.lblProgress.Size = new System.Drawing.Size(0, 13); - this.lblProgress.TabIndex = 3; - // - // lblAction - // - this.lblAction.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.lblAction.AutoSize = true; - this.lblAction.Location = new System.Drawing.Point(240, 312); - this.lblAction.Name = "lblAction"; - this.lblAction.Size = new System.Drawing.Size(0, 13); - this.lblAction.TabIndex = 2; - // - // probarBusy - // - this.probarBusy.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.probarBusy.Location = new System.Drawing.Point(12, 286); - this.probarBusy.Name = "probarBusy"; - this.probarBusy.Size = new System.Drawing.Size(779, 23); - this.probarBusy.TabIndex = 1; - // - // label3 - // - this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(240, 270); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(64, 13); - this.label3.TabIndex = 0; - this.label3.Text = "Please wait!"; - // - // btnReadFwVersions - // - this.btnReadFwVersions.Location = new System.Drawing.Point(399, 51); - this.btnReadFwVersions.Name = "btnReadFwVersions"; - this.btnReadFwVersions.Size = new System.Drawing.Size(110, 30); - this.btnReadFwVersions.TabIndex = 52; - this.btnReadFwVersions.Text = "Read FW Versions"; - this.btnReadFwVersions.UseVisualStyleBackColor = true; - this.btnReadFwVersions.Click += new System.EventHandler(this.btnReadFwVersions_Click); - // - // btnCalibrationRestore - // - this.btnCalibrationRestore.Location = new System.Drawing.Point(560, 14); - this.btnCalibrationRestore.Name = "btnCalibrationRestore"; - this.btnCalibrationRestore.Size = new System.Drawing.Size(110, 30); - this.btnCalibrationRestore.TabIndex = 58; - this.btnCalibrationRestore.Text = "CalibrationRestore"; - this.btnCalibrationRestore.UseVisualStyleBackColor = true; - this.btnCalibrationRestore.Visible = false; - this.btnCalibrationRestore.Click += new System.EventHandler(this.btnCalibrationRestore_Click); - // - // btnBatteryIdle - // - this.btnBatteryIdle.Location = new System.Drawing.Point(399, 87); - this.btnBatteryIdle.Name = "btnBatteryIdle"; - this.btnBatteryIdle.Size = new System.Drawing.Size(110, 30); - this.btnBatteryIdle.TabIndex = 60; - this.btnBatteryIdle.Text = "Battery Idle"; - this.btnBatteryIdle.UseVisualStyleBackColor = true; - this.btnBatteryIdle.Visible = false; - this.btnBatteryIdle.Click += new System.EventHandler(this.btnBatteryIdle_Click); - // - // btnSetDefaultPulse - // - this.btnSetDefaultPulse.Location = new System.Drawing.Point(560, 85); - this.btnSetDefaultPulse.Name = "btnSetDefaultPulse"; - this.btnSetDefaultPulse.Size = new System.Drawing.Size(110, 30); - this.btnSetDefaultPulse.TabIndex = 61; - this.btnSetDefaultPulse.Text = "Set default Pulse"; - this.btnSetDefaultPulse.UseVisualStyleBackColor = true; - this.btnSetDefaultPulse.Click += new System.EventHandler(this.btnSetDefaultPulse_Click); - // - // btnStoreAll - // - this.btnStoreAll.Location = new System.Drawing.Point(251, 16); - this.btnStoreAll.Name = "btnStoreAll"; - this.btnStoreAll.Size = new System.Drawing.Size(110, 28); - this.btnStoreAll.TabIndex = 62; - this.btnStoreAll.Text = "Store All"; - this.btnStoreAll.UseVisualStyleBackColor = true; - this.btnStoreAll.Click += new System.EventHandler(this.btnStoreAll_Click); - // - // btnRegisterToFile - // - this.btnRegisterToFile.Location = new System.Drawing.Point(251, 50); - this.btnRegisterToFile.Name = "btnRegisterToFile"; - this.btnRegisterToFile.Size = new System.Drawing.Size(110, 30); - this.btnRegisterToFile.TabIndex = 63; - this.btnRegisterToFile.Text = "RegisterToFile"; - this.btnRegisterToFile.UseVisualStyleBackColor = true; - this.btnRegisterToFile.Click += new System.EventHandler(this.btnRegisterToFile_Click); - // - // timer1 - // - this.timer1.Interval = 5000; - this.timer1.Tick += new System.EventHandler(this.timer1_Tick); - // - // btnBatLife - // - this.btnBatLife.Location = new System.Drawing.Point(399, 123); - this.btnBatLife.Name = "btnBatLife"; - this.btnBatLife.Size = new System.Drawing.Size(110, 30); - this.btnBatLife.TabIndex = 71; - this.btnBatLife.Text = "Lifetime"; - this.btnBatLife.UseVisualStyleBackColor = true; - this.btnBatLife.Click += new System.EventHandler(this.btnBatLife_Click); - // - // btnRadioPressure - // - this.btnRadioPressure.Location = new System.Drawing.Point(560, 123); - this.btnRadioPressure.Name = "btnRadioPressure"; - this.btnRadioPressure.Size = new System.Drawing.Size(110, 30); - this.btnRadioPressure.TabIndex = 72; - this.btnRadioPressure.Text = "Activate Radio"; - this.btnRadioPressure.UseVisualStyleBackColor = true; - this.btnRadioPressure.Click += new System.EventHandler(this.btnRadioPressure_Click); - // - // nundCalResultID - // - this.nundCalResultID.Location = new System.Drawing.Point(562, 58); - this.nundCalResultID.Maximum = new decimal(new int[] { - 999999, - 0, - 0, - 0}); - this.nundCalResultID.Name = "nundCalResultID"; - this.nundCalResultID.Size = new System.Drawing.Size(110, 20); - this.nundCalResultID.TabIndex = 73; - this.nundCalResultID.Visible = false; - // - // lblGtbVersion - // - this.lblGtbVersion.AutoSize = true; - this.lblGtbVersion.Location = new System.Drawing.Point(10, 10); - this.lblGtbVersion.Name = "lblGtbVersion"; - this.lblGtbVersion.Size = new System.Drawing.Size(79, 13); - this.lblGtbVersion.TabIndex = 75; - this.lblGtbVersion.Text = "GTB Version: ?"; - // - // lblConfigVersion - // - this.lblConfigVersion.AutoSize = true; - this.lblConfigVersion.Location = new System.Drawing.Point(10, 33); - this.lblConfigVersion.Name = "lblConfigVersion"; - this.lblConfigVersion.Size = new System.Drawing.Size(119, 13); - this.lblConfigVersion.TabIndex = 76; - this.lblConfigVersion.Text = "Configuration Version: ?"; - // - // btnFileToRegister - // - this.btnFileToRegister.Location = new System.Drawing.Point(251, 87); - this.btnFileToRegister.Name = "btnFileToRegister"; - this.btnFileToRegister.Size = new System.Drawing.Size(110, 30); - this.btnFileToRegister.TabIndex = 77; - this.btnFileToRegister.Text = "FileToRegister"; - this.btnFileToRegister.UseVisualStyleBackColor = true; - this.btnFileToRegister.Click += new System.EventHandler(this.btnFileToRegister_Click); - // - // cbxUseOfflinePwds - // - this.cbxUseOfflinePwds.AutoSize = true; - this.cbxUseOfflinePwds.Location = new System.Drawing.Point(12, 59); - this.cbxUseOfflinePwds.Name = "cbxUseOfflinePwds"; - this.cbxUseOfflinePwds.Size = new System.Drawing.Size(132, 17); - this.cbxUseOfflinePwds.TabIndex = 78; - this.cbxUseOfflinePwds.Text = "Use Offline Passwords"; - this.cbxUseOfflinePwds.UseVisualStyleBackColor = true; - this.cbxUseOfflinePwds.CheckedChanged += new System.EventHandler(this.cbxUseOfflinePwds_CheckedChanged); - // - // FrmRegisterStore - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(803, 553); - this.Controls.Add(this.cbxUseOfflinePwds); - this.Controls.Add(this.btnFileToRegister); - this.Controls.Add(this.lblConfigVersion); - this.Controls.Add(this.lblGtbVersion); - this.Controls.Add(this.nundCalResultID); - this.Controls.Add(this.btnRadioPressure); - this.Controls.Add(this.btnBatLife); - this.Controls.Add(this.btnRegisterToFile); - this.Controls.Add(this.btnStoreAll); - this.Controls.Add(this.btnSetDefaultPulse); - this.Controls.Add(this.btnBatteryIdle); - this.Controls.Add(this.btnCalibrationRestore); - this.Controls.Add(this.btnReadFwVersions); - this.Controls.Add(this.pnlBussy); - this.Controls.Add(this.btnGetPCbID); - this.Controls.Add(this.lblState); - this.Controls.Add(this.btnConnect); - this.Controls.Add(this.registerGridView); - this.Controls.Add(this.btnReadRegister); - this.Controls.Add(this.label1); - this.Controls.Add(this.cbComSlot); - this.Name = "FrmRegisterStore"; - this.Text = "frmRegisterStore"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmRegisterStore_FormClosing); - this.Load += new System.EventHandler(this.frmRegisterStore_Load); - ((System.ComponentModel.ISupportInitialize)(this.registerGridView)).EndInit(); - this.pnlBussy.ResumeLayout(false); - this.pnlBussy.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nundCalResultID)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.ComboBox cbComSlot; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Button btnReadRegister; - private System.Windows.Forms.DataGridView registerGridView; - private System.Windows.Forms.Button btnConnect; - private System.Windows.Forms.Label lblState; - private System.Windows.Forms.Timer timProgress; - private System.Windows.Forms.Button btnGetPCbID; - private System.Windows.Forms.Panel pnlBussy; - private System.Windows.Forms.Label lblProgress; - private System.Windows.Forms.Label lblAction; - private System.Windows.Forms.ProgressBar probarBusy; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Button btnReadFwVersions; - private System.Windows.Forms.Button btnCalibrationRestore; - private System.Windows.Forms.Button btnBatteryIdle; - private System.Windows.Forms.Button btnSetDefaultPulse; - private System.Windows.Forms.Button btnStoreAll; - private System.Windows.Forms.Button btnRegisterToFile; - private System.Windows.Forms.Timer timer1; - private System.Windows.Forms.Button btnBatLife; - private System.Windows.Forms.Button btnRadioPressure; - private System.Windows.Forms.NumericUpDown nundCalResultID; - private System.Windows.Forms.Label lblGtbVersion; - private System.Windows.Forms.Label lblConfigVersion; - private System.Windows.Forms.Button btnFileToRegister; - private System.Windows.Forms.CheckBox cbxUseOfflinePwds; - } -} \ No newline at end of file diff --git a/GenesisCordonelTester/UI/FrmRegisterStore.cs b/GenesisCordonelTester/UI/FrmRegisterStore.cs deleted file mode 100644 index 440587c33..000000000 --- a/GenesisCordonelTester/UI/FrmRegisterStore.cs +++ /dev/null @@ -1,2633 +0,0 @@ -//...MF using LaaPackages.Features.Cordonel; -using Logic.ProductionToProductMapper.Cordonel; -using Newtonsoft.Json; -using NLog; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Net; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; -using Xylem.Common.CommonCore.Configuration; -using Xylem.Common.CommonCore.Consts; -using Xylem.Common.Hardware.Interfaces.Ports.PortCore; -using Xylem.Common.Hardware.WaterMeter.Genesis.Applications.Const; -using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; -using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts; -using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; -using Xylem.Common.Hardware.WaterMeter.Genesis.Registers.DataTypes; -using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; -using Xylem.Common.Logic.ProductionOrderCore.TestResults; -using Xylem.Common.Logic.SoftwareAccessHelper; -using Xylem.Common.Utils.Logging; -using Access = Xylem.Common.Hardware.WaterMeter.Genesis.Registers.Access; -using Register = Xylem.Common.Hardware.WaterMeter.Genesis.Registers.Register; -using GenesisCordonelInterface.API; - -namespace GenesisCordonelInterface.UI -{ - public partial class FrmRegisterStore : Form - { - private static readonly NLog.ILogger Logger = NLog.LogManager.GetLogger("GenesisCordonelInterface"); - private readonly InterfaceToLaatzen interfaceToLaatzen = new InterfaceToLaatzen(); - - public class regStore - { - public String PcbId; - public DateTimeOffset created; - public List keyValues; - } - - public class regDefValue - { - public RegisterDefinition def; - public String value; - } - - private readonly DataTable _dataTable = new DataTable(); - private GenesisMeter _currentGenesis; - private MeterBatch _meterBatch = new MeterBatch(); - private Color _defaultButtonColor; - private regStore _regsToStore; - private String _currentPcbId = ""; - - private Boolean IsBusy - { - get; - set; - } - - public FrmRegisterStore() - { - InitializeComponent(); - - //_dataTable = new DataTable(); - _dataTable.Columns.Add("Name", typeof(String)); - _dataTable.Columns.Add("Type", typeof(String)); - - _dataTable.Columns.Add("isChecked", typeof(Boolean)); - _dataTable.Columns.Add("RawValue", typeof(String)); - _dataTable.Columns.Add("RawValueFile", typeof(String)); - _dataTable.Columns.Add("Value", typeof(String)); - - _dataTable.Columns.Add("Min", typeof(String)); - _dataTable.Columns.Add("Max", typeof(String)); - _dataTable.Columns.Add("Description", typeof(String)); - - _dataTable.Columns.Add("Version", typeof(String)); - _dataTable.Columns.Add("IsAvailable", typeof(String)); - - _dataTable.Columns.Add("Privilege", typeof(String)); - - _dataTable.Columns.Add("btnHistoryText", typeof(String)); - - loadPreSet(); - } - - private void SetBusy(Boolean val, String action = "") - { - IsBusy = val; - if (IsBusy) - { - Invoke(new Action(() => - { - probarBusy.Value = 0; - pnlBussy.Visible = true; - timProgress.Enabled = true; - lblAction.Text = action; - })); - } - else - { - ProgressTotal = null; - ProgressCurrent = null; - Invoke(new Action(() => - { - pnlBussy.Visible = false; - timProgress.Enabled = false; - lblAction.Text = action; - lblProgress.Text = ""; - })); - } - } - - private void SetProgress(String text, Int32 total = 0, Int32 current = 0) - { - ProgressTotal = total; - ProgressCurrent = current; - Invoke(new Action(() => { lblProgress.Text = $@"{text} ({current}/{total})"; })); - } - - private Int32? ProgressTotal; - private Int32? ProgressCurrent; - - private void TimeProgress_tick(Object sender, EventArgs e) - { - if (IsBusy) - { - if (ProgressTotal.HasValue && ProgressCurrent.HasValue && !ProgressTotal.Value.Equals(0) && - !ProgressCurrent.Value.Equals(0)) - { - try - { - probarBusy.Value = - (Int32)Math.Round((ProgressCurrent.Value / (Double)ProgressTotal.Value) * 100, - 0); - } - catch (Exception) - { - // - } - } - else - { - var current = probarBusy.Value; - if (current + 1 > 100) - { - current = 0; - } - - probarBusy.Value = current + 1; - } - } - } - - private void btnConnect_Click(Object sender, EventArgs e) - { - Connect(); - } - - private void btnRead_Click(Object sender, EventArgs e) - { - SetBusy(true, "Read Registers"); - - var hex = "4F793AF100000002"; - var value = ulong.Parse(hex, NumberStyles.HexNumber); - - Console.WriteLine(value); - - - Task.Factory.StartNew(() => { ReadRegisters(); }).ContinueWith(delegate - { - SetBusy(false); - }); - } - - - private void btnStore_Click(Object sender, EventArgs e) - { - SetBusy(true, "Store to file"); - Task.Factory.StartNew(() => { StoreFile(); }).ContinueWith(delegate - { - SetBusy(false); - }); - } - - private void btnFileToMeter_Click(Object sender, EventArgs e) - { - var openFileDialog = new OpenFileDialog(); - openFileDialog.Filter = @"all JSON files (*.JSON)|*.JSON"; - openFileDialog.Multiselect = false; - - if (openFileDialog.ShowDialog() == DialogResult.OK) - { - SetBusy(true, "writing to meter"); - - var filename = openFileDialog.FileName; - - Task.Factory.StartNew(() => { LoadFile(filename); }).ContinueWith(delegate - { - SetBusy(false); - }); - } - } - - - private void registerGridView_CellEndEdit(Object sender, DataGridViewCellEventArgs e) - { - if (registerGridView.Columns[e.ColumnIndex].Name == "RawValue") - { - SetBusy(true, "writing register to meter"); - - Task.Factory.StartNew(() => { WriteRegister(e); }).ContinueWith(delegate - { - SetBusy(false); - }); - - } - } - - private void WriteRegister(DataGridViewCellEventArgs e) - { - var inputValue = registerGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); - - var arr = inputValue.Split('-'); - var array = new Byte[arr.Length]; - for (var i = arr.Length - 1; i >= 0; i--) - { - array[i] = Convert.ToByte(arr[i], 16); - } - - var reg = (String)registerGridView.Rows[e.RowIndex].Cells[0].Value; - var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions(); - var regDef = meterRegisters.GetRegisterDefinitionByName(reg); - - if (regDef.DataType != typeof(String) && regDef.DataType != typeof(ByteArray)) - array = array.Reverse().ToArray(); - _currentGenesis.WriteRegister(reg, array, checkRegister: true); - } - - private void frmRegisterStore_Load(Object sender, EventArgs e) - { - _meterBatch = new MeterBatch(); - - var configFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nameof(Xylem.Common.Hardware.WaterMeter.Genesis), ProgramConfig.SerialConfigFileName); - - if (!File.Exists(configFile)) - { - throw new ApplicationException($"Configuration file {configFile} not found "); - } - var tr = new StreamReader(configFile); - var meterConfigList = JsonConvert.DeserializeObject(tr.ReadToEnd()); - cbComSlot.Items.Clear(); - var listSlots = new List(); - if (listSlots == null) throw new ArgumentNullException(nameof(listSlots)); - foreach (var item in meterConfigList) - { - cbComSlot.Items.Add(item.Slot); - listSlots.Add(item.Slot); - } - if (cbComSlot.Items.Count >= 1) - { - cbComSlot.SelectedItem = cbComSlot.Items[0]; - } - - var version = Assembly.GetExecutingAssembly().GetName().Version; - lblGtbVersion.Text = $@"GTB Version: {version.Major}.{version.Minor}.{version.Build}"; - DisableAllButtons(); - - btnConnect.Enabled = true; - _defaultButtonColor = btnConnect.BackColor; - } - - private void frmRegisterStore_FormClosing(Object sender, FormClosingEventArgs e) - { - _meterBatch.Dispose(); - } - - private void DisableAllButtons() - { - Invoke(new Action(() => - { - btnConnect.Enabled = false; - btnReadRegister.Enabled = false; - - btnRadioPressure.Enabled = false; - btnSetDefaultPulse.Enabled = false; - btnBatLife.Enabled = false; - btnBatteryIdle.Enabled = false; - btnCalibrationRestore.Enabled = false; - btnStoreAll.Enabled = false; - - btnFileToRegister.Enabled = false; - btnRegisterToFile.Enabled = false; - - btnReadFwVersions.Enabled = false; - - btnReadRegister.BackColor = _defaultButtonColor; - - btnRadioPressure.BackColor = _defaultButtonColor; - btnSetDefaultPulse.BackColor = _defaultButtonColor; - btnBatLife.BackColor = _defaultButtonColor; - btnBatteryIdle.BackColor = _defaultButtonColor; - btnCalibrationRestore.BackColor = _defaultButtonColor; - btnStoreAll.BackColor = _defaultButtonColor; - - btnFileToRegister.BackColor = _defaultButtonColor; - btnRegisterToFile.BackColor = _defaultButtonColor; - - btnReadFwVersions.BackColor = _defaultButtonColor; - - })); - } - - private void EnableAllButtons() - { - Invoke(new Action(() => - { - btnConnect.Enabled = true; - btnReadRegister.Enabled = true; - - btnRadioPressure.Enabled = true; - btnSetDefaultPulse.Enabled = true; - btnBatLife.Enabled = true; - btnBatteryIdle.Enabled = true; - btnCalibrationRestore.Enabled = true; - btnStoreAll.Enabled = true; - - btnFileToRegister.Enabled = true; - btnRegisterToFile.Enabled = true; - - btnReadFwVersions.Enabled = true; - })); - } - - private void Connect() - { - try - { - if (string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) || - !int.TryParse(cbComSlot.SelectedItem.ToString(), out var slotNo)) - { - return; - } - - SetBusy(true, "Connect"); - //disable all buttons - DisableAllButtons(); - _currentGenesis?.DisposeMeter(); - //dispose old meter - _meterBatch.RemoveAllMeters(); - _currentGenesis = null; - - //assign new meter and assign meter to FW update file if this exists - _currentGenesis = new GenesisMeter(); - _currentGenesis.UseOfflinePasswords = cbxUseOfflinePwds.Checked; - _currentGenesis.SetupFromConfigFile(slotNo); - _meterBatch.AddMeter(_currentGenesis); - - Task.Factory.StartNew(() => - { - _meterBatch.MetersLogin(); - - if (!_currentGenesis.IsLoggedOn && String.IsNullOrEmpty(_currentGenesis.PcbId)) - { - SetBusy(false); - MessageBox.Show(@"ERROR: Cannot read out PcbId! Access to Cordonel denied!"); - return; - } - - Invoke(new Action(() => - { - if (_currentGenesis.IsLoggedOn) - { - lblState.ForeColor = Color.Green; - lblState.Text = $@"Connected to PCB {_currentGenesis.PcbId}"; - lblConfigVersion.Text = @"Configuration Version: " + - _currentGenesis.InterfaceInfo.InterfaceVersion; - lblConfigVersion.ForeColor = - _currentGenesis.InterfaceSupportsFwVersion ? Color.Green : Color.Red; - if (!_currentGenesis.InterfaceSupportsFwVersion) - { - var text = "CONFIGURATION OUTDATED!\n\n" + - "The loaded \"configuration.json\" " + - $"version: {_currentGenesis.InterfaceInfo.InterfaceVersion}\n" + - $"does NOT support the Cordonel FW version: {_currentGenesis.FwVersion}!"; - MessageBox.Show(text, @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - - _dataTable.Rows.Clear(); - - foreach (var item in _currentGenesis.GetRegistersDic()) - { - var row = _dataTable.NewRow(); - row["Name"] = item.Key.GetIdent(); - row["Type"] = item.Key.DataType.Name; - row["isChecked"] = false; - row["Value"] = ""; - row["RawValue"] = item.Value; - row["RawValueFile"] = item.Value; - - row["Min"] = item.Key.Minimum; - row["Max"] = item.Key.Maximum; - row["Description"] = item.Key.RegisterDetail.Description; - var From = item.Key.RegisterDetail.Version.First.HasValue - ? item.Key.RegisterDetail.Version.First.Value.ToString() - : "-"; - - var To = item.Key.RegisterDetail.Version.Last.HasValue - ? item.Key.RegisterDetail.Version.Last.Value.ToString() - : "-"; - - row["Version"] = $"from {From} to {To}"; - row["IsAvailable"] = item.Key.IsAvailable; - row["Privilege"] = item.Key.RegisterDetail.Privilege.Lvl8.ToString(); - row["btnHistoryText"] = "View History"; - - _dataTable.Rows.Add(row); - } - - registerGridView.DataSource = _dataTable.DefaultView; - var column = registerGridView?.Columns["isChecked"]; - if (column != null) - { - column.SortMode = DataGridViewColumnSortMode.Automatic; - registerGridView.Sort(column, ListSortDirection.Descending); - var viewColumn = registerGridView.Columns["RawValueFile"]; - if (viewColumn != null) viewColumn.Visible = false; - - } - - column = registerGridView?.Columns["Name"]; - if (column != null) - { - registerGridView.Sort(column, ListSortDirection.Ascending); - } - - var btnHistory = new DataGridViewButtonColumn(); - btnHistory.Name = "btnHistory"; - - btnHistory.DataPropertyName = "btnHistoryText"; - registerGridView?.Columns.AddRange(btnHistory); - - } - else - { - btnConnect.Enabled = false; - lblState.ForeColor = Color.Red; - lblState.Text = $@"Not Connected to PcbId:{_currentGenesis.PcbId}"; - registerGridView.Visible = false; - } - })); - }).ContinueWith(delegate - { - SetBusy(false); - EnableAllButtons(); - }); - } - catch (Exception ex) - { - SetBusy(false); - MessageBox.Show(ex.Message, @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); - // Dispose meter - _meterBatch.RemoveAllMeters(); - // If meter is not already assigned to batch as the config reader may fail - _currentGenesis?.DisposeMeter(); - - btnConnect.Enabled = true; - } - } - - private async void __Connect() - { - try - { - if (cbComSlot.SelectedItem == null || - string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) || - !int.TryParse(cbComSlot.SelectedItem.ToString(), out var slotNo)) - { - return; - } - - SetBusy(true, "Connect"); - DisableAllButtons(); - _dataTable.Rows.Clear(); - - var result = await Task.Run(() => interfaceToLaatzen.Connect(slotNo, cbxUseOfflinePwds.Checked)); - - if (result.Success) - { - lblState.ForeColor = Color.Green; - lblState.Text = $@"Connected to PCB {result.PcbId}"; - lblConfigVersion.Text = @"Configuration Version: " + result.InterfaceVersion; - lblConfigVersion.ForeColor = result.InterfaceSupportsFwVersion ? Color.Green : Color.Red; - - if (!result.InterfaceSupportsFwVersion) - { - var text = "CONFIGURATION OUTDATED!\n\n" + - "The loaded \"configuration.json\" " + - $"version: {result.InterfaceVersion}\n" + - $"does NOT support the Cordonel FW version: {result.FwVersion}!"; - - MessageBox.Show(text, @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - - foreach (var item in result.Registers) - { - var row = _dataTable.NewRow(); - row["Name"] = item.Name; - row["Type"] = item.Type; - row["isChecked"] = false; - row["Value"] = ""; - row["RawValue"] = item.RawValue; - row["RawValueFile"] = item.RawValue; - row["Min"] = item.Min; - row["Max"] = item.Max; - row["Description"] = item.Description; - row["Version"] = item.Version; - row["IsAvailable"] = item.IsAvailable; - row["Privilege"] = item.Privilege; - row["btnHistoryText"] = "View History"; - - _dataTable.Rows.Add(row); - } - - registerGridView.DataSource = _dataTable.DefaultView; - - var column = registerGridView?.Columns["isChecked"]; - if (column != null) - { - column.SortMode = DataGridViewColumnSortMode.Automatic; - registerGridView.Sort(column, ListSortDirection.Descending); - - var viewColumn = registerGridView.Columns["RawValueFile"]; - if (viewColumn != null) - viewColumn.Visible = false; - } - - column = registerGridView?.Columns["Name"]; - if (column != null) - { - registerGridView.Sort(column, ListSortDirection.Ascending); - } - - if (registerGridView.Columns["btnHistory"] == null) - { - var btnHistory = new DataGridViewButtonColumn - { - Name = "btnHistory", - DataPropertyName = "btnHistoryText" - }; - - registerGridView.Columns.Add(btnHistory); - } - - registerGridView.Visible = true; - btnConnect.Enabled = true; - } - else - { - btnConnect.Enabled = false; - lblState.ForeColor = Color.Red; - lblState.Text = $@"Not Connected to PcbId:{result.PcbId}"; - registerGridView.Visible = false; - - MessageBox.Show(result.ErrorMessage ?? "Connect failed.", @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); - btnConnect.Enabled = true; - } - finally - { - SetBusy(false); - EnableAllButtons(); - } - } - - private void GetPcbId(Int32 slotNR) - { - try - { - _meterBatch.RemoveAllMeters(); - _currentGenesis = new GenesisMeter(); - try - { - _currentGenesis.SetupFromConfigFile(slotNR); - _meterBatch.AddMeter(_currentGenesis); - } - catch (Exception ex) - { - Logger.Error(ex, $"Slot #{slotNR} failed: {ex.Message}"); - } - - _currentPcbId = _currentGenesis.GetPcbId(); - - } - catch (Exception ex) - { - Logger.Error(ex, ex.Message); - } - - _currentGenesis.Dispose(); - _currentGenesis = null; - } - - private void SelectPreset(String content) - { - foreach (var rowItem in _dataTable.Rows) - { - if (rowItem is DataRow) - { - ((DataRow)rowItem)["isChecked"] = false; - } - } - - - switch (content) - { - case "All": - foreach (var rowItem in _dataTable.Rows) - { - if (rowItem is DataRow) - { - ((DataRow)rowItem)["isChecked"] = true; - } - } - - break; - case "Ampl. Test": - foreach (var rowItem in _dataTable.Rows) - { - if (rowItem is DataRow) - { - if (preSetAmplTest.Any(p => p.Equals(((DataRow)rowItem)["Name"].ToString()))) - { - ((DataRow)rowItem)["isChecked"] = true; - } - else - { - ((DataRow)rowItem)["isChecked"] = false; - } - - } - } - - break; - case "Temp. Calibration": - foreach (var rowItem in _dataTable.Rows) - { - if (rowItem is DataRow) - { - if (preSetTempCal.Any(p => p.Equals(((DataRow)rowItem)["Name"].ToString()))) - { - ((DataRow)rowItem)["isChecked"] = true; - } - else - { - ((DataRow)rowItem)["isChecked"] = false; - } - - } - } - - break; - case "Zero Flow": - foreach (var rowItem in _dataTable.Rows) - { - if (rowItem is DataRow) - { - if (preSetZeroFlow.Any(p => p.Equals(((DataRow)rowItem)["Name"].ToString()))) - { - ((DataRow)rowItem)["isChecked"] = true; - } - else - { - ((DataRow)rowItem)["isChecked"] = false; - } - - } - } - - break; - case "Flow Calibration": - foreach (var rowItem in _dataTable.Rows) - { - if (rowItem is DataRow) - { - if (preSetFlowCalibration.Any(p => p.Equals(((DataRow)rowItem)["Name"].ToString()))) - { - ((DataRow)rowItem)["isChecked"] = true; - } - else - { - ((DataRow)rowItem)["isChecked"] = false; - } - } - } - - break; - case "All Meteorological": - foreach (var rowItem in _dataTable.Rows) - { - if (rowItem is DataRow) - { - if (preSetAllMeteorological.Any(p => p.Equals(((DataRow)rowItem)["Name"].ToString()))) - { - ((DataRow)rowItem)["isChecked"] = true; - } - else - { - ((DataRow)rowItem)["isChecked"] = false; - } - } - } - - break; - case "Own": - case "None": - foreach (var rowItem in _dataTable.Rows) - { - if (rowItem is DataRow) - { - ((DataRow)rowItem)["isChecked"] = false; - } - } - - break; - } - - - - } - public class RegisterRestoreData - { - public Int32 PcbID { get; set; } - public DateTime BuildTime { get; set; } - public Dictionary RegisterList { get; set; } - - } - - private RegisterRestoreData ReadRegisters() - { - - if (_currentGenesis != null) - { - _regsToStore = new regStore - { - PcbId = _currentGenesis.PcbId, - created = DateTimeOffset.Now, - keyValues = new List() - }; - - var ret = new RegisterRestoreData - { - PcbID = int.Parse(_currentGenesis.PcbId), - BuildTime = DateTime.Now, - RegisterList = new Dictionary() - }; - - var total = 0; - foreach (var rowItem in _dataTable.Rows) - { - if (rowItem is DataRow) - { - if ((Boolean)((DataRow)rowItem)["isChecked"]) - { - total += 1; - } - } - } - - var done = 0; - foreach (var rowItem in _dataTable.Rows) - { - if (rowItem is DataRow) - { - if ((Boolean)((DataRow)rowItem)["isChecked"]) - { - - var reg = ((DataRow)rowItem)["Name"].ToString(); - - var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions(); - var regDef = meterRegisters.GetRegisterDefinitionByName(reg); - SetProgress($"Read Register {regDef.RegisterName}", total, done + 1); - if (regDef.RegisterDetail != null && ( - regDef.RegisterDetail.Privilege.Lvl8 == Access.RO || - regDef.RegisterDetail.Privilege.Lvl8 == Access.RW)) - { - try - { - var rawRegister = _currentGenesis.ReadRegister(reg); - ret.RegisterList[reg] = rawRegister; - - //var temp = RegisterConverter.GetRegisterContent(regDef, rawRegister); - ((DataRow)rowItem)["RawValue"] = RegisterConverter.GetRegisterRawText(regDef, rawRegister); - _regsToStore.keyValues.Add(new regDefValue - { - def = regDef, - value = BitConverter.ToString(rawRegister) - }); - - try - { - var result = RegisterConverter.ConvertToText(rawRegister, regDef.DataType); - ((DataRow)rowItem)["Value"] = result; - } - catch (Exception) - { - ((DataRow)rowItem)["Value"] = "not converted"; - } - } - catch (Exception) - { - ((DataRow)rowItem)["Value"] = "error"; - } - } - else - { - ((DataRow)rowItem)["RawValue"] = "No Access"; - ((DataRow)rowItem)["Value"] = ""; - } - - done += 1; - } - } - } - - return ret; - } - - return null; - } - - private void CompareFile(String filename) - { - - var styleDiff = new DataGridViewCellStyle - { - BackColor = Color.Red, - ForeColor = Color.Black - }; - - var styleEqual = new DataGridViewCellStyle - { - BackColor = Color.Green, - ForeColor = Color.Black - }; - - SetProgress($"Read File {filename}"); - var text = File.ReadAllText(filename); - var loadedRegStore = JsonConvert.DeserializeObject(text); - - var done = 1; - - foreach (var rowItem in _dataTable.Rows) - { - if (rowItem is DataRow) - { - - SetProgress("Read file", loadedRegStore.keyValues.Count, done); - - var reg = ((DataRow)rowItem)["Name"].ToString(); - var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions(); - var regDef = meterRegisters.GetRegisterDefinitionByName(reg); - - var keyValue = - loadedRegStore.keyValues.FirstOrDefault(f => f.def.RegisterName.Equals(regDef.RegisterName)); - if (keyValue != null) - { - ((DataRow)rowItem)["RawValueFile"] = keyValue.value; - - if (regDef.RegisterDetail.Privilege.Lvl8 == Access.RO || - regDef.RegisterDetail.Privilege.Lvl8 == Access.RW) - { - var rawRegister = _currentGenesis.ReadRegister(reg); - - //var temp = RegisterConverter.GetRegisterContent(regDef, rawRegister); - ((DataRow)rowItem)["RawValue"] = RegisterConverter.GetRegisterRawText(regDef, rawRegister); - _regsToStore.keyValues.Add(new regDefValue - { - def = regDef, - value = BitConverter.ToString(rawRegister) - }); - - try - { - var result = RegisterConverter.ConvertToText(rawRegister, regDef.DataType); - ((DataRow)rowItem)["Value"] = result; - } - catch (Exception) - { - ((DataRow)rowItem)["Value"] = "not converted"; - } - - - DataGridViewCell meterCell = null; - DataGridViewCell fileCell = null; - foreach (DataGridViewRow row in registerGridView.Rows) - { - if (row.Cells["Name"].Value.Equals(regDef.RegisterName)) - { - meterCell = row.Cells["RawValue"]; - fileCell = row.Cells["RawValueFile"]; - break; - } - } - - if (meterCell != null && fileCell != null) - { - if (BitConverter.ToString(rawRegister).Equals(keyValue.value)) - { - - meterCell.Style = styleEqual; - fileCell.Style = styleEqual; - } - else - { - meterCell.Style = styleDiff; - fileCell.Style = styleDiff; - } - } - } - else - { - ((DataRow)rowItem)["RawValue"] = "No Access"; - ((DataRow)rowItem)["Value"] = ""; - } - - done += 1; - } - else - { - ((DataRow)rowItem)["RawValueFile"] = "Not in File"; - } - } - } - } - - private void ShowFile(String filename) - { - SetProgress($"Read File {filename}"); - var text = File.ReadAllText(filename); - var loadedRegStore = JsonConvert.DeserializeObject(text); - - var done = 1; - - foreach (var rowItem in _dataTable.Rows) - { - if (rowItem is DataRow) - { - - SetProgress("Compare file", loadedRegStore.keyValues.Count, done); - var regDef = (RegisterDefinition)((DataRow)rowItem)["regDef"]; - var keyValue = - loadedRegStore.keyValues.FirstOrDefault(f => f.def.RegisterName.Equals(regDef.RegisterName)); - if (keyValue != null) - { - ((DataRow)rowItem)["RawValueFile"] = keyValue.value; - - } - else - { - ((DataRow)rowItem)["RawValueFile"] = "Not in File"; - } - - done += 1; - } - } - } - - private void LoadFile(String filename) - { - //SetProgreess($"Read File {filename}"); - //var text = File.ReadAllText(filename); - //var loadedRegStore = Newtonsoft.Json.JsonConvert.DeserializeObject(text); - //if (loadedRegStore.PcbId != _currentPcbId) - //{ - // MessageBox.Show($"Please connect to PCB {loadedRegStore.PcbId}"); - // return; - //} - - //var done = 1; - //foreach (var keyValueToWrite in loadedRegStore.keyValues) - //{ - // SetProgreess($"Write Register {keyValueToWrite.def.Name}", loadedRegStore.keyValues.Count, done); - // var valueToWrite = keyValueToWrite.value.Split('-').Select(b => Convert.ToByte(b, 16)); - // valueToWrite.Reverse(); - // _currentGenesis.WriteRegister(keyValueToWrite.def, valueToWrite.ToArray()); - - // done = done + 1; - //} - - //read(); - } - - private void StoreFile() - { - //read(); - //var text = Newtonsoft.Json.JsonConvert.SerializeObject(regsToStore); - //SaveFileDialog saveFileDialog = new SaveFileDialog(); - //saveFileDialog.FileName = $"storePcbId{regsToStore.PcbId}on{regsToStore.created.ToString("yyyyMMdd")}.json"; - - //Invoke(new Action(() => - //{ - - // if (saveFileDialog.ShowDialog() == DialogResult.OK) - // File.WriteAllText(saveFileDialog.FileName, text); - - //})); - - //var done = 1; - //foreach (var keyValueToWrite in regsToStore.keyValues) - //{ - // SetProgreess($"Write Register {keyValueToWrite.def.Name}", regsToStore.keyValues.Count, done); - // var valueToWrite = keyValueToWrite.value.Split('-').Select(b => Convert.ToByte(b, 16)); - // valueToWrite.Reverse(); - // _currentGenesis.WriteRegister(keyValueToWrite.def, valueToWrite.ToArray()); - - // done = done + 1; - //} - - } - - private void StoreAsCsv() - { - ReadRegisters(); - - var csv = new StringBuilder(); - var saveFileDialog = new SaveFileDialog(); - saveFileDialog.FileName = $"storePcbId{_regsToStore.PcbId}on{_regsToStore.created.ToString("yyyyMMdd")}.csv"; - - csv.AppendLine("name;value"); - foreach (var values in _regsToStore.keyValues) - { - csv.AppendLine($"{values.def.RegisterName};{values.value}"); - } - - Invoke(new Action(() => - { - - if (saveFileDialog.ShowDialog() == DialogResult.OK) - { - File.WriteAllText(saveFileDialog.FileName, csv.ToString()); - } - })); - } - - private List preSetAmplTest = new List(); - private List preSetTempCal = new List(); - private List preSetZeroFlow = new List(); - private List preSetFlowCalibration = new List(); - private List preSetAllMeteorological = new List(); - private List preSetDefault = new List(); - private void loadPreSet() - { - #region defaults - preSetDefault.Add(Register.Genesisflow.SampleRate); - preSetDefault.Add(Register.Genesisflow.LedMode); - preSetDefault.Add(Register.Genesisflow.MeterSize); - #endregion - - #region preSetAmplTest - - preSetAmplTest.Add(Register.Genesisflow.FirstHitUpdatePeriod); - preSetAmplTest.Add(Register.Genesisflow.FirstHitShift); - preSetAmplTest.Add(Register.Genesisflow.FirstHitPercent1); - preSetAmplTest.Add(Register.Genesisflow.FirstHitPercent2); - preSetAmplTest.Add(Register.Genesisflow.FirstHitPercent3); - - #endregion - - #region preSetTempCal - - preSetTempCal.Add(Register.Genesisflow.ToFTempCalibrate); - preSetTempCal.Add(Register.Genesisflow.ToFTempOffset1); - preSetTempCal.Add(Register.Genesisflow.ToFTempOffset2); - preSetTempCal.Add(Register.Genesisflow.ToFTempOffset3); - - #endregion - - #region preSetZeroFlow - - preSetZeroFlow.Add(Register.Genesisflow.ZeroOffset1); - preSetZeroFlow.Add(Register.Genesisflow.ZeroOffset2); - preSetZeroFlow.Add(Register.Genesisflow.ZeroOffset3); - - #endregion - - #region preSetAllMeteorological - - preSetFlowCalibration.Add(Register.Genesisflow.CalFactor1); - preSetFlowCalibration.Add(Register.Genesisflow.CalFactor2); - preSetFlowCalibration.Add(Register.Genesisflow.CalFactor3); - - #endregion - - #region preset All metro - - preSetAllMeteorological.AddRange(preSetAmplTest); - preSetAllMeteorological.AddRange(preSetTempCal); - preSetAllMeteorological.AddRange(preSetZeroFlow); - preSetAllMeteorological.AddRange(preSetFlowCalibration); - - #endregion - - #region addDefaults - - preSetAllMeteorological.AddRange(preSetDefault); - preSetZeroFlow.AddRange(preSetDefault); - preSetFlowCalibration.AddRange(preSetDefault); - preSetTempCal.AddRange(preSetDefault); - preSetAmplTest.AddRange(preSetDefault); - - #endregion - } - - private void btnGetPCbID_Click(Object sender, EventArgs e) - { - Logger.Trace("UI-CLICK: FrmRegisterStore: btnGetPCbID_Click() use APILaatzen"); - - if (cbComSlot.SelectedItem != null) // && cbComSlot.SelectedValue is ListBoxItem) - { - _currentPcbId = ""; - if (!string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) && - int.TryParse(cbComSlot.SelectedItem.ToString(), out var slotNR)) - { - - SetBusy(true, "GetPcbId"); - - // as new meter object will be generated the data grid shows outdated data - _dataTable.Rows.Clear(); - DisableAllButtons(); - - Task.Factory.StartNew(() => { GetPcbId(slotNR); }).ContinueWith(delegate - { - Invoke(new Action(() => - { - SetBusy(false); - btnConnect.Enabled = true; - MessageBox.Show(_currentPcbId); - })); - }); - - } - } - } - - private async void __btnGetPCbID_Click(object sender, EventArgs e) - { - Logger.Trace("UI-CLICK: FrmRegisterStore: btnGetPCbID_Click() use API2"); - - if (cbComSlot.SelectedItem == null) - return; - - if (!int.TryParse(cbComSlot.SelectedItem.ToString(), out var slotNr)) - return; - - try - { - _currentPcbId = ""; - - SetBusy(true, "GetPcbId"); - - // as new meter object will be generated the data grid shows outdated data - _dataTable.Rows.Clear(); - DisableAllButtons(); - - _currentPcbId = await Task.Run(() => interfaceToLaatzen.GetPcbId(slotNr)); - - btnConnect.Enabled = true; - - Logger.Info("COM: Request detection SUCCESS for slot " + slotNr); - - MessageBox.Show(_currentPcbId); - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); - - Logger.Error("COM: Request detection FAILED for slot " + slotNr); - } - finally - { - SetBusy(false); - } - } - - private void btnReadFwVersions_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null) - { - var sb = new StringBuilder(); - sb.AppendLine($"PCBID: {_currentGenesis.PcbId}"); - sb.AppendLine($"Date: {DateTimeOffset.UtcNow}"); - sb.AppendLine($"System Core Revision: {_currentGenesis.StrCoreRevision}"); - foreach (var fm in _currentGenesis.MeterAppListVersion.OrderBy(o => o.AppId)) - { - var versionString = fm.IsInstalled - ? $"V: {fm.StrVersion} - CRC: 0x{fm.Crc:X4}" : "Not installed"; - if (fm.Status == MeterAppState.Unknown) - versionString = "Communication error"; - - sb.AppendLine($"AppId: 0x{fm.AppId:X2} - {versionString} - AppName: {fm.AppName}"); - } - - MessageBox.Show(sb.ToString()); - } - } - - private void btnProgram_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null) - { - var fa = new List(); - fa.AddRange((new Byte[] { 0x0E, 0x9F, 0xAC, 0xC6 })); - fa.AddRange((new Byte[] { 0xA0, 0xE1, 0xEF, 0x1C })); - fa.AddRange((new Byte[] { 0x3B, 0x27, 0xA4, 0x9B })); - fa.AddRange((new Byte[] { 0xAC, 0x21, 0x65, 0x35 })); - _currentGenesis.ReLogin(); - _currentGenesis.WriteRegister("SENSUSRADIO_EncryptionKey", fa.ToArray()); - //var before = _currentGenesis.ReadRegister("SYSTEM_CalendarSeconds"); - - //var tsa = DateTimeOffset.UtcNow - new DateTimeOffset(2000, 1, 1, 0, 0, 0, new TimeSpan(0)); - //_currentGenesis.WriteRegister("SYSTEM_CalendarSeconds", Convert.ToInt32(tsa.TotalSeconds)); - - //var after = _currentGenesis.ReadRegister("SYSTEM_CalendarSeconds"); - - - - - //#region fixparameter - - //register final programming - - //var overAllResult = new List>(); - ////611.219.280 - //// - //var ts = DateTimeOffset.UtcNow - new DateTimeOffset(2000, 1, 1, 0, 0, 0, new TimeSpan(0)); - - - - - ////Alarms - //////_currentGenesis.WriteRegister("SENSUSRADIO_MainAlarmMask? - //////_currentGenesis.WriteRegister("SENSUSRADIO_ExtendedAlarmMask ? - ////CUSTOMER_AlarmBroadcastMask? - ////CUSTOMER_AlarmEnableMask ? - ////CUSTOMER_AlarmVisualAutoClearMask? - ////CUSTOMER_AlarmVisualMask ? - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_SealDisplay", - // (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true)); - - //overAllResult.Add(_currentGenesis_WriteRegister("SYSTEM_CalendarSeconds", - // Convert.ToInt32(ts.TotalSeconds), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_ExcessFlowTimeThreshold", - // (new Byte[] { 0x00, 0x00, 0x00, 0x05 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_ExcessFlowVolumeThreshold", - // (new Byte[] { 0x00, 0x00, 0x61, 0xA8 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_LeakFlowThreshold", - // (new Byte[] { 0x00, 0x00, 0x01, 0x77 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_LeakTimeThreshold", - // (new Byte[] { 0x00, 0x00, 0x4E, 0xC0 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_Locale", - // (new Byte[] { 0x00, 0x00, 0x01, 0x60 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_PressureHighDelay", - // (new Byte[] { 0x00, 0x00, 0x02, 0x58 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_PressureHighThreshold", - // (new Byte[] { 0x00, 0x0B, 0x71, 0xB0 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_PressureLowDelay", - // (new Byte[] { 0x00, 0x00, 0x02, 0x58 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_PressureLowThreshold", - // (new Byte[] { 0x00, 0x00, 0x75, 0x30 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_ReverseFlowTimeThreshold", - // (new Byte[] { 0x00, 0x00, 0x00, 0x78 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_TemperatureHighDelay", - // (new Byte[] { 0x00, 0x00, 0x01, 0x2C }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_TemperatureHighThreshold", - // (new Byte[] { 0x00, 0x00, 0x01, 0xF4 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_TemperatureLowDelay", - // (new Byte[] { 0x00, 0x00, 0x01, 0x2C }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("CUSTOMER_TemperatureLowThreshold", - // (new Byte[] { 0x00, 0x00, 0x00, 0x14 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_ArrowThreshold", - // (new Byte[] { 0x00, 0x1E, 0x84, 0x80 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_DisplayPow10", - // (new Byte[] { 0x00, 0x00, 0x00, 0xFD }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_DisplayUnits", - // (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_ForwardArrow", - // (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_HardErrorLimit", - // (new Byte[] { 0x00, 0x00, 0x00, 0x04 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_LedMode", - // (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true)); - ////overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_LowFlowMaxPeriod", (new Byte[] { 0x00, 0x00, 0x00, 0x3C }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_LowFlowMaxPeriod", 60 << 16, true, true)); - - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_LowFlowThreshold", - // (new Byte[] { 0x00, 0x00, 0x00, 0xC8 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_MeterSize", - // (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_PipeFillingDelay", - // (new Byte[] { 0x00, 0x00, 0x00, 0x1E }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_ResetAccumulators", - // (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, false)); - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_SampleRate", - // (new Byte[] { 0x00, 0x00, 0x00, 0x02 }).Reverse().ToArray(), true, true)); - - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_UpdateThreshold", - // (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("IRDA_AdapterPresenceLimit", - // (new Byte[] { 0x00, 0x00, 0x00, 0x60 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("IRDA_PulseReportRate", - // (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_FlowPoint", - // (new Byte[] { 0x00, 0x00, 0x00, 0x02 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_FlowUnits", - // (new Byte[] { 0x00, 0x00, 0x00, 0x04 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PressureOffset", - // (new Byte[] { 0x00, 0x00, 0x03, 0xF5 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PressurePresent", - // (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PressureRate", - // (new Byte[] { 0x00, 0x0D, 0xBB, 0xA0 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PressureUnits", - // (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PulseLength", - // (new Byte[] { 0x00, 0x00, 0x00, 0x07 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PulseMode", - // (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_PulseWeight", - // (new Byte[] { 0x00, 0x00, 0x27, 0x10 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("METROLOGYASST_TemperatureUnits", - // (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_AverageFlowPeriod", - // (new Byte[] { 0x00, 0x00, 0x00, 0x05 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_DataLogContents", - // (new Byte[] { 0x08, 0x00, 0x24, 0x03 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_DataLogPeriod", - // (new Byte[] { 0x00, 0x00, 0x00, 0x3C }).Reverse().ToArray(), true, false)); - //overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_FixedDateDayOfMonth", - // (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_FixedDateReadingContents", - // (new Byte[] { 0x08, 0x00, 0x24, 0x03 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_PeriodicLogLifeTimeCounter", - // (new Byte[] { 0x00, 0x00, 0x00, 0x0 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_ResetCounter", - // (new Byte[] { 0x00, 0x00, 0x00, 0x0 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("POWERMON_BatterySelection", - // (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, false)); - //overAllResult.Add(_currentGenesis_WriteRegister("POWERMON_WarnFromClamp", - // (new Byte[] { 0x00, 0x01, 0x51, 0x80 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_WakeupInterval", - // (new Byte[] { 0x00, 0x00, 0x00, 0x03 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_MbusState", - // (new Byte[] { 0x00, 0x00, 0x00, 0x07 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_UtcTimeOffset", - // (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true)); - - //// just read later //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_FrequencyIndicator}).Reverse(), true, true); - - //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_HistoricalAlarmsDays", - // (new Byte[] { 0x00, 0x00, 0x00, 0x1D }).Reverse().ToArray(), true, true)); - - - ////Original - ////0x11, 0x12, 0x13, 0x14, 0x21, 0x22, 0x23, 0x24, 0x31, 0x32, 0x33, 0x34, 0x41, 0x42, 0x43, 0x44 - ////Write to register - ////0x14, 0x13, 0x12, 0x11, 0x24, 0x23, 0x22, 0x21, 0x34, 0x33, 0x32, 0x31, 0x44, 0x43, 0x42, 0x41 - - - ////good one - ////E6-C8-88-00-DE-B8-68-C0-D6-A8-48-80-CE-98-28-40 - ////0E-05-04-04-00-14-30-68-D0-14-0E-80-40-63-93-73-22 - - ////&bad one - ////0E-05-04-05-00-00-88-C8-E6-C0-68-B8-DE-80-48-A8-D6-40-28-98-CE - - - ////0E-05-04-04-00-22-73-93-63-40-80-0E-14-D0-68-30-14 - - //var funkadresse = new List(); - //funkadresse.AddRange((new Byte[] { 0xE6, 0xC8, 0x88, 0x00 }).ToArray()); - //funkadresse.AddRange((new Byte[] { 0xDE, 0xB8, 0x68, 0xC0 }).ToArray()); - //funkadresse.AddRange((new Byte[] { 0xD6, 0xA8, 0x48, 0x80 }).ToArray()); - //funkadresse.AddRange((new Byte[] { 0xCE, 0x98, 0x28, 0x40 }).ToArray()); - //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_EncryptionKey", funkadresse.ToArray(), - // true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_EncryptionKey", - // (new Byte[] - // { - // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - // }).ToArray(), true, true)); - ////overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_Authentification", (new Byte[] { 0x14, 0x30, 0x68, 0xD0, 0x14, 0x0E, 0x80, 0x40, 0x63, 0x93, 0x73, 0x22 }).ToArray(), true, true)); - ////overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_Authentification", (new Byte[] - ////{ - //// 0xD0,0x68 , 0x30 ,0x14, - //// 0x40,0x80, 0x0E ,0x14, - //// 0x22, 0x73, 0x93,0x63 - ////}).ToArray(), true, true)); - //////E6C88800DEB868C0D6A84880CE982840 - - //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_CustomerText", - // (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true)); - - //using (var dataacces = - // new SqlDataAccess( - // "Data Source=SLASQL01;;Initial Catalog=Auftrag;Persist Security Info=False;User ID=GenesisPasswordService;Password=PcbID;") - //) - //{ - - // var sb = new StringBuilder(); - // sb.AppendLine( - // $" SELECT distinct [MapPcbIdToSerialNumber_SerialNumber],Adresse,FunkschluesselIndex,SENSUSRADIO_PowerLevel, SENSUSRADIO_PowerLevelOption, SENSUSRADIO_ImpedanceCodeNew,SENSUSRADIO_ImpedanceCodeOption "); - // sb.AppendLine($" FROM [Auftrag].[dbo].[MapPcbIdToSerialNumber] pcb "); - // sb.AppendLine( - // $" inner join tmpRadioConfig radio on radio.pcbID = pcb.MapPcbIdToSerialNumber_PcbId"); - // sb.AppendLine( - // $" inner join Genesis_Meter meter on meter.Seriennummer = pcb.MapPcbIdToSerialNumber_SerialNumber"); - // sb.AppendLine($" where [MapPcbIdToSerialNumber_PcbId] = '{_currentGenesis.GetPcbId()}'"); - - // var MapData = dataacces.ExecuteQuery(sb.ToString()); - // if (MapData.Rows.Count != 1) - // { - // MessageBox.Show("Faild to get order data"); - // return; - // } - - // var SENSUSRADIO_RadioAddress = Convert.ToUInt32((Int64)MapData.Rows[0]["Adresse"] - 10000000000); - // var SENSUSRADIO_PowerLevel = Convert.ToUInt32(MapData.Rows[0]["SENSUSRADIO_PowerLevel"]); - // var SENSUSRADIO_PowerLevelOption = - // Convert.ToUInt32(MapData.Rows[0]["SENSUSRADIO_PowerLevelOption"]); - // var SENSUSRADIO_ImpedanceCodeNew = - // Convert.ToUInt32(MapData.Rows[0]["SENSUSRADIO_ImpedanceCodeNew"]); - // var SENSUSRADIO_ImpedanceCodeOption = - // Convert.ToUInt32(MapData.Rows[0]["SENSUSRADIO_ImpedanceCodeOption"]); - - - // overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_RadioAddress", - // SENSUSRADIO_RadioAddress, true, true)); - // overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_PowerLevel", SENSUSRADIO_PowerLevel, - // true, true)); - // overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_PowerLevelOption", - // SENSUSRADIO_PowerLevelOption, true, true)); - // overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_ImpedanceCodeNew", - // SENSUSRADIO_ImpedanceCodeNew, true, true)); - // overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_ImpedanceCodeOption", - // SENSUSRADIO_ImpedanceCodeOption, true, true)); - - - //} - - ////MapData.Rows[0]["Adresse"] - - - //overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_SealDisplay", - // (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true)); - - ////radio end state! - //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_SystemState", - // (new Byte[] { 0x00, 0x00, 0x00, 0xFF }).Reverse().ToArray(), true, false)); - - //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_SystemState", - // (new Byte[] { 0x00, 0x00, 0x00, 0x02 }).Reverse().ToArray(), true, true)); - - //var sbR = new StringBuilder(); - //if (overAllResult.Any(a => a.Item2 == false)) - //{ - - // foreach (var failedIndex in overAllResult) - // { - // if (!failedIndex.Item2) - // { - // sbR.AppendLine($"Register={failedIndex.Item1} failed"); - // } - - // } - //} - //else - //{ - // sbR.AppendLine($"done without errors"); - //} - - //_currentGenesis.Logout(); - //MessageBox.Show("Result:" + sbR.ToString()); - - //#endregion - - ////radio - ////storeconfig _all - ////log out - ////using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value)) - ////{ - - //var resultDic = new Dictionary(); - - // resultDic.Add("SENSUSRADIO_RadioAddress", ra); - - // //10412000966 - - //resultDic.Add("SENSUSRADIO_EncryptionKey", new Byte[] {0x40, 0x28, 0x98, 0xCE, 0x00}); - - //} - - - ////radio - - // //[Adresse] - - - - // var listToCheckProgramm = new Dictionary(); - - //listToCheckProgramm.Add("", new byte[]{ 0x00, 0x00, 0x00, 0x00}); - - //listToCheckProgramm.Add("", new byte[] { 0x00, 0x00, 0x00, 0x00 }); - - //listToCheckProgramm.Add("", new byte[] { 0x00, 0x00, 0x00, 0x00 }); - - - - - - - - - } - } - - public Tuple _currentGenesis_WriteRegister(String reg, T value, Boolean waitForResult = true, - Boolean checkRegister = false) - { - return new Tuple(reg, - _currentGenesis.WriteRegister(reg, value, waitForResult, checkRegister)); - } - - private void btnJsonCheck_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null) - { - var allSucceed = true; - var List = _currentGenesis.GetRegistersDic().Keys.ToList(); - foreach (var VARIABLE in List) - { - - if ((VARIABLE.RegisterDetail.Privilege.Lvl8 == Access.RO - || VARIABLE.RegisterDetail.Privilege.Lvl8 == Access.RW) - ) - { - var a = _currentGenesis.ReadRegister(VARIABLE.GetIdent()); - //String result = RegisterCheck.CheckRange(VARIABLE, a); - if (StatusReturn.Failed == RegisterCheck.CheckRange(VARIABLE, a, out var result)) - { - MessageBox.Show(result); - allSucceed = false; - } - } - } - - if (allSucceed) - { - MessageBox.Show(@"Json Check Succeed!"); - } - else - { - MessageBox.Show(@"Json Check Failed!"); - } - } - } - - private void btnReadyForTestBench_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null) - { - - _currentGenesis.ReLogin(); - - //var rees1 = _currentGenesis.ReadRegister("SENSUSRADIO_EncryptionKey",32); - //var rees2 = _currentGenesis.ReadRegister("SENSUSRADIO_Authentification", 32); - //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_EncryptionKey", (new Byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true)); - //overAllResult.Add(_currentGenesis_WriteRegister("SENSUSRADIO_Authentification", (new Byte[] { 0x14, 0x30, 0x68, 0xD0, 0x14, 0x0E, 0x80, 0x40, 0x63, 0x93, 0x73, 0x22 }).Reverse().ToArray(), true, true)); - - _currentGenesis_WriteRegister("GENESISFLOW_LowFlowMaxPeriod", 60 << 16, true, true); - - - _currentGenesis.ResetAlarm(Alarm.EMPTY_PIPE | Alarm.REBOOT); - //TODO set display unit - //TODO calculated overflow volume for display - _currentGenesis_WriteRegister("GENESISFLOW_SealDisplay", - (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true); - - _currentGenesis.WriteRegister(Register.Genesisflow.SampleRate, 10, checkRegister: true); - _currentGenesis.WriteRegister(Register.Genesisflow.LedMode, 6, checkRegister: true); - _currentGenesis.WriteRegister("GENESISFLOW_TriggerActive", 1); - - _currentGenesis_WriteRegister("GENESISFLOW_DisplayPow10", - (new Byte[] { 0x00, 0x00, 0x00, 0xFA }).Reverse().ToArray(), true, true); - - - } - } - - private void button1_Click_2(Object sender, EventArgs e) - { - if (_currentGenesis != null) - { - _currentGenesis.ReLogin(); - _currentGenesis_WriteRegister("GENESISFLOW_SealDisplay", - (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true); - - _currentGenesis_WriteRegister("CUSTOMER_Locale", - (new Byte[] { 0x00, 0x00, 0x00, 0x24 }).Reverse().ToArray(), true, true); - - - _currentGenesis_WriteRegister("METROLOGYASST_PulseWeight", (new Byte[] { 0x00, 0x00, 0x0E, 0xC9 }).Reverse().ToArray(), true, true); - _currentGenesis_WriteRegister("METROLOGYASST_FlowPoint", (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true); - _currentGenesis_WriteRegister("METROLOGYASST_TemperatureUnits", (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true); - _currentGenesis_WriteRegister("METROLOGYASST_FlowUnits", (new Byte[] { 0x00, 0x00, 0x00, 0x06 }).Reverse().ToArray(), true, true); - _currentGenesis_WriteRegister("GENESISFLOW_DisplayUnits", (new Byte[] { 0x00, 0x00, 0x00, 0x02 }).Reverse().ToArray(), true, true); - - - _currentGenesis_WriteRegister("GENESISFLOW_SealDisplay", - (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true); - - - - } - } - - private void button2_Click_1(Object sender, EventArgs e) - { - _currentGenesis_WriteRegister("GENESISFLOW_SealDisplay", - (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true); - - - _currentGenesis_WriteRegister("CUSTOMER_Locale", - (new Byte[] { 0x00, 0x00, 0x00, 0xD0 }).Reverse().ToArray(), true, true); - - _currentGenesis_WriteRegister("METROLOGYASST_PulseWeight", (new Byte[] { 0x00, 0x00, 0x03, 0xE8 }).Reverse().ToArray(), true, true); - _currentGenesis_WriteRegister("METROLOGYASST_FlowPoint", (new Byte[] { 0x00, 0x00, 0x00, 0x02 }).Reverse().ToArray(), true, true); - _currentGenesis_WriteRegister("METROLOGYASST_TemperatureUnits", (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true); - _currentGenesis_WriteRegister("METROLOGYASST_FlowUnits", (new Byte[] { 0x00, 0x00, 0x00, 0x04 }).Reverse().ToArray(), true, true); - _currentGenesis_WriteRegister("GENESISFLOW_DisplayUnits", (new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray(), true, true); - - _currentGenesis_WriteRegister("GENESISFLOW_SealDisplay", - (new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true); - } - - private void registerGridView_CellClick(Object sender, DataGridViewCellEventArgs e) - { - if (e.ColumnIndex > 0 && registerGridView.Columns[e.ColumnIndex] is DataGridViewButtonColumn) - { - if (_currentGenesis != null && _currentGenesis.IsLoggedOn) - { - var regdef = (String)registerGridView.Rows[e.RowIndex].Cells[0].Value; - var keyvalueRegdef = _currentGenesis.GetRegistersDic().FirstOrDefault(f => f.Key.GetIdent() == regdef); - if (keyvalueRegdef.Key != null) - { - /*var frmDialog = new FrmRegisterHistory(_currentGenesis.PcbId, keyvalueRegdef.Key); - frmDialog.SetDesktopLocation(Cursor.Position.X, Cursor.Position.Y); - frmDialog.ShowDialog();*///...MF - } - - - - } - } - } - - private String _preSelectReminder = "None"; - - private void lblState_Click(Object sender, EventArgs e) - { - if (_preSelectReminder.Contains("None")) - { - _preSelectReminder = "All"; - SelectPreset("All"); - } - else - { - _preSelectReminder = "None"; - SelectPreset("None"); - } - } - - private void btnSetDefaultPulse_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null) - { - _currentGenesis.ReLogin(); - btnSetDefaultPulse.BackColor = Color.Yellow; - try - { - if (_currentGenesis.IsLoggedOn) - { - _currentGenesis.WriteRegister("METROLOGYASST_PulseMode", 1); - - _currentGenesis.WriteRegister("METROLOGYASST_PulseWeight", 32000); - - _currentGenesis.WriteRegister("METROLOGYASST_PulseLength", 8); - _currentGenesis.WriteRegister("GENESISFLOW_SampleRate", 2); - _currentGenesis.WriteRegister("GENESISFLOW_LedMode", 0); - - _currentGenesis.WriteRegister("GENESISFLOW_TriggerActive", 1); - - btnSetDefaultPulse.BackColor = Color.Green; - _currentGenesis.Logout(); - return; - } - } - catch (Exception ex) - { - MessageBox.Show(ex.Message); - } - - _currentGenesis.Logout(); - btnSetDefaultPulse.BackColor = Color.Red; - } - } - - private void btnBatteryIdle_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null) - { - _currentGenesis.ReLogin(); - btnBatteryIdle.BackColor = Color.Yellow; - try - { - var ts = DateTimeOffset.UtcNow - new DateTimeOffset(2000, 1, 1, 0, 0, 0, new TimeSpan(0)); - if (_currentGenesis.IsLoggedOn) - { - _currentGenesis.WriteRegister("GENESISFLOW_SealDisplay", 0); - _currentGenesis.WriteRegister("POWERMON_WarnFromClamp", (UInt32)473040000); - _currentGenesis.WriteRegister("SYSTEM_CalendarSeconds", Convert.ToInt32(ts.TotalSeconds)); - var r = _currentGenesis.ReadRegister(Register.Genesisflow.TriggerIdle); - if (r[1] == 18) - { - var newVal = r[0] + 0x01; - var n = new Byte[] { (Byte)newVal, r[1], 0x00, 0x00 }; - - _currentGenesis.WriteRegister(Register.Genesisflow.TriggerIdle, n); - } - else - { - _currentGenesis.SetLcdText(false, new Byte[] { 0x12, 0x35 }); - } - - btnBatteryIdle.BackColor = Color.Green; - _currentGenesis.Logout(); - return; - } - - } - catch (Exception ex) - { - MessageBox.Show(ex.Message); - } - - btnBatteryIdle.BackColor = Color.Red; - _currentGenesis.Logout(); - } - } - - private void label1_Click(Object sender, EventArgs e) - { - - } - - private void btnStoreAll_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null) - { - _currentGenesis.ReLogin(); - btnStoreAll.BackColor = Color.Yellow; - try - { - if (_currentGenesis.IsLoggedOn) - { - var resultAll = _currentGenesis.StoreAllConfigurations(); - if (resultAll) - { - btnStoreAll.BackColor = Color.Green; - _currentGenesis.Logout(); - return; - } - } - } - catch (Exception ex) - { - MessageBox.Show(ex.Message); - } - - _currentGenesis.Logout(); - btnStoreAll.BackColor = Color.Red; - } - } - - //private void btn0406_Click(object sender, EventArgs e) - //{ - // if (cbComSlot.SelectedItem != null) // && cbComSlot.SelectedValue is ListBoxItem) - // { - // Int32 slotNR = 0; - // if (!string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) && - // int.TryParse(cbComSlot.SelectedItem.ToString(), out slotNR)) - // { - - // btn0406.BackColor = Color.Yellow; - // try - // { - // foreach (var me in _meterBatch.ListOfMeters) - // { - // if (me is GenesisMeter) - // { - // if (((GenesisMeter)me).IsLoggedOn) - // { - // _currentGenesis = ((GenesisMeter)me); - - - - // _currentGenesis.WriteRegister("CUSTOMER_StoreConfiguration", 1); - - // var reboot = ByteArrayStyle.ByteStyler.ToString(_currentGenesis.ReadRegister("CUSTOMER_RebootCount")); - // var PERIODICLOG_ResetCounter = ByteArrayStyle.ByteStyler.ToString(_currentGenesis.ReadRegister("PERIODICLOG_ResetCounter")); - // var SENSUSRADIO_ResetCounter = ByteArrayStyle.ByteStyler.ToString(_currentGenesis.ReadRegister("SENSUSRADIO_ResetCounter")); - - // var rebootSeconds = ByteArrayStyle.ByteStyler.ToString(_currentGenesis.ReadRegister("SYSTEM_MonotonicSeconds")); - // var Storeconfig = ByteArrayStyle.ByteStyler.ToString(_currentGenesis.ReadRegister("CUSTOMER_StoreConfiguration")); - // _currentGenesis.WriteLog($"#+#+#{_currentGenesis.PcbId};{Storeconfig};{reboot};{rebootSeconds};{cbProd.Checked};{txtTest.Text};{PERIODICLOG_ResetCounter};{SENSUSRADIO_ResetCounter}"); - - // btn0406.BackColor = Color.Green; - // btn0406.Text = Storeconfig; - // return; - // } - - // } - // } - - // } - // catch (Exception ex) - // { - // btn0406.BackColor = Color.Red; - // MessageBox.Show(ex.Message); - // } - - - // } - // } - //} - - - private void CheckAndDisplayRebootCount() - { - if (_currentGenesis != null) - { - _currentGenesis.ReLogin(); - timer1.Enabled = false; - btnRegisterToFile.BackColor = Color.Yellow; - try - { - - if (_currentGenesis.IsLoggedOn) - { - var reboot = _currentGenesis.ReadRegister("CUSTOMER_RebootCount"); - _currentGenesis.ReadRegister("POWERMON_BatteryQuantity"); - _currentGenesis.SetLcdText(false, new Byte[] { 0xAC, reboot[0] }); - btnRegisterToFile.BackColor = Color.Green; - timer1.Enabled = true; - _currentGenesis.Logout(); - return; - } - - } - catch (Exception) - { - timer1.Enabled = true; - btnRegisterToFile.BackColor = Color.Red; - return; - } - - _currentGenesis.Logout(); - timer1.Enabled = true; - btnRegisterToFile.BackColor = Color.Gray; - } - } - - private void timer1_Tick(Object sender, EventArgs e) - { - CheckAndDisplayRebootCount(); - } - - - private void btnBatLife_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null) - { - _currentGenesis.ReLogin(); - try - { - if (_currentGenesis.IsLoggedOn) - { - var t = new JustageResults - { - pcbId = _currentGenesis.PcbId, - p1Target = 0, - p1Value = RegisterConverter.ByteArrayToValue( - _currentGenesis.ReadRegister(Register.Genesisflow.CalFactor1)), - p2Target = 0, - p2Value = RegisterConverter.ByteArrayToValue( - _currentGenesis.ReadRegister(Register.Genesisflow.CalFactor2)), - p3Target = 0, - p3Value = RegisterConverter.ByteArrayToValue( - _currentGenesis.ReadRegister(Register.Genesisflow.CalFactor3)), - dt = DateTime.UtcNow - }; - - try - { - var tmpUrl = "http://10.49.40.25/MeterProcessState/api/TestBench/SetCalibrationValues"; - //ToDO: Update to service URl - - t.PostAsJson(tmpUrl); - } - catch (Exception) - { - // - } - - /*...MF var genesisStatus = new GenesisStatus(); - - if (GenesisStatusHandler.BuildLifeTimeInformation(_currentGenesis, genesisStatus, out _)) - { - var sbMSG = new StringBuilder(); - sbMSG.AppendLine($"Pcb = {_currentGenesis.PcbId}"); - - sbMSG.AppendLine($"POWERMON_TotalUsedSeconds = {genesisStatus.ExceededLifeTime_s}"); - sbMSG.AppendLine($"POWERMON_TotalUsedCharge = {genesisStatus.DrainedBatteryLoad_uAs}"); - sbMSG.AppendLine($"POWERMON_BatteryQuantity = {genesisStatus.BatteryQuantity}"); - sbMSG.AppendLine($"POWERMON_BatteryMilliAHrRating = {genesisStatus.InitialBatteryLoad_mAh}"); - sbMSG.AppendLine(""); - sbMSG.AppendLine($"Remaining life time in years {genesisStatus.RemainingLifeTimeYears:F2}"); - sbMSG.AppendLine($"Totally drained battery load in % {genesisStatus.DrainedBatteryLoadPercent:F2}"); - - MessageBox.Show(sbMSG.ToString(), $@"Battery for {_currentGenesis.PcbId} has remaining life " + - $@"time of {genesisStatus.RemainingLifeTimeYears:F2} years"); - } - else - { - MessageBox.Show(@"Failed to get life time information"); - }*/ - } - } - catch (Exception ex) - { - MessageBox.Show(ex.ToString()); - } - - _currentGenesis.Logout(); - } - } - - private void btnRadioPressure_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null) - { - btnRadioPressure.BackColor = Color.Yellow; - _currentGenesis.ReLogin(); - try - { - var ret = "Failed"; - if (_currentGenesis.IsLoggedOn) - { - - //CUSTOMER_AlarmEnableMask - 00-00-80-53 - //CUSTOMER_AlarmBroadcastMask - 00-00-1F-DC - //CUSTOMER_AlarmVisualMask - 00-00-1F-DC - // - - _currentGenesis.WriteRegister("SENSUSRADIO_MainAlarmMask", new Byte[] { 0x00 }); - _currentGenesis.WriteRegister("SENSUSRADIO_ExtendedAlarmMask", new Byte[] { 0x00 }); - - _currentGenesis.WriteRegister("CUSTOMER_AlarmEnableMask", new Byte[] { 0xD3, 0x9F, 0x00, 0x00 }); - _currentGenesis.WriteRegister("CUSTOMER_AlarmBroadcastMask", new Byte[] { 0xDC, 0x1F, 0x00, 0x00 }); - _currentGenesis.WriteRegister("CUSTOMER_AlarmVisualMask", new Byte[] { 0xDC, 0x1F, 0x00, 0x00 }); - - _currentGenesis.WriteRegister("SENSUSRADIO_SystemState", 0xFF); - _currentGenesis.Logout(); - Thread.Sleep(3000); - if (!_currentGenesis.ReLogin()) - { - Thread.Sleep(5000); - if (!_currentGenesis.ReLogin()) - { - - } - } - - /*var SENSUSRADIO_MainAlarmMask = */ - _currentGenesis.ReadRegister("SENSUSRADIO_MainAlarmMask"); - /*var SENSUSRADIO_ExtendedAlarmMask = */ - _currentGenesis.ReadRegister("SENSUSRADIO_ExtendedAlarmMask"); - - //_currentGenesis.WriteRegister("POWERMON_BatteryQuantity", 2, true, true); - - //var defEncryptionKey = new List(); - //defEncryptionKey.AddRange(new Byte[] { 0x0E, 0x9F, 0xAC, 0xC6 }.ToArray()); - //defEncryptionKey.AddRange(new Byte[] { 0xA0, 0xE1, 0xEF, 0x1C }.ToArray()); - //defEncryptionKey.AddRange(new Byte[] { 0x3B, 0x27, 0xA4, 0x9B }.ToArray()); - //defEncryptionKey.AddRange(new Byte[] { 0xAC, 0x21, 0x65, 0x35 }.ToArray()); - //_currentGenesis.WriteRegister("SENSUSRADIO_EncryptionKey", defEncryptionKey.ToArray(), true); - - - var freq = RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister("SENSUSRADIO_FrequencyIndicator")); - var radioAddress = RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister("SENSUSRADIO_RadioAddress")); - //_currentGenesis.WriteRegister("SENSUSRADIO_SystemState", 0xFF); - - //_currentGenesis.WriteRegister("SENSUSRADIO_WakeupInterval", 0); - //_currentGenesis.Logout(); - //File.AppendAllLines("RadioActivation.log", new[] { $"{freq};{_currentGenesis.PcbId};{RadioAdress};{DateTime.Now}" }); - if (0x02 == RegisterConverter.ByteArrayToValue( - _currentGenesis.ReadRegister("SENSUSRADIO_SystemState"))) - { - btnRadioPressure.BackColor = Color.Green; - ret = $"{freq};{_currentGenesis.PcbId};{radioAddress};{DateTime.Now}"; - } - else - { - btnRadioPressure.BackColor = Color.Red; - - } - } - - MessageBox.Show(ret); - } - catch (Exception ex) - { - btnRadioPressure.BackColor = Color.Red; - MessageBox.Show(ex.ToString()); - } - _currentGenesis.Logout(); - } - } - - private void btnCalibrationRestore_Click(Object sender, EventArgs e) - { - //foreach (var me in _meterBatch.ListOfMeters) - //{ - // if (me is GenesisMeter Meter) - // { - // if (((GenesisMeter)me).IsLoggedOn) - // { - // //check if pcb is in file - // // no - // //Pcb , cal valus into txt file - // // cal value + 0,6 - // // store - // // update Calvalues - - // //yes - // //msg - // } - // } - //} - } - - public static Boolean GetCalibrationResultsFromDbperRun(String RunId, CalibrationResults calibResults, - out String errorMsg) - { - errorMsg = ""; - if (null == calibResults) - { - return false; - } - - try - { - var url = "http://sla12iis01.emea.sensus.net/MeterProcessState/api/FinalCheck/CalibrationResults/"; - var requestResponse = LocalWebRequest.GetRequest(url, 30000, out var httpStatus); - if (httpStatus == HttpStatusCode.OK && !string.IsNullOrEmpty(requestResponse)) - { - var calibRes = JsonConvert.DeserializeObject(requestResponse); - // ClassAccess.CopyProperties(calibResults, calibRes); - var type = typeof(CalibrationResults); - foreach (var prop in type.GetProperties()) - { - if (prop.CanWrite) - prop.SetValue(calibResults, prop.GetValue(calibRes, null), null); - } - return true; - } - } - catch (Exception e) - { - errorMsg = e.Message; - return false; - } - - return false; - } - - private void FingerWeg_Clicked(Object sender, EventArgs args) - { - if (_currentGenesis != null) - { - _currentGenesis.ReLogin(); - try - { - if (_currentGenesis.IsLoggedOn) - { - - var Meter_calibrationResult = new CalibrationResult(); - Meter_calibrationResult.MeterSize = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.MeterSize)); - - //readsOk.Add(ReadRegisterRetry(Meter, "CalFactor1", Register.Genesisflow.CalFactor1, out retByte)); - Meter_calibrationResult.CalFactor1 = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.CalFactor1)); - //readsOk.Add(ReadRegisterRetry(Meter, "CalFactor2", Register.Genesisflow.CalFactor2, out retByte)); - Meter_calibrationResult.CalFactor2 = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.CalFactor2)); - //readsOk.Add(ReadRegisterRetry(Meter, "CalFactor3", Register.Genesisflow.CalFactor3, out retByte)); - Meter_calibrationResult.CalFactor3 = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.CalFactor3)); - //readsOk.Add(ReadRegisterRetry(Meter, "ZeroOffset1", Register.Genesisflow.ZeroOffset1, out retByte)); - Meter_calibrationResult.ZeroOffset1 = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.ZeroOffset1)); - //readsOk.Add(ReadRegisterRetry(Meter, "ZeroOffset2", Register.Genesisflow.ZeroOffset2, out retByte)); - Meter_calibrationResult.ZeroOffset2 = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.ZeroOffset2)); - //readsOk.Add(ReadRegisterRetry(Meter, "ZeroOffset3", Register.Genesisflow.ZeroOffset3, out retByte)); - Meter_calibrationResult.ZeroOffset3 = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.ZeroOffset3)); - //readsOk.Add(ReadRegisterRetry(Meter, "FirstHitUpdatePeriod", Register.Genesisflow.FirstHitUpdatePeriod, out retByte)); - Meter_calibrationResult.FirstHitUpdatePeriod = - RegisterConverter.ByteArrayToValue( - _currentGenesis.ReadRegister(Register.Genesisflow.FirstHitUpdatePeriod)); - //readsOk.Add(ReadRegisterRetry(Meter, "FirstHitShift", Register.Genesisflow.FirstHitShift, out retByte)); - Meter_calibrationResult.FirstHitShift = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.FirstHitShift)); - //readsOk.Add(ReadRegisterRetry(Meter, "FirstHitPercent1", Register.Genesisflow.FirstHitPercent1, out retByte)); - Meter_calibrationResult.FirstHitPercent1 = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.FirstHitPercent1)); - //readsOk.Add(ReadRegisterRetry(Meter, "FirstHitPercent2", Register.Genesisflow.FirstHitPercent2, out retByte)); - Meter_calibrationResult.FirstHitPercent2 = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.FirstHitPercent2)); - //readsOk.Add(ReadRegisterRetry(Meter, "FirstHitPercent3", Register.Genesisflow.FirstHitPercent3, out retByte)); - Meter_calibrationResult.FirstHitPercent3 = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.FirstHitPercent3)); - //readsOk.Add(ReadRegisterRetry(Meter, "ToFTempOffset1", Register.Genesisflow.ToFTempOffset1, out retByte)); - Meter_calibrationResult.ToFTempOffset1 = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.ToFTempOffset1)); - //readsOk.Add(ReadRegisterRetry(Meter, "ToFTempOffset2", Register.Genesisflow.ToFTempOffset2, out retByte)); - Meter_calibrationResult.ToFTempOffset2 = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.ToFTempOffset2)); - - Meter_calibrationResult.ToFTempOffset3 = - RegisterConverter.ByteArrayToValue(_currentGenesis.ReadRegister(Register.Genesisflow.ToFTempOffset3)); - Meter_calibrationResult.AdditionalLogInfos.Add("add info", "restore from meter"); - var exPost = new Exception(); - var code = 0; - LocalWebRequest.PostRequestAsync($"{ServiceUrls.PostGenesisCalibrationResultUrl()}?PcbId={_currentGenesis.PcbId}", - ref code, ref exPost, 8000, Meter_calibrationResult); - } - } - catch (Exception) - { - // - } - - //if (this._currentGenesis is null || !this._currentGenesis.IsLoggedOn) - //{ - // MessageBox.Show("Not connected!"); - - // return; - //} - - //this.SetBusy(true, "Recalibration is running"); - - //if (!this.CheckBatteryLifetime()) - //{ - // this.SetBusy(false); - - // return; - //} - - //var p1Cal = default(int); - //var p2Cal = default(int); - //var p3Cal = default(int); - //var logBuilder = new StringBuilder(); - - //try - //{ - // var caption = string.Empty; - // var buttons = MessageBoxButtons.YesNo; - // var icon = MessageBoxIcon.Question; - - // int ReadRegister(string name) - // { - // var value = default(int); - - // if (!this._currentGenesis.IsLoggedOn) - // { - // if (!this._currentGenesis.ReLogin()) - // { - // var answer = MessageBox.Show("Relogin failed!\n\nWould you try again?", caption, buttons, icon); - - // if (answer == DialogResult.Yes) - // { - // value = ReadRegister(name); - // } - // } - // } - - // value = RegisterConverter.ByteArrayToValue(this._currentGenesis.ReadRegister(name)); - - // if (value == 0) - // { - // var answer = MessageBox.Show($"Reading: {name} failed value is - {value}!\n\nWould you try again?", caption, buttons, icon); - - // if (answer == DialogResult.Yes) - // { - // value = ReadRegister(name); - // } - // } - - // return value; - // } - - // p1Cal = ReadRegister(Register.Genesisflow.CalFactor1); - // p2Cal = ReadRegister(Register.Genesisflow.CalFactor2); - // p3Cal = ReadRegister(Register.Genesisflow.CalFactor3); - - // if (p1Cal == 0 || p2Cal == 0 || p3Cal == 0) - // { - // return; - // } - - // logBuilder.AppendLine(); - // logBuilder.AppendLine($"Old values:"); - // logBuilder.AppendLine($" - P1 CalFactor: {p1Cal}"); - // logBuilder.AppendLine($" - P2 CalFactor: {p2Cal}"); - // logBuilder.AppendLine($" - P3 CalFactor: {p3Cal}"); - //} - //catch (Exception eRead) - //{ - // MessageBox.Show($"Read exception: {eRead}"); - - // this.SetBusy(false); - - // return; - //} - - //var httpClient = new HttpClient(); - //var values = new List(); - - //try - //{ - // using (var httpResponse = await httpClient.GetAsync(ServiceUrls.GetQ3CalibrationsURI(this._currentPcbId))) - // { - // var content = await httpResponse.Content.ReadAsStringAsync(); - - // if (httpResponse.IsSuccessStatusCode) - // { - // try - // { - // values = JsonConvert.DeserializeObject>(content); - // } - // catch (Exception eParse) - // { - // MessageBox.Show($"Parse exception: {eParse}"); - - // this.SetBusy(false); - - // return; - // } - // } - // else - // { - // MessageBox.Show($"Error: {content}"); - - // this.SetBusy(false); - - // return; - // } - // } - //} - //catch (Exception eHttp) - //{ - // MessageBox.Show($"Http exception: {eHttp}"); - - // this.SetBusy(false); - - // return; - //} - - //if (!values.Any(x => x.P1Off == -0.30001)) - //{ - // try - // { - // var requestUri = ServiceUrls.Q3CalibrationResultURL; - // var requestJson = JsonConvert.SerializeObject(new Q3Calibration - // { - // PcbId = this._currentPcbId, - // P1Off = -0.30001, - // P1Cal = p1Cal, - // P2Off = -0.30001, - // P2Cal = p2Cal, - // P3Off = -0.30001, - // P3Cal = p3Cal, - // }); - // var requestContent = new StringContent(requestJson, Encoding.UTF8, "application/json"); - - // using (var httpResponse = await httpClient.PostAsync(requestUri, requestContent)) - // { - // var content = await httpResponse.Content.ReadAsStringAsync(); - - // if (httpResponse.IsSuccessStatusCode && int.TryParse($"{content}", out var rowsAffected)) - // { - // logBuilder.AppendLine($"... old values saved!"); - // } - // else - // { - // MessageBox.Show($"HTTP Error: {content}"); - - // this.SetBusy(false); - - // return; - // } - // } - // } - // catch (Exception eHttp) - // { - // MessageBox.Show($"Http exception: {eHttp}"); - - // this.SetBusy(false); - - // return; - // } - //} - - //if (!values.Any(x => x.P1Off == 0.30001)) - //{ - // var offset = 0D; - - // try - // { - // offset = values - // .OrderByDescending(x => x.Date) - // .FirstOrDefault() - // ?.P1Off ?? 0; - - // if (offset > 0.2) - // { - // MessageBox.Show($"Recalibration is not required!"); - - // this.SetBusy(false); - - // return; - // } - // } - // catch (Exception eLinq) - // { - // MessageBox.Show($"LINQ exception: {eLinq}"); - // } - - // try - // { - // p1Cal = (int)Math.Round(p1Cal * (1 + 0.6 / 100), 0); - // p2Cal = (int)Math.Round(p2Cal * (1 + 0.6 / 100), 0); - // p3Cal = (int)Math.Round(p3Cal * (1 + 0.6 / 100), 0); - // } - // catch (Exception eCalc) - // { - // MessageBox.Show($"Calculation exception: {eCalc}"); - - // this.SetBusy(false); - - // return; - // } - - // try - // { - // var caption = string.Empty; - // var buttons = MessageBoxButtons.YesNo; - // var icon = MessageBoxIcon.Question; - - // void WriteRegister(string name, int value) - // { - // if (!this._currentGenesis.IsLoggedOn) - // { - // if (!this._currentGenesis.ReLogin()) - // { - // var answer = MessageBox.Show("Relogin failed!\n\nWould you try again?", caption, buttons, icon); - - // if (answer == DialogResult.Yes) - // { - // WriteRegister(name, value); - // } - // } - // } - - // if (!this._currentGenesis.WriteRegister(name, value)) - // { - // var answer = MessageBox.Show($"Writing: {name} = {value} failed!\n\nWould you try again?", caption, buttons, icon); - - // if (answer == DialogResult.Yes) - // { - // WriteRegister(name, value); - // } - // } - // } - - // WriteRegister(Register.Genesisflow.SealDisplay, 0); - // WriteRegister(Register.Genesisflow.TriggerIdle, 0); - // WriteRegister(Register.Genesisflow.CalFactor1, p1Cal); - // WriteRegister(Register.Genesisflow.CalFactor2, p2Cal); - // WriteRegister(Register.Genesisflow.CalFactor3, p3Cal); - // WriteRegister(Register.Genesisflow.DisplayUnits, 0); - // WriteRegister(Register.Metrologyasst.FlowUnits, 4); - // WriteRegister(Register.Genesisflow.DisplayPow10, -6); - // WriteRegister(Register.Genesisflow.SealDisplay, 1); - // WriteRegister(Register.Genesisflow.StoreConfiguration, 1); - - // logBuilder.AppendLine(); - // logBuilder.AppendLine($"New values:"); - // logBuilder.AppendLine($" - P1 CalFactor: {p1Cal}"); - // logBuilder.AppendLine($" - P2 CalFactor: {p2Cal}"); - // logBuilder.AppendLine($" - P3 CalFactor: {p3Cal}"); - // } - // catch (Exception eWrite) - // { - // MessageBox.Show($"Write exception: {eWrite}"); - - // this.SetBusy(false); - - // return; - // } - - // var newValuesWriten = false; - - // try - // { - // //var requestUri = ServiceUrls.Q3CalibrationResultURL; - // //var requestJson = JsonConvert.SerializeObject(new Q3Calibration - // //{ - // // PcbId = this._currentPcbId, - // // P1Off = 0.30001, - // // P1Cal = p1Cal, - // // P2Off = 0.30001, - // // P2Cal = p2Cal, - // // P3Off = 0.30001, - // // P3Cal = p3Cal, - // //}); - // var requestContent = new StringContent(requestJson, Encoding.UTF8, "application/json"); - - // using (var httpResponse = await httpClient.PostAsync(requestUri, requestContent)) - // { - // var content = await httpResponse.Content.ReadAsStringAsync(); - - // if (httpResponse.IsSuccessStatusCode && int.TryParse($"{content}", out var rowsAffected)) - // { - // newValuesWriten = rowsAffected > 0; - // } - // else - // { - // MessageBox.Show($"HTTP Error: {content}"); - - // this.SetBusy(false); - - // return; - // } - // } - // } - // catch (Exception eHttp) - // { - // MessageBox.Show($"HTTP exception: {eHttp}"); - - // this.SetBusy(false); - - // return; - // } - - // if (newValuesWriten) - // { - // logBuilder.AppendLine("... new values saved!"); - - // foreach (var row in this._dataTable.Rows) - // { - // if (row is DataRow dataRow && dataRow["Name"] is string registerName) - // { - // dataRow["isChecked"] = registerName == Register.Genesisflow.SealDisplay - // || registerName == Register.Genesisflow.CalFactor1 - // || registerName == Register.Genesisflow.CalFactor2 - // || registerName == Register.Genesisflow.CalFactor3 - // || registerName == Register.Genesisflow.DisplayUnits - // || registerName == Register.Genesisflow.DisplayPow10 - // || registerName == Register.Genesisflow.StoreConfiguration - // || registerName == Register.Genesisflow.TriggerIdle - // || registerName == Register.Metrologyasst.FlowUnits; - // } - // } - - // this.btnRead_Click(sender, args); - // } - // else - // { - // MessageBox.Show($"Q3Calibration values are not saved!"); - - // this.SetBusy(false); - - // return; - // } - //} - //else - //{ - // MessageBox.Show($"Already recalibrated!"); - - // this.SetBusy(false); - - // return; - //} - - //MessageBox.Show(logBuilder.ToString(), $"{this._currentPcbId} - successfully recalibrated", MessageBoxButtons.OK, MessageBoxIcon.Information); - _currentGenesis.Logout(); - } - } - - private void btnRegisterToFile_Click(Object sender, EventArgs e) - { - SelectPreset("All"); - var j = ReadRegisters(); - - var saveFileDialog1 = new SaveFileDialog(); - saveFileDialog1.Filter = @"Register Back Up files (*.rbu)|*.rbu"; - saveFileDialog1.FilterIndex = 1; - saveFileDialog1.RestoreDirectory = true; - - if (saveFileDialog1.ShowDialog() == DialogResult.OK) - { - File.WriteAllText(saveFileDialog1.FileName, JsonConvert.SerializeObject(j)); - } - } - - private void btnFileToRegister_Click(Object sender, EventArgs e) - { - if (_currentGenesis != null) - { - _currentGenesis.ReLogin(); - - RegisterRestoreData DataShow = null; - using (var openFileDialog = new OpenFileDialog()) - { - openFileDialog.Filter = @"Register Back Up files (*.rbu)|*.rbu"; - openFileDialog.FilterIndex = 2; - openFileDialog.RestoreDirectory = true; - - if (openFileDialog.ShowDialog() == DialogResult.OK) - { - //Get the path of specified file - var filePath = openFileDialog.FileName; - - DataShow = JsonConvert.DeserializeObject(File.ReadAllText(filePath)); - } - } - - var stringBuilder = new StringBuilder(); - var NotStringBuilder = new StringBuilder(); - if (DataShow != null) - { - foreach (var RestoreItem in DataShow.RegisterList) - { - var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions(); - var regDef = meterRegisters.GetRegisterDefinitionByName(RestoreItem.Key); - var RegValue = RestoreItem.Value; - - - /*if (RestoreItem.Value != null - && regDef.RegisterDetail != null - && regDef.RegisterDetail.Privilege.Lvl8 == Access.RW - && regDef.DataType != typeof(RPC)) - { - _currentGenesis.ReLogin(); - var comp = _currentGenesis.ReadRegister(RestoreItem.Key); - - if (BitConverter.ToString(RegValue) == BitConverter.ToString(comp)) - { - NotStringBuilder.AppendLine( - $"Register not changed ! {RestoreItem.Key} to {BitConverter.ToString(RegValue)}"); - } - else - { - if (regDef.AppName == "CONFIGEXCHANGE" || regDef.AppName == "FLEXNETSERIAL" || - regDef.AppName == "FUNCTEST" || regDef.AppName == "NFC" || regDef.AppName == "TESTMANAGER") - { - NotStringBuilder.AppendLine( - $"AppBlocked ! {RestoreItem.Key} to {BitConverter.ToString(RegValue)}"); - } - else - { - stringBuilder.AppendLine( - $"{RestoreItem.Key} from {BitConverter.ToString(comp)} to {BitConverter.ToString(RegValue)}"); - - if (regDef.DataType != typeof(String)) - RegValue = RegValue.Reverse().ToArray(); - _currentGenesis.WriteRegister(RestoreItem.Key, RegValue, checkRegister: true); - } - } - }*///...MF - } - } - - _currentGenesis.Logout(); - - //...MF MessageBox.Show(stringBuilder.ToString()); - //...MF MessageBox.Show(NotStringBuilder.ToString()); - } - } - - private void cbxUseOfflinePwds_CheckedChanged(Object sender, EventArgs e) - { - cbxUseOfflinePwds.ForeColor = cbxUseOfflinePwds.Checked ? Color.Red : Color.Black; - } - } -} \ No newline at end of file diff --git a/GenesisCordonelTester/UI/FrmSetup.Designer.cs b/GenesisCordonelTester/UI/FrmSetup.Designer.cs deleted file mode 100644 index fffc88daa..000000000 --- a/GenesisCordonelTester/UI/FrmSetup.Designer.cs +++ /dev/null @@ -1,705 +0,0 @@ -namespace GenesisCordonelInterface.UI -{ - partial class FrmSetup - { - - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.btnReload = new System.Windows.Forms.Button(); - this.btnStore = new System.Windows.Forms.Button(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.btnAddRow = new System.Windows.Forms.Button(); - this.dgvConfig = new System.Windows.Forms.DataGridView(); - this.tbcSlot = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.cbcRequestPort = new System.Windows.Forms.DataGridViewComboBoxColumn(); - this.cbcRequestType = new System.Windows.Forms.DataGridViewComboBoxColumn(); - this.cbcStreamingPort = new System.Windows.Forms.DataGridViewComboBoxColumn(); - this.cbcSlotType = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.btcDetectRequest = new System.Windows.Forms.DataGridViewButtonColumn(); - this.btcDetectStreaming = new System.Windows.Forms.DataGridViewButtonColumn(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.cbxProductionMode = new System.Windows.Forms.CheckBox(); - this.cbUpdateFiles = new System.Windows.Forms.CheckBox(); - this.cbUseMinMaxCheck = new System.Windows.Forms.CheckBox(); - this.label1 = new System.Windows.Forms.Label(); - this.txtWachSeriveUrl = new System.Windows.Forms.TextBox(); - this.cbUseRegisterWatch = new System.Windows.Forms.CheckBox(); - this.tabPage3 = new System.Windows.Forms.TabPage(); - this.cmdAddOffline = new System.Windows.Forms.Button(); - this.dgvofflinePw = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.offlinePaswordItemBindingSource = new System.Windows.Forms.BindingSource(this.components); - this.tabPage4 = new System.Windows.Forms.TabPage(); - this.lblGlobalCurrentPath = new System.Windows.Forms.Label(); - this.btnGlobalSearch = new System.Windows.Forms.Button(); - this.btnGlobalDefaultLan = new System.Windows.Forms.Button(); - this.btnGlobalDefaultLocal = new System.Windows.Forms.Button(); - this.label6 = new System.Windows.Forms.Label(); - this.lblLocalCurrentPath = new System.Windows.Forms.Label(); - this.btnLocalSearch = new System.Windows.Forms.Button(); - this.btnLocalDefaultLan = new System.Windows.Forms.Button(); - this.btnLocalDefaultLocal = new System.Windows.Forms.Button(); - this.lblLocalPath = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.tabPage5 = new System.Windows.Forms.TabPage(); - this.cbxSirtService868MHz = new System.Windows.Forms.ComboBox(); - this.cbxSirtService433MHz = new System.Windows.Forms.ComboBox(); - this.label5 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.cbxSirtComport868MHz = new System.Windows.Forms.ComboBox(); - this.cbxSirtComport433MHz = new System.Windows.Forms.ComboBox(); - this.tbxSirtBoxNo = new System.Windows.Forms.TextBox(); - this.tbxSirtStationId = new System.Windows.Forms.TextBox(); - this.lblSirtComport868MHz = new System.Windows.Forms.Label(); - this.lblSirtComport433MHz = new System.Windows.Forms.Label(); - this.lblSirtBoxNo = new System.Windows.Forms.Label(); - this.lblSirtStation = new System.Windows.Forms.Label(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dgvConfig)).BeginInit(); - this.tabPage2.SuspendLayout(); - this.tabPage3.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dgvofflinePw)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.offlinePaswordItemBindingSource)).BeginInit(); - this.tabPage4.SuspendLayout(); - this.tabPage5.SuspendLayout(); - this.SuspendLayout(); - // - // btnReload - // - this.btnReload.Location = new System.Drawing.Point(12, 12); - this.btnReload.Name = "btnReload"; - this.btnReload.Size = new System.Drawing.Size(140, 43); - this.btnReload.TabIndex = 1; - this.btnReload.Text = "Reload Setup"; - this.btnReload.UseVisualStyleBackColor = true; - this.btnReload.Click += new System.EventHandler(this.BtnReload_Click); - // - // btnStore - // - this.btnStore.Location = new System.Drawing.Point(158, 12); - this.btnStore.Name = "btnStore"; - this.btnStore.Size = new System.Drawing.Size(140, 43); - this.btnStore.TabIndex = 2; - this.btnStore.Text = "Save Setup"; - this.btnStore.UseVisualStyleBackColor = true; - this.btnStore.Click += new System.EventHandler(this.BtnStore_Click); - // - // tabControl1 - // - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Controls.Add(this.tabPage3); - this.tabControl1.Controls.Add(this.tabPage4); - this.tabControl1.Controls.Add(this.tabPage5); - this.tabControl1.Location = new System.Drawing.Point(12, 74); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(768, 387); - this.tabControl1.TabIndex = 17; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.btnAddRow); - this.tabPage1.Controls.Add(this.dgvConfig); - this.tabPage1.Location = new System.Drawing.Point(4, 22); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(760, 361); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "Slots"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // btnAddRow - // - this.btnAddRow.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btnAddRow.Location = new System.Drawing.Point(6, 255); - this.btnAddRow.Name = "btnAddRow"; - this.btnAddRow.Size = new System.Drawing.Size(199, 29); - this.btnAddRow.TabIndex = 5; - this.btnAddRow.Text = "Add Slot"; - this.btnAddRow.UseVisualStyleBackColor = true; - this.btnAddRow.Click += new System.EventHandler(this.btnAddRow_Click); - // - // dgvConfig - // - this.dgvConfig.AllowUserToAddRows = false; - this.dgvConfig.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.dgvConfig.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dgvConfig.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.tbcSlot, - this.cbcRequestPort, - this.cbcRequestType, - this.cbcStreamingPort, - this.cbcSlotType, - this.btcDetectRequest, - this.btcDetectStreaming}); - this.dgvConfig.Location = new System.Drawing.Point(6, 6); - this.dgvConfig.Name = "dgvConfig"; - this.dgvConfig.Size = new System.Drawing.Size(746, 243); - this.dgvConfig.TabIndex = 4; - this.dgvConfig.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.DgvConfig_CellContentClick); - this.dgvConfig.DataError += new System.Windows.Forms.DataGridViewDataErrorEventHandler(this.dgvConfig_DataError); - // - // tbcSlot - // - this.tbcSlot.HeaderText = "tbcSlot"; - this.tbcSlot.Name = "tbcSlot"; - // - // cbcRequestPort - // - this.cbcRequestPort.HeaderText = "cbcRequestPort"; - this.cbcRequestPort.Name = "cbcRequestPort"; - // - // cbcRequestType - // - this.cbcRequestType.HeaderText = "cbcRequestType"; - this.cbcRequestType.Name = "cbcRequestType"; - // - // cbcStreamingPort - // - this.cbcStreamingPort.HeaderText = "cbcStreamingPort"; - this.cbcStreamingPort.Name = "cbcStreamingPort"; - // - // cbcSlotType - // - this.cbcSlotType.HeaderText = "TempretureMeter"; - this.cbcSlotType.Name = "cbcSlotType"; - this.cbcSlotType.Resizable = System.Windows.Forms.DataGridViewTriState.True; - // - // btcDetectRequest - // - this.btcDetectRequest.HeaderText = "btcDetectRequest"; - this.btcDetectRequest.Name = "btcDetectRequest"; - // - // btcDetectStreaming - // - this.btcDetectStreaming.HeaderText = "btcDetectStreaming"; - this.btcDetectStreaming.Name = "btcDetectStreaming"; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.cbxProductionMode); - this.tabPage2.Controls.Add(this.cbUpdateFiles); - this.tabPage2.Controls.Add(this.cbUseMinMaxCheck); - this.tabPage2.Controls.Add(this.label1); - this.tabPage2.Controls.Add(this.txtWachSeriveUrl); - this.tabPage2.Controls.Add(this.cbUseRegisterWatch); - this.tabPage2.Location = new System.Drawing.Point(4, 22); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(760, 361); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "General"; - this.tabPage2.UseVisualStyleBackColor = true; - // - // cbxProductionMode - // - this.cbxProductionMode.AutoSize = true; - this.cbxProductionMode.Location = new System.Drawing.Point(25, 19); - this.cbxProductionMode.Name = "cbxProductionMode"; - this.cbxProductionMode.Size = new System.Drawing.Size(104, 17); - this.cbxProductionMode.TabIndex = 22; - this.cbxProductionMode.Text = "ProductionMode"; - this.cbxProductionMode.UseVisualStyleBackColor = true; - // - // cbUpdateFiles - // - this.cbUpdateFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.cbUpdateFiles.AutoSize = true; - this.cbUpdateFiles.Location = new System.Drawing.Point(25, 42); - this.cbUpdateFiles.Name = "cbUpdateFiles"; - this.cbUpdateFiles.Size = new System.Drawing.Size(199, 17); - this.cbUpdateFiles.TabIndex = 21; - this.cbUpdateFiles.Text = "Auto Update files (configuration.json)"; - this.cbUpdateFiles.UseVisualStyleBackColor = true; - this.cbUpdateFiles.CheckedChanged += new System.EventHandler(this.cbUpdateFiles_CheckedChanged); - // - // cbUseMinMaxCheck - // - this.cbUseMinMaxCheck.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.cbUseMinMaxCheck.AutoSize = true; - this.cbUseMinMaxCheck.Location = new System.Drawing.Point(25, 88); - this.cbUseMinMaxCheck.Name = "cbUseMinMaxCheck"; - this.cbUseMinMaxCheck.Size = new System.Drawing.Size(113, 17); - this.cbUseMinMaxCheck.TabIndex = 20; - this.cbUseMinMaxCheck.Text = "UseMinMaxCheck"; - this.cbUseMinMaxCheck.UseVisualStyleBackColor = true; - this.cbUseMinMaxCheck.CheckedChanged += new System.EventHandler(this.cbUseMinMaxCheck_CheckedChanged); - // - // label1 - // - this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(147, 65); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(136, 13); - this.label1.TabIndex = 19; - this.label1.Text = "RegisterWatchServiceURL"; - // - // txtWachSeriveUrl - // - this.txtWachSeriveUrl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.txtWachSeriveUrl.Location = new System.Drawing.Point(288, 60); - this.txtWachSeriveUrl.Name = "txtWachSeriveUrl"; - this.txtWachSeriveUrl.Size = new System.Drawing.Size(439, 20); - this.txtWachSeriveUrl.TabIndex = 18; - this.txtWachSeriveUrl.TextChanged += new System.EventHandler(this.textBox1_TextChanged); - // - // cbUseRegisterWatch - // - this.cbUseRegisterWatch.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.cbUseRegisterWatch.AutoSize = true; - this.cbUseRegisterWatch.Location = new System.Drawing.Point(25, 65); - this.cbUseRegisterWatch.Name = "cbUseRegisterWatch"; - this.cbUseRegisterWatch.Size = new System.Drawing.Size(116, 17); - this.cbUseRegisterWatch.TabIndex = 17; - this.cbUseRegisterWatch.Text = "UseRegisterWatch"; - this.cbUseRegisterWatch.UseVisualStyleBackColor = true; - this.cbUseRegisterWatch.CheckedChanged += new System.EventHandler(this.cbUseRegisterWatch_CheckedChanged); - // - // tabPage3 - // - this.tabPage3.Controls.Add(this.cmdAddOffline); - this.tabPage3.Controls.Add(this.dgvofflinePw); - this.tabPage3.Location = new System.Drawing.Point(4, 22); - this.tabPage3.Name = "tabPage3"; - this.tabPage3.Size = new System.Drawing.Size(760, 361); - this.tabPage3.TabIndex = 2; - this.tabPage3.Text = "OfflinePasswords"; - this.tabPage3.UseVisualStyleBackColor = true; - // - // cmdAddOffline - // - this.cmdAddOffline.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.cmdAddOffline.Location = new System.Drawing.Point(3, 195); - this.cmdAddOffline.Name = "cmdAddOffline"; - this.cmdAddOffline.Size = new System.Drawing.Size(257, 43); - this.cmdAddOffline.TabIndex = 17; - this.cmdAddOffline.Text = "Add Item"; - this.cmdAddOffline.UseVisualStyleBackColor = true; - this.cmdAddOffline.Click += new System.EventHandler(this.cmdAddOffline_Click); - // - // dgvofflinePw - // - this.dgvofflinePw.AutoGenerateColumns = false; - this.dgvofflinePw.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dgvofflinePw.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn1, - this.dataGridViewTextBoxColumn2}); - this.dgvofflinePw.DataSource = this.offlinePaswordItemBindingSource; - this.dgvofflinePw.Location = new System.Drawing.Point(3, 19); - this.dgvofflinePw.Name = "dgvofflinePw"; - this.dgvofflinePw.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dgvofflinePw.Size = new System.Drawing.Size(345, 170); - this.dgvofflinePw.TabIndex = 16; - // - // dataGridViewTextBoxColumn1 - // - this.dataGridViewTextBoxColumn1.DataPropertyName = "PcbID"; - this.dataGridViewTextBoxColumn1.HeaderText = "PcbID"; - this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; - // - // dataGridViewTextBoxColumn2 - // - this.dataGridViewTextBoxColumn2.DataPropertyName = "Password"; - this.dataGridViewTextBoxColumn2.HeaderText = "Password"; - this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; - // - // offlinePaswordItemBindingSource - // - this.offlinePaswordItemBindingSource.DataSource = typeof(OfflinePasswordItem); - // - // tabPage4 - // - this.tabPage4.Controls.Add(this.lblGlobalCurrentPath); - this.tabPage4.Controls.Add(this.btnGlobalSearch); - this.tabPage4.Controls.Add(this.btnGlobalDefaultLan); - this.tabPage4.Controls.Add(this.btnGlobalDefaultLocal); - this.tabPage4.Controls.Add(this.label6); - this.tabPage4.Controls.Add(this.lblLocalCurrentPath); - this.tabPage4.Controls.Add(this.btnLocalSearch); - this.tabPage4.Controls.Add(this.btnLocalDefaultLan); - this.tabPage4.Controls.Add(this.btnLocalDefaultLocal); - this.tabPage4.Controls.Add(this.lblLocalPath); - this.tabPage4.Controls.Add(this.label4); - this.tabPage4.Controls.Add(this.label3); - this.tabPage4.Controls.Add(this.label2); - this.tabPage4.Location = new System.Drawing.Point(4, 22); - this.tabPage4.Name = "tabPage4"; - this.tabPage4.Size = new System.Drawing.Size(760, 361); - this.tabPage4.TabIndex = 3; - this.tabPage4.Text = "Logging"; - this.tabPage4.UseVisualStyleBackColor = true; - this.tabPage4.Enter += new System.EventHandler(this.tabPage4_Click); - // - // lblGlobalCurrentPath - // - this.lblGlobalCurrentPath.AutoSize = true; - this.lblGlobalCurrentPath.Location = new System.Drawing.Point(132, 211); - this.lblGlobalCurrentPath.Name = "lblGlobalCurrentPath"; - this.lblGlobalCurrentPath.Size = new System.Drawing.Size(10, 13); - this.lblGlobalCurrentPath.TabIndex = 12; - this.lblGlobalCurrentPath.Text = "-"; - // - // btnGlobalSearch - // - this.btnGlobalSearch.Location = new System.Drawing.Point(52, 307); - this.btnGlobalSearch.Name = "btnGlobalSearch"; - this.btnGlobalSearch.Size = new System.Drawing.Size(314, 29); - this.btnGlobalSearch.TabIndex = 11; - this.btnGlobalSearch.Text = "Search"; - this.btnGlobalSearch.UseVisualStyleBackColor = true; - this.btnGlobalSearch.Click += new System.EventHandler(this.btnGlobalSearch_Click); - // - // btnGlobalDefaultLan - // - this.btnGlobalDefaultLan.Location = new System.Drawing.Point(52, 272); - this.btnGlobalDefaultLan.Name = "btnGlobalDefaultLan"; - this.btnGlobalDefaultLan.Size = new System.Drawing.Size(314, 29); - this.btnGlobalDefaultLan.TabIndex = 10; - this.btnGlobalDefaultLan.Text = "Use \\\\sla12buma\\cordonelds$\\${machinename}"; - this.btnGlobalDefaultLan.UseVisualStyleBackColor = true; - this.btnGlobalDefaultLan.Click += new System.EventHandler(this.btnGlobalDefaultLan_Click); - // - // btnGlobalDefaultLocal - // - this.btnGlobalDefaultLocal.Location = new System.Drawing.Point(52, 237); - this.btnGlobalDefaultLocal.Name = "btnGlobalDefaultLocal"; - this.btnGlobalDefaultLocal.Size = new System.Drawing.Size(314, 29); - this.btnGlobalDefaultLocal.TabIndex = 9; - this.btnGlobalDefaultLocal.Text = "Use C:\\GenesisLog\\"; - this.btnGlobalDefaultLocal.UseVisualStyleBackColor = true; - this.btnGlobalDefaultLocal.Click += new System.EventHandler(this.btnGlobalDefaultLocal_Click); - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(49, 211); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(66, 13); - this.label6.TabIndex = 8; - this.label6.Text = "CurrentPath:"; - // - // lblLocalCurrentPath - // - this.lblLocalCurrentPath.AutoSize = true; - this.lblLocalCurrentPath.Location = new System.Drawing.Point(132, 57); - this.lblLocalCurrentPath.Name = "lblLocalCurrentPath"; - this.lblLocalCurrentPath.Size = new System.Drawing.Size(10, 13); - this.lblLocalCurrentPath.TabIndex = 7; - this.lblLocalCurrentPath.Text = "-"; - // - // btnLocalSearch - // - this.btnLocalSearch.Location = new System.Drawing.Point(52, 153); - this.btnLocalSearch.Name = "btnLocalSearch"; - this.btnLocalSearch.Size = new System.Drawing.Size(314, 29); - this.btnLocalSearch.TabIndex = 6; - this.btnLocalSearch.Text = "Search"; - this.btnLocalSearch.UseVisualStyleBackColor = true; - this.btnLocalSearch.Click += new System.EventHandler(this.btnLocalSearch_Click); - // - // btnLocalDefaultLan - // - this.btnLocalDefaultLan.Location = new System.Drawing.Point(52, 118); - this.btnLocalDefaultLan.Name = "btnLocalDefaultLan"; - this.btnLocalDefaultLan.Size = new System.Drawing.Size(314, 29); - this.btnLocalDefaultLan.TabIndex = 5; - this.btnLocalDefaultLan.Text = "Use \\\\sla12buma\\cordonelds$\\${machinename}"; - this.btnLocalDefaultLan.UseVisualStyleBackColor = true; - this.btnLocalDefaultLan.Click += new System.EventHandler(this.btnLocalDefaultLan_Click); - // - // btnLocalDefaultLocal - // - this.btnLocalDefaultLocal.Location = new System.Drawing.Point(52, 83); - this.btnLocalDefaultLocal.Name = "btnLocalDefaultLocal"; - this.btnLocalDefaultLocal.Size = new System.Drawing.Size(314, 29); - this.btnLocalDefaultLocal.TabIndex = 4; - this.btnLocalDefaultLocal.Text = "Use C:\\GenesisLog\\"; - this.btnLocalDefaultLocal.UseVisualStyleBackColor = true; - this.btnLocalDefaultLocal.Click += new System.EventHandler(this.btnLocalDefaultLocal_Click); - // - // lblLocalPath - // - this.lblLocalPath.AutoSize = true; - this.lblLocalPath.Location = new System.Drawing.Point(121, 57); - this.lblLocalPath.Name = "lblLocalPath"; - this.lblLocalPath.Size = new System.Drawing.Size(0, 13); - this.lblLocalPath.TabIndex = 3; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(49, 57); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(66, 13); - this.label4.TabIndex = 2; - this.label4.Text = "CurrentPath:"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(13, 190); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(37, 13); - this.label3.TabIndex = 1; - this.label3.Text = "Global"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(13, 32); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(103, 13); - this.label2.TabIndex = 0; - this.label2.Text = "Local (only ToolBox)"; - // - // tabPage5 - // - this.tabPage5.Controls.Add(this.cbxSirtService868MHz); - this.tabPage5.Controls.Add(this.cbxSirtService433MHz); - this.tabPage5.Controls.Add(this.label5); - this.tabPage5.Controls.Add(this.label7); - this.tabPage5.Controls.Add(this.cbxSirtComport868MHz); - this.tabPage5.Controls.Add(this.cbxSirtComport433MHz); - this.tabPage5.Controls.Add(this.tbxSirtBoxNo); - this.tabPage5.Controls.Add(this.tbxSirtStationId); - this.tabPage5.Controls.Add(this.lblSirtComport868MHz); - this.tabPage5.Controls.Add(this.lblSirtComport433MHz); - this.tabPage5.Controls.Add(this.lblSirtBoxNo); - this.tabPage5.Controls.Add(this.lblSirtStation); - this.tabPage5.Location = new System.Drawing.Point(4, 22); - this.tabPage5.Name = "tabPage5"; - this.tabPage5.Size = new System.Drawing.Size(760, 361); - this.tabPage5.TabIndex = 4; - this.tabPage5.Text = "SIRT"; - this.tabPage5.UseVisualStyleBackColor = true; - // - // cbxSirtService868MHz - // - this.cbxSirtService868MHz.FormattingEnabled = true; - this.cbxSirtService868MHz.Location = new System.Drawing.Point(142, 164); - this.cbxSirtService868MHz.Name = "cbxSirtService868MHz"; - this.cbxSirtService868MHz.Size = new System.Drawing.Size(121, 21); - this.cbxSirtService868MHz.TabIndex = 13; - // - // cbxSirtService433MHz - // - this.cbxSirtService433MHz.FormattingEnabled = true; - this.cbxSirtService433MHz.Location = new System.Drawing.Point(142, 137); - this.cbxSirtService433MHz.Name = "cbxSirtService433MHz"; - this.cbxSirtService433MHz.Size = new System.Drawing.Size(121, 21); - this.cbxSirtService433MHz.TabIndex = 12; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(22, 168); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(114, 13); - this.label5.TabIndex = 11; - this.label5.Text = "Service Port 868 MHz:"; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(22, 140); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(114, 13); - this.label7.TabIndex = 10; - this.label7.Text = "Service Port 433 MHz:"; - // - // cbxSirtComport868MHz - // - this.cbxSirtComport868MHz.FormattingEnabled = true; - this.cbxSirtComport868MHz.Location = new System.Drawing.Point(142, 102); - this.cbxSirtComport868MHz.Name = "cbxSirtComport868MHz"; - this.cbxSirtComport868MHz.Size = new System.Drawing.Size(121, 21); - this.cbxSirtComport868MHz.TabIndex = 9; - // - // cbxSirtComport433MHz - // - this.cbxSirtComport433MHz.FormattingEnabled = true; - this.cbxSirtComport433MHz.Location = new System.Drawing.Point(142, 75); - this.cbxSirtComport433MHz.Name = "cbxSirtComport433MHz"; - this.cbxSirtComport433MHz.Size = new System.Drawing.Size(121, 21); - this.cbxSirtComport433MHz.TabIndex = 8; - // - // tbxSirtBoxNo - // - this.tbxSirtBoxNo.Location = new System.Drawing.Point(142, 44); - this.tbxSirtBoxNo.Name = "tbxSirtBoxNo"; - this.tbxSirtBoxNo.Size = new System.Drawing.Size(100, 20); - this.tbxSirtBoxNo.TabIndex = 7; - // - // tbxSirtStationId - // - this.tbxSirtStationId.Location = new System.Drawing.Point(142, 17); - this.tbxSirtStationId.Name = "tbxSirtStationId"; - this.tbxSirtStationId.Size = new System.Drawing.Size(100, 20); - this.tbxSirtStationId.TabIndex = 6; - // - // lblSirtComport868MHz - // - this.lblSirtComport868MHz.AutoSize = true; - this.lblSirtComport868MHz.Location = new System.Drawing.Point(22, 106); - this.lblSirtComport868MHz.Name = "lblSirtComport868MHz"; - this.lblSirtComport868MHz.Size = new System.Drawing.Size(103, 13); - this.lblSirtComport868MHz.TabIndex = 5; - this.lblSirtComport868MHz.Text = "RSSI Port 868 MHz:"; - // - // lblSirtComport433MHz - // - this.lblSirtComport433MHz.AutoSize = true; - this.lblSirtComport433MHz.Location = new System.Drawing.Point(22, 78); - this.lblSirtComport433MHz.Name = "lblSirtComport433MHz"; - this.lblSirtComport433MHz.Size = new System.Drawing.Size(103, 13); - this.lblSirtComport433MHz.TabIndex = 4; - this.lblSirtComport433MHz.Text = "RSSI Port 433 MHz:"; - // - // lblSirtBoxNo - // - this.lblSirtBoxNo.AutoSize = true; - this.lblSirtBoxNo.Location = new System.Drawing.Point(22, 51); - this.lblSirtBoxNo.Name = "lblSirtBoxNo"; - this.lblSirtBoxNo.Size = new System.Drawing.Size(45, 13); - this.lblSirtBoxNo.TabIndex = 3; - this.lblSirtBoxNo.Text = "Box No:"; - // - // lblSirtStation - // - this.lblSirtStation.AutoSize = true; - this.lblSirtStation.Location = new System.Drawing.Point(22, 24); - this.lblSirtStation.Name = "lblSirtStation"; - this.lblSirtStation.Size = new System.Drawing.Size(57, 13); - this.lblSirtStation.TabIndex = 2; - this.lblSirtStation.Text = "Station ID:"; - // - // FrmSetup - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(780, 671); - this.Controls.Add(this.tabControl1); - this.Controls.Add(this.btnStore); - this.Controls.Add(this.btnReload); - this.MinimumSize = new System.Drawing.Size(755, 410); - this.Name = "FrmSetup"; - this.Text = "Setup"; - this.Load += new System.EventHandler(this.FrmSetup_Load); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.dgvConfig)).EndInit(); - this.tabPage2.ResumeLayout(false); - this.tabPage2.PerformLayout(); - this.tabPage3.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.dgvofflinePw)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.offlinePaswordItemBindingSource)).EndInit(); - this.tabPage4.ResumeLayout(false); - this.tabPage4.PerformLayout(); - this.tabPage5.ResumeLayout(false); - this.tabPage5.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - private System.Windows.Forms.Button btnReload; - private System.Windows.Forms.Button btnStore; - private System.Windows.Forms.DataGridViewTextBoxColumn pcbIDDataGridViewTextBoxColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn passwordDataGridViewTextBoxColumn; - private System.Windows.Forms.BindingSource offlinePaswordItemBindingSource; - private System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.Button btnAddRow; - private System.Windows.Forms.DataGridView dgvConfig; - private System.Windows.Forms.DataGridViewTextBoxColumn tbcSlot; - private System.Windows.Forms.DataGridViewComboBoxColumn cbcRequestPort; - private System.Windows.Forms.DataGridViewComboBoxColumn cbcRequestType; - private System.Windows.Forms.DataGridViewComboBoxColumn cbcStreamingPort; - private System.Windows.Forms.DataGridViewCheckBoxColumn cbcSlotType; - private System.Windows.Forms.DataGridViewButtonColumn btcDetectRequest; - private System.Windows.Forms.DataGridViewButtonColumn btcDetectStreaming; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.CheckBox cbxProductionMode; - private System.Windows.Forms.CheckBox cbUpdateFiles; - private System.Windows.Forms.CheckBox cbUseMinMaxCheck; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox txtWachSeriveUrl; - private System.Windows.Forms.CheckBox cbUseRegisterWatch; - private System.Windows.Forms.TabPage tabPage3; - private System.Windows.Forms.Button cmdAddOffline; - private System.Windows.Forms.DataGridView dgvofflinePw; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; - private System.Windows.Forms.TabPage tabPage4; - private System.Windows.Forms.Button btnLocalDefaultLocal; - private System.Windows.Forms.Label lblLocalPath; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Button btnLocalSearch; - private System.Windows.Forms.Button btnLocalDefaultLan; - private System.Windows.Forms.Label lblLocalCurrentPath; - private System.Windows.Forms.Label lblGlobalCurrentPath; - private System.Windows.Forms.Button btnGlobalSearch; - private System.Windows.Forms.Button btnGlobalDefaultLan; - private System.Windows.Forms.Button btnGlobalDefaultLocal; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TabPage tabPage5; - private System.Windows.Forms.Label lblSirtComport868MHz; - private System.Windows.Forms.Label lblSirtComport433MHz; - private System.Windows.Forms.Label lblSirtBoxNo; - private System.Windows.Forms.Label lblSirtStation; - private System.Windows.Forms.TextBox tbxSirtBoxNo; - private System.Windows.Forms.TextBox tbxSirtStationId; - private System.Windows.Forms.ComboBox cbxSirtComport868MHz; - private System.Windows.Forms.ComboBox cbxSirtComport433MHz; - private System.Windows.Forms.ComboBox cbxSirtService868MHz; - private System.Windows.Forms.ComboBox cbxSirtService433MHz; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label7; - } -} \ No newline at end of file diff --git a/GenesisCordonelTester/UI/FrmSetup.cs b/GenesisCordonelTester/UI/FrmSetup.cs deleted file mode 100644 index c3ee2c491..000000000 --- a/GenesisCordonelTester/UI/FrmSetup.cs +++ /dev/null @@ -1,862 +0,0 @@ -using Newtonsoft.Json; -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Data; -using System.Drawing; -using System.IO; -using System.IO.Ports; -using System.Linq; -using System.Threading; -using System.Windows.Forms; -using System.Xml.Linq; -using Xylem.Common.CommonCore.Consts; -using Xylem.Common.Hardware.Interfaces.Ports.PortCore; -using Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments; -using Xylem.Common.Hardware.Interfaces.Ports.SerialPorts; -using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig; -using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; -using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; -using Xylem.Common.Utils.Logging; -using NLog; -using GenesisCordonelInterface.API; - -namespace GenesisCordonelInterface.UI -{ - /// - /// Setup of GTB - /// - public partial class FrmSetup : Form - { - private static readonly NLog.ILogger Logger = NLog.LogManager.GetLogger("GenesisCordonelInterface"); - private readonly InterfaceToLaatzen interfaceToLaatzen = new InterfaceToLaatzen(); - - private const String RequestPortString = "RequestPort"; - private const String RequestTypeString = "RequestType"; - private const String StreamingPortString = "StreamingPort"; - private const String SlotTypeString = "RefTemperature"; - private const String SlotString = "Slot"; - private const String StreamingDetectString = "DetectStreaming"; - private const String RequestDetectString = "DetectRequest"; - private const String ValueString = "Value"; - private const String TextString = "Text"; - - private String _fileString; - private readonly String _serialConfigFilePathName; - private readonly String _offlinePwdPathName; - private readonly DataTable _slotConfigDataTable = new DataTable(); - private readonly SirtConfig _sirtConfig = new SirtConfig(); - private readonly ProcessConfig _configuration = new ProcessConfig(); - - private ConcurrentBag _countRawData = new ConcurrentBag(); - private List _listOfOfflinePasswords = new List(); - - /// - /// Ctor - /// - public FrmSetup() - { - _serialConfigFilePathName = Path.Combine( - Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), - "Genesis", - ProgramConfig.SerialConfigFileName); - - _offlinePwdPathName = Path.Combine( - Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), - "Genesis", - ProgramConfig.OfflineInfoFile); - - if (!File.Exists(_offlinePwdPathName)) - { - _listOfOfflinePasswords.Add(new OfflinePasswordItem("", "")); - File.WriteAllText(_offlinePwdPathName, JsonConvert.SerializeObject(_listOfOfflinePasswords)); - } - - _slotConfigDataTable.Columns.Add(SlotString, typeof(String)); - _slotConfigDataTable.Columns.Add(StreamingPortString, typeof(String)); - _slotConfigDataTable.Columns.Add(RequestPortString, typeof(String)); - _slotConfigDataTable.Columns.Add(RequestTypeString, typeof(String)); - _slotConfigDataTable.Columns.Add(SlotTypeString, typeof(String)); - - InitializeComponent(); - - tbcSlot.Name = SlotString; - cbcRequestPort.Name = RequestPortString; - cbcRequestType.Name = RequestTypeString; - cbcStreamingPort.Name = StreamingPortString; - cbcSlotType.Name = SlotTypeString; - btcDetectStreaming.Name = StreamingDetectString; - btcDetectRequest.Name = RequestDetectString; - btcDetectStreaming.Name = StreamingDetectString; - - tbcSlot.HeaderText = SlotString; - cbcRequestPort.HeaderText = RequestPortString; - cbcRequestType.HeaderText = RequestTypeString; - cbcStreamingPort.HeaderText = StreamingPortString; - btcDetectRequest.HeaderText = RequestDetectString; - btcDetectStreaming.HeaderText = StreamingDetectString; - cbcSlotType.HeaderText = SlotTypeString; - - LoadFromFile(); - _configuration.ReadProcessConfig(); - cbUseMinMaxCheck.Checked = _configuration.UseMinMaxCheck; - cbUseRegisterWatch.Checked = _configuration.UseRegisterWatchService; - txtWachSeriveUrl.Text = _configuration.RegisterWatchServiceUrl; - cbUpdateFiles.Checked = _configuration.AutoUpdateFiles; - cbxProductionMode.Checked = _configuration.ProductionMode; - - _sirtConfig.ReadSirtConfig(); - tbxSirtStationId.Text = _sirtConfig.StationId?.ToString(); - tbxSirtBoxNo.Text = _sirtConfig.SirtBoxNo?.ToString(); - - if (_sirtConfig.SirtComport433MHz != null) - cbxSirtComport433MHz.Items.Add(_sirtConfig.SirtComport433MHz); - if (_sirtConfig.SirtComport868MHz != null) - cbxSirtComport868MHz.Items.Add(_sirtConfig.SirtComport868MHz); - - var comPorts = SerialPort.GetPortNames().ToList(); - foreach (var comPort in comPorts.Where(comPort => !cbxSirtComport433MHz.Items.Contains(comPort))) - { - cbxSirtComport433MHz.Items.Add(comPort); - } - foreach (var comPort in comPorts.Where(comPort => !cbxSirtComport868MHz.Items.Contains(comPort))) - { - cbxSirtComport868MHz.Items.Add(comPort); - } - - if (cbxSirtComport433MHz.Items.Count > 0) - cbxSirtComport433MHz.Text = cbxSirtComport433MHz.Items[0].ToString(); - if (cbxSirtComport868MHz.Items.Count > 0) - cbxSirtComport868MHz.Text = cbxSirtComport868MHz.Items[0].ToString(); - - if (_sirtConfig.ServiceSirtComport433MHz != null) - cbxSirtService433MHz.Items.Add(_sirtConfig.ServiceSirtComport433MHz); - if (_sirtConfig.ServiceSirtComport868MHz != null) - cbxSirtService868MHz.Items.Add(_sirtConfig.ServiceSirtComport868MHz); - - foreach (var comPort in comPorts.Where(comPort => !cbxSirtService433MHz.Items.Contains(comPort))) - { - cbxSirtService433MHz.Items.Add(comPort); - } - foreach (var comPort in comPorts.Where(comPort => !cbxSirtService868MHz.Items.Contains(comPort))) - { - cbxSirtService868MHz.Items.Add(comPort); - } - - if (cbxSirtService433MHz.Items.Count > 0) - cbxSirtService433MHz.Text = cbxSirtService433MHz.Items[0].ToString(); - if (cbxSirtService868MHz.Items.Count > 0) - cbxSirtService868MHz.Text = cbxSirtService868MHz.Items[0].ToString(); - - Logger.Trace("CONFIG: Setup loaded."); - } - - private void BtnReload_Click(Object sender, EventArgs e) - { - Logger.Trace("CONFIG: Reload setup requested."); - - LoadFromFile(); - LoadOfflineFile(); - - Logger.Trace("CONFIG: Setup reloaded."); - } - - private void BtnStore_Click(Object sender, EventArgs e) - { - Logger.Trace("CONFIG: Save setup requested."); - - StoreToPc(); - StoreOfflineFile(); - StoreSirtSettings(); - - Logger.Trace("CONFIG: Setup saved."); - } - - private void StoreSirtSettings() - { - if (int.TryParse(tbxSirtStationId.Text, out var intNo)) - { - _sirtConfig.StationId = intNo; - } - - if (int.TryParse(tbxSirtBoxNo.Text, out intNo)) - { - _sirtConfig.SirtBoxNo = intNo; - } - - _sirtConfig.SirtComport433MHz = cbxSirtComport433MHz.Text; - _sirtConfig.SirtComport868MHz = cbxSirtComport868MHz.Text; - _sirtConfig.ServiceSirtComport433MHz = cbxSirtService433MHz.Text; - _sirtConfig.ServiceSirtComport868MHz = cbxSirtService868MHz.Text; - - _sirtConfig.Update(); - Logger.Trace("CONFIG: SIRT settings stored."); - } - - private void StoreToPc() - { - Logger.Trace("CONFIG: Storing slot configuration to PC."); - - var newFileContent = new List(); - - for (var row = 0; row < dgvConfig.Rows.Count; row++) - { - var slotStr = (String)dgvConfig.Rows[row].Cells[SlotString].Value; - int.TryParse(slotStr, out var slot); - - var irdaType = typeof(IrdaSerialPort).FullName; - if (dgvConfig.Rows[row].Cells[RequestTypeString].Value != null) - { - irdaType = (String)dgvConfig.Rows[row].Cells[RequestTypeString].Value; - } - - var requestPort = new PortConfig() - { - PortName = (String)dgvConfig.Rows[row].Cells[RequestPortString].Value, - Type = irdaType - }; - - var streamingPort = new PortConfig() - { - PortName = (String)dgvConfig.Rows[row].Cells[StreamingPortString].Value, - Type = typeof(UartSerialPort).FullName - }; - - var slotType = SlotType.DutMeter; - - if (dgvConfig.Rows[row].Cells[SlotTypeString].Value != null) - { - var isChecked = dgvConfig.Rows[row].Cells[SlotTypeString].Value.ToString(); - if (bool.TrueString == isChecked) - { - slotType = SlotType.TemperatureMeter; - } - } - - if (!string.IsNullOrEmpty(slotStr)) - { - newFileContent.Add(new SlotConfig() - { - Slot = slot, - Request = requestPort, - Streaming = streamingPort, - Type = slotType - }); - } - } - - var text = JsonConvert.SerializeObject(newFileContent); - - if (text == _fileString) - { - Logger.Trace("CONFIG: No setup changes detected."); - LoadFromFile(); - return; - } - - if (File.Exists(_serialConfigFilePathName)) - { - var backupSerialConfigFile = - $"{Path.GetDirectoryName(_serialConfigFilePathName)}\\Backup_{DateTime.Now:yyyyMMdd}_{DateTime.Now:HHmmss}_{ProgramConfig.SerialConfigFileName}"; - File.Move(_serialConfigFilePathName, backupSerialConfigFile); - } - - File.WriteAllText(_serialConfigFilePathName, text); - LoadFromFile(); - LoadOfflineFile(); - - Logger.Trace("CONFIG: Slot configuration stored."); - } - - private void LoadFromFile() - { - Logger.Trace("CONFIG: Loading slot configuration from file."); - - _slotConfigDataTable.Clear(); - dgvConfig.Rows.Clear(); - - if (!File.Exists(_serialConfigFilePathName)) - { - Logger.Trace("CONFIG: Serial configuration file not found."); - return; - } - - SlotConfig[] meterConfigList; - using (var tr = new StreamReader(_serialConfigFilePathName)) - { - _fileString = tr.ReadToEnd(); - meterConfigList = JsonConvert.DeserializeObject(_fileString); - } - - foreach (var item in meterConfigList) - { - var row = _slotConfigDataTable.NewRow(); - row[SlotString] = item.Slot; - row[RequestPortString] = item.Request.PortName; - row[RequestTypeString] = item.Request.Type; - row[StreamingPortString] = item.Streaming.PortName; - row[SlotTypeString] = item.Type == SlotType.TemperatureMeter; - _slotConfigDataTable.Rows.Add(row); - } - - foreach (DataRow row in _slotConfigDataTable.Rows) - { - dgvConfig.Rows.Add(AddRowToGrid(row)); - } - - Logger.Trace("CONFIG: Slot configuration loaded."); - } - - private DataGridViewRow AddRowToGrid(DataRow row = null) - { - var newRow = new DataGridViewRow(); - - var slotCell = new DataGridViewTextBoxCell(); - newRow.Cells.Add(slotCell); - - var requestPortCell = new DataGridViewComboBoxCell - { - DataSource = GetPorts(), - DisplayMember = TextString, - ValueMember = ValueString - }; - newRow.Cells.Add(requestPortCell); - - var requestTypeCell = new DataGridViewComboBoxCell - { - DataSource = GetTypes(), - DisplayMember = TextString, - ValueMember = ValueString - }; - newRow.Cells.Add(requestTypeCell); - - var streamingPortCell = new DataGridViewComboBoxCell - { - DataSource = GetPorts(), - DisplayMember = TextString, - ValueMember = ValueString - }; - newRow.Cells.Add(streamingPortCell); - - var slotTypeCell = new DataGridViewCheckBoxCell(); - slotTypeCell.Value = false; - - if (row == null) - { - return newRow; - } - - slotCell.Value = row[SlotString]; - streamingPortCell.Value = row[StreamingPortString]; - requestPortCell.Value = row[RequestPortString]; - - try - { - requestTypeCell.Value = row[RequestTypeString]; - } - catch (Exception ex) - { - Logger.Error("Failed to set request type in grid: " + ex.Message); - } - - slotTypeCell.Value = row[SlotTypeString]; - newRow.Cells.Add(slotTypeCell); - return newRow; - } - - private DataTable GetSlotTypes() - { - var ret = new DataTable(); - ret.Columns.Add(TextString); - ret.Columns.Add(ValueString, typeof(Int32)); - - ret.Rows.Add("DutMeter", SlotType.DutMeter.GetHashCode()); - ret.Rows.Add("TemperatureMeter", SlotType.TemperatureMeter.GetHashCode()); - - return ret; - } - - private DataTable GetPorts() - { - var ret = new DataTable(); - ret.Columns.Add(ValueString); - ret.Columns.Add(TextString); - var portList = SerialPort.GetPortNames().ToList(); - - foreach (var item in portList) - { - ret.Rows.Add(item, item); - } - - foreach (DataRow row in _slotConfigDataTable.Rows) - { - if (portList.All(pl => pl != (String)row[StreamingPortString])) - { - ret.Rows.Add(row[StreamingPortString].ToString(), BaseSerialPort.PortNotAssigned); - } - if (portList.All(pl => pl != (String)row[RequestPortString])) - { - ret.Rows.Add(row[RequestPortString].ToString(), BaseSerialPort.PortNotAssigned); - } - } - - return ret; - } - - private static DataTable GetTypes() - { - var ret = new DataTable(); - ret.Columns.Add(ValueString); - ret.Columns.Add(TextString); - - ret.Rows.Add(typeof(UartSerialPort).FullName, nameof(UartSerialPort)); - ret.Rows.Add(typeof(RfidSerialPort).FullName, nameof(RfidSerialPort)); - ret.Rows.Add(typeof(IrdaSerialPort).FullName, nameof(IrdaSerialPort)); - - return ret; - } - - private void __DgvConfig_CellContentClick(Object sender, DataGridViewCellEventArgs e) - { - Logger.Trace("UI-CLICK: FrmSetup: DgvConfig_CellContentClick() use APILaatzen"); - - if (e.RowIndex < 0 || e.ColumnIndex < 0) - { - return; - } - - if (!dgvConfig.Columns[e.ColumnIndex].Name.Contains(StreamingDetectString) && - !dgvConfig.Columns[e.ColumnIndex].Name.Contains(RequestDetectString)) - { - return; - } - - StoreToPc(); - - var slotString = (String)dgvConfig.Rows[e.RowIndex].Cells[SlotString].Value; - int.TryParse(slotString, out var slot); - - using (var mb = new MeterBatch()) - { - using (var meter = new GenesisMeter()) - { - meter.SetupFromConfigFile(slot, false); - mb.AddMeter(meter); - - const String checkMark = "\u2714"; - - if (dgvConfig.Columns[e.ColumnIndex].Name.Contains(StreamingDetectString)) - { - Logger.Trace("COM: Detecting streaming port for slot " + slot + "..."); - - _countRawData = new ConcurrentBag(); - - meter.StreamingPort.OnRawRecordReceived += delegate (Object o, BasePortDataEventArgs rawMsg) - { - var data = (String)rawMsg.GetData(); - _countRawData.Add(data); - }; - - Thread.Sleep(500); - - if (_countRawData.Any()) - { - var text = $"SUCCESS\nSlot: {slot}\nStreaming port: {meter.StreamingPort.GetPortName()}\n\n{checkMark}"; - MessageBox.Show(text, @"SUCCESS", MessageBoxButtons.OK); - dgvConfig.Rows[e.RowIndex].Cells[StreamingDetectString].Style.BackColor = Color.Green; - - Logger.Info("COM: Streaming detection SUCCESS for slot " + slot + ", port " + meter.StreamingPort.GetPortName() + "."); - } - else - { - var text = $"FAILED\nSlot: {slot}\nStreaming port: {meter.StreamingPort.GetPortName()}"; - MessageBox.Show(text, @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); - dgvConfig.Rows[e.RowIndex].Cells[StreamingDetectString].Style.BackColor = Color.Red; - - Logger.Error("COM: Streaming detection FAILED for slot " + slot + ", port " + meter.StreamingPort.GetPortName() + "."); - } - - _countRawData = new ConcurrentBag(); - } - else - { - meter.Logout(); - - var pcbId = meter.GetPcbId(); - - if (string.IsNullOrEmpty(pcbId)) - { - var text = $"FAILED\nSlot: {slot}\nRequest port: {meter.RequestPort.GetPortName()}"; - MessageBox.Show(text, @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); - dgvConfig.Rows[e.RowIndex].Cells[RequestDetectString].Style.BackColor = Color.Red; - - Logger.Info("COM: Streaming detection SUCCESS for slot " + slot + ", port " + meter.StreamingPort.GetPortName() + "."); - } - else - { - var text = $"SUCCESS\nSlot: {slot}\nRequest port: {meter.RequestPort.GetPortName()}\n\n{checkMark}"; - MessageBox.Show(text, @"SUCCESS", MessageBoxButtons.OK); - dgvConfig.Rows[e.RowIndex].Cells[RequestDetectString].Style.BackColor = Color.Green; - - Logger.Error("COM: Streaming detection FAILED for slot " + slot + ", port " + meter.StreamingPort.GetPortName() + "."); - } - } - } - } - } - - private void DgvConfig_CellContentClick(object sender, DataGridViewCellEventArgs e) - { - Logger.Trace("UI-CLICK: FrmSetup: DgvConfig_CellContentClick() use API2"); - - if (e.RowIndex < 0 || e.ColumnIndex < 0) - return; - - var columnName = dgvConfig.Columns[e.ColumnIndex].Name; - - if (!columnName.Contains(StreamingDetectString) && - !columnName.Contains(RequestDetectString)) - { - return; - } - - StoreToPc(); - - var slotString = (string)dgvConfig.Rows[e.RowIndex].Cells[SlotString].Value; - if (!int.TryParse(slotString, out var slot)) - return; - - const string checkMark = "\u2714"; - - try - { - if (columnName.Contains(StreamingDetectString)) - { - Logger.Trace("COM: Detecting streaming port for slot " + slot + "..."); - - var result = interfaceToLaatzen.DetectStreamingPort(slot); - - if (result.Success) - { - var text = $"SUCCESS\nSlot: {result.Slot}\nStreaming port: {result.PortName}\n\n{checkMark}"; - MessageBox.Show(text, @"SUCCESS", MessageBoxButtons.OK); - dgvConfig.Rows[e.RowIndex].Cells[StreamingDetectString].Style.BackColor = Color.Green; - - Logger.Info("COM: Streaming detection SUCCESS for slot " + result.Slot + ", port " + result.PortName + "."); - } - else - { - var text = $"FAILED\nSlot: {result.Slot}\nStreaming port: {result.PortName}"; - MessageBox.Show(text, @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); - dgvConfig.Rows[e.RowIndex].Cells[StreamingDetectString].Style.BackColor = Color.Red; - - Logger.Error("COM: Streaming detection FAILED for slot " + result.Slot + ", port " + result.PortName + "."); - } - } - else - { - var result = interfaceToLaatzen.DetectRequestPort(slot); - - if (result.Success) - { - var text = $"SUCCESS\nSlot: {result.Slot}\nRequest port: {result.PortName}\n\n{checkMark}"; - MessageBox.Show(text, @"SUCCESS", MessageBoxButtons.OK); - dgvConfig.Rows[e.RowIndex].Cells[RequestDetectString].Style.BackColor = Color.Green; - - Logger.Info("COM: Request detection SUCCESS for slot " + result.Slot + ", port " + result.PortName + "."); - } - else - { - var text = $"FAILED\nSlot: {result.Slot}\nRequest port: {result.PortName}"; - MessageBox.Show(text, @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); - dgvConfig.Rows[e.RowIndex].Cells[RequestDetectString].Style.BackColor = Color.Red; - - Logger.Error("COM: Request detection FAILED for slot " + result.Slot + ", port " + result.PortName + "."); - } - } - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, @"ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); - Logger.Error(ex); - } - } - - private void dgvConfig_DataError(Object sender, DataGridViewDataErrorEventArgs e) - { - Logger.Error("CONFIG: DataGridView data error."); - } - - private void cbUseRegisterWatch_CheckedChanged(Object sender, EventArgs e) - { - _configuration.UseRegisterWatchService = cbUseRegisterWatch.Checked; - _configuration.Update(); - StoreToPc(); - - Logger.Trace("UseRegisterWatchService changed to " + cbUseRegisterWatch.Checked); - } - - private void cbUseMinMaxCheck_CheckedChanged(Object sender, EventArgs e) - { - _configuration.UseMinMaxCheck = cbUseMinMaxCheck.Checked; - _configuration.Update(); - StoreToPc(); - - Logger.Trace("UseMinMaxCheck changed to " + cbUseMinMaxCheck.Checked); - } - - private void textBox1_TextChanged(Object sender, EventArgs e) - { - _configuration.RegisterWatchServiceUrl = txtWachSeriveUrl.Text; - _configuration.Update(); - StoreToPc(); - - Logger.Trace("RegisterWatchServiceUrl changed."); - } - - private void cbUpdateFiles_CheckedChanged(Object sender, EventArgs e) - { - _configuration.AutoUpdateFiles = cbUpdateFiles.Checked; - _configuration.Update(); - StoreToPc(); - - Logger.Trace("CONFIG: AutoUpdateFiles changed to " + cbUpdateFiles.Checked); - } - - private void FrmSetup_Load(Object sender, EventArgs e) - { - LoadOfflineFile(); - cbxProductionMode.CheckedChanged += cbxProductionMode_CheckedChanged; - - Logger.Trace("FORM: FrmSetup loaded."); - } - - private void StoreOfflineFile() - { - try - { - var listToRemove = _listOfOfflinePasswords.Where(offlinePwd => string.IsNullOrEmpty(offlinePwd.PcbID)).ToList(); - foreach (var itemToRemove in listToRemove) - { - _listOfOfflinePasswords.Remove(itemToRemove); - } - _listOfOfflinePasswords.Add(new OfflinePasswordItem("", "")); - - File.WriteAllText(_offlinePwdPathName, JsonConvert.SerializeObject(_listOfOfflinePasswords)); - dgvofflinePw.CellValidated -= dgvofflinePw_CellValidated; - dgvofflinePw.DataSource = null; - dgvofflinePw.DataSource = _listOfOfflinePasswords; - dgvofflinePw.CellValidated += dgvofflinePw_CellValidated; - - Logger.Trace("CONFIG: Offline password file stored."); - } - catch (Exception ex) - { - Logger.Error("CONFIG: Failed to store offline password file: " + ex.Message); - } - } - - private void LoadOfflineFile() - { - try - { - _listOfOfflinePasswords = JsonConvert.DeserializeObject>(File.ReadAllText(_offlinePwdPathName)); - } - catch (Exception ex) - { - _listOfOfflinePasswords = new List(); - Logger.Error("CONFIG: Failed to load offline password file. New empty list created. " + ex.Message); - } - finally - { - if (!_listOfOfflinePasswords.Any()) - { - _listOfOfflinePasswords.Add(new OfflinePasswordItem("", "")); - } - - dgvofflinePw.CellValidated -= dgvofflinePw_CellValidated; - dgvofflinePw.DataSource = null; - dgvofflinePw.DataSource = _listOfOfflinePasswords; - dgvofflinePw.CellValidated += dgvofflinePw_CellValidated; - - Logger.Trace("CONFIG: Offline password file loaded."); - } - } - - private void dgvofflinePw_CellValidated(Object sender, DataGridViewCellEventArgs e) - { - StoreOfflineFile(); - } - - private void cmdAddOffline_Click(Object sender, EventArgs e) - { - _listOfOfflinePasswords.Add(new OfflinePasswordItem("", "")); - - dgvofflinePw.DataSource = null; - dgvofflinePw.DataSource = _listOfOfflinePasswords; - - Logger.Trace("TABLE: Offline password row added."); - } - - private void cbxProductionMode_CheckedChanged(Object sender, EventArgs e) - { - if (cbxProductionMode.Checked) - { - MessageBox.Show(@"Production mode! Configuration.json has to be the latest! "); - } - else - { - MessageBox.Show("Developer mode! Configuration.json can be exchanged on individual requirements.\n" + - "\nRISK:\n" + - "- Register ranges cannot be checked\n" + - "- Register may not be able to access"); - } - - _configuration.ProductionMode = cbxProductionMode.Checked; - _configuration.Update(); - StoreToPc(); - - Logger.Trace("CHECKBOX: ProductionMode changed to " + cbxProductionMode.Checked); - } - - private void tabPage4_Click(Object sender, EventArgs e) - { - Logger.Trace("TABPAGE4: Logging tab opened."); - - try - { - var path = NLogHelper.GetCurrentApplicationFolder(); - var a = XElement.Load(path); - lblLocalCurrentPath.Text = a.Elements() - .First(s => s.Name.LocalName == "variable") - .Attributes() - .First(s => s.Value == "BasePath") - .NextAttribute.Value; - } - catch (Exception ex) - { - lblLocalCurrentPath.Text = ex.Message; - Logger.Error("TABPAGE4: Failed to read local NLog path: " + ex.Message); - } - - try - { - var path = NLogHelper.GetApplicationDataPath(); - var b = XElement.Load(path); - lblGlobalCurrentPath.Text = b.Elements() - .First(s => s.Name.LocalName == "variable") - .Attributes() - .First(s => s.Value == "BasePath") - .NextAttribute.Value; - } - catch (Exception ex) - { - lblGlobalCurrentPath.Text = ex.Message; - Logger.Error("TABPAGE4: Failed to read global NLog path: " + ex.Message); - } - } - - private void Add(String path, String newDest) - { - try - { - var a = XElement.Load(path); - var firstIsVariable = a.Elements().First(); - - if (firstIsVariable.Name.LocalName != "variable") - { - var newElm = new XElement("variable", null); - newElm.SetAttributeValue("name", "BasePath"); - newElm.SetAttributeValue("value", newDest); - a.AddFirst(newElm); - } - else if (a.Elements().First(b => b.Name.LocalName == "variable").Attributes() - .All(s => s.Value != "BasePath")) - { - var newElm = new XElement("variable", null); - newElm.SetAttributeValue("name", "BasePath"); - newElm.SetAttributeValue("value", newDest); - a.AddFirst(newElm); - } - else - { - a.Elements().First(b => b.Name.LocalName == "variable").Attributes() - .First(s => s.Value == "BasePath").NextAttribute.Value = newDest; - } - - a.Save(path); - tabPage4_Click(this, null); - - Logger.Trace("Log path updated to: " + newDest); - } - catch (Exception ex) - { - Logger.Trace("Failed to update log path: " + ex.Message); - } - } - - private void btnLocalDefaultLocal_Click(Object sender, EventArgs e) - { - Add(NLogHelper.GetCurrentApplicationFolder(), "C:\\GenesisLog\\"); - Logger.Trace("Local log path set to default local."); - } - - private void btnLocalDefaultLan_Click(Object sender, EventArgs e) - { - Add(NLogHelper.GetCurrentApplicationFolder(), "\\\\sla12buma\\cordonelds$\\${machinename}"); - Logger.Trace("Local log path set to default LAN."); - } - - private void btnGlobalDefaultLocal_Click(Object sender, EventArgs e) - { - Add(NLogHelper.GetApplicationDataPath(), "C:\\GenesisLog\\"); - Logger.Trace("Global log path set to default local."); - } - - private void btnGlobalDefaultLan_Click(Object sender, EventArgs e) - { - Add(NLogHelper.GetApplicationDataPath(), "\\\\sla12buma\\cordonelds$\\${{machinename}}"); - Logger.Trace("Global log path set to default LAN."); - } - - private void btnGlobalSearch_Click(Object sender, EventArgs e) - { - var dia = new FolderBrowserDialog(); - dia.ShowDialog(); - - Add(NLogHelper.GetApplicationDataPath(), dia.SelectedPath); - Logger.Trace("Global log path selected by search dialog."); - } - - private void btnLocalSearch_Click(Object sender, EventArgs e) - { - var dia = new FolderBrowserDialog(); - dia.ShowDialog(); - - Add(NLogHelper.GetCurrentApplicationFolder(), dia.SelectedPath); - Logger.Trace("Local log path selected by search dialog."); - } - - private void btnAddRow_Click(Object sender, EventArgs e) - { - dgvConfig.Rows.Add(AddRowToGrid()); - Logger.Trace("TABLE: New slot row added."); - } - - public class OfflinePasswordItem - { - public OfflinePasswordItem() - { - } - - public OfflinePasswordItem(String pcbID, String password) - { - PcbID = pcbID; - Password = password; - } - - public String PcbID { get; set; } - public String Password { get; set; } - } - } -} \ No newline at end of file diff --git a/GenesisCordonelTester/UI/FrmSetup.resx b/GenesisCordonelTester/UI/FrmSetup.resx deleted file mode 100644 index 1af7de150..000000000 --- a/GenesisCordonelTester/UI/FrmSetup.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/GenesisCordonelTester/UI/Laatzen_CordonelPreadjustmentUI/FrmCordonelPreadjustmentUI.Designer.cs b/GenesisCordonelTester/UI/Laatzen_CordonelPreadjustmentUI/FrmCordonelPreadjustmentUI.Designer.cs index a88472043..9cff2bfeb 100644 --- a/GenesisCordonelTester/UI/Laatzen_CordonelPreadjustmentUI/FrmCordonelPreadjustmentUI.Designer.cs +++ b/GenesisCordonelTester/UI/Laatzen_CordonelPreadjustmentUI/FrmCordonelPreadjustmentUI.Designer.cs @@ -664,7 +664,7 @@ this.gB_Passwords.Size = new System.Drawing.Size(272, 288); this.gB_Passwords.TabIndex = 30; this.gB_Passwords.TabStop = false; - this.gB_Passwords.Text = "Passwords"; + this.gB_Passwords.Text = "_externPasswords"; // // tB_PasswordMeter5 // diff --git a/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmConfigurations.cs b/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmConfigurations.cs index 35babda24..66d95f4e9 100644 --- a/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmConfigurations.cs +++ b/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmConfigurations.cs @@ -52,7 +52,7 @@ namespace Xylem.Common.Ui.GenesisToolBox public partial class FrmConfigurations : Form { private static readonly NLog.ILogger Logger = NLog.LogManager.GetLogger("GenesisCordonelInterface"); - private readonly InterfaceToLaatzen interfaceToLaatzen = new InterfaceToLaatzen(); + private readonly InterfaceGCIToLaatzen interfaceToLaatzen = new InterfaceGCIToLaatzen(); private GenesisMeter _currentGenesis; private String _currentPcbId; diff --git a/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmRegisterStore.Designer.cs b/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmRegisterStore.Designer.cs index 467ea1a8b..2f2ea61ac 100644 --- a/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmRegisterStore.Designer.cs +++ b/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmRegisterStore.Designer.cs @@ -334,7 +334,7 @@ this.cbxUseOfflinePwds.Name = "cbxUseOfflinePwds"; this.cbxUseOfflinePwds.Size = new System.Drawing.Size(132, 17); this.cbxUseOfflinePwds.TabIndex = 78; - this.cbxUseOfflinePwds.Text = "Use Offline Passwords"; + this.cbxUseOfflinePwds.Text = "Use Offline _externPasswords"; this.cbxUseOfflinePwds.UseVisualStyleBackColor = true; this.cbxUseOfflinePwds.CheckedChanged += new System.EventHandler(this.cbxUseOfflinePwds_CheckedChanged); // diff --git a/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmRegisterStore.cs b/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmRegisterStore.cs index 440587c33..171d70005 100644 --- a/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmRegisterStore.cs +++ b/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmRegisterStore.cs @@ -1,4 +1,5 @@ //...MF using LaaPackages.Features.Cordonel; +using GenesisCordonelInterface.API; using Logic.ProductionToProductMapper.Cordonel; using Newtonsoft.Json; using NLog; @@ -28,16 +29,16 @@ using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; using Xylem.Common.Logic.ProductionOrderCore.TestResults; using Xylem.Common.Logic.SoftwareAccessHelper; using Xylem.Common.Utils.Logging; +using static Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.GenesisMeter; using Access = Xylem.Common.Hardware.WaterMeter.Genesis.Registers.Access; using Register = Xylem.Common.Hardware.WaterMeter.Genesis.Registers.Register; -using GenesisCordonelInterface.API; namespace GenesisCordonelInterface.UI { public partial class FrmRegisterStore : Form { private static readonly NLog.ILogger Logger = NLog.LogManager.GetLogger("GenesisCordonelInterface"); - private readonly InterfaceToLaatzen interfaceToLaatzen = new InterfaceToLaatzen(); + private readonly InterfaceGCIToLaatzen interfaceToLaatzen = new InterfaceGCIToLaatzen(); public class regStore { @@ -491,7 +492,7 @@ namespace GenesisCordonelInterface.UI DisableAllButtons(); _dataTable.Rows.Clear(); - var result = await Task.Run(() => interfaceToLaatzen.Connect(slotNo, cbxUseOfflinePwds.Checked)); + var result = await Task.Run(() => interfaceToLaatzen.Connect(slotNo, cbxUseOfflinePwds.Checked == true ? PasswordSource.OfflineFile: PasswordSource.RestApi, null)); if (result.Success) { diff --git a/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmSetup.cs b/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmSetup.cs index c3ee2c491..615a3ff86 100644 --- a/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmSetup.cs +++ b/GenesisCordonelTester/UI/Laatzen_GenesisToolBox/FrmSetup.cs @@ -29,7 +29,7 @@ namespace GenesisCordonelInterface.UI public partial class FrmSetup : Form { private static readonly NLog.ILogger Logger = NLog.LogManager.GetLogger("GenesisCordonelInterface"); - private readonly InterfaceToLaatzen interfaceToLaatzen = new InterfaceToLaatzen(); + private readonly InterfaceGCIToLaatzen interfaceToLaatzen = new InterfaceGCIToLaatzen(); private const String RequestPortString = "RequestPort"; private const String RequestTypeString = "RequestType"; diff --git a/GenesisCordonelTester/UI/MainForm.Designer.cs b/GenesisCordonelTester/UI/MainForm.Designer.cs index cfc1f5b1d..a9b82dbd9 100644 --- a/GenesisCordonelTester/UI/MainForm.Designer.cs +++ b/GenesisCordonelTester/UI/MainForm.Designer.cs @@ -42,6 +42,7 @@ this.miHelp = new System.Windows.Forms.ToolStripMenuItem(); this.miHelpAbout = new System.Windows.Forms.ToolStripMenuItem(); this.pnlLeftMenu = new System.Windows.Forms.Panel(); + this.preadjustmentButton = new System.Windows.Forms.Button(); this.btnPulseSetup = new System.Windows.Forms.Button(); this.btnRegisterStore = new System.Windows.Forms.Button(); this.btnSetup = new System.Windows.Forms.Button(); @@ -49,7 +50,6 @@ this.rtbMainLog = new System.Windows.Forms.RichTextBox(); this.statusStrip1 = new System.Windows.Forms.StatusStrip(); this.tslStatus = new System.Windows.Forms.ToolStripStatusLabel(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); this.menuStrip1.SuspendLayout(); this.pnlLeftMenu.SuspendLayout(); this.pnlMain.SuspendLayout(); @@ -117,6 +117,7 @@ // pnlLeftMenu // this.pnlLeftMenu.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pnlLeftMenu.Controls.Add(this.preadjustmentButton); this.pnlLeftMenu.Controls.Add(this.btnPulseSetup); this.pnlLeftMenu.Controls.Add(this.btnRegisterStore); this.pnlLeftMenu.Controls.Add(this.btnSetup); @@ -126,6 +127,16 @@ this.pnlLeftMenu.Size = new System.Drawing.Size(180, 474); this.pnlLeftMenu.TabIndex = 1; // + // preadjustmentButton + // + this.preadjustmentButton.Location = new System.Drawing.Point(13, 219); + this.preadjustmentButton.Name = "preadjustmentButton"; + this.preadjustmentButton.Size = new System.Drawing.Size(153, 35); + this.preadjustmentButton.TabIndex = 3; + this.preadjustmentButton.Text = "Preadjustment"; + this.preadjustmentButton.UseVisualStyleBackColor = true; + this.preadjustmentButton.Click += new System.EventHandler(this.preadjustmentButton_Click); + // // btnPulseSetup // this.btnPulseSetup.Location = new System.Drawing.Point(13, 96); @@ -194,23 +205,11 @@ this.tslStatus.Size = new System.Drawing.Size(39, 17); this.tslStatus.Text = "Ready"; // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(689, 7); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(168, 17); - this.checkBox1.TabIndex = 4; - this.checkBox1.Text = "Enable NLog (force configure)"; - this.checkBox1.UseVisualStyleBackColor = true; - this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); - // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(1284, 520); - this.Controls.Add(this.checkBox1); this.Controls.Add(this.pnlMain); this.Controls.Add(this.pnlLeftMenu); this.Controls.Add(this.statusStrip1); @@ -230,7 +229,6 @@ this.PerformLayout(); } - - private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Button preadjustmentButton; } } \ No newline at end of file diff --git a/GenesisCordonelTester/UI/MainForm.cs b/GenesisCordonelTester/UI/MainForm.cs index 4588e5257..80eca80ee 100644 --- a/GenesisCordonelTester/UI/MainForm.cs +++ b/GenesisCordonelTester/UI/MainForm.cs @@ -180,19 +180,6 @@ namespace GenesisCordonelInterface.UI MessageBoxIcon.Information); } - private void checkBox1_CheckedChanged(object sender, EventArgs e) - { - if (checkBox1.Checked) - { - var configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nlog.config"); - NLog.LogManager.Setup().LoadConfigurationFromFile(configPath); - NLog.LogManager.ReconfigExistingLoggers(); - - var log = NLog.LogManager.GetLogger("GenesisCordonelInterface"); - log.Trace("GenesisCordonelInterface NLogConfig forced after delay"); - } - } - private Color GetLogLevelColor(string level) { switch (level.Trim().ToUpperInvariant()) @@ -274,5 +261,19 @@ namespace GenesisCordonelInterface.UI } } } + + private void preadjustmentButton_Click(object sender, EventArgs e) + { + Logger.Trace("FORM: ---------------------------------"); + Logger.Trace("FORM: Preadjustment open."); + + + using (FrmCordonelPreadjustmentUI frm = new FrmCordonelPreadjustmentUI()) + { + frm.ShowDialog(this); + } + + Logger.Trace("FORM: Preadjustment closed."); + } } } \ No newline at end of file diff --git a/GenesisCordonelTester/UI/PreAdjustmentControl.Designer.cs b/GenesisCordonelTester/UI/PreAdjustmentControl.Designer.cs deleted file mode 100644 index f05c39b2f..000000000 --- a/GenesisCordonelTester/UI/PreAdjustmentControl.Designer.cs +++ /dev/null @@ -1,671 +0,0 @@ -namespace CordonelPreadjustmentUi -{ - partial class PreAdjustmentControl - { - /// - /// Erforderliche Designervariable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Verwendete Ressourcen bereinigen. - /// - /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Vom Komponenten-Designer generierter Code - - /// - /// Erforderliche Methode für die Designerunterstützung. - /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PreAdjustmentControl)); - this.pB_Logo1 = new System.Windows.Forms.PictureBox(); - this.gB_Meters = new System.Windows.Forms.GroupBox(); - this.pB_Bubbles1 = new System.Windows.Forms.PictureBox(); - this.l_ZeroFlowCal_Status = new System.Windows.Forms.Label(); - this.gB_Progress = new System.Windows.Forms.GroupBox(); - this.p_ZeroFlowCal_Completion = new System.Windows.Forms.Panel(); - this.l_ZeroFlowCal_Completion = new System.Windows.Forms.Label(); - this.p_ZeroFlowCal_Offset = new System.Windows.Forms.Panel(); - this.l_ZeroFlowCal_Offset = new System.Windows.Forms.Label(); - this.cB_ZeroFlowOffsetTestEnable = new System.Windows.Forms.CheckBox(); - this.cB_AmplitudeTestEnable = new System.Windows.Forms.CheckBox(); - this.cB_TempCalEnable = new System.Windows.Forms.CheckBox(); - this.p_ZeroFlowCal_Detect = new System.Windows.Forms.Panel(); - this.l_ZeroFlowCal_Detect = new System.Windows.Forms.Label(); - this.p_ZeroFlowCal_TempCal = new System.Windows.Forms.Panel(); - this.l_ZeroFlowCal_TempCal = new System.Windows.Forms.Label(); - this.p_ZeroFlowCal_Prepare = new System.Windows.Forms.Panel(); - this.l_ZeroFlowCal_Prepare = new System.Windows.Forms.Label(); - this.p_ZeroFlowCal_Amplitude = new System.Windows.Forms.Panel(); - this.l_ZeroFlowCal_Amplitude = new System.Windows.Forms.Label(); - this.gB_TempMeters = new System.Windows.Forms.GroupBox(); - this.btn_StoreTempe = new System.Windows.Forms.Button(); - this.pB_ZeroFlowCal_Progress = new System.Windows.Forms.ProgressBar(); - this.l_ZeroFlowCal_ResttimeDisplayValue = new System.Windows.Forms.Label(); - this.l_ZeroFlowCal_Resttime = new System.Windows.Forms.Label(); - this.btn_ZeroFlowCal_Abort = new System.Windows.Forms.Button(); - this.btn_ZeroFlowCal_Start = new System.Windows.Forms.Button(); - this.btn_ZeroFlowCal_Pdf = new System.Windows.Forms.Button(); - this.btn_ZeroFlowCal_Save = new System.Windows.Forms.Button(); - this.btn_ZeroFlowCal_Clear = new System.Windows.Forms.Button(); - this.btn_ZeroFlowCal_Detect = new System.Windows.Forms.Button(); - this.gB_MeterLog = new System.Windows.Forms.GroupBox(); - this.btn_ShowAll = new System.Windows.Forms.Button(); - this.rTB_ZeroFlowCalMeter = new System.Windows.Forms.RichTextBox(); - this.pB_ZeroFlowCal_SubProgress = new System.Windows.Forms.ProgressBar(); - this.l_ZeroFlowCal_SubResttimeDisplayValue = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.rTB_ZeroFlowCal = new System.Windows.Forms.RichTextBox(); - this.l_SettingsPreparationMetersize = new System.Windows.Forms.Label(); - this.cb_Metersize = new System.Windows.Forms.ComboBox(); - this.lblBuildDate = new System.Windows.Forms.Label(); - ((System.ComponentModel.ISupportInitialize)(this.pB_Logo1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pB_Bubbles1)).BeginInit(); - this.gB_Progress.SuspendLayout(); - this.p_ZeroFlowCal_Completion.SuspendLayout(); - this.p_ZeroFlowCal_Offset.SuspendLayout(); - this.p_ZeroFlowCal_Detect.SuspendLayout(); - this.p_ZeroFlowCal_TempCal.SuspendLayout(); - this.p_ZeroFlowCal_Prepare.SuspendLayout(); - this.p_ZeroFlowCal_Amplitude.SuspendLayout(); - this.gB_TempMeters.SuspendLayout(); - this.gB_MeterLog.SuspendLayout(); - this.SuspendLayout(); - // - // pB_Logo1 - // - this.pB_Logo1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.pB_Logo1.BackColor = System.Drawing.SystemColors.Control; - this.pB_Logo1.Image = ((System.Drawing.Image)(resources.GetObject("pB_Logo1.Image"))); - this.pB_Logo1.InitialImage = null; - this.pB_Logo1.Location = new System.Drawing.Point(781, 0); - this.pB_Logo1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.pB_Logo1.Name = "pB_Logo1"; - this.pB_Logo1.Size = new System.Drawing.Size(158, 86); - this.pB_Logo1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pB_Logo1.TabIndex = 69; - this.pB_Logo1.TabStop = false; - // - // gB_Meters - // - this.gB_Meters.Location = new System.Drawing.Point(1, 98); - this.gB_Meters.Margin = new System.Windows.Forms.Padding(10, 10, 10, 10); - this.gB_Meters.Name = "gB_Meters"; - this.gB_Meters.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.gB_Meters.Size = new System.Drawing.Size(950, 174); - this.gB_Meters.TabIndex = 71; - this.gB_Meters.TabStop = false; - this.gB_Meters.Text = "Meters"; - // - // pB_Bubbles1 - // - this.pB_Bubbles1.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.pB_Bubbles1.Image = ((System.Drawing.Image)(resources.GetObject("pB_Bubbles1.Image"))); - this.pB_Bubbles1.Location = new System.Drawing.Point(20, 2); - this.pB_Bubbles1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.pB_Bubbles1.Name = "pB_Bubbles1"; - this.pB_Bubbles1.Size = new System.Drawing.Size(267, 93); - this.pB_Bubbles1.TabIndex = 70; - this.pB_Bubbles1.TabStop = false; - this.pB_Bubbles1.Visible = false; - // - // l_ZeroFlowCal_Status - // - this.l_ZeroFlowCal_Status.AutoSize = true; - this.l_ZeroFlowCal_Status.Font = new System.Drawing.Font("Microsoft Sans Serif", 22.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_ZeroFlowCal_Status.Location = new System.Drawing.Point(10, 478); - this.l_ZeroFlowCal_Status.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_ZeroFlowCal_Status.Name = "l_ZeroFlowCal_Status"; - this.l_ZeroFlowCal_Status.Size = new System.Drawing.Size(243, 36); - this.l_ZeroFlowCal_Status.TabIndex = 72; - this.l_ZeroFlowCal_Status.Text = "Press \'DETECT\'"; - // - // gB_Progress - // - this.gB_Progress.Controls.Add(this.p_ZeroFlowCal_Completion); - this.gB_Progress.Controls.Add(this.p_ZeroFlowCal_Offset); - this.gB_Progress.Controls.Add(this.p_ZeroFlowCal_Detect); - this.gB_Progress.Controls.Add(this.p_ZeroFlowCal_TempCal); - this.gB_Progress.Controls.Add(this.p_ZeroFlowCal_Prepare); - this.gB_Progress.Controls.Add(this.p_ZeroFlowCal_Amplitude); - this.gB_Progress.Location = new System.Drawing.Point(8, 517); - this.gB_Progress.Margin = new System.Windows.Forms.Padding(10, 10, 10, 10); - this.gB_Progress.Name = "gB_Progress"; - this.gB_Progress.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.gB_Progress.Size = new System.Drawing.Size(744, 89); - this.gB_Progress.TabIndex = 80; - this.gB_Progress.TabStop = false; - // - // p_ZeroFlowCal_Completion - // - this.p_ZeroFlowCal_Completion.BackColor = System.Drawing.Color.Gainsboro; - this.p_ZeroFlowCal_Completion.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.p_ZeroFlowCal_Completion.Controls.Add(this.l_ZeroFlowCal_Completion); - this.p_ZeroFlowCal_Completion.Location = new System.Drawing.Point(607, 17); - this.p_ZeroFlowCal_Completion.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.p_ZeroFlowCal_Completion.Name = "p_ZeroFlowCal_Completion"; - this.p_ZeroFlowCal_Completion.Size = new System.Drawing.Size(117, 65); - this.p_ZeroFlowCal_Completion.TabIndex = 32; - // - // l_ZeroFlowCal_Completion - // - this.l_ZeroFlowCal_Completion.AutoSize = true; - this.l_ZeroFlowCal_Completion.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_ZeroFlowCal_Completion.ForeColor = System.Drawing.Color.Gray; - this.l_ZeroFlowCal_Completion.Location = new System.Drawing.Point(0, 22); - this.l_ZeroFlowCal_Completion.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_ZeroFlowCal_Completion.Name = "l_ZeroFlowCal_Completion"; - this.l_ZeroFlowCal_Completion.Size = new System.Drawing.Size(108, 17); - this.l_ZeroFlowCal_Completion.TabIndex = 40; - this.l_ZeroFlowCal_Completion.Text = "COMPLETION"; - this.l_ZeroFlowCal_Completion.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // p_ZeroFlowCal_Offset - // - this.p_ZeroFlowCal_Offset.BackColor = System.Drawing.Color.Gainsboro; - this.p_ZeroFlowCal_Offset.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.p_ZeroFlowCal_Offset.Controls.Add(this.l_ZeroFlowCal_Offset); - this.p_ZeroFlowCal_Offset.Controls.Add(this.cB_ZeroFlowOffsetTestEnable); - this.p_ZeroFlowCal_Offset.Controls.Add(this.cB_AmplitudeTestEnable); - this.p_ZeroFlowCal_Offset.Controls.Add(this.cB_TempCalEnable); - this.p_ZeroFlowCal_Offset.Location = new System.Drawing.Point(486, 17); - this.p_ZeroFlowCal_Offset.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.p_ZeroFlowCal_Offset.Name = "p_ZeroFlowCal_Offset"; - this.p_ZeroFlowCal_Offset.Size = new System.Drawing.Size(121, 65); - this.p_ZeroFlowCal_Offset.TabIndex = 94; - // - // l_ZeroFlowCal_Offset - // - this.l_ZeroFlowCal_Offset.AutoSize = true; - this.l_ZeroFlowCal_Offset.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_ZeroFlowCal_Offset.ForeColor = System.Drawing.Color.Gray; - this.l_ZeroFlowCal_Offset.Location = new System.Drawing.Point(24, 12); - this.l_ZeroFlowCal_Offset.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_ZeroFlowCal_Offset.Name = "l_ZeroFlowCal_Offset"; - this.l_ZeroFlowCal_Offset.Size = new System.Drawing.Size(68, 34); - this.l_ZeroFlowCal_Offset.TabIndex = 40; - this.l_ZeroFlowCal_Offset.Text = "OFFSET\r\nTEST"; - this.l_ZeroFlowCal_Offset.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // cB_ZeroFlowOffsetTestEnable - // - this.cB_ZeroFlowOffsetTestEnable.AutoSize = true; - this.cB_ZeroFlowOffsetTestEnable.Checked = true; - this.cB_ZeroFlowOffsetTestEnable.CheckState = System.Windows.Forms.CheckState.Checked; - this.cB_ZeroFlowOffsetTestEnable.Enabled = false; - this.cB_ZeroFlowOffsetTestEnable.Location = new System.Drawing.Point(24, 15); - this.cB_ZeroFlowOffsetTestEnable.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.cB_ZeroFlowOffsetTestEnable.Name = "cB_ZeroFlowOffsetTestEnable"; - this.cB_ZeroFlowOffsetTestEnable.Size = new System.Drawing.Size(58, 17); - this.cB_ZeroFlowOffsetTestEnable.TabIndex = 90; - this.cB_ZeroFlowOffsetTestEnable.Text = "enable"; - this.cB_ZeroFlowOffsetTestEnable.UseVisualStyleBackColor = true; - this.cB_ZeroFlowOffsetTestEnable.Visible = false; - // - // cB_AmplitudeTestEnable - // - this.cB_AmplitudeTestEnable.AutoSize = true; - this.cB_AmplitudeTestEnable.Checked = true; - this.cB_AmplitudeTestEnable.CheckState = System.Windows.Forms.CheckState.Checked; - this.cB_AmplitudeTestEnable.Enabled = false; - this.cB_AmplitudeTestEnable.Location = new System.Drawing.Point(-216, 48); - this.cB_AmplitudeTestEnable.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.cB_AmplitudeTestEnable.Name = "cB_AmplitudeTestEnable"; - this.cB_AmplitudeTestEnable.Size = new System.Drawing.Size(58, 17); - this.cB_AmplitudeTestEnable.TabIndex = 92; - this.cB_AmplitudeTestEnable.Text = "enable"; - this.cB_AmplitudeTestEnable.UseVisualStyleBackColor = true; - // - // cB_TempCalEnable - // - this.cB_TempCalEnable.AutoSize = true; - this.cB_TempCalEnable.Checked = true; - this.cB_TempCalEnable.CheckState = System.Windows.Forms.CheckState.Checked; - this.cB_TempCalEnable.Enabled = false; - this.cB_TempCalEnable.Location = new System.Drawing.Point(-96, 48); - this.cB_TempCalEnable.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.cB_TempCalEnable.Name = "cB_TempCalEnable"; - this.cB_TempCalEnable.Size = new System.Drawing.Size(58, 17); - this.cB_TempCalEnable.TabIndex = 94; - this.cB_TempCalEnable.Text = "enable"; - this.cB_TempCalEnable.UseVisualStyleBackColor = true; - // - // p_ZeroFlowCal_Detect - // - this.p_ZeroFlowCal_Detect.BackColor = System.Drawing.Color.Gainsboro; - this.p_ZeroFlowCal_Detect.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.p_ZeroFlowCal_Detect.Controls.Add(this.l_ZeroFlowCal_Detect); - this.p_ZeroFlowCal_Detect.Location = new System.Drawing.Point(4, 17); - this.p_ZeroFlowCal_Detect.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.p_ZeroFlowCal_Detect.Name = "p_ZeroFlowCal_Detect"; - this.p_ZeroFlowCal_Detect.Size = new System.Drawing.Size(121, 65); - this.p_ZeroFlowCal_Detect.TabIndex = 40; - // - // l_ZeroFlowCal_Detect - // - this.l_ZeroFlowCal_Detect.AutoSize = true; - this.l_ZeroFlowCal_Detect.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_ZeroFlowCal_Detect.ForeColor = System.Drawing.Color.Gray; - this.l_ZeroFlowCal_Detect.Location = new System.Drawing.Point(24, 22); - this.l_ZeroFlowCal_Detect.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_ZeroFlowCal_Detect.Name = "l_ZeroFlowCal_Detect"; - this.l_ZeroFlowCal_Detect.Size = new System.Drawing.Size(69, 17); - this.l_ZeroFlowCal_Detect.TabIndex = 39; - this.l_ZeroFlowCal_Detect.Text = "DETECT"; - // - // p_ZeroFlowCal_TempCal - // - this.p_ZeroFlowCal_TempCal.BackColor = System.Drawing.Color.Gainsboro; - this.p_ZeroFlowCal_TempCal.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.p_ZeroFlowCal_TempCal.Controls.Add(this.l_ZeroFlowCal_TempCal); - this.p_ZeroFlowCal_TempCal.Location = new System.Drawing.Point(365, 17); - this.p_ZeroFlowCal_TempCal.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.p_ZeroFlowCal_TempCal.Name = "p_ZeroFlowCal_TempCal"; - this.p_ZeroFlowCal_TempCal.Size = new System.Drawing.Size(121, 65); - this.p_ZeroFlowCal_TempCal.TabIndex = 41; - // - // l_ZeroFlowCal_TempCal - // - this.l_ZeroFlowCal_TempCal.AutoSize = true; - this.l_ZeroFlowCal_TempCal.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_ZeroFlowCal_TempCal.ForeColor = System.Drawing.Color.Gray; - this.l_ZeroFlowCal_TempCal.Location = new System.Drawing.Point(0, 12); - this.l_ZeroFlowCal_TempCal.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_ZeroFlowCal_TempCal.Name = "l_ZeroFlowCal_TempCal"; - this.l_ZeroFlowCal_TempCal.Size = new System.Drawing.Size(123, 34); - this.l_ZeroFlowCal_TempCal.TabIndex = 40; - this.l_ZeroFlowCal_TempCal.Text = "TEMPERATURE\r\nCALIBRATION"; - this.l_ZeroFlowCal_TempCal.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // p_ZeroFlowCal_Prepare - // - this.p_ZeroFlowCal_Prepare.BackColor = System.Drawing.Color.Gainsboro; - this.p_ZeroFlowCal_Prepare.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.p_ZeroFlowCal_Prepare.Controls.Add(this.l_ZeroFlowCal_Prepare); - this.p_ZeroFlowCal_Prepare.Location = new System.Drawing.Point(124, 17); - this.p_ZeroFlowCal_Prepare.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.p_ZeroFlowCal_Prepare.Name = "p_ZeroFlowCal_Prepare"; - this.p_ZeroFlowCal_Prepare.Size = new System.Drawing.Size(121, 65); - this.p_ZeroFlowCal_Prepare.TabIndex = 31; - // - // l_ZeroFlowCal_Prepare - // - this.l_ZeroFlowCal_Prepare.AutoSize = true; - this.l_ZeroFlowCal_Prepare.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_ZeroFlowCal_Prepare.ForeColor = System.Drawing.Color.Gray; - this.l_ZeroFlowCal_Prepare.Location = new System.Drawing.Point(18, 22); - this.l_ZeroFlowCal_Prepare.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_ZeroFlowCal_Prepare.Name = "l_ZeroFlowCal_Prepare"; - this.l_ZeroFlowCal_Prepare.Size = new System.Drawing.Size(80, 17); - this.l_ZeroFlowCal_Prepare.TabIndex = 39; - this.l_ZeroFlowCal_Prepare.Text = "PREPARE"; - // - // p_ZeroFlowCal_Amplitude - // - this.p_ZeroFlowCal_Amplitude.BackColor = System.Drawing.Color.Gainsboro; - this.p_ZeroFlowCal_Amplitude.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.p_ZeroFlowCal_Amplitude.Controls.Add(this.l_ZeroFlowCal_Amplitude); - this.p_ZeroFlowCal_Amplitude.Location = new System.Drawing.Point(244, 17); - this.p_ZeroFlowCal_Amplitude.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.p_ZeroFlowCal_Amplitude.Name = "p_ZeroFlowCal_Amplitude"; - this.p_ZeroFlowCal_Amplitude.Size = new System.Drawing.Size(121, 65); - this.p_ZeroFlowCal_Amplitude.TabIndex = 32; - // - // l_ZeroFlowCal_Amplitude - // - this.l_ZeroFlowCal_Amplitude.AutoSize = true; - this.l_ZeroFlowCal_Amplitude.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.l_ZeroFlowCal_Amplitude.ForeColor = System.Drawing.Color.Gray; - this.l_ZeroFlowCal_Amplitude.Location = new System.Drawing.Point(12, 15); - this.l_ZeroFlowCal_Amplitude.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_ZeroFlowCal_Amplitude.Name = "l_ZeroFlowCal_Amplitude"; - this.l_ZeroFlowCal_Amplitude.Size = new System.Drawing.Size(95, 34); - this.l_ZeroFlowCal_Amplitude.TabIndex = 39; - this.l_ZeroFlowCal_Amplitude.Text = "AMPLITUDE\r\nTEST"; - this.l_ZeroFlowCal_Amplitude.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // gB_TempMeters - // - this.gB_TempMeters.Controls.Add(this.btn_StoreTempe); - this.gB_TempMeters.Location = new System.Drawing.Point(8, 275); - this.gB_TempMeters.Margin = new System.Windows.Forms.Padding(10, 10, 10, 10); - this.gB_TempMeters.Name = "gB_TempMeters"; - this.gB_TempMeters.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.gB_TempMeters.Size = new System.Drawing.Size(403, 193); - this.gB_TempMeters.TabIndex = 72; - this.gB_TempMeters.TabStop = false; - this.gB_TempMeters.Text = "Temp. Meters"; - // - // btn_StoreTempe - // - this.btn_StoreTempe.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btn_StoreTempe.Enabled = false; - this.btn_StoreTempe.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btn_StoreTempe.Location = new System.Drawing.Point(4, 158); - this.btn_StoreTempe.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.btn_StoreTempe.Name = "btn_StoreTempe"; - this.btn_StoreTempe.Size = new System.Drawing.Size(395, 31); - this.btn_StoreTempe.TabIndex = 95; - this.btn_StoreTempe.Text = "SAVE TEMP"; - this.btn_StoreTempe.UseVisualStyleBackColor = true; - this.btn_StoreTempe.Click += new System.EventHandler(this.btn_StoreTempe_Click); - // - // pB_ZeroFlowCal_Progress - // - this.pB_ZeroFlowCal_Progress.Location = new System.Drawing.Point(8, 634); - this.pB_ZeroFlowCal_Progress.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.pB_ZeroFlowCal_Progress.Name = "pB_ZeroFlowCal_Progress"; - this.pB_ZeroFlowCal_Progress.Size = new System.Drawing.Size(724, 18); - this.pB_ZeroFlowCal_Progress.Step = 1; - this.pB_ZeroFlowCal_Progress.TabIndex = 35; - // - // l_ZeroFlowCal_ResttimeDisplayValue - // - this.l_ZeroFlowCal_ResttimeDisplayValue.AutoSize = true; - this.l_ZeroFlowCal_ResttimeDisplayValue.Location = new System.Drawing.Point(843, 634); - this.l_ZeroFlowCal_ResttimeDisplayValue.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_ZeroFlowCal_ResttimeDisplayValue.Name = "l_ZeroFlowCal_ResttimeDisplayValue"; - this.l_ZeroFlowCal_ResttimeDisplayValue.Size = new System.Drawing.Size(49, 13); - this.l_ZeroFlowCal_ResttimeDisplayValue.TabIndex = 37; - this.l_ZeroFlowCal_ResttimeDisplayValue.Text = "00:00:00"; - // - // l_ZeroFlowCal_Resttime - // - this.l_ZeroFlowCal_Resttime.AutoSize = true; - this.l_ZeroFlowCal_Resttime.Location = new System.Drawing.Point(736, 634); - this.l_ZeroFlowCal_Resttime.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_ZeroFlowCal_Resttime.Name = "l_ZeroFlowCal_Resttime"; - this.l_ZeroFlowCal_Resttime.Size = new System.Drawing.Size(54, 13); - this.l_ZeroFlowCal_Resttime.TabIndex = 36; - this.l_ZeroFlowCal_Resttime.Text = "Est. total: "; - // - // btn_ZeroFlowCal_Abort - // - this.btn_ZeroFlowCal_Abort.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btn_ZeroFlowCal_Abort.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btn_ZeroFlowCal_Abort.Location = new System.Drawing.Point(672, 44); - this.btn_ZeroFlowCal_Abort.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.btn_ZeroFlowCal_Abort.Name = "btn_ZeroFlowCal_Abort"; - this.btn_ZeroFlowCal_Abort.Size = new System.Drawing.Size(102, 52); - this.btn_ZeroFlowCal_Abort.TabIndex = 84; - this.btn_ZeroFlowCal_Abort.Text = "STOP"; - this.btn_ZeroFlowCal_Abort.UseVisualStyleBackColor = true; - this.btn_ZeroFlowCal_Abort.Click += new System.EventHandler(this.btn_ZeroFlowCal_Abort_Click); - // - // btn_ZeroFlowCal_Start - // - this.btn_ZeroFlowCal_Start.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btn_ZeroFlowCal_Start.Enabled = false; - this.btn_ZeroFlowCal_Start.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btn_ZeroFlowCal_Start.Location = new System.Drawing.Point(566, 44); - this.btn_ZeroFlowCal_Start.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.btn_ZeroFlowCal_Start.Name = "btn_ZeroFlowCal_Start"; - this.btn_ZeroFlowCal_Start.Size = new System.Drawing.Size(102, 51); - this.btn_ZeroFlowCal_Start.TabIndex = 83; - this.btn_ZeroFlowCal_Start.Text = "START"; - this.btn_ZeroFlowCal_Start.UseVisualStyleBackColor = true; - this.btn_ZeroFlowCal_Start.Click += new System.EventHandler(this.btn_ZeroFlowCal_Start_Click); - // - // btn_ZeroFlowCal_Pdf - // - this.btn_ZeroFlowCal_Pdf.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btn_ZeroFlowCal_Pdf.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btn_ZeroFlowCal_Pdf.Location = new System.Drawing.Point(846, 529); - this.btn_ZeroFlowCal_Pdf.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.btn_ZeroFlowCal_Pdf.Name = "btn_ZeroFlowCal_Pdf"; - this.btn_ZeroFlowCal_Pdf.Size = new System.Drawing.Size(63, 38); - this.btn_ZeroFlowCal_Pdf.TabIndex = 91; - this.btn_ZeroFlowCal_Pdf.Text = "PDF"; - this.btn_ZeroFlowCal_Pdf.UseVisualStyleBackColor = true; - // - // btn_ZeroFlowCal_Save - // - this.btn_ZeroFlowCal_Save.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btn_ZeroFlowCal_Save.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btn_ZeroFlowCal_Save.Location = new System.Drawing.Point(779, 529); - this.btn_ZeroFlowCal_Save.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.btn_ZeroFlowCal_Save.Name = "btn_ZeroFlowCal_Save"; - this.btn_ZeroFlowCal_Save.Size = new System.Drawing.Size(63, 38); - this.btn_ZeroFlowCal_Save.TabIndex = 90; - this.btn_ZeroFlowCal_Save.Text = "Save"; - this.btn_ZeroFlowCal_Save.UseVisualStyleBackColor = true; - // - // btn_ZeroFlowCal_Clear - // - this.btn_ZeroFlowCal_Clear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btn_ZeroFlowCal_Clear.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btn_ZeroFlowCal_Clear.Location = new System.Drawing.Point(779, 571); - this.btn_ZeroFlowCal_Clear.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.btn_ZeroFlowCal_Clear.Name = "btn_ZeroFlowCal_Clear"; - this.btn_ZeroFlowCal_Clear.Size = new System.Drawing.Size(130, 28); - this.btn_ZeroFlowCal_Clear.TabIndex = 89; - this.btn_ZeroFlowCal_Clear.Text = "Clear"; - this.btn_ZeroFlowCal_Clear.UseVisualStyleBackColor = true; - // - // btn_ZeroFlowCal_Detect - // - this.btn_ZeroFlowCal_Detect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btn_ZeroFlowCal_Detect.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btn_ZeroFlowCal_Detect.Location = new System.Drawing.Point(291, 44); - this.btn_ZeroFlowCal_Detect.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.btn_ZeroFlowCal_Detect.Name = "btn_ZeroFlowCal_Detect"; - this.btn_ZeroFlowCal_Detect.Size = new System.Drawing.Size(102, 51); - this.btn_ZeroFlowCal_Detect.TabIndex = 82; - this.btn_ZeroFlowCal_Detect.Text = "DETECT"; - this.btn_ZeroFlowCal_Detect.UseVisualStyleBackColor = true; - this.btn_ZeroFlowCal_Detect.Click += new System.EventHandler(this.btn_ZeroFlowCal_Detect_Click); - // - // gB_MeterLog - // - this.gB_MeterLog.Controls.Add(this.btn_ShowAll); - this.gB_MeterLog.Controls.Add(this.rTB_ZeroFlowCalMeter); - this.gB_MeterLog.Location = new System.Drawing.Point(419, 275); - this.gB_MeterLog.Margin = new System.Windows.Forms.Padding(10, 10, 10, 10); - this.gB_MeterLog.Name = "gB_MeterLog"; - this.gB_MeterLog.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.gB_MeterLog.Size = new System.Drawing.Size(532, 193); - this.gB_MeterLog.TabIndex = 72; - this.gB_MeterLog.TabStop = false; - this.gB_MeterLog.Text = "Meters"; - this.gB_MeterLog.Visible = false; - // - // btn_ShowAll - // - this.btn_ShowAll.Location = new System.Drawing.Point(5, 14); - this.btn_ShowAll.Name = "btn_ShowAll"; - this.btn_ShowAll.Size = new System.Drawing.Size(123, 20); - this.btn_ShowAll.TabIndex = 97; - this.btn_ShowAll.Text = "ShowAll"; - this.btn_ShowAll.UseVisualStyleBackColor = true; - this.btn_ShowAll.Click += new System.EventHandler(this.btn_ShowAll_Click); - // - // rTB_ZeroFlowCalMeter - // - this.rTB_ZeroFlowCalMeter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.rTB_ZeroFlowCalMeter.Location = new System.Drawing.Point(4, 39); - this.rTB_ZeroFlowCalMeter.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.rTB_ZeroFlowCalMeter.Name = "rTB_ZeroFlowCalMeter"; - this.rTB_ZeroFlowCalMeter.ReadOnly = true; - this.rTB_ZeroFlowCalMeter.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.rTB_ZeroFlowCalMeter.Size = new System.Drawing.Size(516, 139); - this.rTB_ZeroFlowCalMeter.TabIndex = 96; - this.rTB_ZeroFlowCalMeter.Text = ""; - // - // pB_ZeroFlowCal_SubProgress - // - this.pB_ZeroFlowCal_SubProgress.Location = new System.Drawing.Point(8, 612); - this.pB_ZeroFlowCal_SubProgress.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.pB_ZeroFlowCal_SubProgress.Name = "pB_ZeroFlowCal_SubProgress"; - this.pB_ZeroFlowCal_SubProgress.Size = new System.Drawing.Size(724, 18); - this.pB_ZeroFlowCal_SubProgress.Step = 1; - this.pB_ZeroFlowCal_SubProgress.TabIndex = 92; - // - // l_ZeroFlowCal_SubResttimeDisplayValue - // - this.l_ZeroFlowCal_SubResttimeDisplayValue.AutoSize = true; - this.l_ZeroFlowCal_SubResttimeDisplayValue.Location = new System.Drawing.Point(845, 617); - this.l_ZeroFlowCal_SubResttimeDisplayValue.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_ZeroFlowCal_SubResttimeDisplayValue.Name = "l_ZeroFlowCal_SubResttimeDisplayValue"; - this.l_ZeroFlowCal_SubResttimeDisplayValue.Size = new System.Drawing.Size(49, 13); - this.l_ZeroFlowCal_SubResttimeDisplayValue.TabIndex = 94; - this.l_ZeroFlowCal_SubResttimeDisplayValue.Text = "00:00:00"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(736, 616); - this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(105, 13); - this.label2.TabIndex = 93; - this.label2.Text = "Est. finish Proccess: "; - // - // rTB_ZeroFlowCal - // - this.rTB_ZeroFlowCal.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.rTB_ZeroFlowCal.Location = new System.Drawing.Point(419, 280); - this.rTB_ZeroFlowCal.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.rTB_ZeroFlowCal.Name = "rTB_ZeroFlowCal"; - this.rTB_ZeroFlowCal.ReadOnly = true; - this.rTB_ZeroFlowCal.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.rTB_ZeroFlowCal.Size = new System.Drawing.Size(528, 193); - this.rTB_ZeroFlowCal.TabIndex = 101; - this.rTB_ZeroFlowCal.Text = ""; - // - // l_SettingsPreparationMetersize - // - this.l_SettingsPreparationMetersize.AutoSize = true; - this.l_SettingsPreparationMetersize.Location = new System.Drawing.Point(416, 72); - this.l_SettingsPreparationMetersize.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_SettingsPreparationMetersize.Name = "l_SettingsPreparationMetersize"; - this.l_SettingsPreparationMetersize.Size = new System.Drawing.Size(55, 13); - this.l_SettingsPreparationMetersize.TabIndex = 104; - this.l_SettingsPreparationMetersize.Text = "Metersize:"; - // - // cb_Metersize - // - this.cb_Metersize.FormattingEnabled = true; - this.cb_Metersize.Location = new System.Drawing.Point(476, 66); - this.cb_Metersize.Name = "cb_Metersize"; - this.cb_Metersize.Size = new System.Drawing.Size(73, 21); - this.cb_Metersize.TabIndex = 105; - // - // lblBuildDate - // - this.lblBuildDate.AutoSize = true; - this.lblBuildDate.Location = new System.Drawing.Point(779, 88); - this.lblBuildDate.Name = "lblBuildDate"; - this.lblBuildDate.Size = new System.Drawing.Size(10, 13); - this.lblBuildDate.TabIndex = 106; - this.lblBuildDate.Text = "-"; - // - // PreAdjustmentControl - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.Window; - this.Controls.Add(this.lblBuildDate); - this.Controls.Add(this.cb_Metersize); - this.Controls.Add(this.l_SettingsPreparationMetersize); - this.Controls.Add(this.rTB_ZeroFlowCal); - this.Controls.Add(this.l_ZeroFlowCal_SubResttimeDisplayValue); - this.Controls.Add(this.label2); - this.Controls.Add(this.pB_ZeroFlowCal_SubProgress); - this.Controls.Add(this.gB_MeterLog); - this.Controls.Add(this.gB_TempMeters); - this.Controls.Add(this.btn_ZeroFlowCal_Pdf); - this.Controls.Add(this.btn_ZeroFlowCal_Save); - this.Controls.Add(this.btn_ZeroFlowCal_Clear); - this.Controls.Add(this.btn_ZeroFlowCal_Abort); - this.Controls.Add(this.l_ZeroFlowCal_ResttimeDisplayValue); - this.Controls.Add(this.pB_ZeroFlowCal_Progress); - this.Controls.Add(this.btn_ZeroFlowCal_Start); - this.Controls.Add(this.l_ZeroFlowCal_Resttime); - this.Controls.Add(this.btn_ZeroFlowCal_Detect); - this.Controls.Add(this.l_ZeroFlowCal_Status); - this.Controls.Add(this.gB_Progress); - this.Controls.Add(this.pB_Logo1); - this.Controls.Add(this.gB_Meters); - this.Controls.Add(this.pB_Bubbles1); - this.Name = "PreAdjustmentControl"; - this.Size = new System.Drawing.Size(970, 674); - this.Load += new System.EventHandler(this.PreAdjustmentControl_Load); - ((System.ComponentModel.ISupportInitialize)(this.pB_Logo1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pB_Bubbles1)).EndInit(); - this.gB_Progress.ResumeLayout(false); - this.p_ZeroFlowCal_Completion.ResumeLayout(false); - this.p_ZeroFlowCal_Completion.PerformLayout(); - this.p_ZeroFlowCal_Offset.ResumeLayout(false); - this.p_ZeroFlowCal_Offset.PerformLayout(); - this.p_ZeroFlowCal_Detect.ResumeLayout(false); - this.p_ZeroFlowCal_Detect.PerformLayout(); - this.p_ZeroFlowCal_TempCal.ResumeLayout(false); - this.p_ZeroFlowCal_TempCal.PerformLayout(); - this.p_ZeroFlowCal_Prepare.ResumeLayout(false); - this.p_ZeroFlowCal_Prepare.PerformLayout(); - this.p_ZeroFlowCal_Amplitude.ResumeLayout(false); - this.p_ZeroFlowCal_Amplitude.PerformLayout(); - this.gB_TempMeters.ResumeLayout(false); - this.gB_MeterLog.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private System.Windows.Forms.PictureBox pB_Logo1; - private System.Windows.Forms.GroupBox gB_Meters; - private System.Windows.Forms.PictureBox pB_Bubbles1; - private System.Windows.Forms.Label l_ZeroFlowCal_Status; - private System.Windows.Forms.GroupBox gB_Progress; - private System.Windows.Forms.Panel p_ZeroFlowCal_Completion; - private System.Windows.Forms.Label l_ZeroFlowCal_Completion; - private System.Windows.Forms.ProgressBar pB_ZeroFlowCal_Progress; - private System.Windows.Forms.Label l_ZeroFlowCal_ResttimeDisplayValue; - private System.Windows.Forms.Panel p_ZeroFlowCal_Offset; - private System.Windows.Forms.Label l_ZeroFlowCal_Offset; - private System.Windows.Forms.Label l_ZeroFlowCal_Resttime; - private System.Windows.Forms.Panel p_ZeroFlowCal_Detect; - private System.Windows.Forms.Label l_ZeroFlowCal_Detect; - private System.Windows.Forms.Panel p_ZeroFlowCal_TempCal; - private System.Windows.Forms.Label l_ZeroFlowCal_TempCal; - private System.Windows.Forms.Panel p_ZeroFlowCal_Prepare; - private System.Windows.Forms.Label l_ZeroFlowCal_Prepare; - private System.Windows.Forms.Panel p_ZeroFlowCal_Amplitude; - private System.Windows.Forms.Label l_ZeroFlowCal_Amplitude; - private System.Windows.Forms.Button btn_ZeroFlowCal_Abort; - private System.Windows.Forms.Button btn_ZeroFlowCal_Start; - private System.Windows.Forms.Button btn_ZeroFlowCal_Pdf; - private System.Windows.Forms.Button btn_ZeroFlowCal_Save; - private System.Windows.Forms.Button btn_ZeroFlowCal_Clear; - private System.Windows.Forms.Button btn_ZeroFlowCal_Detect; - private System.Windows.Forms.GroupBox gB_TempMeters; - private System.Windows.Forms.CheckBox cB_ZeroFlowOffsetTestEnable; - private System.Windows.Forms.CheckBox cB_TempCalEnable; - private System.Windows.Forms.CheckBox cB_AmplitudeTestEnable; - private System.Windows.Forms.Button btn_StoreTempe; - private System.Windows.Forms.GroupBox gB_MeterLog; - private System.Windows.Forms.RichTextBox rTB_ZeroFlowCalMeter; - private System.Windows.Forms.ProgressBar pB_ZeroFlowCal_SubProgress; - private System.Windows.Forms.Label l_ZeroFlowCal_SubResttimeDisplayValue; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Button btn_ShowAll; - private System.Windows.Forms.RichTextBox rTB_ZeroFlowCal; - private System.Windows.Forms.Label l_SettingsPreparationMetersize; - private System.Windows.Forms.ComboBox cb_Metersize; - private System.Windows.Forms.Label lblBuildDate; - } -} diff --git a/GenesisCordonelTester/UI/PreAdjustmentControl.cs b/GenesisCordonelTester/UI/PreAdjustmentControl.cs deleted file mode 100644 index 6fbc5463d..000000000 --- a/GenesisCordonelTester/UI/PreAdjustmentControl.cs +++ /dev/null @@ -1,2127 +0,0 @@ -using CordonelPreadjustmentUi.Processes; -using CordonelPreadjustmentUi.Processes.Actions; -using CordonelPreadjustmentUi.Processes.Itinerary; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; -using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; -using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts; -using Xylem.Common.Logic.ProductionOrderCore.OrderData; -using Xylem.Common.Ui.CordonelPreadjustmentUi; -using Xylem.Common.Ui.CordonelPreadjustmentUi.Parameters; - -namespace CordonelPreadjustmentUi -{ - public partial class PreAdjustmentControl : UserControl - { - private ProcessProgress pp = new ProcessProgress(); - private PreAdjustmentSettingsContainer settings = new PreAdjustmentSettingsContainer(); - - - private List MeterStateCtls = new List(); - private List TempMeterStateCtls = new List(); - - private List AllMeterStateCtrls() - { - var r = new List(); - r.AddRange(MeterStateCtls); - r.AddRange(TempMeterStateCtls); - return r; - } - - private MeterBatch GlobalMeterBatch = new MeterBatch(); - private MeterBatch ThermoMeterBatch = new MeterBatch(); - private Boolean abortIndicator = false; - public Boolean AbortIndicator { get { return abortIndicator; } set { abortIndicator = value; } } - public int TestRunNumber; - public PreAdjustmentControl(PreAdjustmentSettingsContainer Settings = null) - { - InitializeComponent(); - SetSettings(Settings); - rTB_ZeroFlowCal.AutoSize = true; - } - public void SetSettings(PreAdjustmentSettingsContainer Settings = null) - { - settings = Settings; - if (settings != null) - { - PreAdjustmentControl_Load(this, EventArgs.Empty); - } - - } - - private void PreAdjustmentControl_Load(object sender, System.EventArgs e) - { - - MeterStateCtls = new List(); - TempMeterStateCtls = new List(); - if (settings != null) - { - gB_Meters.Controls.Clear(); - gB_TempMeters.Controls.Clear(); - gB_TempMeters.Controls.Add(this.btn_StoreTempe); - var tmpI = 1; - foreach (var Meter in settings.Meters) - { - var ctl = new MeterStateControl(Meter); - ctl.Location = new Point(5 + ((tmpI - 1) * ctl.Width), 15); - MeterStateCtls.Add(ctl); - gB_Meters.Controls.Add(ctl); - ctl.OnRequestDetails += Ctl_MouseEnter; - tmpI = tmpI + 1; - } - - tmpI = 1; - if (settings.TempMeters.Any() && settings.GetTempUseTempFlansh()) - { - foreach (var tempMeter in settings.TempMeters) - { - var ctl = new TempMeterStateControl(tempMeter); - ctl.Location = new Point(5 + ((tmpI - 1) * ctl.Width), 15); - TempMeterStateCtls.Add(ctl); - gB_TempMeters.Controls.Add(ctl); - ctl.OnRequestDetails += Ctl_MouseEnter; - ctl.DoubleClick += Clt_ReConnect; - tmpI = tmpI + 1; - ctl.Enabled = true; - - } - } - else - { - var ctl = new TempMeterStateControl("Input"); - ctl.Location = new Point(5 + ((tmpI - 1) * ctl.Width), 15); - ctl.SetChecked(true); - TempMeterStateCtls.Add(ctl); - gB_TempMeters.Controls.Add(ctl); - //ctl.DoubleClick += Ctl_MouseEnter; - tmpI = tmpI + 1; - ctl.Enabled = true; - } - - - - cb_Metersize.Items.Clear(); - foreach (MeterSize size in (MeterSize[])Enum.GetValues(typeof(MeterSize))) - { - cb_Metersize.Items.Add(size); - } - var setM = MeterSize.DN50; - if (settings?.MeterSize != null) - { - setM = settings.MeterSize; - } - cb_Metersize.SelectedItem = setM; - - } - } - - private void Ctl_MouseLeave(object sender, EventArgs e) - { - - } - private void Ctl_MouseEnter(object sender, EventArgs e) - { - if (sender is MeterStateControl meterStateCtl) - { - if (this.InvokeRequired) - { - this.Invoke((Action)Ctl_MouseEnter, sender, e); - return; - } - - rTB_ZeroFlowCalMeter.Text = meterStateCtl.GetLog(); - gB_MeterLog.Text = $"Log for Meter {meterStateCtl.Slot}:"; - rTB_ZeroFlowCal.Visible = false; - gB_MeterLog.Visible = true; - rTB_ZeroFlowCalMeter.ScrollToCaret(); - } - - } - - private void Clt_ReConnect(object sender, EventArgs e) - { - if (sender is TempMeterStateControl meterStateCtl) - { - if (this.InvokeRequired) - { - this.Invoke((Action)Clt_ReConnect, sender, e); - return; - } - - meterStateCtl.StartTempWatch(meterStateCtl.MeterTempMode); - } - - - } - - public void SetTestBenchTemp(double temp) - { - if (pp != null) - { - pp.PushedTestBenchTemp = temp; - pp.TempretureSelected = true; - } - } - - - - public void SetFlushIsDone() - { - if (pp != null) - { - pp.FlushDone = true; - } - } - - //todo move out - #region move out - - private static class Formats - { - #region Format strings for display - #region Format strings for "Decoded Data"-display - public const String TofDispString = "000000.00000000"; - public const String HccCorrectionValue = "0.00000"; - public const String PwDispString = "0.00"; - public const String AmpDispUpString = "000.0"; - public const String AmpDispDownString = "-000.0"; - public const String TempDispString = "0.00"; - public const String Flow = "0.00"; - #endregion - #region Format strings for "Mean"-Display - public const String MeanDispString = "0.00"; - #endregion - #region Format strings for "Std-Deviation"-Display - public const String StdDevDispString = "0.00"; - #endregion - #endregion - #region Format strings for CSV-Logging - public const String TofLogString = "000000.00000000"; - public const String PwLogString = "0.00"; - public const String AmpLogString = "000.0"; - public const String TempLogString = "0.00"; - public const String CsvDateTimeLogString = "HH:mm:ss:fff;yyyy.MM.dd;"; - public const String ErrorLogString = "HH:mm:ss:fff;yyyy.MM.dd;"; - public const String RawDataDateTimeLogString = "yyyy-MM-dd HH:mm:ss:ff "; - public const String CsvIndexLogString = "{0:D8}"; - public const String CsvFileDateTimeString = "yyyyMMdd_HHmmss_"; - public const String TxtFileDateTimeString = "yyyyMMdd_HHmmss_"; - public const String LogFileDateTimeString = "yyyyMMdd_HHmmss"; - public const String HeaderFileDateTimeString = "yyyy-MM-dd HH:mm:ss"; - public const String StatusDateTimeString = "HH:mm:ss"; - #endregion - #region Date/ Time for raw file naming - public const String RawFileDateTimeString = "yyyyMMdd_HHmmss_"; - #endregion - #region Date/ Time for image files naming - public const String ImageFileDateTimeString = "yyyyMMdd_HHmmss_"; - #endregion - #region Date/ Time for reports - public const String ReportDateTimeTitleString = "yyyy-MM-dd"; - public const String PdfDateTimeString = "yyyyMMdd_HHmmss_"; - #endregion - #region Format for GP30 first hit level adjustments - public const String FirstHitLevelVoltage = "000.00"; - #endregion - - - - } - - public bool GetMeterIsDone(int slot) - { - var meter = AllMeterStateCtrls().First(m => m.Slot == slot); - if (meter != null) - { - return !meter.Failed; - } - return false; - } - - public void CloseConnections() - { - GlobalMeterBatch?.RemoveAllMeters(); - ThermoMeterBatch?.RemoveAllMeters(); - GlobalMeterBatch?.Dispose(); - ThermoMeterBatch?.Dispose(); - } - - public void EnableMeter(int slot, bool enabled, string srn) - { - var meter = AllMeterStateCtrls().First(m => m.Slot == slot); - if (meter != null) - { - meter.SetChecked(enabled); - meter.Srn = srn; - } - } - public StringBuilder proccessLog = new StringBuilder(); - - public void DebugMessage(Exception exception, int? slot = null, String source = "APP", String PcbId = "") - { - - DebugMessage($"Exception at full process: { exception.Message}\t{Environment.NewLine}", slot, source, PcbId); - - - var stringBuilder = new StringBuilder(); - - while (exception != null) - { - stringBuilder.Append(exception.ToString()); - stringBuilder.AppendLine(); - exception = exception.InnerException; - } - DebugMessage(stringBuilder.ToString(), slot, source, PcbId); - - } - public void DebugMessage(String text = "", int? slot = null, String source = "APP", String PcbId = "") - { - // Add line and scroll to caret - if (!String.IsNullOrEmpty(text)) - { - if (this.InvokeRequired) - { - this.Invoke((Action)DebugMessage, text, slot, source, PcbId); - return; - } - - string mainMsg = ""; - string Timestamp = DateTime.Now.ToString(Formats.StatusDateTimeString, settings.Culture); - mainMsg = $"\t {source} \t{text}"; - if (slot.HasValue) - { - mainMsg = $"{mainMsg} at Meter {slot.Value}"; - if (!string.IsNullOrEmpty(PcbId)) - { - mainMsg = $"{mainMsg} ({PcbId})"; - } - AllMeterStateCtrls()?.Where(e => e.Enabled && e.Slot == slot.Value).ToList().ForEach(l => l.Log($"{ Timestamp} { mainMsg}")); - } - else - { - AllMeterStateCtrls()?.Where(e => e.Enabled).ToList().ForEach(l => l.Log($"{ Timestamp} { mainMsg}")); - } - - - proccessLog?.AppendLine($"{Timestamp} {mainMsg}"); - - rTB_ZeroFlowCal?.AppendText($"{Timestamp} {mainMsg} {Environment.NewLine}"); - rTB_ZeroFlowCal?.ScrollToCaret(); - - - //log - - - } - } - - //public void DebugMessage(String text) - //{ - // // Add line and scroll to caret - // if (!String.IsNullOrEmpty(text)) - // { - // if (this.InvokeRequired) - // { - // this.Invoke((Action)DebugMessage, text); - // return; - // } - - // String Timestamp = DateTime.Now.ToString(Formats.RawDataDateTimeLogString, settings.Culture); - // rTB_ZeroFlowCal.AppendText($"{Timestamp}\t{text}"); - // rTB_ZeroFlowCal.ScrollToCaret(); - // } - //} - public void SetBusy(bool isBusy) - { - if (this.InvokeRequired) - { - Invoke((Action)SetBusy, isBusy); - - return; - } - - pB_Bubbles1.Visible = isBusy; - - } - - private void AbortButtonEnabled(bool v) - { - if (this.InvokeRequired) - { - Invoke((Action)AbortButtonEnabled, v); - - return; - } - btn_ZeroFlowCal_Abort.Enabled = v; - } - - public void ZeroFlowCalDetectSetBackColor(Color color) - { - this.p_ZeroFlowCal_Detect.BackColor = color; - } - public void ZeroFlowCalAmplitudeSetBackColor(Color color) - { - this.p_ZeroFlowCal_Amplitude.BackColor = color; - } - public void ZeroFlowCalPrepareSetBackColor(Color color) - { - this.p_ZeroFlowCal_Prepare.BackColor = color; - } - public void ZeroFlowCalOffsetSetBackColor(Color color) - { - this.p_ZeroFlowCal_Offset.BackColor = color; - } - public void ZeroFlowCalCompletionSetBackColor(Color color) - { - this.p_ZeroFlowCal_Completion.BackColor = color; - } - public void ZeroFlowCalTempCalSetBackColor(Color color) - { - this.p_ZeroFlowCal_TempCal.BackColor = color; - } - public void ZeroFlowCalDetectSetLabelColor(Color color) - { - this.l_ZeroFlowCal_Detect.ForeColor = color; - } - public void ZeroFlowCalAmplitudeSetLabelColor(Color color) - { - this.l_ZeroFlowCal_Amplitude.ForeColor = color; - } - public void ZeroFlowCalPrepareSetLabelColor(Color color) - { - this.l_ZeroFlowCal_Prepare.ForeColor = color; - } - public void ZeroFlowCalOffsetSetLabelColor(Color color) - { - this.l_ZeroFlowCal_Offset.ForeColor = color; - } - public void ZeroFlowCalCompletionSetLabelColor(Color color) - { - this.l_ZeroFlowCal_Completion.ForeColor = color; - } - public void ZeroFlowCalTempCalSetLabelColor(Color color) - { - this.l_ZeroFlowCal_TempCal.ForeColor = color; - } - - public enum StatusPanelItems - { - None = 0, - Detect = 1, - Prepare = 2, - Amplitude = 3, - Offset = 4, - Completion = 5, - TempCal = 6, - } - - public void SetProgressPanel(StatusPanelItems item) - { - if (this.InvokeRequired) - { - this.Invoke((Action)SetProgressPanel, item); - return; - } - - switch (item) - { - case StatusPanelItems.None: - this.ZeroFlowCalDetectSetBackColor(Color.Gainsboro); - this.ZeroFlowCalPrepareSetBackColor(Color.Gainsboro); - this.ZeroFlowCalAmplitudeSetBackColor(Color.Gainsboro); - this.ZeroFlowCalOffsetSetBackColor(Color.Gainsboro); - this.ZeroFlowCalCompletionSetBackColor(Color.Gainsboro); - this.ZeroFlowCalTempCalSetBackColor(Color.Gainsboro); - this.ZeroFlowCalDetectSetLabelColor(Color.Gray); - this.ZeroFlowCalPrepareSetLabelColor(Color.Gray); - this.ZeroFlowCalAmplitudeSetLabelColor(Color.Gray); - this.ZeroFlowCalOffsetSetLabelColor(Color.Gray); - this.ZeroFlowCalCompletionSetLabelColor(Color.Gray); - this.ZeroFlowCalTempCalSetLabelColor(Color.Gray); - break; - - case StatusPanelItems.Detect: - this.ZeroFlowCalDetectSetBackColor(Color.LightGreen); - this.ZeroFlowCalPrepareSetBackColor(Color.Gainsboro); - this.ZeroFlowCalAmplitudeSetBackColor(Color.Gainsboro); - this.ZeroFlowCalOffsetSetBackColor(Color.Gainsboro); - this.ZeroFlowCalCompletionSetBackColor(Color.Gainsboro); - this.ZeroFlowCalTempCalSetBackColor(Color.Gainsboro); - this.ZeroFlowCalDetectSetLabelColor(Color.Black); - this.ZeroFlowCalPrepareSetLabelColor(Color.Gray); - this.ZeroFlowCalAmplitudeSetLabelColor(Color.Gray); - this.ZeroFlowCalOffsetSetLabelColor(Color.Gray); - this.ZeroFlowCalCompletionSetLabelColor(Color.Gray); - this.ZeroFlowCalTempCalSetLabelColor(Color.Gray); - break; - - case StatusPanelItems.Prepare: - this.ZeroFlowCalDetectSetBackColor(Color.LightGreen); - this.ZeroFlowCalPrepareSetBackColor(Color.LightGreen); - this.ZeroFlowCalAmplitudeSetBackColor(Color.Gainsboro); - this.ZeroFlowCalOffsetSetBackColor(Color.Gainsboro); - this.ZeroFlowCalCompletionSetBackColor(Color.Gainsboro); - this.ZeroFlowCalTempCalSetBackColor(Color.Gainsboro); - this.ZeroFlowCalDetectSetLabelColor(Color.Gray); - this.ZeroFlowCalPrepareSetLabelColor(Color.Black); - this.ZeroFlowCalAmplitudeSetLabelColor(Color.Gray); - this.ZeroFlowCalOffsetSetLabelColor(Color.Gray); - this.ZeroFlowCalCompletionSetLabelColor(Color.Gray); - this.ZeroFlowCalTempCalSetLabelColor(Color.Gray); - break; - - case StatusPanelItems.Amplitude: - this.ZeroFlowCalDetectSetBackColor(Color.LightGreen); - this.ZeroFlowCalPrepareSetBackColor(Color.LightGreen); - this.ZeroFlowCalAmplitudeSetBackColor(Color.LightGreen); - this.ZeroFlowCalOffsetSetBackColor(Color.Gainsboro); - this.ZeroFlowCalTempCalSetBackColor(Color.Gainsboro); - this.ZeroFlowCalCompletionSetBackColor(Color.Gainsboro); - this.ZeroFlowCalDetectSetLabelColor(Color.Gray); - this.ZeroFlowCalPrepareSetLabelColor(Color.Gray); - this.ZeroFlowCalAmplitudeSetLabelColor(Color.Black); - this.ZeroFlowCalOffsetSetLabelColor(Color.Gray); - this.ZeroFlowCalTempCalSetLabelColor(Color.Gray); - this.ZeroFlowCalCompletionSetLabelColor(Color.Gray); - break; - - case StatusPanelItems.Offset: - this.ZeroFlowCalDetectSetBackColor(Color.LightGreen); - this.ZeroFlowCalPrepareSetBackColor(Color.LightGreen); - this.ZeroFlowCalAmplitudeSetBackColor(Color.LightGreen); - this.ZeroFlowCalTempCalSetBackColor(Color.LightGreen); - this.ZeroFlowCalOffsetSetBackColor(Color.LightGreen); - this.ZeroFlowCalCompletionSetBackColor(Color.Gainsboro); - this.ZeroFlowCalDetectSetLabelColor(Color.Gray); - this.ZeroFlowCalPrepareSetLabelColor(Color.Gray); - this.ZeroFlowCalAmplitudeSetLabelColor(Color.Gray); - this.ZeroFlowCalOffsetSetLabelColor(Color.Black); - this.ZeroFlowCalTempCalSetLabelColor(Color.Gray); - this.ZeroFlowCalCompletionSetLabelColor(Color.Gray); - break; - - case StatusPanelItems.Completion: - this.ZeroFlowCalDetectSetBackColor(Color.LightGreen); - this.ZeroFlowCalPrepareSetBackColor(Color.LightGreen); - this.ZeroFlowCalAmplitudeSetBackColor(Color.LightGreen); - this.ZeroFlowCalOffsetSetBackColor(Color.LightGreen); - this.ZeroFlowCalTempCalSetBackColor(Color.LightGreen); - this.ZeroFlowCalCompletionSetBackColor(Color.LightGreen); - this.ZeroFlowCalDetectSetLabelColor(Color.Gray); - this.ZeroFlowCalPrepareSetLabelColor(Color.Gray); - this.ZeroFlowCalAmplitudeSetLabelColor(Color.Gray); - this.ZeroFlowCalOffsetSetLabelColor(Color.Gray); - this.ZeroFlowCalTempCalSetLabelColor(Color.Gray); - this.ZeroFlowCalCompletionSetLabelColor(Color.Black); - break; - - case StatusPanelItems.TempCal: - this.ZeroFlowCalDetectSetBackColor(Color.LightGreen); - this.ZeroFlowCalPrepareSetBackColor(Color.LightGreen); - this.ZeroFlowCalAmplitudeSetBackColor(Color.LightGreen); - this.ZeroFlowCalTempCalSetBackColor(Color.LightGreen); - this.ZeroFlowCalOffsetSetBackColor(Color.Gainsboro); - this.ZeroFlowCalCompletionSetBackColor(Color.Gainsboro); - this.ZeroFlowCalDetectSetLabelColor(Color.Gray); - this.ZeroFlowCalPrepareSetLabelColor(Color.Gray); - this.ZeroFlowCalAmplitudeSetLabelColor(Color.Gray); - this.ZeroFlowCalTempCalSetLabelColor(Color.Black); - this.ZeroFlowCalOffsetSetLabelColor(Color.Gray); - this.ZeroFlowCalCompletionSetLabelColor(Color.Gray); - break; - - default: - //this.ZeroFlowCalDetectSetBackColor(Color.Gainsboro); - //this.ZeroFlowCalPrepareSetBackColor(Color.Gainsboro); - //this.ZeroFlowCalAmplitudeSetBackColor(Color.Gainsboro); - //this.ZeroFlowCalOffsetSetBackColor(Color.Gainsboro); - //this.ZeroFlowCalCompletionSetBackColor(Color.Gainsboro); - //this.ZeroFlowCalTempCalSetBackColor(Color.Gainsboro); - //this.ZeroFlowCalDetectSetLabelColor(Color.Gray); - //this.ZeroFlowCalPrepareSetLabelColor(Color.Gray); - //this.ZeroFlowCalAmplitudeSetLabelColor(Color.Gray); - //this.ZeroFlowCalOffsetSetLabelColor(Color.Gray); - //this.ZeroFlowCalCompletionSetLabelColor(Color.Gray); - //this.ZeroFlowCalTempCalSetLabelColor(Color.Gray); - break; - - } - - WaitNSeconds(2); - return; - } - - public void SetControlElements(Boolean enabled) - { - if (this.InvokeRequired) - { - this.Invoke((Action)SetControlElements, enabled); - return; - } - this.pB_Bubbles1.Visible = !enabled; - this.btn_ZeroFlowCal_Detect.Enabled = enabled; - foreach (var MeterStateCtl in MeterStateCtls) - { - //MeterStateCtl.Enabled = enabled; - } - foreach (var TempMeterStateCtl in TempMeterStateCtls) - { - //TempMeterStateCtl.Enabled = enabled; - } - this.btn_ZeroFlowCal_Pdf.Enabled = enabled; - this.btn_ZeroFlowCal_Save.Enabled = enabled; - this.btn_ZeroFlowCal_Clear.Enabled = enabled; - btn_ZeroFlowCal_Abort.Enabled = !enabled; - this.cB_AmplitudeTestEnable.Enabled = enabled; - this.cB_TempCalEnable.Enabled = enabled; - this.cB_ZeroFlowOffsetTestEnable.Enabled = enabled; - } - public void StatusLabel(String debugMessage) - { - // Add line and scroll to caret - if (!String.IsNullOrEmpty(debugMessage)) - { - if (this.InvokeRequired) - { - this.Invoke((Action)StatusLabel, debugMessage); - return; - } - this.l_ZeroFlowCal_Status.Text = debugMessage; - } - } - public void SetControlText(CultureInfo culture) - { - if (this.InvokeRequired) - { - this.Invoke((Action)SetControlText, culture); - return; - } - //todo langureage setup - if (culture.Name == "de-DE") - { - //this.l_ZeroFlowCal_Meter1.Text = "ZÄHLER1"; - //this.l_ZeroFlowCal_Meter2.Text = "ZÄHLER2"; - //this.l_ZeroFlowCal_Meter3.Text = "ZÄHLER3"; - //this.l_ZeroFlowCal_Meter4.Text = "ZÄHLER4"; - //this.l_ZeroFlowCal_Meter5.Text = "ZÄHLER5"; - //this.l_ZeroFlowCal_Meter6.Text = "ZÄHLER6"; - //this.l_ZeroFlowCal_Meter7.Text = "ZÄHLER7"; - //this.l_ZeroFlowCal_Meter8.Text = "ZÄHLER8"; - //this.l_ZeroFlowCal_Meter9.Text = "ZÄHLER9"; - //this.l_ZeroFlowCal_Meter10.Text = "ZÄHLER10"; - - //this.l_ZeroFlowCal_Detect.Text = "DETEKT"; - //this.l_ZeroFlowCal_Prepare.Text = "RÜSTEN"; - //this.l_ZeroFlowCal_Amplitude.Text = "AMPLITUDEN\nTEST"; - //this.l_ZeroFlowCal_TempCal.Text = "TEMPERATUR\nKALIBRIERUNG"; - //this.l_ZeroFlowCal_Completion.Text = "ABSCHLUSS"; - //this.l_ZeroFlowCal_Resttime.Text = "Geschätzte Restzeit "; - //this.cB_ZeroFlowCal_EnableMeter1.Text = "aktiv"; - //this.cB_ZeroFlowCal_EnableMeter2.Text = "aktiv"; - //this.cB_ZeroFlowCal_EnableMeter3.Text = "aktiv"; - //this.cB_ZeroFlowCal_EnableMeter4.Text = "aktiv"; - //this.cB_ZeroFlowCal_EnableMeter5.Text = "aktiv"; - //this.cB_ZeroFlowCal_EnableMeter6.Text = "aktiv"; - //this.cB_ZeroFlowCal_EnableMeter7.Text = "aktiv"; - //this.cB_ZeroFlowCal_EnableMeter8.Text = "aktiv"; - //this.cB_ZeroFlowCal_EnableMeter9.Text = "aktiv"; - //this.cB_ZeroFlowCal_EnableMeter10.Text = "aktiv"; - //this.btn_ZeroFlowCal_Save.Text = "speichern"; - //this.btn_ZeroFlowCal_Clear.Text = "löschen"; - //this.btn_ZeroFlowCal_Detect.Text = "DETEKT"; - //this.l_ZeroFlowCal_Status.Text = "'DETEKT'-Taste drücken"; - } - else - { - //this.l_ZeroFlowCal_Meter1.Text = "METER1"; - //this.l_ZeroFlowCal_Meter2.Text = "METER2"; - //this.l_ZeroFlowCal_Meter3.Text = "METER3"; - //this.l_ZeroFlowCal_Meter4.Text = "METER4"; - //this.l_ZeroFlowCal_Meter5.Text = "METER5"; - //this.l_ZeroFlowCal_Meter6.Text = "METER6"; - //this.l_ZeroFlowCal_Meter7.Text = "METER7"; - //this.l_ZeroFlowCal_Meter8.Text = "METER8"; - //this.l_ZeroFlowCal_Meter9.Text = "METER9"; - //this.l_ZeroFlowCal_Meter10.Text = "METER10"; - //this.l_ZeroFlowCal_Detect.Text = "DETECT"; - //this.l_ZeroFlowCal_Prepare.Text = "PREPARE"; - //this.l_ZeroFlowCal_Amplitude.Text = "AMPLITUDE\nTEST"; - //this.l_ZeroFlowCal_TempCal.Text = "TEMPERATURE\nCALIBRATION"; - //this.l_ZeroFlowCal_Completion.Text = "COMPLETION"; - //this.l_ZeroFlowCal_Resttime.Text = "Estimated time to finish: "; - //this.cB_ZeroFlowCal_EnableMeter1.Text = "enable"; - //this.cB_ZeroFlowCal_EnableMeter2.Text = "enable"; - //this.cB_ZeroFlowCal_EnableMeter3.Text = "enable"; - //this.cB_ZeroFlowCal_EnableMeter4.Text = "enable"; - //this.cB_ZeroFlowCal_EnableMeter5.Text = "enable"; - //this.cB_ZeroFlowCal_EnableMeter6.Text = "enable"; - //this.cB_ZeroFlowCal_EnableMeter7.Text = "enable"; - //this.cB_ZeroFlowCal_EnableMeter8.Text = "enable"; - //this.cB_ZeroFlowCal_EnableMeter9.Text = "enable"; - //this.cB_ZeroFlowCal_EnableMeter10.Text = "enable"; - //this.btn_ZeroFlowCal_Save.Text = "Save"; - //this.btn_ZeroFlowCal_Clear.Text = "Clear"; - //this.btn_ZeroFlowCal_Detect.Text = "DETECT"; - //this.l_ZeroFlowCal_Status.Text = "Press 'DETECT'"; - - } - - } - - public static void WaitNSeconds(Int32 seconds, bool fromGui = false) - { - fromGui = true; - if (fromGui) - { - if (seconds < 1) - { - return; - } - - TimeSpan ts = new TimeSpan(); - DateTime _desired = DateTime.Now.AddSeconds(seconds); - while (DateTime.Now < _desired) - { - Application.DoEvents(); - Thread.Sleep(100); - } - } - else - { - Thread.Sleep(seconds * 1000); - } - } - - private bool isAutomaticMode = false; - public void AutoStart() - { - try - { - isAutomaticMode = true; - - btn_ZeroFlowCal_Detect_Click(null, EventArgs.Empty); - if (detectState == false) - { - throw new ApplicationException("Detect failed"); - } - if (settings.MeterSize != MeterSize.NA) - { - btn_ZeroFlowCal_Start_Click(null, EventArgs.Empty); - } - - //OnIsDone?.Invoke(null, EventArgs.Empty); - } - catch (Exception ex) - { - var r = ShowMsg($"{ex.Message} {Environment.NewLine} Retry?", "Retry?", MessageBoxButtons.RetryCancel); - - if (r == DialogResult.Retry) - { - AutoStart(); - } - else - { - - OnAbort?.Invoke(null, new EventArgsMeterSuccsessfull(new List())); - } - - } - } - - public DialogResult ShowMsg(string text, string caption = "no caption", MessageBoxButtons buttons = MessageBoxButtons.OK, MessageBoxIcon icon = MessageBoxIcon.Information, bool OverrideAutomatic = false, bool WaitForResponse = true) - { - - if (!isAutomaticMode || OverrideAutomatic) - { - if (WaitForResponse) - { - return MessageBox.Show(text, caption, buttons, icon); - } - else - { - //new Task(() => { new MsgBox(caption, text).Show(); }).Start(); - return DialogResult.OK; - } - - } - else - { - return DialogResult.OK; - } - } - - public static class PredefinedMessages - { - #region Miscellaneous - public static String StorageFailed(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Speichern fehlgeschlagen"; - } - else - { - Message = "Storage failed"; - } - - return Message; - } - public static String MeterSequenceFailed(String sequenceName, String MeterIndex, CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = $"{sequenceName} fehlgeschlagen bei ZÄHLER{MeterIndex}"; - } - else - { - Message = $"{sequenceName} failed at METER{MeterIndex}"; - } - - return Message; - } - public static String AreYouSure(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Sind Sie sicher?"; - } - else - { - Message = "Are you sure?"; - } - - return Message; - } - public static String PressDetect(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'DETEKT'-Taste drücken"; - } - else - { - Message = "Press 'DETECT'"; - } - - return Message; - } - public static String WaitDetect(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis 'DETEKT' beendet"; - } - else - { - Message = "Wait until 'DETECTION' has finished"; - } - - return Message; - } - public static String WaitSeconds(Int32 seconds, CultureInfo culture) - { - String Message = String.Empty; - String Time = seconds.ToString(culture); - if (culture.Name == "de-DE") - { - Message = $"Wartezeit {Time} Sekunden"; - } - else - { - Message = $"Wait {Time} seconds"; - } - - return Message; - } - public static String DetectFailed(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'DETEKT' fehlgeschlagen"; - } - else - { - Message = "'DETECT' failed"; - } - - return Message; - } - public static String PressStartOrDetect(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'START'-Taste drücken oder 'DETEKT' wiederholen"; - } - else - { - Message = "Press 'START' or repeat 'DETECT'"; - } - - return Message; - } - public static String NoMeterSelected(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Keinen ZÄHLER ausgewählt"; - } - else - { - Message = "No METER selected"; - } - - return Message; - } - public static String NoMeterPresent(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Kein ZÄHLER bereit"; - } - else - { - Message = "No METER present"; - } - - return Message; - } - public static String NoThermometerPresent(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Kein THERMOMETER bereit"; - } - else - { - Message = "No THERMOMETER present"; - } - - return Message; - } - public static String WaitUntilTemperatureAcquisitionFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis Temperaturakquirierung beendet ist"; - } - else - { - Message = "Wait until temperature acquisition finished"; - } - - return Message; - } - public static String WaitUntilTemperatureCalibrationFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis Temperaturkalibrierung beendet ist"; - } - else - { - Message = "Wait until temperature calibration finished"; - } - - return Message; - } - public static String WaitUntilFlushFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis Spülvorgang beendet ist"; - } - else - { - Message = "Wait until flushing pipe is finished"; - } - - return Message; - } - public static String NoThermometerSelected(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Kein Thermometer ausgewählt"; - } - else - { - Message = "No THERMOMETER selected"; - } - - return Message; - } - public static String WaitForStabilization(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis Werte stabil: "; - } - else - { - Message = "Wait for stabilization: "; - } - - return Message; - } - #endregion - #region Empty pipe mode - public static String WaitForEmptyPipe(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis 'EMPTY PIPE'-Modus beendet: "; - } - else - { - Message = "Wait for leaving 'EMPTY PIPE' mode: "; - } - - return Message; - } - public static String EmptyPipeFailed(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'EMPTY PIPE'-check fehlgeschlagen"; - } - else - { - Message = "'EMPTY PIPE'-check failed"; - } - - return Message; - } - #endregion - #region LOGIN - public static String WaitUntilLoginFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis 'LOGIN' beendet"; - } - else - { - Message = "Wait until 'LOGIN' has finished"; - } - - return Message; - } - public static String LoginFailed(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'LOGIN'-fehlgeschlagen"; - } - else - { - Message = "'LOGIN'-failed"; - } - - return Message; - } - #endregion - #region PREPARATION - public static String WaitUntilPreparationFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis 'RÜSTEN' beendet"; - } - else - { - Message = "Wait until 'PREPARE' has finished"; - } - - return Message; - } - public static String PreparationFailed(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'RÜSTEN' fehlgeschlagen"; - } - else - { - Message = "'PREPARE' failed"; - } - - return Message; - } - public static String PreparationStopped(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'RÜSTEN' gestoppt"; - } - else - { - Message = "'PREPARE' stopped"; - } - - return Message; - } - #endregion - #region AMPLITUDE TEST - public static String WaitUntilAmplitudeTestFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis AMPLITUDENTEST beendet"; - } - else - { - Message = "Wait until AMPLITUDE TEST has finished"; - } - - return Message; - } - public static String WaitUntilRegisterWriteFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis Schreiben auf Register beendet"; - } - else - { - Message = "Wait until register write has finished"; - } - - return Message; - } - public static String WaitUntilRegisterReadFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis Lesen vom Register beendet"; - } - else - { - Message = "Wait until register read has finished"; - } - - return Message; - } - public static String WaitUntilPercentageSweepFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis Messung beendet"; - } - else - { - Message = "Wait for percentage sweep to end:"; - } - - return Message; - } - public static String WaitUntilAmplitudeFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis 'AMPLITUDENTEST' beendet"; - } - else - { - Message = "Wait until 'AMPLITUDE TEST' has finished"; - } - - return Message; - } - public static String AmplitudeFailed(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'AMPLITUDENTEST' fehlgeschlagen"; - } - else - { - Message = "'AMPLITUDE TEST' failed"; - } - - return Message; - } - public static String AmplitudeStopped(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'AMPLITUDENTEST' gestoppt"; - } - else - { - Message = "'AMPLITUDE TEST' stopped"; - } - - return Message; - } - #endregion - #region ZEROFLOW OFFSET TEST - public static String WaitUntilZeroflowOffsetTestFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis 'OFFSET TEST' beendet"; - } - else - { - Message = "Wait until 'OFFSET TEST' has finished"; - } - - return Message; - } - public static String ZeroflowOffsetAqqFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis Datenaufnahme beendet:"; - } - else - { - Message = "Wait until data aquisition has finished:"; - } - - return Message; - } - public static String ZeroflowOffsetTestFailed(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'ZEROFLOW OFFSET TEST' fehlgeschlagen"; - } - else - { - Message = "'ZEROFLOW OFFSET TEST' failed"; - } - - return Message; - } - public static String ZeroflowOffsetTestStopped(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'ZEROFLOW OFFSET TEST' gestoppt"; - } - else - { - Message = "'ZEROFLOW OFFSET TEST' stopped"; - } - - return Message; - } - public static String ZeroflowOffsetWaitForSettling(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Beruhigungszeit abwarten: "; - } - else - { - Message = "Wait for settling time: "; - } - - return Message; - } - #endregion - #region TEMPERATURE CALIBRATION - public static String TempCalFailed(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "TEMPERATUR KALIBRIERUNG fehlgeschlagen bei ZÄHLER"; - } - else - { - Message = "TEMPERATURE CALIBRATION failed at METER"; - } - - return Message; - } - #endregion - #region COMPLETION - public static String WaitUntilCompletionFinished(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "Warten bis 'ABSCHLUSS' beendet"; - } - else - { - Message = "Wait until 'COMPLETION' has finished"; - } - - return Message; - } - public static String CompletionStopped(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'ABSCHLUSS' gestoppt"; - } - else - { - Message = "'COMPLETION' stopped"; - } - - return Message; - } - public static String CompletionFailed(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'ABSCHLUSS' fehlgeschlagen"; - } - else - { - Message = "'COMPLETION' failed"; - } - - return Message; - } - #endregion - #region ZEROFLOW CALIBRATION SEQUENCE - public static String ZeroflowCalibrationSequenceStopped(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'ZEROFLOW KALIBRIERUNGS'-Sequenz gestoppt"; - } - else - { - Message = "'ZEROFLOW CALIBRATION' sequence stopped"; - } - - return Message; - } - public static String ZeroflowCalibrationSequenceFailed(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'ZEROFLOW KALIBRIERUNGS'-Sequenz fehlgeschlagen"; - } - else - { - Message = "'ZEROFLOW CALIBRATION' sequence failed"; - } - - return Message; - } - public static String ZeroflowCalibrationSequenceSuccessful(CultureInfo culture) - { - String Message = String.Empty; - - if (culture.Name == "de-DE") - { - Message = "'ZEROFLOW KALIBRIERUNGS'-Sequenz erfolgreich"; - } - else - { - Message = "'ZEROFLOW CALIBRATION' sequence successful"; - } - - return Message; - } - #endregion - } - #endregion - - private bool detectState = true; - private void btn_ZeroFlowCal_Detect_Click(object sender, System.EventArgs e) - { - detectState = true; - CultureInfo Culture = settings.Culture; - try - { - btn_ZeroFlowCal_Detect.Enabled = false; - if (GlobalMeterBatch.ListOfMeters.Any()) - { - GlobalMeterBatch.RemoveAllMeters(); - } - - if (ThermoMeterBatch.ListOfMeters.Any()) - { - ThermoMeterBatch.RemoveAllMeters(); - } - - GlobalMeterBatch = new MeterBatch(); - ThermoMeterBatch = new MeterBatch(); - if (!settings.GetTempUseTempFlansh()) - { - TempMeterStateCtls = new List(); - } - #region Definitions and initializations - - foreach (var meterStateCtl in AllMeterStateCtrls()) - { - - if (meterStateCtl.IsEnabled || meterStateCtl is TempMeterStateControl) - { - - //if (meterStateCtl is TempMeterStateControl && (((TempMeterStateControl)meterStateCtl).HasMeter && meterStateCtl.Meter != null)) - //{ - // continue; - //} - if (meterStateCtl.Slot != -1) - { - var currentMeter = new ZeroFlowGenesisMeter(meterStateCtl.Slot, 3, !(meterStateCtl is TempMeterStateControl)); - - currentMeter.LogOnEnable = true; - currentMeter.LoginFailed = false; - currentMeter.PreparationFailed = false; - currentMeter.AmplitudeFailed = false; - currentMeter.ZeroFlowOffsetFailed = false; - currentMeter.AmplitudeFailed = false; - currentMeter.CompletionFailed = false; - currentMeter.Ok = false; - currentMeter.EmptyPipeCheckEnable = false; - currentMeter.EmptyPipeCheckFailed = false; - if (meterStateCtl is TempMeterStateControl) - { - ThermoMeterBatch.AddMeter(currentMeter); - meterStateCtl.IsEnabled = true; - } - else - { - GlobalMeterBatch.AddMeter(currentMeter); - } - - meterStateCtl.Meter = currentMeter; - } - } - - } - - #endregion - WaitNSeconds(2, true); - btn_ZeroFlowCal_Detect.Enabled = true; - } - catch (Exception ex) - { - ShowMsg($"{PredefinedMessages.DetectFailed(Culture)} {Environment.NewLine} {ex.Message}"); - - - btn_ZeroFlowCal_Detect.Enabled = true; - detectState = false; - return; - } - - #region Definitions and initializations - //Boolean[] EnableOpening = new Boolean[Constants.NumberOfMeters]; - //Boolean[] ThermoEnableOpening = new Boolean[Constants.NumberOfThermometers]; - //Boolean[] Ok = new Boolean[2 * Constants.NumberOfMeters]; - //Boolean[] ThermoOk = new Boolean[2 * Constants.NumberOfThermometers]; - //Boolean[] SetToUnknownStatus = new Boolean[Constants.NumberOfMeters]; - //Boolean[] ThermoSetToUnknownStatus = new Boolean[Constants.NumberOfThermometers]; - - foreach (var meterState in AllMeterStateCtrls()) - { - meterState.EnableOpening = meterState.IsEnabled; - } - - btn_ZeroFlowCal_Start.Enabled = false; - AbortIndicator = false; - #endregion - #region Bubbles - pB_Bubbles1.Visible = true; - #endregion - - if (!MeterStateCtls.Any(a => a.EnableOpening)) - { - ShowMsg(PredefinedMessages.NoMeterSelected(Culture), "Form closing", MessageBoxButtons.OK, MessageBoxIcon.Error); - StatusLabel(PredefinedMessages.PressDetect(Culture)); - SetControlElements(true); - detectState = false; - return; - } - - - foreach (var meterState in AllMeterStateCtrls()) - { - meterState.SetToUnknownStatus = !meterState.EnableOpening; - } - - - #region Visual indication 'PREPARE' - SetProgressPanel(StatusPanelItems.Detect); - StatusLabel(PredefinedMessages.WaitDetect(Culture)); - - foreach (var meterCtl in MeterStateCtls) - { - if (meterCtl != null && meterCtl.IsEnabled) - { - meterCtl.Ok = meterCtl.Meter.CheckRequestPort() && meterCtl.Meter.CheckStreamingPort(); - } - } - try - { - if (!settings.GetTempUseManualInput()) - { - - - foreach (var meterCtl in TempMeterStateCtls) - { - if (meterCtl != null && meterCtl.IsEnabled) - { - meterCtl.Ok = meterCtl.Meter.CheckStreamingPort(); - } - } - AllMeterStateCtrls().ForEach(f => f.SetUi()); - } - } - catch (Exception ex) - { - ShowMsg($"TempMeterError{ex.Message}"); - } - - - - - //Display.ConnectionStatusReset(SetToUnknownStatus); - //Display.ThermoConnectionStatusReset(ThermoSetToUnknownStatus); - #endregion - #region Status message - StatusLabel(PredefinedMessages.PressStartOrDetect(Culture)); - btn_ZeroFlowCal_Start.Enabled = true; - pB_Bubbles1.Visible = false; - #endregion - } - public event EventHandler OnAbort; - public event EventHandler OnIsDone; - public event EventHandler OnRequestFlush; - public event EventHandler OnRequestTemperatur; - - - - - public DialogResult AskForRetry(String sequenceName, string Text) - { - - if (this.InvokeRequired) - { - return (DialogResult)this.Invoke(new Func(() => { return AskForRetry(sequenceName, Text); })); - } - else - { - DialogResult AskForActions = DialogResult.Ignore; - AbortButtonEnabled(false); - AskForActions = ShowMsg(Text, $"{sequenceName}", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question, true); - AbortButtonEnabled(true); - - DebugMessage($"AskForActions on {sequenceName} selected {AskForActions}"); - return AskForActions; - } - - - } - private void ClearLog() - { - rTB_ZeroFlowCal.Clear(); // Clear log (textbox) - proccessLog.Clear(); - } - private void btn_ZeroFlowCal_Start_Click(object sender, System.EventArgs e) - { - - pp = new ProcessProgress(); - pp.Setting = settings; - pp.Logo = pB_Logo1.Image; - //if (!isAutomaticMode) - //{ - pp.Setting.MeterSize = (MeterSize)cb_Metersize.SelectedItem; // ((MeterSize)nUD_SettingsPreparationMetersize.Value); - //} - - - AllMeterStateCtrls().ForEach(mc => mc.EnabeldBoxEnabel(false)); - foreach (var tm in TempMeterStateCtls.Where(t => t.IsEnabled)) - { - tm.OnWatcherFailed += delegate (Object o, EventArgs b) - { - //pp.CancellationSource.Cancel(); - DebugMessage("Tempreature watch failed"); - ShowMsg(PredefinedMessages.ZeroflowOffsetTestFailed(pp.Setting.Culture), "Form closing", MessageBoxButtons.OK, MessageBoxIcon.Error); - }; - } - - - pp.OnBubblesChanged += delegate (Object o, EventArgsBool b) - { - SetBusy(b.Value); - - }; - pp.OnDebugMessageChanged += delegate (Object o, EventArgsDebug s) - { - - try - { - DebugMessage(s.Value, s.Slot, s.Source, s.PcbId); - } - catch (Exception) - { - //ignor - } - }; - if (!TempMeterStateCtls.Any(a => a.IsEnabled)) - { - pp.OnRequestTempretureSelection += PpOnOnRequestTempretureSelection; - } - - pp.OnStatusLabelChanged += delegate (Object o, EventArgsString s) { StatusLabel(s.Value); }; - pp.OnForceFailedMessage += delegate (Object o, EventArgs args) - { - ShowMsg(PredefinedMessages.ZeroflowOffsetTestFailed(pp.Setting.Culture), "Form closing", MessageBoxButtons.OK, MessageBoxIcon.Error); - }; - OnAbort += (o, args) => - { - pp.StopSequence = true; - pp.CancellationSource.Cancel(); - }; - pp.IsAutomaticMode = isAutomaticMode; - pp.OnRequestFlush += delegate (Object o, EventArgsMeterSize size) - { - var flushParams = new FlushParams(size.Value); - if (OnRequestFlush == null) - { - ShowMsg($"{flushParams.Message}", "Flush", MessageBoxButtons.OK, MessageBoxIcon.Information, false, false); - pp.FlushDone = true; - } - else - { - OnRequestFlush.Invoke(o, new EventArgsFlushRequest(flushParams)); - } - - }; - - - pp.OnRequestTemperatur += delegate (Object o, EventArgs args) - { - - OnRequestTemperatur?.Invoke(o, new EventArgs()); - - - }; - - - try - { - - OnAbort += (o, args) => pp.CancellationSource.Cancel(); - btn_ZeroFlowCal_Start.Enabled = false; - - List listOfProgrammParts = new List(); - - - - listOfProgrammParts.Add(new PrepareTestProcess("PrepareTest", StatusPanelItems.Detect, string.Empty, string.Empty, 1 * 60)); - - listOfProgrammParts.Add(new LoginProcess("Login", StatusPanelItems.Detect, PredefinedMessages.WaitUntilLoginFinished(pp.Setting.Culture), PredefinedMessages.LoginFailed(pp.Setting.Culture), 1 * 60)); - - listOfProgrammParts.Add(new FlushProcess("First Flush", StatusPanelItems.Detect, PredefinedMessages.WaitUntilFlushFinished(pp.Setting.Culture), string.Empty, 2 * 60)); - - //listOfProgrammParts.Add(new PressureTestProcess("PreussureTest", StatusPanelItems.Prepare, PredefinedMessages.WaitUntilPreparationFinished(pp.Setting.Culture), PredefinedMessages.PreparationFailed(pp.Setting.Culture), 1 * 60)); - - if (pp.Setting.NumberOfPaths == 1) - { - listOfProgrammParts.Add(new SPPreparationProcess("Preparation Single", StatusPanelItems.Prepare, PredefinedMessages.WaitUntilPreparationFinished(pp.Setting.Culture), PredefinedMessages.PreparationFailed(pp.Setting.Culture), 1 * 60)); - - } - else - { - listOfProgrammParts.Add(new PreparationProcess("Preparation", StatusPanelItems.Prepare, PredefinedMessages.WaitUntilPreparationFinished(pp.Setting.Culture), PredefinedMessages.PreparationFailed(pp.Setting.Culture), 1 * 60)); - - } - - - - - if (!pp.Setting.TempOnly) - { - if (pp.Setting.NumberOfPaths == 1) - { - listOfProgrammParts.Add(new SPAmplitudeTestProcess("Amplitude Test Single", StatusPanelItems.Amplitude, PredefinedMessages.WaitUntilAmplitudeTestFinished(pp.Setting.Culture), PredefinedMessages.AmplitudeFailed(pp.Setting.Culture), 4 * 60)); - } - else - { - listOfProgrammParts.Add(new AmplitudeTestProcess("Amplitude Test", StatusPanelItems.Amplitude, PredefinedMessages.WaitUntilAmplitudeTestFinished(pp.Setting.Culture), PredefinedMessages.AmplitudeFailed(pp.Setting.Culture), 4 * 60)); - } - - listOfProgrammParts.Add(new FlushProcess("Second Flush", StatusPanelItems.Amplitude, PredefinedMessages.WaitUntilFlushFinished(pp.Setting.Culture), string.Empty, 2 * 60)); - } - - if (pp.Setting.NumberOfPaths == 1) - { - listOfProgrammParts.Add(new SPTemperatureCalibrationProcess("Temperature Calibration Single", StatusPanelItems.TempCal, PredefinedMessages.WaitUntilTemperatureCalibrationFinished(pp.Setting.Culture), PredefinedMessages.TempCalFailed(pp.Setting.Culture), 2 * 60)); - - if (!pp.Setting.TempOnly) - { - listOfProgrammParts.Add(new SPOffsetTestProcess("Offset Test Single", StatusPanelItems.Offset, PredefinedMessages.WaitUntilZeroflowOffsetTestFinished(pp.Setting.Culture), PredefinedMessages.ZeroflowOffsetTestFailed(pp.Setting.Culture), 18 * 60)); - } - listOfProgrammParts.Add(new SPCompletionProcess("Completion Single", StatusPanelItems.Completion, PredefinedMessages.WaitUntilCompletionFinished(pp.Setting.Culture), PredefinedMessages.CompletionFailed(pp.Setting.Culture), 1 * 60)); - - } - else - { - listOfProgrammParts.Add(new TemperatureCalibrationProcess("Temperature Calibration", StatusPanelItems.TempCal, PredefinedMessages.WaitUntilTemperatureCalibrationFinished(pp.Setting.Culture), PredefinedMessages.TempCalFailed(pp.Setting.Culture), 2 * 60)); - - if (!pp.Setting.TempOnly) - { - listOfProgrammParts.Add(new OffsetTestProcess("Offset Test", StatusPanelItems.Offset, PredefinedMessages.WaitUntilZeroflowOffsetTestFinished(pp.Setting.Culture), PredefinedMessages.ZeroflowOffsetTestFailed(pp.Setting.Culture), 18 * 60)); - } - listOfProgrammParts.Add(new CompletionProcess("Completion", StatusPanelItems.Completion, PredefinedMessages.WaitUntilCompletionFinished(pp.Setting.Culture), PredefinedMessages.CompletionFailed(pp.Setting.Culture), 1 * 60)); - - } - - - - var t = new Task(() => - { - try - { - int totalSecondsEstm = 0; - foreach (BaseProcess curentProccess in listOfProgrammParts) - { - totalSecondsEstm = totalSecondsEstm + curentProccess.ExpectedTimeS; - - } - DateTimeOffset totalStart = DateTimeOffset.UtcNow; - DateTimeOffset? totalStartOffset = null; - - foreach (BaseProcess curentProccess in listOfProgrammParts) - { - if (!MeterStateCtls.Any(m => m.IsEnabled)) - { - DebugMessage($"\tAPPLICATION:\t\t No device enabled"); - DebugMessage($"\tAPPLICATION:\t\t ZEROFLOW CALIBRATION sequence failed"); - pp.StopSequence = true; - - listOfProgrammParts.Last().StartProcess(pp, MeterStateCtls, TempMeterStateCtls); - - while (pp.IsBusy) - { - Thread.Sleep(50); - - } - - } - - - - pp.IsBusy = true; - var done = false; - while (!done && !pp.StopSequence) - { - pp.IsBusy = true; - try - { - if (curentProccess is OffsetTestProcess) - { - totalStartOffset = DateTimeOffset.UtcNow; - } - curentProccess.StartProcess(pp, MeterStateCtls, TempMeterStateCtls); - } - catch (Exception ex) - { - ShowMsg($"Error on Start Process", ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error, true); - throw; - } - - var secondCounter = 0; - while (pp.IsBusy) - { - Thread.Sleep(50); - try - { - if (secondCounter >= 1000) - { - PushProgressBars(totalSecondsEstm, totalStart, curentProccess.ExpectedTimeS, curentProccess.StartTime); - secondCounter = 0; - } - else - { - secondCounter = secondCounter + 50; - } - } - catch (Exception ex) - { - DebugMessage(ex); - } - - } - - if (totalStartOffset.HasValue) - { - var ts = DateTimeOffset.UtcNow - totalStartOffset.Value; - DebugMessage($"offset duration= {ts.TotalSeconds}"); - - MeterStateCtls.ForEach(f => f.Meter?.calibrationResult?.AddAdditionalLog($"offset duration=", $"{ts.TotalSeconds}S")); - - totalStartOffset = null; - - } - MeterStateCtls.ForEach(f => f.SetUi()); - - if (MeterStateCtls.Any(a => a.IsEnabled && a.Failed)) - { - var sb = new StringBuilder(); - - - - if (MeterStateCtls.Count(a => a.IsEnabled && a.Failed) == 1) - { - sb.Append($"Der Zähler hat den {curentProccess.ProcessName} nicht bestanden."); - } - else - { - sb.Append($"Die Zähler haben den {curentProccess.ProcessName} nicht bestanden."); - } - sb.AppendLine(""); - foreach (var a in MeterStateCtls.Where(a => a.IsEnabled && a.Failed).ToList()) - { - if (string.IsNullOrEmpty(a.Meter.SerialNumber)) - { - sb.Append($"{a.Meter.PcbId} an EP. {a.Slot},"); - } - else - { - sb.Append($"{a.Meter.SerialNumber} an EP. {a.Slot},"); - } - } - - sb = sb.Remove(sb.Length - 1, 1); - - sb.AppendLine(""); - sb.AppendLine("Soll der Schritt wiederholt werden (Retry/Wiederholen) ?"); - - if (MeterStateCtls.Count(a => a.IsEnabled && a.Failed) == 1) - { - sb.AppendLine("Ohne diesen Zähler fortgefahren werden (Ignor/Ignorieren)?"); - } - else - { - sb.AppendLine("Ohne diese Zähler fortgefahren (Ignor/Ignorieren)?"); - } - sb.AppendLine("Soll der Prozess für ALLE Zähler abgebrochen werden (Cancel/Abbruch)?"); - - - switch (AskForRetry(curentProccess.ProcessName, sb.ToString())) - { - case DialogResult.Retry: - MeterStateCtls.Where(a => a.IsEnabled && !a.Failed).ToList().ForEach(a => a.SetDisableForRetry()); - MeterStateCtls.Where(a => a.IsEnabled && a.Failed).ToList().ForEach(a => a.Failed = false); - break; - case DialogResult.Ignore: - MeterStateCtls.Where(a => a.IsEnabled && !a.Failed).ToList().ForEach(a => a.IsEnabled = false); - done = true; - break; - default: - - pp.StopSequence = true; - break; - } - - //var returnValue = AskForRetry..Invoke(); - - } - else - { - done = true; - } - MeterStateCtls.ForEach(a => a.SetEnableAfterRetry()); - - - } - foreach (var checkMeterForFailed in AllMeterStateCtrls()) - { - if (checkMeterForFailed.IsEnabled && checkMeterForFailed.Failed) - { - pp.GenerateReturnNote(curentProccess.FailedMessage, checkMeterForFailed); - try - { - if (!pp.IsAutomaticMode) - { - checkMeterForFailed.Meter.SetProcessState(DisplayCodes.ZeroFlowFailed); - } - - } - catch (Exception) - { - - } - checkMeterForFailed.IsEnabled = false; - } - } - - - if (pp.StopSequence || !MeterStateCtls.Any(meter => !meter.Failed)) - { - StopMainSequence(curentProccess.FailedMessage, MessageBoxIcon.Error, pp.Setting.Culture); - return; - } - - AbortIndicator = false; - SetControlElements(false); - SetProgressPanel(curentProccess.PanelState); - - - if (!GlobalMeterBatch.ListOfMeters.Any() && MeterStateCtls.Any(meter => meter.IsEnabled && !meter.Failed)) - { - StopMainSequence(PredefinedMessages.NoMeterSelected(pp.Setting.Culture), MessageBoxIcon.Error, - pp.Setting.Culture); - } - - //if ((pp.AtLeastOneThermometerPresent) || (pp.AtLeastOneMeterPresent)) return pp; - //StopMainSequence( - // !pp.AtLeastOneThermometerPresent - // ? PredefinedMessages.NoThermometerPresent(pp.Culture) - // : PredefinedMessages.NoMeterPresent(pp.Culture), - // MessageBoxIcon.Error, pp.Culture); - } - - } - catch (Exception ex) - { - ShowMsg($"Critical error", ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error, true); - DebugMessage(ex); - } - finally - { - - var GoodMeters = new List(); - foreach (var addToSuccessfullList in MeterStateCtls.Where(a => a.IsEnabled && !a.Failed)) - { - GoodMeters.Add(addToSuccessfullList.Meter.Slot); - } - - GlobalMeterBatch?.RemoveAllMeters(); - ThermoMeterBatch?.RemoveAllMeters(); - GlobalMeterBatch.Dispose(); - ThermoMeterBatch.Dispose(); - - TestDone(PredefinedMessages.ZeroflowCalibrationSequenceSuccessful(pp.Setting.Culture), pp.Setting.Culture, GoodMeters); - } - - - } - ); - t.Start(); - } - catch (Exception exception) - { - DebugMessage(exception); - - } - } - - public void PushProgressBars(int totalSecondsEstm, DateTimeOffset totalStart, int currentProccessEstm, DateTimeOffset currentProccessStartTime) - { - if (this.InvokeRequired) - { - Invoke((Action)PushProgressBars, totalSecondsEstm, totalStart, currentProccessEstm, currentProccessStartTime); - return; - } - try - { - l_ZeroFlowCal_SubResttimeDisplayValue.Text = currentProccessStartTime.ToLocalTime().AddSeconds(currentProccessEstm).ToString("HH:mm:ss"); - l_ZeroFlowCal_ResttimeDisplayValue.Text = totalStart.ToLocalTime().AddSeconds(totalSecondsEstm).ToString("HH:mm:ss"); - - int progressPer = 0; - var pastSeconds = (int)(DateTimeOffset.UtcNow - totalStart).TotalSeconds; - if (pastSeconds > 0) - { - progressPer = (int)(pastSeconds / (totalSecondsEstm / 100.0)); - progressPer = progressPer >= 100 ? 100 : progressPer; - } - - - pB_ZeroFlowCal_Progress.Value = progressPer; - - progressPer = 0; - pastSeconds = (int)(DateTimeOffset.UtcNow - currentProccessStartTime).TotalSeconds; - - if (pastSeconds > 0) - { - progressPer = (int)(pastSeconds / (currentProccessEstm / 100.0)); - progressPer = progressPer >= 100 ? 100 : progressPer; - } - - - pB_ZeroFlowCal_SubProgress.Value = progressPer; - } - catch (Exception ex) - { - DebugMessage($"Not able to update proccess {ex.Message}"); - } - - } - - private void TestDone(string msg, CultureInfo c, List goodMeters) - { - - if (this.InvokeRequired) - { - Invoke((Action>)TestDone, msg, c, goodMeters); - return; - } - - AllMeterStateCtrls().ForEach(ctl => ctl.Dispose()); - PreAdjustmentControl_Load(this, EventArgs.Empty); - GlobalMeterBatch = new MeterBatch(); - ThermoMeterBatch = new MeterBatch(); - StopMainSequence(msg, MessageBoxIcon.Information, c); - - OnIsDone?.Invoke(this, new EventArgsMeterSuccsessfull(goodMeters)); - - - } - - - private void PpOnOnRequestTempretureSelection(Object sender, EventArgsBool e) - { - - if (this.InvokeRequired) - { - Invoke((Action)PpOnOnRequestTempretureSelection, sender, e); - return; - } - - btn_StoreTempe.Enabled = true; - } - - public void StopMainSequence(String message, MessageBoxIcon icon, CultureInfo culture) - { - - SetProgressPanel(StatusPanelItems.None); - - AbortButtonEnabled(false); - SetControlElements(true); - StatusLabel(PredefinedMessages.PressDetect(pp.Setting.Culture)); - ShowMsg(message, "Form closing", MessageBoxButtons.OK, icon); // "'ZEROFLOW CALIBRATION' sequence stopped" - return; - - } - - - // - - private void btn_ZeroFlowCal_Abort_Click(object sender, System.EventArgs e) - { - - DialogResult AskForActions = DialogResult.None; - btn_ZeroFlowCal_Abort.Enabled = false; - - AskForActions = ShowMsg(PredefinedMessages.AreYouSure(settings.Culture), "Form closing", MessageBoxButtons.OKCancel, MessageBoxIcon.Error); - - if (DialogResult.Equals(AskForActions, DialogResult.OK)) - { - - AbortIndicator = true; - OnAbort?.Invoke(null, new EventArgsMeterSuccsessfull(new List())); - } - else - { - AbortIndicator = false; - btn_ZeroFlowCal_Abort.Enabled = true; - } - } - - private void btn_StoreTempe_Click(object sender, EventArgs e) - { - btn_StoreTempe.Enabled = false; - pp.TempretureSelected = true; - } - - private void btn_ShowAll_Click(object sender, EventArgs e) - { - if (this.InvokeRequired) - { - this.Invoke((Action)btn_ShowAll_Click, sender, e); - return; - } - rTB_ZeroFlowCal.Visible = true; - gB_MeterLog.Visible = false; - } - } -} diff --git a/GenesisCordonelTester/UI/PreAdjustmentControl.resx b/GenesisCordonelTester/UI/PreAdjustmentControl.resx deleted file mode 100644 index 719eb0636..000000000 --- a/GenesisCordonelTester/UI/PreAdjustmentControl.resx +++ /dev/null @@ -1,2261 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - /9j/4AAQSkZJRgABAgEAAAAAAAD/7gAOQWRvYmUAZAAAAAAB/9sAQwACAgICAgICAgICAwICAgMEAwIC - AwQFBAQEBAQFBgUFBQUFBQYGBwcIBwcGCQkKCgkJDAwMDAwMDAwMDAwMDAwM/9sAQwEDAwMFBAUJBgYJ - DQsJCw0PDg4ODg8PDAwMDAwPDwwMDAwMDA8MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgB - IwJYAwERAAIRAQMRAf/EAB8AAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKC//EALUQAAIBAwMCBAIG - BwMEAgYCcwECAxEEAAUhEjFBUQYTYSJxgRQykaEHFbFCI8FS0eEzFmLwJHKC8SVDNFOSorJjc8I1RCeT - o7M2F1RkdMPS4ggmgwkKGBmElEVGpLRW01UoGvLj88TU5PRldYWVpbXF1eX1ZnaGlqa2xtbm9jdHV2d3 - h5ent8fX5/c4SFhoeIiYqLjI2Oj4KTlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/EAB8BAAICAwEB - AQEBAAAAAAAAAAEAAgMEBQYHCAkKC//EALURAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZx - gZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp - 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+DlJ - WWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A+/mKuxV2KuxV2KuxV2KuxV2KuxV2 - KuxV5r+cX/ksfOf/AGz2/wCJLmq7c/xLL/VcTXf3Evc/L3PI3kXYq7FXYq7FXYq7FXYq7FXYq/UL8nf/ - ACWPkz/tnr/xJs9c7D/xLF/Veu0P9xH3PSs2rluxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux - V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux - V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvN/zfR5Pyz85JGjSO2nsFRQST8S9AM1fbYJ0WWv5ri67+4l - 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 - 7FXYq7FXYq/kt/MP/lP/ADz/AOBBqf8A1FSZ7Npv7qH9Ufc+fZvrl7yw/L2t+nP/AD62/wDJvfmF/wCA - e3/dQtc5P2v/AMXh/W/QXedg/wB7L+r+kP3Jzz56l+S3/P1b/jgfkv8A9tDW/wDk1Z52fsf9eX3R/S89 - 2/8ATD4/ofjNndPNuxV2KuxV2KuxV2KuxV2KvRvyo/K/zT+cXnvQfIPlGze41LWbhVuLviWhsrYEGa7u - GH2Y4lqx7nZVqxAOLrNXDS4jkmdh9p7h727T4JZ5iEeZf1OeU/LWm+TPK3lvyho6FNJ8r6XaaTpqtTl6 - FnCsMfIilSVQVPjnkObLLLOU5c5Ek/F7zHAQiIjkBTIMqZvyD/5+Y/kbrOoXPl/88vLmmyX1jp+nrovn - oW6cjbRxStJZ3jhRUqfVaJ2Oy0jHfO29lO0IxEtPI0Sbj594/T83ne3NKTWWI8j+gvx5zt3nHYq7FXYq - 7FXYq7FXYq7FUw0rStT13U7DRdFsLjVdW1W4jtdN021jaWeeeVgqRxooJZmJoAMjOcYRMpGgOZTGJkaG - 5L+nr/nGf8pZfyT/ACW8l+Qb0xvrllbveeZZYm5IdRvZGnnVWBoyxFxErDqqA988l7W1v5vUyyDlyHuG - w/W9zodP4GGMDz6+97xmuct/Pd/z8c/9aY1T/wAB/Sf+TbZ6X7L/AOJD+sXj+2v8YPuD4OzonVOxV2Ku - xV2KuxV2KuxV2KvtL/nBv8i9Z/Nj85fL3mObTn/wN+XV/BrPmHVJFPovc2zCazs0Owd5JVUsvaMMT2Da - H2g7QjptNKN+uYoDyPM/L7XZ9laU5sol/DHc/oD7f/6JX+QP/Lq+YP8ApCtf65oP9GGX/U4/Mu0/kGH8 - 8u/6JX+QP/Lq+YP+kK1/rj/owy/6nH5lf5Bh/PLv+iV/kD/y6vmD/pCtf64/6MMv+px+ZX+QYfzy7/ol - f5A/8ur5g/6QrX+uP+jDL/qcfmV/kGH88u/6JX+QP/Lq+YP+kK1/rj/owy/6nH5lf5Bh/PLv+iV/kD/y - 6vmD/pCtf64/6MMv+px+ZX+QYfzy7/olf5A/8ur5g/6QrX+uP+jDL/qcfmV/kGH88u/6JX+QP/Lq+YP+ - kK1/rj/owy/6nH5lf5Bh/PKJtP8An1l+WiS1vvzO8zXEFN44ILOF6/67JKP+FyMva/N0xx+1R2Dj6yP2 - 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 - 2kvTYnofrV3qDQcPyCgC0J9qIgAAOw== - - - \ No newline at end of file diff --git a/GenesisCordonelTester/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/GenesisCordonelTester/obj/Debug/DesignTimeResolveAssemblyReferences.cache index 83e737ea5..8116acfb1 100644 Binary files a/GenesisCordonelTester/obj/Debug/DesignTimeResolveAssemblyReferences.cache and b/GenesisCordonelTester/obj/Debug/DesignTimeResolveAssemblyReferences.cache differ diff --git a/TBF/TBF.csproj b/TBF/TBF.csproj index da9be45ed..6b50527b3 100644 --- a/TBF/TBF.csproj +++ b/TBF/TBF.csproj @@ -4267,6 +4267,10 @@ {32817bf9-e380-4467-9c7f-936f4b122bc7} GenCode128 + + {c955d8ac-76b8-42d8-a83f-8aeb56cf2567} + GenesisCordonelInterface + {0C0A1F4D-1363-4544-A7C5-196C76D26CCA} GraphLib