Develop - GciBridge -> GCI -> PreadjustmentUI functions
This commit is contained in:
parent
ad2bfd3639
commit
ad208f9633
@ -1,4 +1,9 @@
|
||||
using GenesisCordonelInterface.Core.Threading;
|
||||
using CordonelPreadjustmentUi;
|
||||
using CordonelPreadjustmentUi.Processes;
|
||||
using CordonelPreadjustmentUi.Processes.Actions;
|
||||
using CordonelPreadjustmentUi.Processes.Itinerary;
|
||||
using GenesisCordonelInterface.Core.Threading;
|
||||
using GenesisCordonelInterface.UI.LaatzenAPI_CordonelPreadjustmentUI;
|
||||
using NLog;
|
||||
using NLog.Fluent;
|
||||
using System;
|
||||
@ -17,6 +22,7 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
|
||||
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
|
||||
using Xylem.Common.Hardware.WaterMeter.WaterMeterRegisters;
|
||||
using Xylem.Common.Ui.CordonelPreadjustmentUi;
|
||||
using static GenesisCordonelInterface.API.PublicModels;
|
||||
using static Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.GenesisMeter;
|
||||
using static Xylem.Common.Hardware.WaterMeter.Genesis.Registers.Register;
|
||||
@ -30,8 +36,14 @@ namespace GenesisCordonelInterface.API
|
||||
//private static readonly Lazy<ILogger> Logger = new Lazy<ILogger>(() => LogManager.GetLogger("GCI"));
|
||||
private static readonly NLog.ILogger Logger = NLog.LogManager.GetLogger("GenesisCordonelInterface");
|
||||
|
||||
//GenesisToolBox
|
||||
private readonly MeterBatch _meterBatch = new MeterBatch();
|
||||
|
||||
//Preadjustment
|
||||
public PreAdjustmentSettingsContainer _settings = new PreAdjustmentSettingsContainer();
|
||||
public List<MeterStateControl> _meterControls = new List<MeterStateControl>();
|
||||
public List<MeterStateControl> _tempMeterControls = new List<MeterStateControl>();
|
||||
|
||||
// Protects all access to _meterBatch.ListOfMeters
|
||||
private readonly object _meterBatchLock = new object();
|
||||
private static readonly object _setupGenesisMeterLock = new object();
|
||||
@ -1381,5 +1393,388 @@ namespace GenesisCordonelInterface.API
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
// GCI to PreadjustmentUI - MANUAL - Laatzen GUI
|
||||
|
||||
#region ================================== PreAdjustmentUI form call ==================================
|
||||
|
||||
private FrmCordonelPreadjustmentUI _preadjustmentForm;
|
||||
private readonly object _formLock = new object();
|
||||
|
||||
public event EventHandler PreadjustmentFormClosedByUser;
|
||||
|
||||
/// <summary>
|
||||
/// Shows singleton instance of preadjustment form.
|
||||
///
|
||||
/// Behavior:
|
||||
///
|
||||
/// ShowPreadjustmentForm()
|
||||
/// ↓
|
||||
/// create form instance if necessary
|
||||
/// ↓
|
||||
/// user works with form
|
||||
/// ↓
|
||||
/// user clicks X
|
||||
/// ↓
|
||||
/// FormClosing
|
||||
/// ↓
|
||||
/// Cancel closing
|
||||
/// ↓
|
||||
/// Hide()
|
||||
/// ↓
|
||||
/// PreadjustmentFormClosedByUser
|
||||
/// ↓
|
||||
/// external workflow continues
|
||||
///
|
||||
/// Notes:
|
||||
/// - form instance is reused
|
||||
/// - form is hidden instead of disposed
|
||||
/// - event notification is non-blocking
|
||||
/// - repeated calls bring existing form to front
|
||||
/// - actual disposal happens only during application shutdown
|
||||
///
|
||||
/// Typical usage:
|
||||
///
|
||||
/// _bridge.PreadjustmentFormClosedByUser += (s,e)=>
|
||||
/// {
|
||||
/// ContinueWorkflow();
|
||||
/// };
|
||||
///
|
||||
/// _bridge.ShowPreadjustmentForm(this);
|
||||
///
|
||||
/// </summary>
|
||||
public void ShowPreadjustmentForm(IWin32Window owner)
|
||||
{
|
||||
lock (_formLock)
|
||||
{
|
||||
// Create form only if it does not exist
|
||||
// or has already been disposed
|
||||
if (_preadjustmentForm == null || _preadjustmentForm.IsDisposed)
|
||||
{
|
||||
_preadjustmentForm = new FrmCordonelPreadjustmentUI(_meterBatch);
|
||||
|
||||
_preadjustmentForm.FormClosing += (s, e) =>
|
||||
{
|
||||
// Hide the form instead of destroying it
|
||||
// when user clicks the close button
|
||||
if (e.CloseReason == CloseReason.UserClosing)
|
||||
{
|
||||
e.Cancel = true;
|
||||
_preadjustmentForm.Hide();
|
||||
|
||||
// Notify outside code that the form was closed by user
|
||||
PreadjustmentFormClosedByUser?.Invoke(
|
||||
this,
|
||||
EventArgs.Empty);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// If already visible, bring it to front
|
||||
if (_preadjustmentForm.Visible)
|
||||
{
|
||||
_preadjustmentForm.Activate();
|
||||
_preadjustmentForm.BringToFront();
|
||||
return;
|
||||
}
|
||||
|
||||
// Show existing form instance
|
||||
_preadjustmentForm.Show(owner);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================================== Create context for PreAdjustmentUI ==================================
|
||||
|
||||
/*public interface IGciToolContext
|
||||
{
|
||||
IReadOnlyList<int> GetEnabledSlots();
|
||||
|
||||
string GetPcbId(int slot);
|
||||
string GetSerialNumber(int slot);
|
||||
|
||||
bool Login(int slot);
|
||||
bool Logout(int slot);
|
||||
|
||||
bool ReadRegister(int slot, int address, out string value);
|
||||
bool WriteRegister(int slot, int address, string value);
|
||||
|
||||
void LogInfo(string message);
|
||||
void LogError(string message);
|
||||
|
||||
event EventHandler<GciMeterChangedEventArgs> MeterChanged;
|
||||
}*/
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
// GCI to PreadjustmentUI - AUTOMATIC - STANDALONE - Laatzen GUI
|
||||
|
||||
#region ================================== PreAdjustmentUI DETECT process ==================================
|
||||
|
||||
public Task<bool> Preadjustment_DetectAsync(
|
||||
CancellationToken token = default)
|
||||
{
|
||||
return Task.Run(() => Preadjustment_DetectCore(
|
||||
token),
|
||||
token);
|
||||
}
|
||||
|
||||
private bool Preadjustment_DetectCore(
|
||||
CancellationToken token)
|
||||
{
|
||||
MeterBatch globalMeterBatch = new MeterBatch();
|
||||
MeterBatch thermoMeterBatch = new MeterBatch();
|
||||
|
||||
if (globalMeterBatch == null)
|
||||
throw new ArgumentNullException(nameof(globalMeterBatch));
|
||||
|
||||
if (thermoMeterBatch == null)
|
||||
throw new ArgumentNullException(nameof(thermoMeterBatch));
|
||||
|
||||
if (_settings == null)
|
||||
throw new ArgumentNullException(nameof(_settings));
|
||||
|
||||
if (_meterControls == null)
|
||||
throw new ArgumentNullException(nameof(_meterControls));
|
||||
|
||||
if (_tempMeterControls == null)
|
||||
_tempMeterControls = new List<MeterStateControl>();
|
||||
|
||||
// Clear previous batch content
|
||||
if (globalMeterBatch.ListOfMeters.Any())
|
||||
globalMeterBatch.RemoveAllMeters();
|
||||
|
||||
if (thermoMeterBatch.ListOfMeters.Any())
|
||||
thermoMeterBatch.RemoveAllMeters();
|
||||
|
||||
globalMeterBatch = _meterBatch;
|
||||
|
||||
// If manual temperature input is used,
|
||||
// ignore temporary meter controls
|
||||
if (!_settings.GetTempUseTempFlansh())
|
||||
_tempMeterControls.Clear();
|
||||
|
||||
var allMeterControls =
|
||||
new List<MeterStateControl>();
|
||||
|
||||
allMeterControls.AddRange(_meterControls);
|
||||
allMeterControls.AddRange(_tempMeterControls);
|
||||
|
||||
CreateZeroFlowMeters(globalMeterBatch, thermoMeterBatch, allMeterControls, token);
|
||||
|
||||
SetEnableOpeningState(allMeterControls);
|
||||
|
||||
if (!_meterControls.Any(a => a.EnableOpening))
|
||||
return false;
|
||||
|
||||
SetUnknownStatus(allMeterControls);
|
||||
|
||||
//CheckNormalMeters( meterControls, token); //open ports
|
||||
|
||||
CheckTemperatureMeters(_settings, _tempMeterControls, token);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void CreateZeroFlowMeters(
|
||||
MeterBatch globalMeterBatch,
|
||||
MeterBatch thermoMeterBatch,
|
||||
List<MeterStateControl> allMeterControls,
|
||||
CancellationToken token)
|
||||
{
|
||||
foreach (var meterStateCtl in allMeterControls)
|
||||
{
|
||||
token.ThrowIfCancellationRequested();
|
||||
|
||||
if (!(meterStateCtl.IsEnabled ||
|
||||
meterStateCtl is TempMeterStateControl))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (meterStateCtl.Slot == -1)
|
||||
continue;
|
||||
|
||||
ZeroFlowGenesisMeter currentMeter = new ZeroFlowGenesisMeter(meterStateCtl.Slot, 3, !(meterStateCtl is TempMeterStateControl));
|
||||
|
||||
var convertedMeter = GetMeterThreadSafe(meterStateCtl.Slot);
|
||||
if (convertedMeter != null)
|
||||
{
|
||||
convertedMeter.CopySafeStateTo(currentMeter);
|
||||
}
|
||||
|
||||
currentMeter.LogOnEnable = true;
|
||||
currentMeter.LoginFailed = false;
|
||||
currentMeter.PreparationFailed = false;
|
||||
currentMeter.AmplitudeFailed = false;
|
||||
currentMeter.ZeroFlowOffsetFailed = false;
|
||||
currentMeter.CompletionFailed = false;
|
||||
currentMeter.Ok = false;
|
||||
currentMeter.EmptyPipeCheckEnable = false;
|
||||
currentMeter.EmptyPipeCheckFailed = false;
|
||||
|
||||
if (meterStateCtl is TempMeterStateControl)
|
||||
{
|
||||
thermoMeterBatch.AddMeter(currentMeter);
|
||||
meterStateCtl.IsEnabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (currentMeter.useConfigSource != ConfigSource.InterfaceInputConfig)
|
||||
globalMeterBatch.AddMeter(currentMeter);
|
||||
else
|
||||
globalMeterBatch.AddMeter2(currentMeter);
|
||||
}
|
||||
|
||||
meterStateCtl.Meter = currentMeter;
|
||||
}
|
||||
}
|
||||
|
||||
private void SetEnableOpeningState(
|
||||
List<MeterStateControl> allMeterControls)
|
||||
{
|
||||
foreach (var meterState in allMeterControls)
|
||||
{
|
||||
meterState.EnableOpening =
|
||||
meterState.IsEnabled;
|
||||
}
|
||||
}
|
||||
|
||||
private void SetUnknownStatus(
|
||||
List<MeterStateControl> allMeterControls)
|
||||
{
|
||||
foreach (var meterState in allMeterControls)
|
||||
{
|
||||
meterState.SetToUnknownStatus =
|
||||
!meterState.EnableOpening;
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckNormalMeters(
|
||||
List<MeterStateControl> meterControls,
|
||||
CancellationToken token)
|
||||
{
|
||||
foreach (var meterCtl in meterControls)
|
||||
{
|
||||
token.ThrowIfCancellationRequested();
|
||||
|
||||
if (meterCtl != null && meterCtl.IsEnabled)
|
||||
{
|
||||
meterCtl.Ok =
|
||||
meterCtl.Meter.CheckRequestPort() &&
|
||||
meterCtl.Meter.CheckStreamingPort();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckTemperatureMeters(
|
||||
PreAdjustmentSettingsContainer settings,
|
||||
List<MeterStateControl> tempMeterControls,
|
||||
CancellationToken token)
|
||||
{
|
||||
if (settings.GetTempUseManualInput())
|
||||
return;
|
||||
|
||||
foreach (var meterCtl in tempMeterControls)
|
||||
{
|
||||
token.ThrowIfCancellationRequested();
|
||||
|
||||
if (meterCtl != null && meterCtl.IsEnabled)
|
||||
{
|
||||
meterCtl.Ok =
|
||||
meterCtl.Meter.CheckStreamingPort();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================================== PreAdjustmentUI PREPARATION process ==================================
|
||||
|
||||
/// <summary>
|
||||
/// Execute standalone preparation process.
|
||||
///
|
||||
/// Flow:
|
||||
///
|
||||
/// Create ProcessProgress
|
||||
/// ↓
|
||||
/// Create PreparationProcess
|
||||
/// ↓
|
||||
/// Start process
|
||||
/// ↓
|
||||
/// Wait for completion
|
||||
/// ↓
|
||||
/// Return result
|
||||
///
|
||||
/// Notes:
|
||||
/// - GUI independent
|
||||
/// - reusable from GCI workflow
|
||||
/// - supports SinglePath and MultiPath mode
|
||||
/// </summary>
|
||||
public Task<bool> Preadjustment_PreparationAsync(
|
||||
ProcessProgress pp,
|
||||
CancellationToken token = default)
|
||||
{
|
||||
IProcess process;
|
||||
|
||||
if (pp.Setting.NumberOfPaths == 1)
|
||||
{
|
||||
process =
|
||||
new SPPreparationProcess(
|
||||
"Preparation Single",
|
||||
PreAdjustmentControl.StatusPanelItems.Prepare,
|
||||
PreAdjustmentControl.PredefinedMessages.WaitUntilPreparationFinished(pp.Setting.Culture),
|
||||
PreAdjustmentControl.PredefinedMessages.PreparationFailed(pp.Setting.Culture),
|
||||
60);
|
||||
}
|
||||
else
|
||||
{
|
||||
process =
|
||||
new PreparationProcess(
|
||||
"Preparation",
|
||||
PreAdjustmentControl.StatusPanelItems.Prepare,
|
||||
PreAdjustmentControl.PredefinedMessages.WaitUntilPreparationFinished(pp.Setting.Culture),
|
||||
PreAdjustmentControl.PredefinedMessages.PreparationFailed(pp.Setting.Culture),
|
||||
60);
|
||||
}
|
||||
|
||||
return ExecuteProcessAsync(
|
||||
process,
|
||||
pp,
|
||||
token);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================================== PreAdjustmentUI process threading ==================================
|
||||
|
||||
public async Task<bool> ExecuteProcessAsync(
|
||||
IProcess process,
|
||||
ProcessProgress pp,
|
||||
CancellationToken token = default)
|
||||
{
|
||||
return await Task.Run(() =>
|
||||
{
|
||||
pp.IsBusy = true;
|
||||
|
||||
process.StartProcess(
|
||||
pp,
|
||||
_meterControls,
|
||||
_tempMeterControls);
|
||||
|
||||
while (pp.IsBusy && !token.IsCancellationRequested)
|
||||
{
|
||||
Thread.Sleep(50);
|
||||
}
|
||||
|
||||
return !_meterControls.Any(
|
||||
m => m.IsEnabled && m.Failed);
|
||||
|
||||
}, token);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@ -1,8 +1,12 @@
|
||||
using System;
|
||||
using CordonelPreadjustmentUi;
|
||||
using CordonelPreadjustmentUi.Processes.Itinerary;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO.Ports;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
|
||||
using Xylem.Common.Ui.CordonelPreadjustmentUi;
|
||||
using static GenesisCordonelInterface.API.PublicModels;
|
||||
|
||||
namespace GenesisCordonelInterface.API
|
||||
@ -22,6 +26,8 @@ namespace GenesisCordonelInterface.API
|
||||
_innerMeterAPI = new InterfaceGCIToLaatzen();
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
#region ================================== PORT DETECTION ==================================
|
||||
|
||||
public PortDetectionResult DetectStreamingPort(int slot)
|
||||
@ -424,7 +430,6 @@ namespace GenesisCordonelInterface.API
|
||||
#endregion
|
||||
|
||||
#region ================================== METER BATCH SETUP ==================================
|
||||
// ----------------------------------------------------
|
||||
|
||||
public void ReloadSlotSetup()
|
||||
{
|
||||
@ -438,12 +443,34 @@ namespace GenesisCordonelInterface.API
|
||||
RaiseMeterBatchStatusChanged();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------
|
||||
#endregion
|
||||
|
||||
#region ================================== Register names ==================================
|
||||
|
||||
public List<string> GetAllRegisterNames()
|
||||
{
|
||||
return _innerMeterAPI.GetAllRegisterNames();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
// Preadjustment
|
||||
|
||||
public Task<bool> Preadjustment_DetectAsync(
|
||||
CancellationToken token = default)
|
||||
{
|
||||
return _innerMeterAPI.Preadjustment_DetectAsync(token);
|
||||
}
|
||||
|
||||
public Task<bool> Preadjustment_PreparationAsync(
|
||||
ProcessProgress pp,
|
||||
CancellationToken token = default)
|
||||
{
|
||||
return _innerMeterAPI.Preadjustment_PreparationAsync(
|
||||
pp,
|
||||
token);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
using Newtonsoft.Json;
|
||||
using CordonelPreadjustmentUi;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
@ -10,18 +11,26 @@ 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.Genesis.GenesisCore;
|
||||
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
|
||||
using Xylem.Common.Ui.CordonelPreadjustmentUi;
|
||||
using CordonelPreadjustmentUi;
|
||||
using static Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.GenesisMeter;
|
||||
using System.Linq;//...MF
|
||||
|
||||
namespace GenesisCordonelInterface.UI.LaatzenAPI_CordonelPreadjustmentUI
|
||||
{
|
||||
public partial class FrmCordonelPreadjustmentUI : Form
|
||||
{
|
||||
private PreAdjustmentControl preadjustCtl;
|
||||
public PreAdjustmentControl preadjustCtl;//...MF
|
||||
private PreAdjustmentSettingsContainer mainSettings = new PreAdjustmentSettingsContainer();
|
||||
public MeterBatch _externMetersBatch;
|
||||
|
||||
public FrmCordonelPreadjustmentUI()
|
||||
{
|
||||
}
|
||||
public FrmCordonelPreadjustmentUI(MeterBatch externMetersBatch)
|
||||
{
|
||||
_externMetersBatch = externMetersBatch;
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
@ -29,7 +38,7 @@ namespace GenesisCordonelInterface.UI.LaatzenAPI_CordonelPreadjustmentUI
|
||||
{
|
||||
|
||||
|
||||
preadjustCtl = new PreAdjustmentControl(mainSettings);
|
||||
preadjustCtl = new PreAdjustmentControl(mainSettings, _externMetersBatch);
|
||||
tab_ZeroFlowCal.Controls.Add(preadjustCtl);
|
||||
|
||||
|
||||
@ -71,7 +80,7 @@ namespace GenesisCordonelInterface.UI.LaatzenAPI_CordonelPreadjustmentUI
|
||||
{
|
||||
if (e.TabPage.Name == tab_ZeroFlowCal.Name)
|
||||
{
|
||||
try
|
||||
/*try
|
||||
{
|
||||
var _serialConfigFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Genesis", ProgramConfig.SerialConfigFileName);
|
||||
|
||||
@ -99,11 +108,81 @@ namespace GenesisCordonelInterface.UI.LaatzenAPI_CordonelPreadjustmentUI
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"use default meters because of {ex.Message}");
|
||||
}*/
|
||||
|
||||
try //...MF
|
||||
{
|
||||
mainSettings.Meters = new List<int>();
|
||||
mainSettings.TempMeters = new List<int>();
|
||||
|
||||
// ==========================================
|
||||
// Try loading configuration from GCI meters
|
||||
// ==========================================
|
||||
|
||||
bool loadedFromInterface = false;
|
||||
|
||||
if (_externMetersBatch != null &&
|
||||
_externMetersBatch.ListOfMeters.Any())
|
||||
{
|
||||
foreach (GenesisMeter meter in _externMetersBatch.ListOfMeters)
|
||||
{
|
||||
// Skip meters that should use file configuration
|
||||
if (meter.useConfigSource != ConfigSource.InterfaceInputConfig)
|
||||
continue;
|
||||
|
||||
loadedFromInterface = true;
|
||||
|
||||
// Split normal and temperature meters
|
||||
//if (meter.Type == SlotType.TemperatureMeter)
|
||||
//{
|
||||
// mainSettings.TempMeters.Add(meter.Slot);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
mainSettings.Meters.Add(meter.Slot);
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
// ==========================================
|
||||
// Fallback to configuration file
|
||||
// ==========================================
|
||||
|
||||
if (!loadedFromInterface)
|
||||
{
|
||||
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<SlotConfig[]>(_fileString);
|
||||
}
|
||||
|
||||
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;
|
||||
@ -156,7 +235,7 @@ namespace GenesisCordonelInterface.UI.LaatzenAPI_CordonelPreadjustmentUI
|
||||
|
||||
}
|
||||
|
||||
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
/*private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (preadjustCtl != null)
|
||||
{
|
||||
@ -177,7 +256,68 @@ namespace GenesisCordonelInterface.UI.LaatzenAPI_CordonelPreadjustmentUI
|
||||
}
|
||||
|
||||
|
||||
}*/
|
||||
|
||||
/// <summary>
|
||||
/// Raised when user closes the preadjustment window
|
||||
/// using the window close button (X).
|
||||
///
|
||||
/// Note:
|
||||
/// Form is hidden, not disposed.
|
||||
/// This event allows external code to continue
|
||||
/// workflow asynchronously.
|
||||
/// </summary>
|
||||
public event EventHandler OnUserClosed;
|
||||
|
||||
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
// User clicked X button - hide form only
|
||||
if (e.CloseReason == CloseReason.UserClosing)
|
||||
{
|
||||
e.Cancel = true;
|
||||
this.Hide();
|
||||
|
||||
OnUserClosed?.Invoke(this, EventArgs.Empty);
|
||||
return;
|
||||
}
|
||||
|
||||
// Real application shutdown / dispose
|
||||
DisposeResources();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dispose all internal resources that should
|
||||
/// only be released during real application shutdown.
|
||||
///
|
||||
/// Do not call when form is hidden.
|
||||
/// </summary>
|
||||
private void DisposeResources()
|
||||
{
|
||||
if (preadjustCtl != null)
|
||||
{
|
||||
preadjustCtl.CloseConnections();
|
||||
preadjustCtl.Dispose();
|
||||
preadjustCtl = null;
|
||||
}
|
||||
|
||||
if (ThermoMeterBatch != null)
|
||||
{
|
||||
ThermoMeterBatch.Dispose();
|
||||
ThermoMeterBatch = null;
|
||||
}
|
||||
|
||||
if (TempMeterStateCtls != null)
|
||||
{
|
||||
foreach (var item in TempMeterStateCtls)
|
||||
{
|
||||
item.Dispose();
|
||||
}
|
||||
|
||||
TempMeterStateCtls.Clear();
|
||||
TempMeterStateCtls = null;
|
||||
}
|
||||
}
|
||||
|
||||
private MeterBatch ThermoMeterBatch = new MeterBatch();
|
||||
private List<MeterStateControl> TempMeterStateCtls = new List<MeterStateControl>();
|
||||
private void tmpStart(int slot, bool RaspiMode = false)
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
using CordonelPreadjustmentUi.Processes;
|
||||
using CordonelPreadjustmentUi;
|
||||
using CordonelPreadjustmentUi.Processes;
|
||||
using CordonelPreadjustmentUi.Processes.Actions;
|
||||
using CordonelPreadjustmentUi.Processes.Itinerary;
|
||||
using System;
|
||||
@ -6,16 +7,18 @@ using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
|
||||
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;
|
||||
using CordonelPreadjustmentUi;
|
||||
using static Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.GenesisMeter;
|
||||
|
||||
namespace GenesisCordonelInterface.UI
|
||||
{
|
||||
@ -41,11 +44,18 @@ namespace GenesisCordonelInterface.UI
|
||||
private Boolean abortIndicator = false;
|
||||
public Boolean AbortIndicator { get { return abortIndicator; } set { abortIndicator = value; } }
|
||||
public int TestRunNumber;
|
||||
public PreAdjustmentControl(PreAdjustmentSettingsContainer Settings = null)
|
||||
public PreAdjustmentControl(PreAdjustmentSettingsContainer Settings = null, MeterBatch externalMetersBatch = null)//...MF
|
||||
{
|
||||
InitializeComponent();
|
||||
SetSettings(Settings);
|
||||
rTB_ZeroFlowCal.AutoSize = true;
|
||||
|
||||
//...MF
|
||||
// Use external batch only if supplied
|
||||
if (externalMetersBatch != null)
|
||||
{
|
||||
GlobalMeterBatch = externalMetersBatch;
|
||||
}
|
||||
}
|
||||
public void SetSettings(PreAdjustmentSettingsContainer Settings = null)
|
||||
{
|
||||
@ -120,6 +130,49 @@ namespace GenesisCordonelInterface.UI
|
||||
}
|
||||
cb_Metersize.SelectedItem = setM;
|
||||
|
||||
//...MF
|
||||
// Create UI controls for configured meter slots.
|
||||
//
|
||||
// Flow:
|
||||
//
|
||||
// settings.Meters
|
||||
// ↓
|
||||
// create MeterStateControl
|
||||
// ↓
|
||||
// position control in UI
|
||||
// ↓
|
||||
// check whether slot exists in externally supplied MeterBatch
|
||||
// ↓
|
||||
// automatically enable corresponding checkbox
|
||||
// ↓
|
||||
// register UI events
|
||||
// ↓
|
||||
// add control into internal collection and group box
|
||||
//
|
||||
// Notes:
|
||||
// - allows external GCI workflow to preselect meters
|
||||
// - keeps UI synchronized with externally injected MeterBatch
|
||||
// - slots contained in GlobalMeterBatch are automatically checked
|
||||
//
|
||||
foreach (var Meter in settings.Meters)
|
||||
{
|
||||
var ctl = new MeterStateControl(Meter);
|
||||
ctl.Location = new Point(5 + ((tmpI - 1) * ctl.Width), 15);
|
||||
|
||||
// Check meter if it exists in external MeterBatch
|
||||
if (GlobalMeterBatch != null &&
|
||||
GlobalMeterBatch.ListOfMeters != null &&
|
||||
GlobalMeterBatch.ListOfMeters.Any(m => m.Slot == Meter))
|
||||
{
|
||||
ctl.SetChecked(true);
|
||||
}
|
||||
|
||||
MeterStateCtls.Add(ctl);
|
||||
gB_Meters.Controls.Add(ctl);
|
||||
ctl.OnRequestDetails += Ctl_MouseEnter;
|
||||
tmpI = tmpI + 1;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -1694,13 +1747,46 @@ namespace GenesisCordonelInterface.UI
|
||||
|
||||
List<IProcess> listOfProgrammParts = new List<IProcess>();
|
||||
|
||||
//...MF
|
||||
bool requiresInternalLoginFlow = true;
|
||||
requiresInternalLoginFlow =
|
||||
GlobalMeterBatch.ListOfMeters.All(
|
||||
m =>
|
||||
{
|
||||
var meter = m as GenesisMeter;
|
||||
|
||||
return meter == null ||
|
||||
meter.usePasswordSource !=
|
||||
PasswordSource.InterfaceInputPassword;
|
||||
});
|
||||
|
||||
listOfProgrammParts.Add(new PrepareTestProcess("PrepareTest", CordonelPreadjustmentUi.PreAdjustmentControl.StatusPanelItems.Detect, string.Empty, string.Empty, 1 * 60));
|
||||
//...MF
|
||||
bool requiresInternalConfigFlow = true;
|
||||
requiresInternalConfigFlow =
|
||||
GlobalMeterBatch.ListOfMeters.All(
|
||||
m =>
|
||||
{
|
||||
var meter = m as GenesisMeter;
|
||||
|
||||
listOfProgrammParts.Add(new LoginProcess("Login", CordonelPreadjustmentUi.PreAdjustmentControl.StatusPanelItems.Detect, PredefinedMessages.WaitUntilLoginFinished(pp.Setting.Culture), PredefinedMessages.LoginFailed(pp.Setting.Culture), 1 * 60));
|
||||
return meter == null ||
|
||||
meter.useConfigSource !=
|
||||
ConfigSource.InterfaceInputConfig;
|
||||
});
|
||||
|
||||
listOfProgrammParts.Add(new FlushProcess("First Flush", CordonelPreadjustmentUi.PreAdjustmentControl.StatusPanelItems.Detect, PredefinedMessages.WaitUntilFlushFinished(pp.Setting.Culture), string.Empty, 2 * 60));
|
||||
if (requiresInternalConfigFlow)//...MF
|
||||
{
|
||||
listOfProgrammParts.Add(new PrepareTestProcess("PrepareTest", CordonelPreadjustmentUi.PreAdjustmentControl.StatusPanelItems.Detect, string.Empty, string.Empty, 1 * 60));
|
||||
}
|
||||
|
||||
if (requiresInternalLoginFlow)//...MF
|
||||
{
|
||||
listOfProgrammParts.Add(new LoginProcess("Login", CordonelPreadjustmentUi.PreAdjustmentControl.StatusPanelItems.Detect, PredefinedMessages.WaitUntilLoginFinished(pp.Setting.Culture), PredefinedMessages.LoginFailed(pp.Setting.Culture), 1 * 60));
|
||||
}
|
||||
|
||||
if (requiresInternalConfigFlow)//...MF
|
||||
{
|
||||
listOfProgrammParts.Add(new FlushProcess("First Flush", CordonelPreadjustmentUi.PreAdjustmentControl.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));
|
||||
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
using GenesisCordonelInterface.API;
|
||||
using CordonelPreadjustmentUi;
|
||||
using CordonelPreadjustmentUi.Processes.Itinerary;
|
||||
using GenesisCordonelInterface.API;
|
||||
using GenesisCordonelInterface.Core.Threading;
|
||||
using log4net;
|
||||
///
|
||||
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
|
||||
@ -13,6 +16,8 @@ using TBF.Rig.BridgeComponents.GciBridge.UI;
|
||||
using TBF.Rig.Generic;
|
||||
using TBF.Rig.Input.DataStorage.UniDataStorageReader;
|
||||
using TBF.Rig.Input.DataStorage.UniDataStorageReader.Searching.Database;
|
||||
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
|
||||
using Xylem.Common.Ui.CordonelPreadjustmentUi;
|
||||
using static TBF.Rig.BridgeComponents.GciBridge.Interfaces.PublicModels;
|
||||
using GciGUIType = GenesisCordonelInterface.UI.MainView;
|
||||
using GciPublicModels = GenesisCordonelInterface.API.PublicModels;
|
||||
@ -20,7 +25,6 @@ using GciType = GenesisCordonelInterface.API.InterfaceOutsideToGCI;
|
||||
using UdsReaderType = TBF.Rig.Input.DataStorage.UniDataStorageReader.Reader;
|
||||
using UDSRPublicModels = TBF.Rig.Input.DataStorage.UniDataStorageReader.Interfaces.PublicModels;
|
||||
using UdsWriterType = TBF.Rig.Output.DataStorage.UniDataStorageWriter.Writer;
|
||||
using GenesisCordonelInterface.Core.Threading;
|
||||
|
||||
namespace TBF.Rig.BridgeComponents.GciBridge
|
||||
{
|
||||
@ -47,8 +51,8 @@ namespace TBF.Rig.BridgeComponents.GciBridge
|
||||
Form gciGuiHostForm;
|
||||
|
||||
//diag GUI for GciBridge
|
||||
public UserControl gciBridgeGUI;
|
||||
public MainForm gciBridgeGuiForm;
|
||||
public UserControl gciBridgeGUIUserControl;
|
||||
public UI.MainForm gciBridgeGuiForm;
|
||||
|
||||
public GciType gciExternalInterface;
|
||||
|
||||
@ -119,7 +123,7 @@ namespace TBF.Rig.BridgeComponents.GciBridge
|
||||
if (gciBridgeGuiForm != null && !gciBridgeGuiForm.IsDisposed)
|
||||
return;
|
||||
|
||||
gciBridgeGuiForm = new MainForm(this);
|
||||
gciBridgeGuiForm = new UI.MainForm(this);
|
||||
gciBridgeGuiForm.Text = "Gci Bridge GUI";
|
||||
gciBridgeGuiForm.Width = 1300;
|
||||
gciBridgeGuiForm.Height = 600;
|
||||
@ -1417,6 +1421,90 @@ namespace TBF.Rig.BridgeComponents.GciBridge
|
||||
|
||||
#endregion
|
||||
|
||||
// Preadjustment API:
|
||||
|
||||
#region ================================== Preadjustment DETECT bridge ==================================
|
||||
|
||||
public async Task<bool> Preadjustment_DetectAsync(
|
||||
CancellationToken token = default)
|
||||
{
|
||||
const string operation = nameof(Preadjustment_DetectAsync);
|
||||
|
||||
try
|
||||
{
|
||||
EnsureExternalInterface();
|
||||
|
||||
log.InfoFormat("{0}: {1} Start.", Name, operation);
|
||||
|
||||
bool result =
|
||||
await gciExternalInterface.Preadjustment_DetectAsync(
|
||||
token)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
log.InfoFormat(
|
||||
"{0}: {1} Finish. Success={2}",
|
||||
Name,
|
||||
operation,
|
||||
result);
|
||||
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error(
|
||||
string.Format("{0}: {1} failed.", Name, operation),
|
||||
ex);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================================== PreAdjustment PREPARATION bridge ==================================
|
||||
|
||||
public async Task<bool> Preadjustment_PreparationAsync(
|
||||
ProcessProgress pp,
|
||||
CancellationToken token = default)
|
||||
{
|
||||
const string operation = nameof(Preadjustment_PreparationAsync);
|
||||
|
||||
try
|
||||
{
|
||||
EnsureExternalInterface();
|
||||
|
||||
if (pp == null)
|
||||
throw new ArgumentNullException(nameof(pp));
|
||||
|
||||
log.InfoFormat("{0}: {1} Start.", Name, operation);
|
||||
|
||||
bool result =
|
||||
await gciExternalInterface
|
||||
.Preadjustment_PreparationAsync(
|
||||
pp,
|
||||
token)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
log.InfoFormat(
|
||||
"{0}: {1} Finish. Success={2}",
|
||||
Name,
|
||||
operation,
|
||||
result);
|
||||
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error(
|
||||
string.Format("{0}: {1} failed.", Name, operation),
|
||||
ex);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ======================================= Helpers =======================================
|
||||
private UDSRPublicModels.DataQuery CreatePasswordQuery(string pcbId)
|
||||
{
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
private System.Windows.Forms.Button btnRegisterStore;
|
||||
private System.Windows.Forms.Button btnPulseSetup;
|
||||
private System.Windows.Forms.Button preadjustmentButton;
|
||||
private System.Windows.Forms.Button btnMetersAction;
|
||||
private System.Windows.Forms.Button slotsComPortsRegistersActionsViewButton;
|
||||
private System.Windows.Forms.SplitContainer splitWorkArea;
|
||||
private System.Windows.Forms.Panel pnlGciViewHost;
|
||||
|
||||
@ -43,9 +43,11 @@
|
||||
this.btnRegisterStore = new System.Windows.Forms.Button();
|
||||
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||
this.groupBox5 = new System.Windows.Forms.GroupBox();
|
||||
this.btnMetersAction = new System.Windows.Forms.Button();
|
||||
this.storageActionButton = new System.Windows.Forms.Button();
|
||||
this.combinedActionButton = new System.Windows.Forms.Button();
|
||||
this.ScenariousViewButton = new System.Windows.Forms.Button();
|
||||
this.preadjustmenActionsViewButton = new System.Windows.Forms.Button();
|
||||
this.slotsComPortsRegistersActionsViewButton = new System.Windows.Forms.Button();
|
||||
this.uniDataSorageActionsViewButton = new System.Windows.Forms.Button();
|
||||
this.combinedActionsViewButton = new System.Windows.Forms.Button();
|
||||
this.groupBox3 = new System.Windows.Forms.GroupBox();
|
||||
this.btnDiagTablesConfigurationButton = new System.Windows.Forms.Button();
|
||||
this.pnlMain = new System.Windows.Forms.Panel();
|
||||
@ -104,7 +106,6 @@
|
||||
//
|
||||
this.tabPage1.Controls.Add(this.groupBox2);
|
||||
this.tabPage1.Controls.Add(this.groupBox1);
|
||||
this.tabPage1.Enabled = false;
|
||||
this.tabPage1.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabPage1.Name = "tabPage1";
|
||||
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
|
||||
@ -189,45 +190,66 @@
|
||||
//
|
||||
// groupBox5
|
||||
//
|
||||
this.groupBox5.Controls.Add(this.btnMetersAction);
|
||||
this.groupBox5.Controls.Add(this.storageActionButton);
|
||||
this.groupBox5.Controls.Add(this.combinedActionButton);
|
||||
this.groupBox5.Controls.Add(this.ScenariousViewButton);
|
||||
this.groupBox5.Controls.Add(this.preadjustmenActionsViewButton);
|
||||
this.groupBox5.Controls.Add(this.slotsComPortsRegistersActionsViewButton);
|
||||
this.groupBox5.Controls.Add(this.uniDataSorageActionsViewButton);
|
||||
this.groupBox5.Controls.Add(this.combinedActionsViewButton);
|
||||
this.groupBox5.Location = new System.Drawing.Point(6, 85);
|
||||
this.groupBox5.Name = "groupBox5";
|
||||
this.groupBox5.Size = new System.Drawing.Size(166, 131);
|
||||
this.groupBox5.Size = new System.Drawing.Size(166, 202);
|
||||
this.groupBox5.TabIndex = 3;
|
||||
this.groupBox5.TabStop = false;
|
||||
this.groupBox5.Text = "Interface";
|
||||
this.groupBox5.Text = "Interface testing";
|
||||
//
|
||||
// btnMetersAction
|
||||
// ScenariousViewButton
|
||||
//
|
||||
this.btnMetersAction.Location = new System.Drawing.Point(6, 19);
|
||||
this.btnMetersAction.Name = "btnMetersAction";
|
||||
this.btnMetersAction.Size = new System.Drawing.Size(150, 30);
|
||||
this.btnMetersAction.TabIndex = 1;
|
||||
this.btnMetersAction.Text = "GenesisCordonelInterface";
|
||||
this.btnMetersAction.UseVisualStyleBackColor = true;
|
||||
this.btnMetersAction.Click += new System.EventHandler(this.btnMetersAction_Click);
|
||||
this.ScenariousViewButton.Location = new System.Drawing.Point(6, 163);
|
||||
this.ScenariousViewButton.Name = "ScenariousViewButton";
|
||||
this.ScenariousViewButton.Size = new System.Drawing.Size(150, 30);
|
||||
this.ScenariousViewButton.TabIndex = 3;
|
||||
this.ScenariousViewButton.Text = "Scenarious";
|
||||
this.ScenariousViewButton.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// storageActionButton
|
||||
// preadjustmenActionsViewButton
|
||||
//
|
||||
this.storageActionButton.Location = new System.Drawing.Point(6, 55);
|
||||
this.storageActionButton.Name = "storageActionButton";
|
||||
this.storageActionButton.Size = new System.Drawing.Size(150, 30);
|
||||
this.storageActionButton.TabIndex = 0;
|
||||
this.storageActionButton.Text = "UniDataStorageReader";
|
||||
this.storageActionButton.UseVisualStyleBackColor = true;
|
||||
this.storageActionButton.Click += new System.EventHandler(this.button1_Click_1);
|
||||
this.preadjustmenActionsViewButton.Location = new System.Drawing.Point(6, 127);
|
||||
this.preadjustmenActionsViewButton.Name = "preadjustmenActionsViewButton";
|
||||
this.preadjustmenActionsViewButton.Size = new System.Drawing.Size(150, 30);
|
||||
this.preadjustmenActionsViewButton.TabIndex = 2;
|
||||
this.preadjustmenActionsViewButton.Text = "Preadjustment";
|
||||
this.preadjustmenActionsViewButton.UseVisualStyleBackColor = true;
|
||||
this.preadjustmenActionsViewButton.Click += new System.EventHandler(this.preadjustmenActionsViewButton_Click);
|
||||
//
|
||||
// combinedActionButton
|
||||
// slotsComPortsRegistersActionsViewButton
|
||||
//
|
||||
this.combinedActionButton.Location = new System.Drawing.Point(6, 91);
|
||||
this.combinedActionButton.Name = "combinedActionButton";
|
||||
this.combinedActionButton.Size = new System.Drawing.Size(150, 30);
|
||||
this.combinedActionButton.TabIndex = 0;
|
||||
this.combinedActionButton.Text = "Combined Action";
|
||||
this.combinedActionButton.UseVisualStyleBackColor = true;
|
||||
this.combinedActionButton.Click += new System.EventHandler(this.button2_Click);
|
||||
this.slotsComPortsRegistersActionsViewButton.Location = new System.Drawing.Point(6, 19);
|
||||
this.slotsComPortsRegistersActionsViewButton.Name = "slotsComPortsRegistersActionsViewButton";
|
||||
this.slotsComPortsRegistersActionsViewButton.Size = new System.Drawing.Size(150, 30);
|
||||
this.slotsComPortsRegistersActionsViewButton.TabIndex = 1;
|
||||
this.slotsComPortsRegistersActionsViewButton.Text = "Slots, ComPorts, Registers";
|
||||
this.slotsComPortsRegistersActionsViewButton.UseVisualStyleBackColor = true;
|
||||
this.slotsComPortsRegistersActionsViewButton.Click += new System.EventHandler(this.btnMetersAction_Click);
|
||||
//
|
||||
// uniDataSorageActionsViewButton
|
||||
//
|
||||
this.uniDataSorageActionsViewButton.Location = new System.Drawing.Point(6, 55);
|
||||
this.uniDataSorageActionsViewButton.Name = "uniDataSorageActionsViewButton";
|
||||
this.uniDataSorageActionsViewButton.Size = new System.Drawing.Size(150, 30);
|
||||
this.uniDataSorageActionsViewButton.TabIndex = 0;
|
||||
this.uniDataSorageActionsViewButton.Text = "UniDataStorageReader";
|
||||
this.uniDataSorageActionsViewButton.UseVisualStyleBackColor = true;
|
||||
this.uniDataSorageActionsViewButton.Click += new System.EventHandler(this.button1_Click_1);
|
||||
//
|
||||
// combinedActionsViewButton
|
||||
//
|
||||
this.combinedActionsViewButton.Location = new System.Drawing.Point(6, 91);
|
||||
this.combinedActionsViewButton.Name = "combinedActionsViewButton";
|
||||
this.combinedActionsViewButton.Size = new System.Drawing.Size(150, 30);
|
||||
this.combinedActionsViewButton.TabIndex = 0;
|
||||
this.combinedActionsViewButton.Text = "Combined actions";
|
||||
this.combinedActionsViewButton.UseVisualStyleBackColor = true;
|
||||
this.combinedActionsViewButton.Click += new System.EventHandler(this.button2_Click);
|
||||
//
|
||||
// groupBox3
|
||||
//
|
||||
@ -386,9 +408,11 @@
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
private System.Windows.Forms.Button storageActionButton;
|
||||
private System.Windows.Forms.Button uniDataSorageActionsViewButton;
|
||||
private System.Windows.Forms.GroupBox groupBox5;
|
||||
private System.Windows.Forms.Button combinedActionButton;
|
||||
private System.Windows.Forms.Button combinedActionsViewButton;
|
||||
private System.Windows.Forms.Button btnDiagTablesConfigurationButton;
|
||||
private System.Windows.Forms.Button preadjustmenActionsViewButton;
|
||||
private System.Windows.Forms.Button ScenariousViewButton;
|
||||
}
|
||||
}
|
||||
@ -72,58 +72,11 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI
|
||||
_uiLogFlushTimer.Interval = 250;
|
||||
_uiLogFlushTimer.Tick += UiLogFlushTimer_Tick;
|
||||
_uiLogFlushTimer.Start();
|
||||
|
||||
preadjustmentButton.Enabled = true;
|
||||
groupBox2.Enabled = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Periodically flushes buffered log messages into RichTextBox.
|
||||
///
|
||||
/// Runs on the UI thread because WinForms Timer executes on UI thread.
|
||||
/// Processes messages in batches to reduce UI overhead.
|
||||
/// </summary>
|
||||
/// Plynule pridavanie do mema
|
||||
/*private void UiLogFlushTimer_Tick(object sender, EventArgs e)
|
||||
{
|
||||
if (IsDisposed || !IsHandleCreated)
|
||||
return;
|
||||
|
||||
List<string> messages = new List<string>();
|
||||
|
||||
lock (_uiLogLock)
|
||||
{
|
||||
while (_pendingUiLogs.Count > 0 && messages.Count < 500)
|
||||
{
|
||||
messages.Add(_pendingUiLogs.Dequeue());
|
||||
}
|
||||
}
|
||||
|
||||
if (messages.Count == 0)
|
||||
return;
|
||||
|
||||
rtbMainLog.SuspendLayout();
|
||||
|
||||
try
|
||||
{
|
||||
foreach (string msg in messages)
|
||||
{
|
||||
AppendLogMessage(msg);
|
||||
}
|
||||
|
||||
const int maxTextLength = 200000;
|
||||
|
||||
if (rtbMainLog.TextLength > maxTextLength)
|
||||
{
|
||||
rtbMainLog.Select(0, rtbMainLog.TextLength - maxTextLength);
|
||||
rtbMainLog.SelectedText = "";
|
||||
}
|
||||
|
||||
rtbMainLog.SelectionStart = rtbMainLog.TextLength;
|
||||
rtbMainLog.ScrollToCaret();
|
||||
}
|
||||
finally
|
||||
{
|
||||
rtbMainLog.ResumeLayout();
|
||||
}
|
||||
}*/
|
||||
|
||||
private void UiLogFlushTimer_Tick(object sender, EventArgs e)
|
||||
{
|
||||
@ -277,153 +230,6 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
private IWin32Window DialogOwner
|
||||
{
|
||||
get
|
||||
{
|
||||
Form owner = FindForm();
|
||||
return owner ?? (IWin32Window)this;
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowGciView(Control view)
|
||||
{
|
||||
pnlGciViewHost.Controls.Clear();
|
||||
|
||||
view.Dock = DockStyle.Fill;
|
||||
pnlGciViewHost.Controls.Add(view);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves current slot configuration from the grid into backend storage.
|
||||
/// </summary>
|
||||
public void SaveSlots()
|
||||
{
|
||||
var data = _batchPanel.GetGridData();
|
||||
_laatzenApi.SaveSlotSetup(data);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Switches currently displayed GCI view inside the host panel.
|
||||
/// </summary>
|
||||
private void button2_Click(object sender, EventArgs e)
|
||||
{
|
||||
SwitchGciView(
|
||||
"CombinedInterfaceView",
|
||||
new CombinedInterfaceView(this, _bridge));
|
||||
}
|
||||
|
||||
private void button1_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
SwitchGciView(
|
||||
"StorageAction",
|
||||
new UniDataStorageReaderInterfaceView(this, _bridge));
|
||||
}
|
||||
|
||||
#region BUTTONS
|
||||
|
||||
private void btnMetersAction_Click(object sender, EventArgs e)
|
||||
{
|
||||
SwitchGciView(
|
||||
"SlotsMetersAction",
|
||||
new GenesisCordonelInterfaceView(this, _bridge, AddSlotRow, SaveSlots));
|
||||
}
|
||||
|
||||
private void btnSetup_Click(object sender, EventArgs e)
|
||||
{
|
||||
/*Logger.Trace("FORM: ---------------------------------");
|
||||
Logger.Trace("FORM: Setup open");
|
||||
|
||||
using (FrmSetup frm = new FrmSetup())
|
||||
{
|
||||
frm.ShowDialog(DialogOwner);
|
||||
}
|
||||
|
||||
Logger.Trace("FORM: Setup closed.");*/
|
||||
}
|
||||
|
||||
private void btnRegisterStore_Click(object sender, EventArgs e)
|
||||
{
|
||||
/*Logger.Trace("FORM: ---------------------------------");
|
||||
Logger.Trace("FORM: Register Store open.");
|
||||
|
||||
using (FrmRegisterStore frm = new FrmRegisterStore())
|
||||
{
|
||||
frm.ShowDialog(DialogOwner);
|
||||
}
|
||||
|
||||
Logger.Trace("FORM: Register Store closed.");*/
|
||||
}
|
||||
|
||||
private void btnPulseSetup_Click(object sender, EventArgs e)
|
||||
{
|
||||
/*Logger.Trace("FORM: ---------------------------------");
|
||||
Logger.Trace("FORM: Pulse Setup open.");
|
||||
|
||||
using (FrmConfigurations frm = new FrmConfigurations())
|
||||
{
|
||||
frm.ShowDialog(DialogOwner);
|
||||
}
|
||||
|
||||
Logger.Trace("FORM: Pulse Setup closed.");*/
|
||||
}
|
||||
|
||||
private void preadjustmentButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
/*Logger.Trace("FORM: ---------------------------------");
|
||||
Logger.Trace("FORM: Preadjustment open.");
|
||||
|
||||
using (FrmCordonelPreadjustmentUI frm = new FrmCordonelPreadjustmentUI())
|
||||
{
|
||||
frm.ShowDialog(DialogOwner);
|
||||
}
|
||||
|
||||
Logger.Trace("FORM: Preadjustment closed.");*/
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
Logger.Trace("FORM: ---------------------------------");
|
||||
Logger.Trace("FORM: GciBridge GUI open.");
|
||||
|
||||
using (var frm = new FrmGCIAPI(_gciApi))
|
||||
{
|
||||
frm.ShowDialog(this);
|
||||
}
|
||||
|
||||
Logger.Trace("FORM: GciBridge closed.");
|
||||
}
|
||||
|
||||
private void SwitchGciView(string name, Control view)
|
||||
{
|
||||
Logger.Trace("FORM: ---------------------------------");
|
||||
Logger.Trace($"FORM: GciBridge VIEW -> {name} OPEN");
|
||||
|
||||
pnlGciViewHost.Controls.Clear();
|
||||
|
||||
view.Dock = DockStyle.Fill;
|
||||
pnlGciViewHost.Controls.Add(view);
|
||||
view.BringToFront();
|
||||
|
||||
Logger.Trace($"FORM: GciBridge VIEW -> {name} LOADED");
|
||||
}
|
||||
|
||||
private void btnMeterInit_Click(object sender, EventArgs e)
|
||||
{
|
||||
SwitchGciView(
|
||||
"MeterInit",
|
||||
new MeterInitView(_gciApi, AddSlotRow, SaveSlots));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears the main UI log window.
|
||||
/// </summary>
|
||||
public void ClearLog()
|
||||
{
|
||||
rtbMainLog.Clear();
|
||||
Logger.Trace("Log cleared.");
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GLOBAL LOGGING to memo in this view
|
||||
|
||||
@ -545,11 +351,164 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI
|
||||
|
||||
#endregion
|
||||
|
||||
private IWin32Window DialogOwner
|
||||
{
|
||||
get
|
||||
{
|
||||
Form owner = FindForm();
|
||||
return owner ?? (IWin32Window)this;
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowGciView(Control view)
|
||||
{
|
||||
pnlGciViewHost.Controls.Clear();
|
||||
|
||||
view.Dock = DockStyle.Fill;
|
||||
pnlGciViewHost.Controls.Add(view);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves current slot configuration from the grid into backend storage.
|
||||
/// </summary>
|
||||
public void SaveSlots()
|
||||
{
|
||||
var data = _batchPanel.GetGridData();
|
||||
_laatzenApi.SaveSlotSetup(data);
|
||||
}
|
||||
|
||||
#region BUTTONS
|
||||
|
||||
private void btnSetup_Click(object sender, EventArgs e)
|
||||
{
|
||||
/*Logger.Trace("FORM: ---------------------------------");
|
||||
Logger.Trace("FORM: Setup open");
|
||||
|
||||
using (FrmSetup frm = new FrmSetup())
|
||||
{
|
||||
frm.ShowDialog(DialogOwner);
|
||||
}
|
||||
|
||||
Logger.Trace("FORM: Setup closed.");*/
|
||||
}
|
||||
|
||||
private void btnRegisterStore_Click(object sender, EventArgs e)
|
||||
{
|
||||
/*Logger.Trace("FORM: ---------------------------------");
|
||||
Logger.Trace("FORM: Register Store open.");
|
||||
|
||||
using (FrmRegisterStore frm = new FrmRegisterStore())
|
||||
{
|
||||
frm.ShowDialog(DialogOwner);
|
||||
}
|
||||
|
||||
Logger.Trace("FORM: Register Store closed.");*/
|
||||
}
|
||||
|
||||
private void btnPulseSetup_Click(object sender, EventArgs e)
|
||||
{
|
||||
/*Logger.Trace("FORM: ---------------------------------");
|
||||
Logger.Trace("FORM: Pulse Setup open.");
|
||||
|
||||
using (FrmConfigurations frm = new FrmConfigurations())
|
||||
{
|
||||
frm.ShowDialog(DialogOwner);
|
||||
}
|
||||
|
||||
Logger.Trace("FORM: Pulse Setup closed.");*/
|
||||
}
|
||||
|
||||
private void preadjustmentButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
Logger.Trace("FORM: ---------------------------------");
|
||||
Logger.Trace("FORM: Preadjustment open.");
|
||||
|
||||
_laatzenApi.ShowPreadjustmentForm(DialogOwner);
|
||||
|
||||
Logger.Trace("FORM: Preadjustment shown.");
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
Logger.Trace("FORM: ---------------------------------");
|
||||
Logger.Trace("FORM: GciBridge GUI open.");
|
||||
|
||||
using (var frm = new FrmGCIAPI(_gciApi))
|
||||
{
|
||||
frm.ShowDialog(this);
|
||||
}
|
||||
|
||||
Logger.Trace("FORM: GciBridge closed.");
|
||||
}
|
||||
|
||||
private void SwitchGciView(string name, Control view)
|
||||
{
|
||||
Logger.Trace("FORM: ---------------------------------");
|
||||
Logger.Trace($"FORM: GciBridge VIEW -> {name} OPEN");
|
||||
|
||||
pnlGciViewHost.Controls.Clear();
|
||||
|
||||
view.Dock = DockStyle.Fill;
|
||||
pnlGciViewHost.Controls.Add(view);
|
||||
view.BringToFront();
|
||||
|
||||
Logger.Trace($"FORM: GciBridge VIEW -> {name} LOADED");
|
||||
}
|
||||
|
||||
private void btnMeterInit_Click(object sender, EventArgs e)
|
||||
{
|
||||
SwitchGciView(
|
||||
"MeterInit",
|
||||
new MeterInitView(_gciApi, AddSlotRow, SaveSlots));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears the main UI log window.
|
||||
/// </summary>
|
||||
public void ClearLog()
|
||||
{
|
||||
rtbMainLog.Clear();
|
||||
Logger.Trace("Log cleared.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Switches currently displayed GCI view inside the host panel.
|
||||
/// </summary>
|
||||
private void button2_Click(object sender, EventArgs e)
|
||||
{
|
||||
SwitchGciView(
|
||||
"CombinedActionsView",
|
||||
new CombinedActionsView(this, _bridge));
|
||||
}
|
||||
|
||||
private void button1_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
SwitchGciView(
|
||||
"UniDataSorageActionsView",
|
||||
new UniDataSorageActionsView(this, _bridge));
|
||||
}
|
||||
|
||||
private void btnMetersAction_Click(object sender, EventArgs e)
|
||||
{
|
||||
SwitchGciView(
|
||||
"SlotsComPortsRegistersActionsView",
|
||||
new SlotsComPortsRegistersActionsView(this, _bridge, AddSlotRow, SaveSlots));
|
||||
}
|
||||
|
||||
private void btnMeterInit_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
SwitchGciView(
|
||||
"ConfigurationView",
|
||||
new ConfigurationView(this));
|
||||
}
|
||||
|
||||
private void preadjustmenActionsViewButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
SwitchGciView(
|
||||
"PreadjustmenActionsView",
|
||||
new PreadjustmentActionsView(this, _bridge, AddSlotRow, SaveSlots));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge
|
||||
{
|
||||
partial class CombinedInterfaceView
|
||||
partial class CombinedActionsView
|
||||
{
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
@ -10,7 +10,7 @@ using TBF.Rig.BridgeComponents.GciBridge.Interfaces;
|
||||
|
||||
namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge
|
||||
{
|
||||
public partial class CombinedInterfaceView : UserControl
|
||||
public partial class CombinedActionsView : UserControl
|
||||
{
|
||||
private readonly MainView _mainView;
|
||||
private readonly GciBridge _bridge;
|
||||
@ -19,7 +19,7 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge
|
||||
private readonly Dictionary<int, string> _pcbBySlot = new Dictionary<int, string>();
|
||||
private readonly Dictionary<int, string> _passwordBySlot = new Dictionary<int, string>();
|
||||
|
||||
public CombinedInterfaceView(MainView mainView, GciBridge bridge)
|
||||
public CombinedActionsView(MainView mainView, GciBridge bridge)
|
||||
{
|
||||
_mainView = mainView ?? throw new ArgumentNullException(nameof(mainView));
|
||||
_bridge = bridge ?? throw new ArgumentNullException(nameof(bridge));
|
||||
271
TBF/Rig/BridgeComponents/GciBridge/UI/StaraTuraAPI_GciBridge/PreadjustmentActionsView.Designer.cs
generated
Normal file
271
TBF/Rig/BridgeComponents/GciBridge/UI/StaraTuraAPI_GciBridge/PreadjustmentActionsView.Designer.cs
generated
Normal file
@ -0,0 +1,271 @@
|
||||
namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge
|
||||
{
|
||||
partial class PreadjustmentActionsView
|
||||
{
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
private System.Windows.Forms.GroupBox grpSlots;
|
||||
|
||||
private System.Windows.Forms.Button preparationActionButton;
|
||||
private System.Windows.Forms.Button btnUpdateSlot;
|
||||
private System.Windows.Forms.Button detectActionButton;
|
||||
private System.Windows.Forms.Button btnCleanAllSlots;
|
||||
|
||||
private System.Windows.Forms.Button btnCancel;
|
||||
private System.Windows.Forms.TextBox txtLog;
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && components != null)
|
||||
components.Dispose();
|
||||
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.grpSlots = new System.Windows.Forms.GroupBox();
|
||||
this.writeRegisterNameComboBox = new System.Windows.Forms.ComboBox();
|
||||
this.readRegisterNameComboBox = new System.Windows.Forms.ComboBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.writeRegisterValueTextBox = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.writeRegisterButton = new System.Windows.Forms.Button();
|
||||
this.readRegisterButton = new System.Windows.Forms.Button();
|
||||
this.btnConnect = new System.Windows.Forms.Button();
|
||||
this.btnDisconnect = new System.Windows.Forms.Button();
|
||||
this.btnLogin = new System.Windows.Forms.Button();
|
||||
this.btnGetPcbId = new System.Windows.Forms.Button();
|
||||
this.preparationActionButton = new System.Windows.Forms.Button();
|
||||
this.btnUpdateSlot = new System.Windows.Forms.Button();
|
||||
this.detectActionButton = new System.Windows.Forms.Button();
|
||||
this.btnCleanAllSlots = new System.Windows.Forms.Button();
|
||||
this.btnCleanSlot = new System.Windows.Forms.Button();
|
||||
this.btnCancel = new System.Windows.Forms.Button();
|
||||
this.txtLog = new System.Windows.Forms.TextBox();
|
||||
this.grpSlots.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// grpSlots
|
||||
//
|
||||
this.grpSlots.Controls.Add(this.writeRegisterNameComboBox);
|
||||
this.grpSlots.Controls.Add(this.readRegisterNameComboBox);
|
||||
this.grpSlots.Controls.Add(this.label4);
|
||||
this.grpSlots.Controls.Add(this.writeRegisterValueTextBox);
|
||||
this.grpSlots.Controls.Add(this.label3);
|
||||
this.grpSlots.Controls.Add(this.label2);
|
||||
this.grpSlots.Controls.Add(this.writeRegisterButton);
|
||||
this.grpSlots.Controls.Add(this.readRegisterButton);
|
||||
this.grpSlots.Controls.Add(this.btnConnect);
|
||||
this.grpSlots.Controls.Add(this.btnDisconnect);
|
||||
this.grpSlots.Controls.Add(this.btnLogin);
|
||||
this.grpSlots.Controls.Add(this.btnGetPcbId);
|
||||
this.grpSlots.Controls.Add(this.preparationActionButton);
|
||||
this.grpSlots.Controls.Add(this.btnUpdateSlot);
|
||||
this.grpSlots.Controls.Add(this.detectActionButton);
|
||||
this.grpSlots.Controls.Add(this.btnCleanAllSlots);
|
||||
this.grpSlots.Controls.Add(this.btnCleanSlot);
|
||||
this.grpSlots.Location = new System.Drawing.Point(10, 10);
|
||||
this.grpSlots.Name = "grpSlots";
|
||||
this.grpSlots.Size = new System.Drawing.Size(689, 304);
|
||||
this.grpSlots.TabIndex = 2;
|
||||
this.grpSlots.TabStop = false;
|
||||
this.grpSlots.Text = "Slots by selection in the table";
|
||||
this.grpSlots.Enter += new System.EventHandler(this.grpSlots_Enter);
|
||||
//
|
||||
// writeRegisterNameComboBox
|
||||
//
|
||||
this.writeRegisterNameComboBox.FormattingEnabled = true;
|
||||
this.writeRegisterNameComboBox.Location = new System.Drawing.Point(300, 264);
|
||||
this.writeRegisterNameComboBox.Name = "writeRegisterNameComboBox";
|
||||
this.writeRegisterNameComboBox.Size = new System.Drawing.Size(213, 21);
|
||||
this.writeRegisterNameComboBox.TabIndex = 15;
|
||||
//
|
||||
// readRegisterNameComboBox
|
||||
//
|
||||
this.readRegisterNameComboBox.FormattingEnabled = true;
|
||||
this.readRegisterNameComboBox.Location = new System.Drawing.Point(300, 230);
|
||||
this.readRegisterNameComboBox.Name = "readRegisterNameComboBox";
|
||||
this.readRegisterNameComboBox.Size = new System.Drawing.Size(213, 21);
|
||||
this.readRegisterNameComboBox.TabIndex = 14;
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(224, 233);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(78, 13);
|
||||
this.label4.TabIndex = 13;
|
||||
this.label4.Text = "Register name:";
|
||||
//
|
||||
// writeRegisterValueTextBox
|
||||
//
|
||||
this.writeRegisterValueTextBox.Location = new System.Drawing.Point(555, 264);
|
||||
this.writeRegisterValueTextBox.Name = "writeRegisterValueTextBox";
|
||||
this.writeRegisterValueTextBox.Size = new System.Drawing.Size(117, 20);
|
||||
this.writeRegisterValueTextBox.TabIndex = 12;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(517, 267);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(36, 13);
|
||||
this.label3.TabIndex = 10;
|
||||
this.label3.Text = "value:";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(224, 267);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(78, 13);
|
||||
this.label2.TabIndex = 9;
|
||||
this.label2.Text = "Register name:";
|
||||
//
|
||||
// writeRegisterButton
|
||||
//
|
||||
this.writeRegisterButton.Location = new System.Drawing.Point(15, 259);
|
||||
this.writeRegisterButton.Name = "writeRegisterButton";
|
||||
this.writeRegisterButton.Size = new System.Drawing.Size(203, 28);
|
||||
this.writeRegisterButton.TabIndex = 7;
|
||||
this.writeRegisterButton.Text = "WriteRegister(slot, registerName, value)";
|
||||
this.writeRegisterButton.Click += new System.EventHandler(this.writeRegisterButton_Click);
|
||||
//
|
||||
// readRegisterButton
|
||||
//
|
||||
this.readRegisterButton.Location = new System.Drawing.Point(15, 225);
|
||||
this.readRegisterButton.Name = "readRegisterButton";
|
||||
this.readRegisterButton.Size = new System.Drawing.Size(203, 28);
|
||||
this.readRegisterButton.TabIndex = 6;
|
||||
this.readRegisterButton.Text = "ReadRegister(slot, registerName)";
|
||||
//
|
||||
// btnConnect
|
||||
//
|
||||
this.btnConnect.Location = new System.Drawing.Point(15, 158);
|
||||
this.btnConnect.Name = "btnConnect";
|
||||
this.btnConnect.Size = new System.Drawing.Size(150, 28);
|
||||
this.btnConnect.TabIndex = 3;
|
||||
this.btnConnect.Text = "Connect(slot)";
|
||||
//
|
||||
// btnDisconnect
|
||||
//
|
||||
this.btnDisconnect.Location = new System.Drawing.Point(15, 191);
|
||||
this.btnDisconnect.Name = "btnDisconnect";
|
||||
this.btnDisconnect.Size = new System.Drawing.Size(150, 28);
|
||||
this.btnDisconnect.TabIndex = 4;
|
||||
this.btnDisconnect.Text = "Disconnect(slot)";
|
||||
//
|
||||
// btnLogin
|
||||
//
|
||||
this.btnLogin.Location = new System.Drawing.Point(171, 158);
|
||||
this.btnLogin.Name = "btnLogin";
|
||||
this.btnLogin.Size = new System.Drawing.Size(150, 28);
|
||||
this.btnLogin.TabIndex = 17;
|
||||
this.btnLogin.Text = "Login(slot)";
|
||||
//
|
||||
// btnGetPcbId
|
||||
//
|
||||
this.btnGetPcbId.Location = new System.Drawing.Point(15, 125);
|
||||
this.btnGetPcbId.Name = "btnGetPcbId";
|
||||
this.btnGetPcbId.Size = new System.Drawing.Size(150, 28);
|
||||
this.btnGetPcbId.TabIndex = 5;
|
||||
this.btnGetPcbId.Text = "GetPcb(slot)";
|
||||
//
|
||||
// preparationActionButton
|
||||
//
|
||||
this.preparationActionButton.Location = new System.Drawing.Point(15, 25);
|
||||
this.preparationActionButton.Name = "preparationActionButton";
|
||||
this.preparationActionButton.Size = new System.Drawing.Size(150, 28);
|
||||
this.preparationActionButton.TabIndex = 0;
|
||||
this.preparationActionButton.Text = "Preparation";
|
||||
this.preparationActionButton.Click += new System.EventHandler(this.preparationActionButton_Click);
|
||||
//
|
||||
// btnUpdateSlot
|
||||
//
|
||||
this.btnUpdateSlot.Location = new System.Drawing.Point(171, 25);
|
||||
this.btnUpdateSlot.Name = "btnUpdateSlot";
|
||||
this.btnUpdateSlot.Size = new System.Drawing.Size(150, 28);
|
||||
this.btnUpdateSlot.TabIndex = 16;
|
||||
this.btnUpdateSlot.Text = "UpdateSlot(slot)";
|
||||
//
|
||||
// detectActionButton
|
||||
//
|
||||
this.detectActionButton.Location = new System.Drawing.Point(15, 58);
|
||||
this.detectActionButton.Name = "detectActionButton";
|
||||
this.detectActionButton.Size = new System.Drawing.Size(150, 28);
|
||||
this.detectActionButton.TabIndex = 1;
|
||||
this.detectActionButton.Text = "Detect";
|
||||
this.detectActionButton.Click += new System.EventHandler(this.detectActionButton_Click);
|
||||
//
|
||||
// btnCleanAllSlots
|
||||
//
|
||||
this.btnCleanAllSlots.Location = new System.Drawing.Point(171, 92);
|
||||
this.btnCleanAllSlots.Name = "btnCleanAllSlots";
|
||||
this.btnCleanAllSlots.Size = new System.Drawing.Size(150, 28);
|
||||
this.btnCleanAllSlots.TabIndex = 2;
|
||||
this.btnCleanAllSlots.Text = "CleanAllSlots()";
|
||||
//
|
||||
// btnCleanSlot
|
||||
//
|
||||
this.btnCleanSlot.Location = new System.Drawing.Point(15, 92);
|
||||
this.btnCleanSlot.Name = "btnCleanSlot";
|
||||
this.btnCleanSlot.Size = new System.Drawing.Size(150, 28);
|
||||
this.btnCleanSlot.TabIndex = 18;
|
||||
this.btnCleanSlot.Text = "CleanSlot(slot)";
|
||||
//
|
||||
// btnCancel
|
||||
//
|
||||
this.btnCancel.Enabled = false;
|
||||
this.btnCancel.Location = new System.Drawing.Point(519, 320);
|
||||
this.btnCancel.Name = "btnCancel";
|
||||
this.btnCancel.Size = new System.Drawing.Size(180, 30);
|
||||
this.btnCancel.TabIndex = 4;
|
||||
this.btnCancel.Text = "Cancel task";
|
||||
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
|
||||
//
|
||||
// txtLog
|
||||
//
|
||||
this.txtLog.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.txtLog.Location = new System.Drawing.Point(10, 356);
|
||||
this.txtLog.Multiline = true;
|
||||
this.txtLog.Name = "txtLog";
|
||||
this.txtLog.ReadOnly = true;
|
||||
this.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Both;
|
||||
this.txtLog.Size = new System.Drawing.Size(689, 232);
|
||||
this.txtLog.TabIndex = 5;
|
||||
this.txtLog.WordWrap = false;
|
||||
//
|
||||
// PreadjustmentActionsView
|
||||
//
|
||||
this.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.Controls.Add(this.grpSlots);
|
||||
this.Controls.Add(this.btnCancel);
|
||||
this.Controls.Add(this.txtLog);
|
||||
this.Name = "PreadjustmentActionsView";
|
||||
this.Size = new System.Drawing.Size(719, 603);
|
||||
this.grpSlots.ResumeLayout(false);
|
||||
this.grpSlots.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
private System.Windows.Forms.Button btnConnect;
|
||||
private System.Windows.Forms.Button btnDisconnect;
|
||||
private System.Windows.Forms.Button btnGetPcbId;
|
||||
private System.Windows.Forms.Button readRegisterButton;
|
||||
private System.Windows.Forms.TextBox writeRegisterValueTextBox;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Button writeRegisterButton;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.ComboBox writeRegisterNameComboBox;
|
||||
private System.Windows.Forms.ComboBox readRegisterNameComboBox;
|
||||
private System.Windows.Forms.Button btnLogin;
|
||||
private System.Windows.Forms.Button btnCleanSlot;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,338 @@
|
||||
using CordonelPreadjustmentUi;
|
||||
using CordonelPreadjustmentUi.Processes.Itinerary;
|
||||
using GenesisCordonelInterface.API;
|
||||
using GenesisCordonelInterface.UI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
|
||||
using Xylem.Common.Ui.CordonelPreadjustmentUi;
|
||||
using static Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.PreadjustmentMeter;
|
||||
using GciPublicModels = GenesisCordonelInterface.API.PublicModels;
|
||||
|
||||
namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge
|
||||
{
|
||||
public partial class PreadjustmentActionsView : UserControl
|
||||
{
|
||||
private readonly GciBridge _bridge;
|
||||
private readonly MainView _mainView;
|
||||
private CancellationTokenSource _cts;
|
||||
private readonly Action _addSlotAction;
|
||||
private readonly Action _saveAction;
|
||||
|
||||
public PreadjustmentActionsView(
|
||||
MainView mainview,
|
||||
GciBridge bridge,
|
||||
Action addSlotAction,
|
||||
Action saveAction)
|
||||
{
|
||||
_mainView = mainview ?? throw new ArgumentNullException(nameof(mainview));
|
||||
_bridge = bridge ?? throw new ArgumentNullException(nameof(bridge));
|
||||
|
||||
_addSlotAction = addSlotAction;
|
||||
_saveAction = saveAction;
|
||||
|
||||
InitializeComponent();
|
||||
|
||||
LoadRegisterComboBoxes();
|
||||
}
|
||||
|
||||
private void AddSlot()
|
||||
{
|
||||
_addSlotAction?.Invoke();
|
||||
}
|
||||
|
||||
private void SaveSlots()
|
||||
{
|
||||
_saveAction?.Invoke();
|
||||
}
|
||||
|
||||
private List<GciPublicModels.MeterBatchDebugStatus> GetSelectedSlots()
|
||||
{
|
||||
if (_mainView == null || _mainView._batchPanel == null)
|
||||
throw new Exception("Meter batch grid is not available.");
|
||||
|
||||
var slots = _mainView._batchPanel.GetSelectedGridData();
|
||||
|
||||
if (slots.Count == 0)
|
||||
throw new Exception("No selected slots in grid.");
|
||||
|
||||
return slots;
|
||||
}
|
||||
|
||||
private void RefreshGrid(int? removedSlot = null)
|
||||
{
|
||||
if (removedSlot.HasValue)
|
||||
{
|
||||
_mainView?._gciApi.SetSlotSelected(removedSlot.Value, false);
|
||||
_mainView?._batchPanel?.RemoveSlotRow(removedSlot.Value);
|
||||
}
|
||||
|
||||
if (_bridge?.gciExternalInterface != null)
|
||||
_bridge.gciExternalInterface.RaiseMeterBatchStatusChanged();
|
||||
}
|
||||
|
||||
|
||||
private void btnCancel_Click(object sender, EventArgs e)
|
||||
{
|
||||
_cts?.Cancel();
|
||||
Log("Cancel requested.");
|
||||
}
|
||||
|
||||
private async void ExecuteAsync(Func<CancellationToken, Task> action)
|
||||
{
|
||||
try
|
||||
{
|
||||
SetBusy(true);
|
||||
|
||||
_cts = new CancellationTokenSource();
|
||||
|
||||
await action(_cts.Token);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
Log("Operation canceled.");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log("ERROR: " + ex);
|
||||
|
||||
MessageBox.Show(
|
||||
ex.Message,
|
||||
"GciBridge API call failed",
|
||||
MessageBoxButtons.OK,
|
||||
MessageBoxIcon.Error);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_cts?.Dispose();
|
||||
_cts = null;
|
||||
|
||||
SetBusy(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetBusy(bool busy)
|
||||
{
|
||||
Cursor = busy ? Cursors.WaitCursor : Cursors.Default;
|
||||
|
||||
preparationActionButton.Enabled = !busy;
|
||||
btnUpdateSlot.Enabled = !busy;
|
||||
detectActionButton.Enabled = !busy;
|
||||
btnCleanAllSlots.Enabled = !busy;
|
||||
btnGetPcbId.Enabled = !busy;
|
||||
btnConnect.Enabled = !busy;
|
||||
btnDisconnect.Enabled = !busy;
|
||||
readRegisterButton.Enabled = !busy;
|
||||
writeRegisterButton.Enabled = !busy;
|
||||
readRegisterNameComboBox.Enabled = !busy;
|
||||
writeRegisterNameComboBox.Enabled = !busy;
|
||||
writeRegisterValueTextBox.Enabled = !busy;
|
||||
btnLogin.Enabled = !busy;
|
||||
btnCleanSlot.Enabled = !busy;
|
||||
|
||||
btnCancel.Enabled = busy;
|
||||
}
|
||||
|
||||
private void LogResult(string methodName, object result)
|
||||
{
|
||||
Log(methodName + " result:");
|
||||
Log(result == null ? "<null>" : result.ToString());
|
||||
}
|
||||
|
||||
private void Log(string message)
|
||||
{
|
||||
txtLog.AppendText(
|
||||
DateTime.Now.ToString("HH:mm:ss.fff") +
|
||||
" " +
|
||||
message +
|
||||
Environment.NewLine);
|
||||
}
|
||||
|
||||
private void LoadRegisterComboBoxes()
|
||||
{
|
||||
var registers = _bridge.GetAllRegisterNames();
|
||||
|
||||
readRegisterNameComboBox.Items.Clear();
|
||||
writeRegisterNameComboBox.Items.Clear();
|
||||
|
||||
readRegisterNameComboBox.Items.AddRange(registers.ToArray());
|
||||
writeRegisterNameComboBox.Items.AddRange(registers.ToArray());
|
||||
}
|
||||
|
||||
private void grpSlots_Enter(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void preparationActionButton_Click(
|
||||
object sender,
|
||||
EventArgs e)
|
||||
{
|
||||
ExecuteAsync(async token =>
|
||||
{
|
||||
var selectedSlots =
|
||||
_mainView._batchPanel.GetSelectedGridData();
|
||||
|
||||
if (!selectedSlots.Any())
|
||||
{
|
||||
Log("No selected slots.");
|
||||
return;
|
||||
}
|
||||
|
||||
var pp = CreatePreparationProgress();
|
||||
|
||||
bool success = await _bridge.Preadjustment_PreparationAsync(
|
||||
pp,
|
||||
token);
|
||||
|
||||
Log(
|
||||
success
|
||||
? "Preparation completed."
|
||||
: "Preparation failed.");
|
||||
});
|
||||
}
|
||||
|
||||
private void detectActionButton_Click(
|
||||
object sender,
|
||||
EventArgs e)
|
||||
{
|
||||
ExecuteAsync(async token =>
|
||||
{
|
||||
var selectedSlots =
|
||||
_mainView._batchPanel.GetSelectedGridData();
|
||||
|
||||
if (!selectedSlots.Any())
|
||||
{
|
||||
Log("Detect: no selected slots.");
|
||||
return;
|
||||
}
|
||||
|
||||
_mainView._laatzenApi._settings = CreatePreAdjustmentSettings(selectedSlots);
|
||||
|
||||
_mainView._laatzenApi._meterControls = CreateMeterControls(selectedSlots);
|
||||
|
||||
bool success = await _bridge.Preadjustment_DetectAsync(
|
||||
token);
|
||||
|
||||
Log(
|
||||
success
|
||||
? "Detect completed."
|
||||
: "Detect failed.");
|
||||
|
||||
RefreshGrid();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private ProcessProgress CreatePreparationProgress()
|
||||
{
|
||||
return new ProcessProgress
|
||||
{
|
||||
Setting = new PreAdjustmentSettingsContainer
|
||||
{
|
||||
|
||||
TempOnly = false,
|
||||
Culture =
|
||||
Thread.CurrentThread.CurrentCulture
|
||||
},
|
||||
|
||||
IsAutomaticMode = true
|
||||
};
|
||||
}
|
||||
|
||||
private List<MeterStateControl> CreateMeterControls(IEnumerable<GciPublicModels.MeterBatchDebugStatus> slots)
|
||||
{
|
||||
var controls =
|
||||
new List<MeterStateControl>();
|
||||
|
||||
foreach (var slot in slots)
|
||||
{
|
||||
var ctl = new MeterStateControl(slot.Slot);
|
||||
|
||||
ctl.SetChecked(true);
|
||||
ctl.IsEnabled = true;
|
||||
|
||||
controls.Add(ctl);
|
||||
}
|
||||
|
||||
return controls;
|
||||
}
|
||||
|
||||
private PreAdjustmentSettingsContainer CreatePreAdjustmentSettings(IEnumerable<GciPublicModels.MeterBatchDebugStatus> slots)
|
||||
{
|
||||
var settings =
|
||||
new PreAdjustmentSettingsContainer();
|
||||
|
||||
settings.Meters =
|
||||
slots.Select(s => s.Slot).ToList();
|
||||
|
||||
settings.TempMeters =
|
||||
new List<int>();
|
||||
|
||||
settings.NumberOfPaths = 2;
|
||||
settings.TempOnly = false;
|
||||
settings.Culture =
|
||||
Thread.CurrentThread.CurrentCulture;
|
||||
|
||||
return settings;
|
||||
}
|
||||
|
||||
private void writeRegisterButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
/*ExecuteAsync(async token =>
|
||||
{
|
||||
string registerName = Convert.ToString(writeRegisterNameComboBox.Text).Trim();
|
||||
string valueText = writeRegisterValueTextBox.Text.Trim();
|
||||
|
||||
if (string.IsNullOrWhiteSpace(registerName))
|
||||
throw new Exception("Write register name is empty.");
|
||||
|
||||
if (string.IsNullOrWhiteSpace(valueText))
|
||||
throw new Exception("Write register value is empty.");
|
||||
|
||||
object value;
|
||||
|
||||
if (registerName == "GENESISFLOW_LedMode")
|
||||
{
|
||||
value = byte.Parse(valueText);
|
||||
}
|
||||
else
|
||||
{
|
||||
value = valueText;
|
||||
}
|
||||
|
||||
var tasks = GetSelectedSlots()
|
||||
.Select(async slot =>
|
||||
{
|
||||
//var result = await _bridge.WriteRegisterAsync(slot.Slot, registerName, value, false, false, token);
|
||||
//var result = await _bridge.WriteRegisterWithRetryAsync(slot.Slot, registerName, value, false, false, token);
|
||||
|
||||
var result = Xylem.Common.Ui.CordonelPreadjustmentUi. Processes.WriteRegisterSafe(meter, "Calibration factor1", Register.Genesisflow.CalFactor1, setting.CalFactor1);
|
||||
Processes
|
||||
|
||||
return new
|
||||
{
|
||||
Slot = slot.Slot,
|
||||
Result = result
|
||||
};
|
||||
})
|
||||
.ToList();
|
||||
|
||||
var results = await Task.WhenAll(tasks);
|
||||
|
||||
foreach (var item in results.OrderBy(x => x.Slot))
|
||||
{
|
||||
LogResult(
|
||||
$"WriteRegisterAsync slot {item.Slot}, register {registerName}, value {value}",
|
||||
item.Result);
|
||||
}
|
||||
|
||||
RefreshGrid();
|
||||
});*/
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge
|
||||
{
|
||||
partial class GenesisCordonelInterfaceView
|
||||
partial class SlotsComPortsRegistersActionsView
|
||||
{
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
@ -10,7 +10,7 @@ using GciPublicModels = GenesisCordonelInterface.API.PublicModels;
|
||||
|
||||
namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge
|
||||
{
|
||||
public partial class GenesisCordonelInterfaceView : UserControl
|
||||
public partial class SlotsComPortsRegistersActionsView : UserControl
|
||||
{
|
||||
private readonly GciBridge _bridge;
|
||||
private readonly MainView _mainView;
|
||||
@ -18,7 +18,7 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge
|
||||
private readonly Action _addSlotAction;
|
||||
private readonly Action _saveAction;
|
||||
|
||||
public GenesisCordonelInterfaceView(
|
||||
public SlotsComPortsRegistersActionsView(
|
||||
MainView mainview,
|
||||
GciBridge bridge,
|
||||
Action addSlotAction,
|
||||
@ -1,12 +1,10 @@
|
||||
namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge
|
||||
{
|
||||
partial class UniDataStorageReaderInterfaceView
|
||||
partial class UniDataSorageActionsView
|
||||
{
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
private System.Windows.Forms.GroupBox grpStorage;
|
||||
private System.Windows.Forms.Label lblPcbId;
|
||||
private System.Windows.Forms.TextBox txtPcbId;
|
||||
private System.Windows.Forms.Button btnGetPasswordByPcb;
|
||||
|
||||
private System.Windows.Forms.Button btnCancel;
|
||||
@ -23,11 +21,11 @@
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.grpStorage = new System.Windows.Forms.GroupBox();
|
||||
this.lblPcbId = new System.Windows.Forms.Label();
|
||||
this.txtPcbId = new System.Windows.Forms.TextBox();
|
||||
this.btnGetPasswordByPcb = new System.Windows.Forms.Button();
|
||||
this.btnCancel = new System.Windows.Forms.Button();
|
||||
this.txtLog = new System.Windows.Forms.TextBox();
|
||||
this.lblPcbId = new System.Windows.Forms.Label();
|
||||
this.txtPcbId = new System.Windows.Forms.TextBox();
|
||||
this.grpStorage.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
@ -38,27 +36,11 @@
|
||||
this.grpStorage.Controls.Add(this.btnGetPasswordByPcb);
|
||||
this.grpStorage.Location = new System.Drawing.Point(10, 37);
|
||||
this.grpStorage.Name = "grpStorage";
|
||||
this.grpStorage.Size = new System.Drawing.Size(200, 120);
|
||||
this.grpStorage.Size = new System.Drawing.Size(200, 261);
|
||||
this.grpStorage.TabIndex = 0;
|
||||
this.grpStorage.TabStop = false;
|
||||
this.grpStorage.Text = "UniDataStorageReader for GCI";
|
||||
//
|
||||
// lblPcbId
|
||||
//
|
||||
this.lblPcbId.AutoSize = true;
|
||||
this.lblPcbId.Location = new System.Drawing.Point(10, 25);
|
||||
this.lblPcbId.Name = "lblPcbId";
|
||||
this.lblPcbId.Size = new System.Drawing.Size(45, 13);
|
||||
this.lblPcbId.TabIndex = 0;
|
||||
this.lblPcbId.Text = "PCB ID:";
|
||||
//
|
||||
// txtPcbId
|
||||
//
|
||||
this.txtPcbId.Location = new System.Drawing.Point(65, 22);
|
||||
this.txtPcbId.Name = "txtPcbId";
|
||||
this.txtPcbId.Size = new System.Drawing.Size(120, 20);
|
||||
this.txtPcbId.TabIndex = 1;
|
||||
//
|
||||
// btnGetPasswordByPcb
|
||||
//
|
||||
this.btnGetPasswordByPcb.Location = new System.Drawing.Point(10, 55);
|
||||
@ -91,12 +73,28 @@
|
||||
this.txtLog.TabIndex = 4;
|
||||
this.txtLog.WordWrap = false;
|
||||
//
|
||||
// UniDataStorageReaderInterfaceView
|
||||
// lblPcbId
|
||||
//
|
||||
this.lblPcbId.AutoSize = true;
|
||||
this.lblPcbId.Location = new System.Drawing.Point(10, 25);
|
||||
this.lblPcbId.Name = "lblPcbId";
|
||||
this.lblPcbId.Size = new System.Drawing.Size(45, 13);
|
||||
this.lblPcbId.TabIndex = 0;
|
||||
this.lblPcbId.Text = "PCB ID:";
|
||||
//
|
||||
// txtPcbId
|
||||
//
|
||||
this.txtPcbId.Location = new System.Drawing.Point(65, 22);
|
||||
this.txtPcbId.Name = "txtPcbId";
|
||||
this.txtPcbId.Size = new System.Drawing.Size(120, 20);
|
||||
this.txtPcbId.TabIndex = 1;
|
||||
//
|
||||
// UniDataSorageActionsView
|
||||
//
|
||||
this.Controls.Add(this.grpStorage);
|
||||
this.Controls.Add(this.btnCancel);
|
||||
this.Controls.Add(this.txtLog);
|
||||
this.Name = "UniDataStorageReaderInterfaceView";
|
||||
this.Name = "UniDataSorageActionsView";
|
||||
this.Size = new System.Drawing.Size(740, 370);
|
||||
this.grpStorage.ResumeLayout(false);
|
||||
this.grpStorage.PerformLayout();
|
||||
@ -104,5 +102,8 @@
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
private System.Windows.Forms.Label lblPcbId;
|
||||
private System.Windows.Forms.TextBox txtPcbId;
|
||||
}
|
||||
}
|
||||
@ -5,13 +5,13 @@ using System.Windows.Forms;
|
||||
|
||||
namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge
|
||||
{
|
||||
public partial class UniDataStorageReaderInterfaceView : UserControl
|
||||
public partial class UniDataSorageActionsView : UserControl
|
||||
{
|
||||
private readonly MainView _mainView;
|
||||
private readonly GciBridge _bridge;
|
||||
private CancellationTokenSource _cts;
|
||||
|
||||
public UniDataStorageReaderInterfaceView(MainView mainView, GciBridge bridge)
|
||||
public UniDataSorageActionsView(MainView mainView, GciBridge bridge)
|
||||
{
|
||||
_mainView = mainView ?? throw new ArgumentNullException(nameof(mainView));
|
||||
_bridge = bridge ?? throw new ArgumentNullException(nameof(bridge));
|
||||
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
@ -253,17 +253,23 @@
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\MainView.Designer.cs">
|
||||
<DependentUpon>MainView.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\UniDataStorageReaderInterfaceView.cs">
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\PreadjustmentActionsView.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\UniDataStorageReaderInterfaceView.Designer.cs">
|
||||
<DependentUpon>UniDataStorageReaderInterfaceView.cs</DependentUpon>
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\PreadjustmentActionsView.Designer.cs">
|
||||
<DependentUpon>PreadjustmentActionsView.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\CombinedInterfaceView.cs">
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\UniDataSorageActionsView.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\CombinedInterfaceView.Designer.cs">
|
||||
<DependentUpon>CombinedInterfaceView.cs</DependentUpon>
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\UniDataSorageActionsView.Designer.cs">
|
||||
<DependentUpon>UniDataSorageActionsView.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\CombinedActionsView.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\CombinedActionsView.Designer.cs">
|
||||
<DependentUpon>CombinedActionsView.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\ConfigurationView.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
@ -271,11 +277,11 @@
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\ConfigurationView.Designer.cs">
|
||||
<DependentUpon>ConfigurationView.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\GenesisCordonelInterfaceView.cs">
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\SlotsComPortsRegistersActionsView.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\GenesisCordonelInterfaceView.Designer.cs">
|
||||
<DependentUpon>GenesisCordonelInterfaceView.cs</DependentUpon>
|
||||
<Compile Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\SlotsComPortsRegistersActionsView.Designer.cs">
|
||||
<DependentUpon>SlotsComPortsRegistersActionsView.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Rig\BuiltIn\PumpTandem\Pump.cs" />
|
||||
<Compile Include="Rig\BuiltIn\PumpTandem\PumpCfg.cs" />
|
||||
@ -3310,17 +3316,20 @@
|
||||
<EmbeddedResource Include="Rig\BridgeComponents\GciBridge\UI\MainView.resx">
|
||||
<DependentUpon>MainView.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\CombinedInterfaceView.resx">
|
||||
<DependentUpon>CombinedInterfaceView.cs</DependentUpon>
|
||||
<EmbeddedResource Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\CombinedActionsView.resx">
|
||||
<DependentUpon>CombinedActionsView.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\ConfigurationView.resx">
|
||||
<DependentUpon>ConfigurationView.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\UniDataStorageReaderInterfaceView.resx">
|
||||
<DependentUpon>UniDataStorageReaderInterfaceView.cs</DependentUpon>
|
||||
<EmbeddedResource Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\PreadjustmentActionsView.resx">
|
||||
<DependentUpon>PreadjustmentActionsView.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\GenesisCordonelInterfaceView.resx">
|
||||
<DependentUpon>GenesisCordonelInterfaceView.cs</DependentUpon>
|
||||
<EmbeddedResource Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\UniDataSorageActionsView.resx">
|
||||
<DependentUpon>UniDataSorageActionsView.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Rig\BridgeComponents\GciBridge\UI\StaraTuraAPI_GciBridge\SlotsComPortsRegistersActionsView.resx">
|
||||
<DependentUpon>SlotsComPortsRegistersActionsView.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Rig\BuiltIn\PumpTandem\PumpCfgCtrl.resx">
|
||||
<DependentUpon>PumpCfgCtrl.cs</DependentUpon>
|
||||
@ -4437,6 +4446,14 @@
|
||||
<Project>{439D0878-C76E-452B-B17D-209A89E91D36}</Project>
|
||||
<Name>Dirichlet.Numerics</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ExternalProjects\Laatzen\Genesis\Common\CordonelPreadjustmentUi\CordonelPreadjustmentUi.csproj">
|
||||
<Project>{d0c8d887-ed52-40ab-a069-90bce0e801e2}</Project>
|
||||
<Name>CordonelPreadjustmentUi</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ExternalProjects\Laatzen\Genesis\Common\Logic\ProductionOrderCore\ProductionOrderCore.csproj">
|
||||
<Project>{6d2777bb-7a88-466d-a49b-3266f9bf0160}</Project>
|
||||
<Name>ProductionOrderCore</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\GemCard\GemCard.csproj">
|
||||
<Project>{8B10D15A-39DE-4B56-8DD1-710C1EB3A697}</Project>
|
||||
<Name>GemCard</Name>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user