laatzen/Common/Ui/GenesisToolBox/Infrastructure/TempMeterModels.cs

142 lines
4.2 KiB
C#

namespace Xylem.Common.Ui.GenesisToolBox.Infrastructure
{
using System;
using System.IO;
using System.Timers;
internal interface ITempMeterForm
{
void AddMessage(string message);
double GetAverageTOF();
void StartRecording();
void InvokeOnUIThread(Action action);
}
partial class AutomaticTemperatureCalibration
{
private readonly string pcbId;
private readonly ITempMeterForm tempMeterForm;
private readonly TemperatureSource temperatureSource;
private string messurementsFile;
private Timer startTimer;
private Timer resultsTimer;
public AutomaticTemperatureCalibration(string pcbId, ITempMeterForm genesisMeter)
{
this.pcbId = pcbId;
this.tempMeterForm = genesisMeter;
try
{
this.temperatureSource = new TemperatureSource();
}
catch (Exception e)
{
this.tempMeterForm.AddMessage($"{e}");
}
}
public void StartMessuring()
{
try
{
this.messurementsFile = Path.Combine(Appsettings.WorkingDirectory, $"{this.pcbId}_{DateTime.Now:yyyyMMddHHmmss}_messurements.txt");
File.AppendAllText(this.messurementsFile, string.Empty);
this.resultsTimer = new Timer()
{
AutoReset = true,
Interval = Appsettings.MessurementStep,
};
this.resultsTimer.Elapsed += this.StartGettingResults;
this.startTimer = new Timer
{
AutoReset = true,
Interval = Appsettings.MessurementDauer,
};
this.startTimer.Elapsed += this.StartMessuring;
this.StartMessuring(null, null);
this.startTimer.Start();
}
catch (Exception e)
{
File.AppendAllText(this.messurementsFile, $"{e}{Environment.NewLine}");
this.tempMeterForm.AddMessage($"{e}");
}
}
private void StartMessuring(Object sender, ElapsedEventArgs args)
{
try
{
if (this.resultsTimer.Enabled)
{
this.resultsTimer.Stop();
}
else
{
this.tempMeterForm.StartRecording();
this.resultsTimer.Start();
}
}
catch (Exception e)
{
File.AppendAllText(this.messurementsFile, $"{e}{Environment.NewLine}");
this.tempMeterForm.AddMessage($"{e}");
}
}
private void StartGettingResults(Object sender, ElapsedEventArgs args)
{
try
{
this.tempMeterForm.InvokeOnUIThread(() =>
{
var temp = this.temperatureSource.GetTemperature();
var avgTOF = this.tempMeterForm.GetAverageTOF();
var messurement = $"{this.pcbId};{DateTime.Now:yyyy-MM-dd HH:mm:ss:fff};{temp:0.00};{avgTOF:0.0000000000}";
File.AppendAllText(this.messurementsFile, $"{messurement}{Environment.NewLine}");
this.tempMeterForm.AddMessage(messurement);
this.tempMeterForm.StartRecording();
});
}
catch (Exception e)
{
File.AppendAllText(this.messurementsFile, $"{e}{Environment.NewLine}");
this.tempMeterForm.AddMessage($"{e}");
}
}
public void StopMessuring()
{
try
{
this.resultsTimer.Stop();
this.resultsTimer.Dispose();
this.resultsTimer = null;
this.startTimer.Stop();
this.startTimer.Dispose();
this.startTimer = null;
}
catch (Exception e)
{
File.AppendAllText(this.messurementsFile, $"{e}{Environment.NewLine}");
this.tempMeterForm.AddMessage($"{e}");
}
}
}
}