207 lines
6.4 KiB
C#
207 lines
6.4 KiB
C#
|
using API_SequentMicrosystems.Models;
|
|||
|
using Libs_SequentMicrosystems;
|
|||
|
using Newtonsoft.Json;
|
|||
|
|
|||
|
namespace API_SequentMicrosystems.Services
|
|||
|
{
|
|||
|
public class RTDDAService
|
|||
|
{
|
|||
|
private RTDStackLevelReader _stackLevelReader = new RTDStackLevelReader();
|
|||
|
public readonly List<byte> _stackLevels = new List<byte>();
|
|||
|
|
|||
|
public RTDDAService(IConfiguration configuration)
|
|||
|
{
|
|||
|
if (!Directory.Exists("RTDDA"))
|
|||
|
Directory.CreateDirectory("RTDDA");
|
|||
|
|
|||
|
List<CardsConfig> cardsConfig = configuration.GetSection("Cards").Get<List<CardsConfig>>();
|
|||
|
#pragma warning disable CS8604 // Může jít o argument s odkazem null.
|
|||
|
CardsConfig config = cardsConfig.Where(x => x.ID == "0").First();
|
|||
|
#pragma warning restore CS8604 // Může jít o argument s odkazem null.
|
|||
|
foreach (char c in config.Levels.ToCharArray())
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
_stackLevels.Add(byte.Parse(c.ToString()));
|
|||
|
}
|
|||
|
catch
|
|||
|
{
|
|||
|
Console.WriteLine($"Char {c} is not convertable to byte");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
ChanelsNames = LoadChanelsNames(); //ChanelsNames
|
|||
|
PreconfiguredChanelsNames = LoadPreconfiguredChanelsNames(); //ChanelsPreconfiguredNames
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Read data from all RTD cards
|
|||
|
/// </summary>
|
|||
|
/// <returns>data from all RTD cards</returns>
|
|||
|
public SortedList<byte, float[]> ReadAllCard()
|
|||
|
{
|
|||
|
SortedList<byte, float[]> data = new SortedList<byte, float[]>();
|
|||
|
|
|||
|
for (byte i = 0; i < 8; i++) //loop for read all stack levels
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
data.Add(i, ReadCard(i)); //read stack level
|
|||
|
}
|
|||
|
catch
|
|||
|
{
|
|||
|
Console.WriteLine($"RTD stack {i} is not available");
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
return data; //return data
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Read data from all configured cards
|
|||
|
/// </summary>
|
|||
|
/// <returns>Data from all configuredd Cards</returns>
|
|||
|
public SortedList<byte, float[]> ReadAllConfiguredCard()
|
|||
|
{
|
|||
|
SortedList<byte, float[]> data = new SortedList<byte, float[]>();
|
|||
|
|
|||
|
for (byte i = 0; i < 8; i++) //loop for read all stack levels
|
|||
|
{
|
|||
|
if (_stackLevels.Contains(i))
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
data.Add(i, ReadCard(i)); //read stack level
|
|||
|
}
|
|||
|
catch
|
|||
|
{
|
|||
|
Console.WriteLine($"RTD stack {i} is not available");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return data; //return data
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Read data from specified card
|
|||
|
/// </summary>
|
|||
|
/// <param name="stack">stack level ID</param>
|
|||
|
/// <returns>Data of selected stack card</returns>
|
|||
|
public float[] ReadCard(byte stack)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
return _stackLevelReader.GetStack(stack); //return data from specified card
|
|||
|
}
|
|||
|
catch
|
|||
|
{
|
|||
|
return new float[0]; //if card read get error, return empty array
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#region ChanelsName
|
|||
|
private SortedList<byte, string[]> ChanelsNames;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Load Chanels Names from file
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
private SortedList<byte, string[]> LoadChanelsNames()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
#pragma warning disable CS8603 // Může jít o vrácený odkaz null.
|
|||
|
return JsonConvert.DeserializeObject<SortedList<byte, string[]>>(File.ReadAllText("RTDDA/Names.json"));
|
|||
|
#pragma warning restore CS8603 // Může jít o vrácený odkaz null.
|
|||
|
}
|
|||
|
catch
|
|||
|
{
|
|||
|
return new();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Save ChanelsNames to FIle
|
|||
|
/// </summary>
|
|||
|
private void SaveChanelsNames()
|
|||
|
{
|
|||
|
File.WriteAllText("RTDDA/Names.json", JsonConvert.SerializeObject(ChanelsNames));
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Get CHanelsNames
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public SortedList<byte, string[]> GetChanelsNames()
|
|||
|
{
|
|||
|
return ChanelsNames;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Save Chanels Names
|
|||
|
/// </summary>
|
|||
|
/// <param name="ChN"></param>
|
|||
|
public void SetChanelsNames(SortedList<byte, string[]> ChN)
|
|||
|
{
|
|||
|
ChanelsNames = ChN;
|
|||
|
SaveChanelsNames();
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region PreconfiguredChanelsNames
|
|||
|
private List<string> PreconfiguredChanelsNames;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Load Preconfigurated Chanels Names from file
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
private List<string> LoadPreconfiguredChanelsNames()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
#pragma warning disable CS8603 // Může jít o vrácený odkaz null.
|
|||
|
return JsonConvert.DeserializeObject<List<string>>(File.ReadAllText("RTDDA/PNames.json"));
|
|||
|
#pragma warning restore CS8603 // Může jít o vrácený odkaz null.
|
|||
|
}
|
|||
|
catch
|
|||
|
{
|
|||
|
return new();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Save Preconfigurated chanels names to File
|
|||
|
/// </summary>
|
|||
|
private void SavePreconfiguratedChanelsNames()
|
|||
|
{
|
|||
|
File.WriteAllText("RTDDA/PNames.json", JsonConvert.SerializeObject(PreconfiguredChanelsNames));
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Get preconfigured chanels names
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public List<string> GetPreconfiguratedChanelsNames()
|
|||
|
{
|
|||
|
return PreconfiguredChanelsNames.ToList();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Save Preconfigured ChanelsNames
|
|||
|
/// </summary>
|
|||
|
/// <param name="ChN"></param>
|
|||
|
public void SetPreconfiguratedChanelsNames(List<string> ChN)
|
|||
|
{
|
|||
|
PreconfiguredChanelsNames = ChN;
|
|||
|
SavePreconfiguratedChanelsNames();
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
}
|
|||
|
}
|