using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; namespace DASFactoryDb.Diagnostics { public static class Diagnostics { /// /// clears all diagnostic actions for all channels for a given das /// /// public static void ClearDiagnosticActionsAllChannels(int idasRecordId) { if (!DbWrapper.Connected) { return; } using (var cmd = DbWrapper.GetDASFactoryCommand()) { try { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "sp_DiagnosticActionsClear"; cmd.Parameters.Add(new SqlParameter("@IDASCommunicationRecordId", SqlDbType.Int) { Value = idasRecordId }); cmd.Parameters.Add(new SqlParameter("@DASChannelNumber", SqlDbType.Int) { Value = null }); var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorNumber); var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorMessage); cmd.ExecuteNonQuery(); DbWrapper.ProcessReturn(errorNumber, errorMessage); } finally { cmd.Connection.Dispose(); } } } public static void InsertDiagnosticAction(int dasRecordId, int dasChannelNumber, bool measureExcitation, bool measureOffset, bool checkDigitalState, bool measureInternalOffset, bool removeOffset, bool measureNoise, bool performShuntCheck, bool squibFireCheck, bool performVoltageInsertCheck, bool performCalSignalCheck, bool measureBridgeResistance ) { if (!DbWrapper.Connected) { return; } using (var cmd = DbWrapper.GetDASFactoryCommand()) { try { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "sp_DiagnosticsActionsInsert"; cmd.Parameters.Add(new SqlParameter("@IDASCommunicationRecordId", SqlDbType.Int) { Value = dasRecordId }); cmd.Parameters.Add(new SqlParameter("@DASChannelNumber", SqlDbType.Int) { Value = dasChannelNumber }); cmd.Parameters.Add( new SqlParameter("@MeasureExcitation", SqlDbType.Bit) { Value = measureExcitation }); cmd.Parameters.Add(new SqlParameter("@MeasureOffset", SqlDbType.Bit) { Value = measureOffset }); cmd.Parameters.Add( new SqlParameter("@CheckDigitalState", SqlDbType.Bit) { Value = checkDigitalState }); cmd.Parameters.Add(new SqlParameter("@MeasureInternalOffset", SqlDbType.Bit) { Value = measureInternalOffset }); cmd.Parameters.Add(new SqlParameter("@RemoveOffset", SqlDbType.Bit) { Value = removeOffset }); cmd.Parameters.Add(new SqlParameter("@MeasureNoise", SqlDbType.Bit) { Value = measureNoise }); cmd.Parameters.Add( new SqlParameter("@PerformShuntCheck", SqlDbType.Bit) { Value = performShuntCheck }); cmd.Parameters.Add(new SqlParameter("@SquibFireCheck", SqlDbType.Bit) { Value = squibFireCheck }); cmd.Parameters.Add(new SqlParameter("@PerformVoltageInsertCheck", SqlDbType.Bit) { Value = performVoltageInsertCheck }); cmd.Parameters.Add(new SqlParameter("@PerformCalSignalCheck", SqlDbType.Bit) { Value = performCalSignalCheck }); cmd.Parameters.Add(new SqlParameter("@MeasureBridgeResistance", SqlDbType.Bit) { Value = measureBridgeResistance }); var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorNumber); var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorMessage); var newId = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(newId); cmd.ExecuteNonQuery(); DbWrapper.ProcessReturn(errorNumber, errorMessage); } finally { cmd.Connection.Dispose(); } } } /// /// Clears all diagnostics/events results for all channels for a das /// /// public static void ClearExistingDiagnosticsAllChannels(int idasRecordId = -1) { if (!DbWrapper.Connected) { return; } using (var cmd = DbWrapper.GetDASFactoryCommand()) { try { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "sp_DiagnosticsResultsClear"; cmd.Parameters.Add(new SqlParameter("@IDASCommunicationRecordId", SqlDbType.Int) { Value = idasRecordId }); cmd.Parameters.Add(new SqlParameter("@DASChannelNumber", SqlDbType.Int) { Value = null }); cmd.Parameters.Add(new SqlParameter("@EventNumber", SqlDbType.Int) { Value = null }); var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorNumber); var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorMessage); cmd.ExecuteNonQuery(); DbWrapper.ProcessReturn(errorNumber, errorMessage); } finally { cmd.Connection.Dispose(); } } } public static void InsertAnalogDiagnosticResult(int iDASRecordId, int dasChannelNumber, int eventNumber, double scalefactorMilliVoltsPerADC, double expectedExcitationMilliVolts, double? measuredExcitationMilliVolts, bool negativeExcitation, double? measuredOffsetMilliVolts, double? measuredInternalOffsetMilliVolts, double? autoZeroPercentDeviation, short? finalOffsetADC, int? removedOffsetADC, int? removedInternalOffsetADC, double? noisePercentFullScale, bool shuntDeflectionFailed, bool calSignalCheckFailed, double? measuredShuntDeflectionMv, double? measuredCalSignalMv, double? targetCalSignalMv, double? targetGain, double? measuredGain, double? queriedGain, double? targetShuntDeflectionMv, double? bridgeResistance, double zeroMVInADC, double windowAverageADC) { if (!DbWrapper.Connected) { return; } using (var cmd = DbWrapper.GetDASFactoryCommand()) { try { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "sp_DiagnosticsResultsAnalogInsert"; cmd.Parameters.Add(new SqlParameter("@IDASCommunicationRecordId", SqlDbType.Int) { Value = iDASRecordId }); cmd.Parameters.Add(new SqlParameter("@DASChannelNumber", SqlDbType.Int) { Value = dasChannelNumber }); cmd.Parameters.Add(new SqlParameter("@EventNumber", SqlDbType.Int) { Value = eventNumber }); cmd.Parameters.Add(new SqlParameter("@ScalefactorMilliVoltsPerADC", SqlDbType.Decimal) { Value = scalefactorMilliVoltsPerADC }); cmd.Parameters.Add(new SqlParameter("@ExpectedExcitationMilliVolts", SqlDbType.Decimal) { Value = expectedExcitationMilliVolts }); cmd.Parameters.Add(new SqlParameter("@MeasuredExcitationMilliVolts", SqlDbType.Decimal) { Value = measuredExcitationMilliVolts }); cmd.Parameters.Add(new SqlParameter("@NegativeExcitation", SqlDbType.Bit) { Value = negativeExcitation }); cmd.Parameters.Add(new SqlParameter("@MeasuredOffsetMilliVolts", SqlDbType.Decimal) { Value = measuredOffsetMilliVolts }); cmd.Parameters.Add(new SqlParameter("@MeasuredInternalOffsetMilliVolts", SqlDbType.Decimal) { Value = measuredInternalOffsetMilliVolts }); cmd.Parameters.Add(new SqlParameter("@AutoZeroPercentDeviation ", SqlDbType.Decimal) { Value = autoZeroPercentDeviation }); cmd.Parameters.Add(new SqlParameter("@FinalOffsetADC", SqlDbType.SmallInt) { Value = finalOffsetADC }); cmd.Parameters.Add(new SqlParameter("@RemovedOffsetADC", SqlDbType.Int) { Value = removedOffsetADC }); cmd.Parameters.Add(new SqlParameter("@RemovedInternalOffsetADC", SqlDbType.Int) { Value = removedInternalOffsetADC }); cmd.Parameters.Add(new SqlParameter("@NoisePercentFullScale", SqlDbType.Decimal) { Value = noisePercentFullScale }); cmd.Parameters.Add(new SqlParameter("@ShuntDeflectionFailed", SqlDbType.Bit) { Value = shuntDeflectionFailed }); cmd.Parameters.Add(new SqlParameter("@CalSignalCheckFailed", SqlDbType.Bit) { Value = calSignalCheckFailed }); cmd.Parameters.Add(new SqlParameter("@MeasuredShuntDeflectionMv", SqlDbType.Decimal) { Value = measuredShuntDeflectionMv }); cmd.Parameters.Add(new SqlParameter("@MeasuredCalSignalMv", SqlDbType.Decimal) { Value = measuredCalSignalMv }); cmd.Parameters.Add(new SqlParameter("@TargetCalSignalMv", SqlDbType.Decimal) { Value = targetCalSignalMv }); cmd.Parameters.Add(new SqlParameter("@TargetGain", SqlDbType.Decimal) { Value = targetGain }); cmd.Parameters.Add(new SqlParameter("@MeasuredGain", SqlDbType.Decimal) { Value = measuredGain }); cmd.Parameters.Add(new SqlParameter("@QueriedGain", SqlDbType.Decimal) { Value = queriedGain }); cmd.Parameters.Add(new SqlParameter("@TargetShuntDeflectionMv", SqlDbType.Decimal) { Value = targetShuntDeflectionMv }); cmd.Parameters.Add(new SqlParameter("@BridgeResistance", SqlDbType.Decimal) { Value = bridgeResistance }); cmd.Parameters.Add(new SqlParameter("@ZeroMVInADC", SqlDbType.Decimal) { Value = zeroMVInADC }); cmd.Parameters.Add(new SqlParameter("@WINDOWAverageADC", SqlDbType.Decimal) { Value = windowAverageADC }); var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorNumber); var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorMessage); var newId = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(newId); cmd.ExecuteNonQuery(); DbWrapper.ProcessReturn(errorNumber, errorMessage); } finally { cmd.Connection.Dispose(); } } } public static void InsertSquibDiagnosticResult(int iDASRecordId, int dasChannelNumber, int eventNumber, double[] squibFireCurrentData, double[] squibFireVoltageData, double[] squibFireTimeAxis, double? measuredDurationMS, double? measuredDelayMS, bool? squibFirePassed, bool? squibDurationPassed, bool? squibDelayPassed, double squibThreshold, double squibVoltageScaler, double squibCurrentScaler) { if (!DbWrapper.Connected) { return; } using (var cmd = DbWrapper.GetDASFactoryCommand()) { try { //this was firing annoying exceptions when squibFireCurrent was null ... if (null == squibFireCurrentData) { return; } cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "sp_DiagnosticsResultsSquibInsert"; cmd.Parameters.Add(new SqlParameter("@IDASCommunicationRecordId", SqlDbType.Int) { Value = iDASRecordId }); cmd.Parameters.Add(new SqlParameter("@DASChannelNumber", SqlDbType.Int) { Value = dasChannelNumber }); cmd.Parameters.Add(new SqlParameter("@EventNumber", SqlDbType.Int) { Value = eventNumber }); var currentData = new List(8 * squibFireCurrentData.Length); var voltageData = new List(8 * squibFireVoltageData.Length); var timeAxis = new List(8 * squibFireTimeAxis.Length); foreach (var d in squibFireCurrentData) { currentData.AddRange(BitConverter.GetBytes(d)); } foreach (var d in squibFireVoltageData) { voltageData.AddRange(BitConverter.GetBytes(d)); } foreach (var d in squibFireTimeAxis) { timeAxis.AddRange(BitConverter.GetBytes(d)); } cmd.Parameters.Add(new SqlParameter("@MeasuredDurationMS", SqlDbType.Decimal) { Value = measuredDurationMS }); cmd.Parameters.Add(new SqlParameter("@MeasuredDelayMS", SqlDbType.Decimal) { Value = measuredDelayMS }); cmd.Parameters.Add(new SqlParameter("@SquibFirePassed", SqlDbType.Bit) { Value = squibFirePassed }); cmd.Parameters.Add(new SqlParameter("@SquibDurationPassed", SqlDbType.Bit) { Value = squibDurationPassed }); cmd.Parameters.Add(new SqlParameter("@SquibDelayPassed", SqlDbType.Bit) { Value = squibDelayPassed }); cmd.Parameters.Add(new SqlParameter("@SquibFireCurrentData", SqlDbType.VarBinary) { Value = currentData.ToArray() }); cmd.Parameters.Add(new SqlParameter("@SquibFireVoltageData", SqlDbType.VarBinary) { Value = voltageData.ToArray() }); cmd.Parameters.Add(new SqlParameter("@SquibFireTimeAxis", SqlDbType.VarBinary) { Value = timeAxis.ToArray() }); cmd.Parameters.Add(new SqlParameter("@SquibThreshold", SqlDbType.Decimal) { Value = squibThreshold }); cmd.Parameters.Add(new SqlParameter("@SquibVoltageScaler", SqlDbType.Decimal) { Value = squibVoltageScaler }); cmd.Parameters.Add(new SqlParameter("@SquibCurrentScaler", SqlDbType.Decimal) { Value = squibCurrentScaler }); var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorNumber); var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorMessage); var newId = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(newId); cmd.ExecuteNonQuery(); DbWrapper.ProcessReturn(errorNumber, errorMessage); } finally { cmd.Connection.Dispose(); } } } public static void InsertDigitalDiagnosticResult(int iDASRecordId, int dasChannelNumber, int eventNumber, bool digitalInputActiveState) { if (!DbWrapper.Connected) { return; } using (var cmd = DbWrapper.GetDASFactoryCommand()) { try { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "sp_DiagnosticsResultsDigitalInsert"; cmd.Parameters.Add(new SqlParameter("@IDASCommunicationRecordId", SqlDbType.Int) { Value = iDASRecordId }); cmd.Parameters.Add(new SqlParameter("@DASChannelNumber", SqlDbType.Int) { Value = dasChannelNumber }); cmd.Parameters.Add(new SqlParameter("@EventNumber", SqlDbType.Int) { Value = eventNumber }); cmd.Parameters.Add(new SqlParameter("@DigitalInputActiveState", SqlDbType.Bit) { Value = digitalInputActiveState }); var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorNumber); var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(errorMessage); var newId = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output }; cmd.Parameters.Add(newId); cmd.ExecuteNonQuery(); DbWrapper.ProcessReturn(errorNumber, errorMessage); } finally { cmd.Connection.Dispose(); } } } } }