using DTS.Common.Interface.DASFactory;
using DTS.Common.Interface.DASFactory.Diagnostics;
using DTS.Common.Utilities.Logging;
using System;
namespace DTS.DASLib.Service.Classes.Diagnostics
{
public static class DiagnosticsResultActions
{
///
/// clears all diagnostics from all events and channels, and optionally clears from db
///
///
///
public static void ClearChannelDiagnosticsResults(IDASCommunication unit, bool bClearDb = true)
{
unit.ChannelDiagnosticsResults = new IDiagnosticResult[0];
unit.ChannelDiagnostics = new IDiagnosticActions[0];
if (!DASFactoryDb.DbWrapper.Connected || !bClearDb) { return; }
try
{
DASFactoryDb.Diagnostics.Diagnostics.ClearExistingDiagnosticsAllChannels(unit.RecordId);
}
catch (Exception ex)
{
APILogger.Log(ex);
}
}
///
/// sets the channel diagnostics, optionally writes to the db
///
///
///
///
public static void SetChannelDiagnosticsResults(IDASCommunication unit, IDiagnosticResult[] results, bool setInDb)
{
unit.ChannelDiagnosticsResults = results;
if (!DASFactoryDb.DbWrapper.Connected || !setInDb) { return; }
try
{
foreach (var result in results)
{
var moduleNumber = unit.DASInfo.MapDASChannelNumber2ModuleArrayIndex(result.DASChannelNumber);
var channelIndex = unit.DASInfo.MapDASChannelNumber2ModuleChannelNumber(result.DASChannelNumber);
var channel = unit.ConfigData.Modules[moduleNumber].Channels[channelIndex];
if (channel is AnalogInputDASChannel aic)
{
if (aic.DigitalInputChannel)
{
InsertDiagnosticsResultDigital(unit, aic, result);
}
else
{
InsertDiagnosticsResultAnalog(unit, aic, result);
}
}
else if (channel is OutputSquibChannel squib)
{
InsertDiagnosticsResultsSquib(unit, squib, result);
}
}
}
catch (Exception ex) { APILogger.Log(ex); }
}
///
/// writes a single digital result to the db
///
///
///
///
private static void InsertDiagnosticsResultDigital(IDASCommunication das, AnalogInputDASChannel aic,
IDiagnosticResult result)
{
try
{
DASFactoryDb.Diagnostics.Diagnostics.InsertDigitalDiagnosticResult(das.RecordId,
result.DASChannelNumber,
result.EventNumber,
result.DigitalInputActiveState);
}
catch (Exception ex)
{
APILogger.Log(ex);
}
}
///
/// writes a single analog result to the db
///
///
///
///
private static void InsertDiagnosticsResultAnalog(IDASCommunication das, AnalogInputDASChannel aic,
IDiagnosticResult result)
{
try
{
DASFactoryDb.Diagnostics.Diagnostics.InsertAnalogDiagnosticResult(
das.RecordId,
result.DASChannelNumber,
result.EventNumber,
result.ScalefactorMilliVoltsPerADC,
result.ExpectedExcitationMilliVolts,
result.MeasuredExcitationMilliVolts,
result.NegativeExcitation,
result.MeasuredOffsetMilliVolts,
result.MeasuredInternalOffsetMilliVolts,
result.AutoZeroPercentDeviation,
result.FinalOffsetADC,
result.RemovedOffsetADC,
result.RemovedInternalOffsetADC,
result.NoisePercentFullScale,
result.ShuntDeflectionFailed,
result.CalSignalCheckFailed,
result.MeasuredShuntDeflectionMv,
result.MeasuredCalSignalMv,
result.TargetCalSignalMv,
result.TargetGain,
result.MeasuredGain,
result.QueriedGain,
result.TargetShuntDeflectionMv,
result.BridgeResistance,
result.ZeroMVInADC,
result.WindowAverageADC);
}
catch (Exception ex)
{
APILogger.Log(ex);
}
}
///
/// writes a single squib diagnostic to the db
///
///
///
///
private static void InsertDiagnosticsResultsSquib(IDASCommunication das, OutputSquibChannel squib,
IDiagnosticResult result)
{
try
{
DASFactoryDb.Diagnostics.Diagnostics.InsertSquibDiagnosticResult(das.RecordId,
result.DASChannelNumber, result.EventNumber, result.SquibFireCurrentData,
result.SquibFireVoltageData, result.SquibFireTimeAxis, result.MeasuredDurationMS,
result.MeasuredDelayMS, result.SquibFirePassed, result.SquibDurationPassed, result.SquibDelayPassed,
result.SquibThreshold, result.SquibVoltageScaler, result.SquibCurrentScaler);
}
catch (Exception)
{
//for now just skip the logging
}
}
}
}