Files
2026-04-17 14:55:32 -04:00

10 KiB
Raw Permalink Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DataPRO/IService/Classes/Arm/ArmCheckActions.cs
DataPRO/IService/Classes/Arm/ArmCheckResults.cs
DataPRO/IService/Classes/Arm/ArmStatus.cs
2026-04-16T03:59:53.800390+00:00 Qwen/Qwen3-Coder-Next-FP8 1 51c3cf5ed1e74c4d

Arm

Documentation: ARM Status and Pre-Arm Checks Module


1. Purpose

This module provides data structures and utilities for managing the ARM state of a Data Acquisition System (DAS) unit and for configuring/collecting pre-arm diagnostic checks. It enables the system to track real-time operational status (e.g., armed, triggered, faulted, recording) via ArmStatus, and to define and store results of diagnostic checks (e.g., battery voltage, sensor IDs, squib resistance) via ArmCheckActions and ArmCheckResults. It serves as the core data layer for the ArmingService, supporting safe arming workflows and post-test diagnostics.


2. Public Interface

ArmCheckActions

  • bool PerformBatteryVoltageCheck { get; set; }
    Flag indicating whether to perform a battery voltage diagnostic check.
  • bool PerformInputVoltageCheck { get; set; }
    Flag indicating whether to perform an input voltage diagnostic check.
  • bool PerformSensorIdCheck { get; set; }
    Flag indicating whether to verify sensor EIDs.
  • bool PerformEventLineCheck { get; set; }
    Flag indicating whether to check for shorts on the event line.
  • bool PerformSquibResistanceCheck { get; set; }
    Flag indicating whether to measure squib resistance.
  • bool PerformTiltSensorCheck { get; set; }
    Flag indicating whether to perform tilt sensor diagnostics.
  • bool PerformTemperatureCheck { get; set; }
    Flag indicating whether to perform temperature diagnostics.
  • bool PerformClockSyncCheck { get; set; }
    Flag indicating whether to verify clock synchronization status.
  • ArmCheckActions()
    Constructor initializes all check flags to false.

ArmCheckResults

  • Dictionary<int, string[]> SensorIds { get; set; }
    Maps channel index (int) to an array of sensor EIDs (strings) read from that channel.
  • Dictionary<int, double> SquibResistances { get; set; }
    Maps channel index (int) to measured squib resistance (Ω).
  • double?[] BatteryVoltage { get; set; }
    Array of optional battery voltage readings (mV), supporting multiple batteries per module (e.g., TDAS Pro rack).
  • double? InputVoltage { get; set; }
    Optional input voltage reading (mV).
  • bool? StartLineShorted { get; set; }
    Optional result indicating if the start line is shorted.
  • bool? EventLineShorted { get; set; }
    Optional result indicating if the event line is shorted.
  • short[] TiltSensorDataPre { get; set; }
    Raw pre-check tilt sensor ADC values.
  • double[] TiltDegrees { get; set; }
    Tilt angles (degrees) computed from TiltSensorDataPre.
  • Dictionary<byte, short[]> IndexedTiltSensorDataPre { get; set; } = new Dictionary<byte, short[]>();
    Indexed raw tilt data (key = device/module index).
  • Dictionary<byte, double[]> IndexedTiltDegrees { get; set; } = new Dictionary<byte, double[]>();
    Indexed tilt angles (key = device/module index).
  • float[] TemperaturesPre { get; set; }
    Raw temperature sensor readings (likely ADC counts or mV).
  • double[] Gains { get; set; }
    Channel gains used during diagnostics.
  • double[] ZeroData { get; set; }
    Zero-offset calibration data.
  • IDictionary<InputClockSource, bool> InputClockLocks { get; set; }
    Maps clock source type (InputClockSource) to lock status (true = locked).

ArmStatus

  • bool ReceivedInvalidModeDuringSetup { get; set; } = false;
    Indicates if InvalidMode error was received during setup; used as a heuristic to detect streaming mode.
  • void ClearTriggerCheckStatus()
    Resets trigger-related flags: IsTriggered, IsArmed, IsRecording, IsTriggerShorted, IsStartShorted.
  • ArmStatus()
    Default constructor.
  • ArmStatus(IArmStatusData status)
    Copy constructor from IArmStatusData interface; copies all properties.
  • bool IsArmed { get; set; }
    True if DAS is currently armed.
  • bool IsTriggered { get; set; }
    True if DAS has sensed a trigger event.
  • bool IsTriggerShorted { get; set; }
    True if trigger line is shorted during trigger check only.
  • bool IsStartShorted { get; set; }
    True if start line is shorted during trigger check only.
  • bool IsRecording { get; set; }
    True if DAS is currently recording samples.
  • bool IsFaulted { get; set; }
    True if DAS has faulted.
  • bool IsInRealtime { get; set; }
    True if DAS is in real-time mode.
  • bool IsInFlashWrite { get; set; }
    True if DAS is in flash write mode (G5).
  • bool IsUndefined { get; set; }
    True if ARM STAT READ returned no data.
  • bool IsInPostTestDiagnostics { get; set; }
    True if DAS is running post-test diagnostics.
  • double TimeRemainingSeconds { get; set; }
    Estimated seconds remaining in recording.
  • double PercentComplete { get; set; }
    Flash write progress percentage.
  • ulong TotalSamples { get; set; }
    Total samples to be recorded in the test.
  • ulong CurrentSample { get; set; }
    Current sample index being recorded.
  • uint SampleRate { get; set; }
    Current sample rate (Hz).
  • double? InputMilliVolts { get; set; }
    Input voltage (mV); auto-converts values > 100,000 from µV to mV.
  • double? BatteryMilliVolts { get; set; }
    Battery voltage (mV); auto-converts values > 100,000 from µV to mV.
  • int? EventNumber { get; set; }
    Current event number being recorded.
  • ushort? MaxEventsPossible { get; set; }
    Maximum number of events supported by the device (per issue #26817).
  • int RecordingMode { get; set; }
    Numeric recording mode identifier.
  • string FaultMessage { get; set; }
    Human-readable fault description (if any).
  • bool IsRearming { get; set; }
    True if DAS is in rearming state.
  • bool HasBeenRecording { get; set; }
    True if DAS has ever recorded during the current session.
  • double? TimeLeftInArm { get; set; }
    Time remaining in armed state (seconds).
  • static void SetArmStatus(IDASCommunication unit, IArmStatusData status, bool bSetInDb)
    Assigns status to unit.DASArmStatus. If bSetInDb is true and DB is connected, persists status to ARM.SetArmStatus stored procedure; logs exceptions via APILogger.

3. Invariants

  • InputMilliVolts and BatteryMilliVolts:
    Values > 100,000 are always divided by 1,000 to convert from µV to mV. Null values remain null.
  • TimeLeftInArm:
    No conversion is applied—values are stored directly as double.
  • ClearTriggerCheckStatus():
    Only resets trigger-related flags (IsTriggered, IsArmed, IsRecording, IsTriggerShorted, IsStartShorted). Does not affect IsFaulted, IsRecording, or other non-trigger flags.
  • ArmCheckActions:
    All check flags default to false; no validation ensures at least one check is enabled.
  • ArmCheckResults.SensorIds:
    Key is channel index (0-based), value is array of EIDs (strings) per channel.
  • ArmStatus.SetArmStatus(...):
    Does not throw exceptions; failures in DB persistence are silently logged via APILogger.

4. Dependencies

Imports/Usings

  • DTS.Common.Interface.DASFactory.Diagnostics → Provides IArmCheckActions, IArmCheckResults, IArmStatusData.
  • DTS.Common.Interface.DASFactory and DTS.Common.Interface.DASFactory.ARM → Provides IDASCommunication, IArmStatusData, InputClockSource.
  • DTS.Common → Provides logging utilities (e.g., APILogger).
  • DASFactoryDb.ARM → Provides ARM.SetArmStatus(...) stored procedure.
  • System.Collections.Generic, System → Standard .NET types.

Dependencies on this module

  • ArmingService.GetArmStatus(...) (referenced in ArmStatus summary) — not shown in source, but implied to be the primary consumer of ArmStatus.
  • Any code performing pre-arm diagnostics — uses ArmCheckActions to configure checks and ArmCheckResults to store results.
  • Database layer — calls ARM.SetArmStatus(...) via ArmStatus.SetArmStatus(...).

Dependencies of this module

  • DASFactoryDb.DbWrapper.Connected — checked before DB writes.
  • APILogger — used for exception logging in SetArmStatus.

5. Gotchas

  • InputMilliVolts/BatteryMilliVolts unit conversion:
    Values > 100,000 are assumed to be in µV and converted to mV. If a value is legitimately > 100,000 mV (e.g., 120,000 mV = 120 V), it will be incorrectly divided to 120 mV. This is likely a legacy assumption for µV inputs.
  • IsTriggerShorted vs IsTriggered:
    IsTriggerShorted is only set during TriggerCheck, while IsTriggered is set in many contexts. Confusing the two may lead to incorrect logic (e.g., mistaking a trigger event for a line short).
  • ReceivedInvalidModeDuringSetup heuristic:
    Used to detect streaming mode, but this is not a guaranteed or documented protocol behavior—may break if firmware changes.
  • ArmCheckResults.SensorIds key type:
    Key is int (channel index), but no validation ensures keys are non-negative or contiguous.
  • IndexedTiltSensorDataPre/IndexedTiltDegrees:
    Key is byte (device/module index), but no documentation clarifies how indices are assigned or whether duplicates are possible.
  • SetArmStatus(...) silently swallows DB errors:
    Exceptions during DB persistence are logged but do not propagate—callers may assume persistence succeeded.
  • ArmStatus copy constructor does not guard against null status:
    While it returns early on null, it does not clear the current instances properties—only copies non-null values from status.
  • No validation in ArmCheckActions:
    It is possible to configure no checks (all flags false), which may lead to unsafe arming if not handled upstream.

None identified beyond the above.