Added Automatic points Saving, Calibration and Calculating RTDCard values change in last 3O minutes in saved points
parent
9300ce3c37
commit
0250613def
|
@ -6,29 +6,62 @@
|
|||
|
||||
|
||||
<div class="row text-center">
|
||||
<div class="col">
|
||||
<div class="col-xs-12 col-md-2 align-self-center">
|
||||
<button class="btn btn-dark text-white no-border" @onclick="(() => _PointsService.SavePoint())">Save Point (@_PointsService.GetPointsCount())</button>
|
||||
</div>
|
||||
|
||||
<div class="col row">
|
||||
<div class="col-md-3 col">
|
||||
<div class="col-xs-12 col-md row">
|
||||
|
||||
<div class="col-6 col-xl-4 align-self-center">
|
||||
<input type="number" step="1" class="form-control form-control-sm bg-dark text-white no-border" value="@(_PointsService.GetTimerInterval())" @onchange="((x) =>
|
||||
{
|
||||
PointTimerChange(x.Value.ToString());
|
||||
})">
|
||||
</div>
|
||||
|
||||
<div class="col-6 col-xl-6 text-start align-self-center">
|
||||
<div class="form-check form-switch">
|
||||
@if (TimerEnabled)
|
||||
{
|
||||
<input class="form-check-input align-self-center" type="checkbox" role="switch" id="SavePointsSwitch" @onclick="(() =>
|
||||
{
|
||||
TimerEnabled = false;
|
||||
_PointsService.StopTimer();
|
||||
})" checked>
|
||||
}
|
||||
else
|
||||
{
|
||||
<input class="form-check-input align-self-center" type="checkbox" role="switch" id="SavePointsSwitch" @onclick="(() =>
|
||||
{
|
||||
TimerEnabled = true;
|
||||
_PointsService.StartTimer();
|
||||
})">
|
||||
}
|
||||
|
||||
<label class="form-check-label" for="SavePointsSwitch">Auto Saving</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-sm-5 row">
|
||||
<div class="col-5 col-md-5 align-self-center">
|
||||
<button class="btn btn-dark text-white no-border" @onclick="(() => DownloadFile())">Export as CSV</button>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 col text-start align-self-center">
|
||||
<div class="col-7 col-md-7 text-start align-self-center">
|
||||
<div class="form-check form-switch">
|
||||
@if (RecalculateValues)
|
||||
{
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault" @onclick="(() =>
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="RecalculatePointSwitch" @onclick="(() =>
|
||||
{
|
||||
RecalculateValues = false;
|
||||
})" checked>
|
||||
}
|
||||
else
|
||||
{
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault" @onclick="(() => RecalculateValues = true)">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="RecalculatePointSwitch" @onclick="(() => RecalculateValues = true)">
|
||||
}
|
||||
<label class="form-check-label" for="flexSwitchCheckDefault">Recalculate Values?</label>
|
||||
<label class="form-check-label" for="RecalculatePointSwitch">Recalculate Values?</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -37,16 +70,20 @@
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@code {
|
||||
private bool RecalculateValues = false;
|
||||
private bool TimerEnabled = false;
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
TimerEnabled = _PointsService.GetTImerStatus();
|
||||
_PointsService.EventUpdateTopBar += UpdateView;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Start downloading CSV file with points
|
||||
/// </summary>
|
||||
private async void DownloadFile()
|
||||
{
|
||||
// Název souboru
|
||||
|
@ -56,10 +93,25 @@
|
|||
await _JSRuntime.InvokeVoidAsync("DownloadFile", fileName, await _PointsService.CreatePointsFileLines(RecalculateValues));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Timer Time Change
|
||||
/// </summary>
|
||||
/// <param name="time"></param>
|
||||
private void PointTimerChange(string? time)
|
||||
{
|
||||
if (time == null || time == "") { return; }
|
||||
|
||||
time = time.Replace(".", ",");
|
||||
_PointsService.SetTimerInterval(int.Parse(time));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public async Task UpdateView(object? o, bool b)
|
||||
{
|
||||
await InvokeAsync(() =>
|
||||
{
|
||||
StateHasChanged();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,56 +9,82 @@
|
|||
|
||||
|
||||
|
||||
@if (_RTD8TMService.GetActualData() != null)
|
||||
{
|
||||
<table class="table table-striped text-white">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Time</th>
|
||||
|
||||
<table class="table table-striped text-white">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Time</th>
|
||||
|
||||
@foreach (byte stack in _RTD8TMService.GetActualData().Keys)
|
||||
{
|
||||
for (byte chanel = 0; chanel < 8; chanel++)
|
||||
{
|
||||
if (_RTD8TMService.GetChanelName(stack, chanel) != "----------")
|
||||
{
|
||||
<th>
|
||||
@_RTD8TMService.GetChanelName(stack, chanel)
|
||||
|
||||
@if (_RTD8TMService.GetValueType(stack, chanel) == RTD8TMSensorTypes.PT100)
|
||||
{
|
||||
@Celsius
|
||||
}
|
||||
else
|
||||
{
|
||||
@Ohm
|
||||
}
|
||||
</th>
|
||||
}
|
||||
}
|
||||
}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (long time in TableData.Keys)
|
||||
{
|
||||
<tr class="text-white @TableBacgroundChanger() ">
|
||||
<td>@(new DateTime(time).ToString("HH:mm:ss"))</td>
|
||||
|
||||
@foreach (byte stack in TableData[time].Keys)
|
||||
@foreach (byte stack in _RTD8TMService.GetActualData().Keys)
|
||||
{
|
||||
for (byte chanel = 0; chanel < 8; chanel++)
|
||||
{
|
||||
if (_RTD8TMService.GetChanelName(stack, chanel) != "----------")
|
||||
{
|
||||
<td>@(new RTD8TMChanelComponent().RecalculateValues(TableData[time][stack][chanel], _RTD8TMService.GetValueType(stack, chanel)))</td>
|
||||
<th>
|
||||
@_RTD8TMService.GetChanelName(stack, chanel)
|
||||
|
||||
@if (_RTD8TMService.GetValueType(stack, chanel) == RTD8TMSensorTypes.PT100)
|
||||
{
|
||||
@Celsius
|
||||
}
|
||||
else
|
||||
{
|
||||
@Ohm
|
||||
}
|
||||
</th>
|
||||
}
|
||||
}
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
@foreach (long time in TableData.Keys)
|
||||
{
|
||||
<tr class="text-white @TableBacgroundChanger() ">
|
||||
<td>@(new DateTime(time).ToString("HH:mm:ss"))</td>
|
||||
|
||||
@foreach (byte stack in TableData[time].Keys)
|
||||
{
|
||||
for (byte chanel = 0; chanel < 8; chanel++)
|
||||
{
|
||||
if (_RTD8TMService.GetChanelName(stack, chanel) != "----------")
|
||||
{
|
||||
<td>@(new RTD8TMChanelComponent().RecalculateValues(TableData[time][stack][chanel], _RTD8TMService.GetValueType(stack, chanel)))</td>
|
||||
}
|
||||
}
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
|
||||
@if (TableData.Keys.Count > 1)
|
||||
{
|
||||
<tfoot>
|
||||
<tr class="text-warning">
|
||||
<td>30min Change</td>
|
||||
|
||||
@foreach (byte stack in TableData[TableData.Keys.OrderDescending().First()].Keys)
|
||||
{
|
||||
for (byte chanel = 0; chanel < 8; chanel++)
|
||||
{
|
||||
if (_RTD8TMService.GetChanelName(stack, chanel) != "----------")
|
||||
{
|
||||
<td>@Math.Round(new RTD8TMChanelComponent().RecalculateValues(TableData[LastDataTime][stack][chanel], _RTD8TMService.GetValueType(stack, chanel)) - new RTD8TMChanelComponent().RecalculateValues(TableData[AfterHalfHour][stack][chanel], _RTD8TMService.GetValueType(stack, chanel)), 2)</td>
|
||||
}
|
||||
}
|
||||
}
|
||||
</tr>
|
||||
</tfoot>
|
||||
}
|
||||
</table>
|
||||
}
|
||||
else
|
||||
{
|
||||
<h1>No data</h1>
|
||||
}
|
||||
|
||||
|
||||
@code {
|
||||
|
@ -66,12 +92,14 @@
|
|||
private string Ohm = " (Ω)";
|
||||
private string Celsius = " (°C)";
|
||||
private bool TableBackground = false;
|
||||
private long LastDataTime = 0;
|
||||
private long AfterHalfHour = 0;
|
||||
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
TableData = _PointsService.GetPoints().RTD8TM;
|
||||
|
||||
_PointsService.EventPointPage += UpdateView;
|
||||
}
|
||||
|
||||
private string TableBacgroundChanger()
|
||||
|
@ -88,14 +116,21 @@
|
|||
}
|
||||
}
|
||||
|
||||
private void HalfHourTime()
|
||||
{
|
||||
LastDataTime = TableData.Keys.OrderDescending().First();
|
||||
long backhalfhour = new DateTime(LastDataTime).AddMinutes(-30).Ticks;
|
||||
AfterHalfHour = TableData.Keys.OrderBy(item => Math.Abs(backhalfhour - item)).First();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public async Task UpdateView(object? o, bool b)
|
||||
{
|
||||
await InvokeAsync(() =>
|
||||
{
|
||||
TableBackground = false;
|
||||
StateHasChanged();
|
||||
HalfHourTime();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,12 @@
|
|||
<input type="text" class="form-control form-control-sm bg-black text-white no-border" value="@(RTD8tmService.GetChanelName(StackID, ChanelID))" @onchange="((x) => ChangeName(x.Value.ToString()))" >
|
||||
</div>
|
||||
}
|
||||
else if (Calibration)
|
||||
{
|
||||
<div class="col">
|
||||
<input type="number" step="0.01" class="form-control form-control-sm bg-black text-white no-border" value="@(RTD8tmService.GetCalibration(StackID, ChanelID).ToString().Replace(",", "."))" @onchange="((x) => CalibrationChanged(x.Value.ToString()))">
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="col">@(RTD8tmService.GetChanelName(StackID, ChanelID))</div>
|
||||
|
@ -42,6 +48,9 @@
|
|||
[Parameter]
|
||||
public bool Edit { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public bool Calibration { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public RTD8TMService RTD8tmService { get; set; }
|
||||
|
||||
|
@ -61,6 +70,11 @@
|
|||
RTD8tmService.SetChanelNames(StackID, ChanelID, NewName);
|
||||
}
|
||||
|
||||
private void CalibrationChanged(string NewCalibration)
|
||||
{
|
||||
NewCalibration = NewCalibration.Replace(".", ",");
|
||||
RTD8tmService.SetCalibration(StackID, ChanelID, float.Parse(NewCalibration));
|
||||
}
|
||||
|
||||
|
||||
public float RecalculateValues(float resistance, byte Type = 0)
|
||||
|
|
|
@ -4,6 +4,10 @@
|
|||
@using UI_SequentMicrosystems.Services
|
||||
@using UI_SequentMicrosystems.Models
|
||||
|
||||
@inject PointsService _PointsService
|
||||
@inject RTD8TMService _RTD8TMService
|
||||
@inject NavigationManager Navigator
|
||||
|
||||
|
||||
<PageTitle>Saved Points</PageTitle>
|
||||
|
||||
|
@ -21,7 +25,12 @@
|
|||
@code {
|
||||
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
//_RTD8TMService.SetAddress("http://10.250.251.131/");
|
||||
_RTD8TMService.SetAddress(Navigator.BaseUri);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -15,22 +15,47 @@
|
|||
<div class="row text-center">
|
||||
<div class="col-6">Device Address: @_RTD8TMService.GetAddress() | DataUpdate: @_UpdateCounter | Chart Points: @_RTD8TMService.CountChartData() / @_RTD8TMService.CountFilteredChartData() </div>
|
||||
<div class="col text-start">
|
||||
<div class="form-check form-switch">
|
||||
@if (EditName)
|
||||
{
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault" @onclick="(() =>
|
||||
@if (!Calibration)
|
||||
{
|
||||
<div class="form-check form-switch">
|
||||
@if (EditName)
|
||||
{
|
||||
EditName = false;
|
||||
Task.Run(() =>_RTD8TMService.SetChanelsNames());
|
||||
Task.Run(() => _RTD8TMService.PostValueTypes());
|
||||
})" checked>
|
||||
}
|
||||
else
|
||||
{
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault" @onclick="(() => EditName = true)">
|
||||
}
|
||||
<label class="form-check-label" for="flexSwitchCheckDefault">Configure Inputs</label>
|
||||
</div>
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault" @onclick="(() =>
|
||||
{
|
||||
EditName = false;
|
||||
Task.Run(() => _RTD8TMService.SetChanelsNames());
|
||||
Task.Run(() => _RTD8TMService.PostValueTypes());
|
||||
})" checked>
|
||||
}
|
||||
else
|
||||
{
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault" @onclick="(() => EditName = true)">
|
||||
}
|
||||
<label class="form-check-label" for="flexSwitchCheckDefault">Configure Inputs</label>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<div class="col text-start">
|
||||
@if (!EditName)
|
||||
{
|
||||
<div class="form-check form-switch">
|
||||
@if (Calibration)
|
||||
{
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault" @onclick="(() =>
|
||||
{
|
||||
Calibration = false;
|
||||
Task.Run(() =>_RTD8TMService.PostCalibrations());
|
||||
})" checked>
|
||||
}
|
||||
else
|
||||
{
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="SwitchCalibration" @onclick="(() => Calibration = true)">
|
||||
}
|
||||
<label class="form-check-label" for="SwitchCalibration">Calibrate Inputs</label>
|
||||
</div>
|
||||
}
|
||||
|
||||
</div>
|
||||
@if (EditName)
|
||||
{
|
||||
|
@ -59,7 +84,7 @@
|
|||
<div class="text-center">Stack ID: @StackID</div>
|
||||
@for (byte chanel = 0; chanel < 8; chanel++)
|
||||
{
|
||||
<RTD8TMChanelComponent StackID=@StackID ChanelID=@chanel Edit=@EditName RTD8tmService=@_RTD8TMService />
|
||||
<RTD8TMChanelComponent StackID=@StackID ChanelID=@chanel Edit=@EditName Calibration=@Calibration RTD8tmService=@_RTD8TMService />
|
||||
}
|
||||
</div>
|
||||
}
|
||||
|
@ -72,6 +97,7 @@
|
|||
@code {
|
||||
public int _UpdateCounter = 0;
|
||||
private bool EditName = false;
|
||||
private bool Calibration = false;
|
||||
|
||||
[CascadingParameter] public IModalService Modal { get; set; } = default!;
|
||||
|
||||
|
|
|
@ -6,8 +6,14 @@
|
|||
|
||||
<PageTitle>Welcome</PageTitle>
|
||||
|
||||
<h1>TesDevice App V1.0</h1>
|
||||
|
||||
<div class="text-center row">
|
||||
<div class="h6 col"><strong>TesDevice App V1.1</strong></div>
|
||||
<div class="col">Added Automatic points Saving, Calibration and Calculating RTDCard values change in last 3O minutes in saved points</div>
|
||||
</div>
|
||||
<div class="text-center row">
|
||||
<div class="h6 col">TesDevice App V1.O</div>
|
||||
<div class="col">Firt Fully function Build --> Reading RTD cards, RTD Graph, Points Saving and exporting as csv</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using UI_SequentMicrosystems.Components;
|
||||
using System.Timers;
|
||||
using UI_SequentMicrosystems.Components;
|
||||
using UI_SequentMicrosystems.Constants;
|
||||
using UI_SequentMicrosystems.Models;
|
||||
|
||||
|
@ -11,18 +12,24 @@ namespace UI_SequentMicrosystems.Services
|
|||
|
||||
private PointsModel _PointsModel = new();
|
||||
private int PointsCount = 0;
|
||||
private System.Timers.Timer _Timer = new System.Timers.Timer(300000);
|
||||
|
||||
public delegate Task AsyncEventHandler<TEventArgs>(object? sender, TEventArgs? e);
|
||||
public event AsyncEventHandler<bool>? EventUpdateTopBar;
|
||||
public event AsyncEventHandler<bool>? EventPointPage;
|
||||
|
||||
public PointsService(RTD8TMService RTD8TM)
|
||||
{
|
||||
_RTD8TMService = RTD8TM;
|
||||
_Timer.Elapsed += SavePoint;
|
||||
_Timer.AutoReset = true;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Save actual data point
|
||||
/// </summary>
|
||||
public void SavePoint()
|
||||
public async void SavePoint()
|
||||
{
|
||||
long time = DateTime.Now.Ticks;
|
||||
_PointsModel.RTD8TM.Add(time, new());
|
||||
|
@ -42,8 +49,18 @@ namespace UI_SequentMicrosystems.Services
|
|||
_PointsModel.RTD8TM[time][stack].Add(RTD8TMActual[stack][chanel]);
|
||||
}
|
||||
}
|
||||
|
||||
//other card types points saving
|
||||
|
||||
if (EventUpdateTopBar != null)
|
||||
{
|
||||
await EventUpdateTopBar.Invoke(this, true);
|
||||
}
|
||||
|
||||
if (EventPointPage != null)
|
||||
{
|
||||
await EventPointPage.Invoke(this, true);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -64,6 +81,7 @@ namespace UI_SequentMicrosystems.Services
|
|||
return PointsCount;
|
||||
}
|
||||
|
||||
//Create File Lines
|
||||
|
||||
/// <summary>
|
||||
/// Create Points Lines for CSV File
|
||||
|
@ -82,7 +100,6 @@ namespace UI_SequentMicrosystems.Services
|
|||
return string.Join(Environment.NewLine, Lines);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Create Title Line of CSV File
|
||||
/// </summary>
|
||||
|
@ -179,8 +196,55 @@ namespace UI_SequentMicrosystems.Services
|
|||
|
||||
|
||||
|
||||
//Timer
|
||||
|
||||
private void SavePoint(object? o, ElapsedEventArgs? e)
|
||||
{
|
||||
SavePoint();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read Timer Interval
|
||||
/// </summary>
|
||||
/// <returns>Interval in seconds</returns>
|
||||
public int GetTimerInterval()
|
||||
{
|
||||
return (int)(_Timer.Interval / 1000);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set Timer Interval
|
||||
/// </summary>
|
||||
/// <param name="interval">interval in seconds</param>
|
||||
public void SetTimerInterval(int interval)
|
||||
{
|
||||
_Timer.Interval = interval * 1000;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Start Timer
|
||||
/// </summary>
|
||||
public void StartTimer()
|
||||
{
|
||||
_Timer.Start();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stop Timer
|
||||
/// </summary>
|
||||
public void StopTimer()
|
||||
{
|
||||
_Timer.Stop();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get Timer status
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool GetTImerStatus()
|
||||
{
|
||||
return _Timer.Enabled;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ namespace UI_SequentMicrosystems.Services
|
|||
private SortedList<byte, string[]> ChanelNames = new SortedList<byte, string[]>();
|
||||
private SortedList<byte, float[]> ActualValues = new SortedList<byte, float[]>();
|
||||
private SortedList<byte, byte[]> ValuesType = new SortedList<byte, byte[]>();
|
||||
private SortedList<byte, float[]> Calibrations = new SortedList<byte, float[]>();
|
||||
public SortedList<byte, List<List<RTD8TMPointModel>>> GraphData = new();
|
||||
public SortedList<byte, List<List<RTD8TMPointModel>>> GraphFiltered = new();
|
||||
private byte GraphDataCounterCount = 10;
|
||||
|
@ -44,6 +45,7 @@ namespace UI_SequentMicrosystems.Services
|
|||
Address = address;
|
||||
GetChanelsNames();
|
||||
GetValueTypes();
|
||||
GetCalibrations();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -73,6 +75,18 @@ namespace UI_SequentMicrosystems.Services
|
|||
|
||||
ActualValues = await _RTD8TM.Get(Address);
|
||||
|
||||
foreach (byte stack in ActualValues.Keys)
|
||||
{
|
||||
if (Calibrations.ContainsKey(stack))
|
||||
{
|
||||
for (byte chanel = 0; chanel < 8; chanel++)
|
||||
{
|
||||
ActualValues[stack][chanel] += Calibrations[stack][chanel];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (GraphDataCounter >= GraphDataCounterCount)
|
||||
{
|
||||
GraphDataCounter = 0;
|
||||
|
@ -482,6 +496,70 @@ namespace UI_SequentMicrosystems.Services
|
|||
ValuesType.Clear();
|
||||
}
|
||||
|
||||
//calibrations
|
||||
|
||||
/// <summary>
|
||||
/// Read Calibrations from API
|
||||
/// </summary>
|
||||
private async void GetCalibrations()
|
||||
{
|
||||
if (Address == null) { return; }
|
||||
|
||||
Calibrations = await _RTD8TM.GetCalibration(Address);
|
||||
|
||||
foreach (byte stack in ActualValues.Keys)
|
||||
{
|
||||
if (!Calibrations.ContainsKey(stack))
|
||||
{
|
||||
Calibrations.Add(stack, new float[8]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Post calibrations to API
|
||||
/// </summary>
|
||||
public void PostCalibrations()
|
||||
{
|
||||
if (Address == null) { return; }
|
||||
|
||||
_RTD8TM.PostCalibration(Address, Calibrations);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get calibration of specific chanel
|
||||
/// </summary>
|
||||
/// <param name="stack"></param>
|
||||
/// <param name="chanel"></param>
|
||||
/// <returns></returns>
|
||||
public float GetCalibration(byte stack, byte chanel)
|
||||
{
|
||||
if (Calibrations.ContainsKey(stack))
|
||||
{
|
||||
return Calibrations[stack][chanel];
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set chanel Calibration Change
|
||||
/// </summary>
|
||||
/// <param name="stack"></param>
|
||||
/// <param name="chanel"></param>
|
||||
/// <param name="value"></param>
|
||||
public void SetCalibration(byte stack, byte chanel, float value)
|
||||
{
|
||||
if (!Calibrations.ContainsKey(stack))
|
||||
{
|
||||
Calibrations.Add(stack, new float[8]);
|
||||
}
|
||||
|
||||
Calibrations[stack][chanel] = value;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue