13 KiB
source_files, generated_at, model, schema_version, sha256
| source_files | generated_at | model | schema_version | sha256 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
2026-04-17T15:29:37.643636+00:00 | zai-org/GLM-5-FP8 | 1 | 9bfb99ec27f09c88 |
DTS.Common.DAS.Concepts Module Documentation
1. Purpose
This module defines core interfaces, enums, and classes that represent fundamental Data Acquisition System (DAS) concepts for DTS hardware. It provides the abstract contracts for device capabilities including arming, triggering, calibration, GPIO control, real-time data capture, event downloading, and sensor linearization. The module serves as the foundational abstraction layer for various TSR (Test System Recorder) and HEADS device implementations, enabling polymorphic treatment of different hardware models while maintaining type-safe contracts.
2. Public Interface
Enums
AvailableArmModes
Namespace: DTS.Common.DAS.Concepts (also defined in DTS.DAS.Concepts)
| Member | Value |
|---|---|
LowPower |
0 |
CircularBuffer |
1 |
ArmStatus
Namespace: DTS.Common.DAS.Concepts (also defined in DTS.DAS.Concepts)
| Member | Value |
|---|---|
Disarming |
0 |
Disarmed |
1 |
Arming |
2 |
Armed |
3 |
Recording |
4 |
GPIOPin.Directions
Namespace: DTS.DAS.Concepts.GPIOPin
| Member | Value |
|---|---|
Output |
0x00 |
Peripheral |
0x01 |
Input |
0x02 |
InputPulledUp |
0x03 |
InputPulledDown |
0x04 |
Test.Module.Channel.Sensor.ShuntModeType
Namespace: DTS.Common.DAS.Concepts
| Member | Description |
|---|---|
Internal |
"Internal" |
External |
"External" |
Emulation |
"Emulation" |
None |
"None" |
Interfaces
ITriggerable
Namespace: DTS.DAS.Concepts
public interface ITriggerable
{
void Trigger();
}
Defines a contract for objects that can be triggered.
IArmable
Namespace: DTS.DAS.Concepts
public interface IArmable
{
void Arm();
void Disarm();
ArmStatus ArmStatus { get; }
AvailableArmModes ArmMode { get; }
}
Defines the contract for objects that can be armed and disarmed.
IDownloadEnabled
Namespace: DTS.DAS.Concepts
public interface IDownloadEnabled
{
TsrEvent[] EventList { get; }
double[][] GetEventData(TsrEvent Event, UInt64 FirstSample, UInt64 LastSample);
bool DataHasBeenDownloaded { get; }
}
Defines the contract for objects that support downloading event data.
IDataCollectionEnabled
Namespace: DTS.DAS.Concepts
public interface IDataCollectionEnabled : IArmable, ITriggerable, IDownloadEnabled
{
double[] AvailableSampleRates { get; }
double SampleRate { get; set; }
}
Aggregates IArmable, ITriggerable, and IDownloadEnabled with sample rate properties for rudimentary data collection.
ICalibratable
Namespace: DTS.DAS.Concepts
public interface ICalibratable
{
string SerialNumber { get; set; }
double Sensitivity { get; set; }
double BatteryVolts { get; set; }
double VddVolts { get; set; }
double SignalConditioningVolts { get; set; }
}
Defines properties required for rudimentary calibration.
IGpioEnabled
Namespace: DTS.DAS.Concepts
public interface IGpioEnabled
{
void SetGpio(uint Port, uint Pin, GPIOPin.Directions Direction, bool State);
bool GetGpio(uint Port, uint Pin);
}
Defines GPIO control functionality.
IRealtimeable
Namespace: DTS.DAS.Concepts
public interface IRealtimeable
{
void StartRealtime(double sampleRate);
void StopRealtime();
RealtimeSample[] GetRealtimeSamples();
}
Defines real-time data capture capability.
ILargeDataAware
Namespace: DTS.DAS.Concepts.DAS.Channel
public interface ILargeDataAware
{
bool IsDataArraySized { get; }
}
Indicates whether a data set is small enough to safely fit into an array for slice applications.
Classes
RealtimeSample
Namespace: DTS.DAS.Concepts
public class RealtimeSample
{
public double[] DataEU; // Indexes by channel
public UInt64 SampleNumber;
}
Represents a real-time data sample with engineering unit data per channel.
TsrEvent
Namespace: DTS.Common.DAS.Concepts and DTS.DAS.Concepts (defined in both)
public abstract class TsrEvent : Exceptional, ICloneable
{
public virtual UInt64 EventId { get; protected set; }
public virtual DateTime TimeStamp { get; protected set; }
public virtual string SerialNumber { get; protected set; }
public virtual string AlternateSerialNumber { get; protected set; }
public virtual double DurationSeconds { get; protected set; }
public virtual double MaxSampleRate { get; protected set; }
public virtual float TemperatureC { get; protected set; }
public virtual double PreTriggerSeconds { get; protected set; }
public abstract object Clone();
}
Abstract base class representing TSR event data and metadata. Inherits from Exceptional (defined externally) and implements ICloneable.
DataScaler.InvalidExcitationVoltageException
Namespace: DTS.Common.DAS.Concepts
public partial class DataScaler
{
public class InvalidExcitationVoltageException : Exception
{
public InvalidExcitationVoltageException();
public InvalidExcitationVoltageException(string msg);
public InvalidExcitationVoltageException(string msg, Exception innerEx);
protected InvalidExcitationVoltageException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context);
}
}
Exception class for invalid excitation voltage conditions. Part of a partial DataScaler class.
LinearizationFormula
Namespace: DTS.Common.DAS.Concepts
public class LinearizationFormula
{
// Properties
public NonLinearSLICEWareStyles NonLinearSliceWareStyle { get; set; }
public NonLinearStyles NonLinearStyle { get; set; }
public double PolynomialSensitivity { get; set; }
public double LinearizationExponent { get; set; }
public double MMPerV { get; set; }
public double MVAt0MM { get; set; }
public double Slope { get; set; }
public double Intercept { get; set; }
public double CalibrationFactor { get; set; }
public double ZeroPositionIntercept { get; set; }
public bool UsemVOverVForPolys { get; set; }
public double[] PolynomialCoefficients { get; set; }
public double[] PolynomialExponents { get; set; }
// Methods
public bool IsValid();
public void MarkValid(bool bValid);
public double GetCoefficient(double exponent);
public void SetCoefficient(double exponent, double coefficient);
public double GetLinearizedValue(double input, double excitation);
public string ToSLICEWareSerializeString();
public string ToSerializeString();
public void FromSerializeString(string s);
public void FromSerializeString(string s, CultureInfo culture);
public void FromTDCSerializeString();
public string ToDisplayString();
public string ToDisplayString(string nonlinearFormat);
// Serialization helpers (partial list)
public string ToIRTraccDiagnosticZeroString();
public string ToIRTraccCalFactorString();
public string ToIRTraccManualString();
public string ToIRTraccZeroMMmVString();
public string ToIRTraccAverageOverTimeString();
public string ToPolynomialString();
public string ToSLICEWarePolynomialString();
public void FromIRTraccCalFactorString(string s, CultureInfo culture);
public void FromIRTraccDiagnosticZeroString(string s, CultureInfo culture);
public void FromIRTraccManualString(string s, CultureInfo culture);
public void FromIRTraccZeroMMmVString(string s, CultureInfo culture);
public void FromIRTraccAverageOverTimeString(string s, CultureInfo culture);
public void FromPolynomialString(string s, CultureInfo culture);
}
Handles sensor linearization with support for multiple NonLinearStyles including Polynomial, IRTracc variants, and calibration factors. Supports serialization to/from SLICEWare and internal formats.
3. Invariants
-
EventId is 1-based: The
TsrEvent.EventIdproperty documentation explicitly states it is a 1-based identifier. -
Protected setters on TsrEvent: All properties on
TsrEventhaveprotected setaccessors, meaning derived classes can modify them but external code cannot. -
LinearizationFormula default style:
NonLinearStyledefaults toNonLinearStyles.Polynomialto avoid locking a specific zero-method (per comment referencing FB 10323). -
LinearizationFormula input handling: When
NonLinearStyleis notPolynomialand input is ≤ 0, the input is treated as 0.001 to handle noise/negative readings for IR-Tracc sensors. -
LinearizationFormula coefficient/exponent lists: Initialized with 4 elements (indices 0-3) by default, with exponents pre-set to [0, 1, 2, 3].
-
Shallow clone requirement:
TsrEvent.Clone()is documented to return a shallow copy.
4. Dependencies
External Dependencies (Inferred from imports)
| Dependency | Used By |
|---|---|
System |
IRealtimeable, TsrEvent, IDownloadEnabled, LinearizationFormula, DataScaler.InvalidExcitationVoltageException |
System.Collections.Generic |
LinearizationFormula |
System.ComponentModel |
ShuntModeType (for [Description] attribute) |
System.Text |
LinearizationFormula |
System.Globalization |
LinearizationFormula (via inline usage) |
System.Runtime.Serialization |
DataScaler.InvalidExcitationVoltageException |
DTS.Common.Utilities |
TsrEvent (inherits from Exceptional) |
DTS.Utilities |
IDownloadEnabled (inherits from Exceptional) |
DTS.Common.Enums.Sensors |
LinearizationFormula (for NonLinearStyles and NonLinearSLICEWareStyles enums) |
Consumers
Unknown from source alone. This module defines foundational interfaces and types that would be implemented by concrete device classes and consumed by higher-level application code.
5. Gotchas
Duplicate Definitions
AvailableArmModesenum is defined in bothDTS.Common.DAS.Concepts(file:AvailableArmModes.cs) andDTS.DAS.Concepts(file:IArmable.cs).ArmStatusenum is defined in bothDTS.Common.DAS.Concepts(file:ArmStatus.cs) andDTS.DAS.Concepts(file:IArmable.cs).TsrEventclass is defined in bothDTS.Common.DAS.Concepts(file:TsrEvent.cs) andDTS.DAS.Concepts(file:IDownloadEnabled.cs).
These duplicates may cause ambiguity or require extern alias configuration if both namespaces are imported.
Namespace Inconsistency
The module uses multiple root namespaces:
DTS.Common.DAS.ConceptsDTS.DAS.ConceptsDTS.DAS.Concepts.DAS.ChannelDTS.DAS.Concepts.GPIOPin
This suggests an incomplete refactoring or historical naming drift.
Incomplete GPIO Implementation Note
IGpioEnabled contains a TODO comment: "Well have to bring these in as soon as we figure out where to get that enum from." The GPIOPin.Directions enum is defined in a separate namespace (DTS.DAS.Concepts.GPIOPin), which may or may not resolve this.
Commented-Out Interface Members
IDownloadEnabled contains commented-out properties (MaximumStoredEventSizeSeconds, DownloadIncrementSamples, ChannelDescription, TimeOffsetMilliseconds) with a TODO questioning their universal applicability.
Historical Email Comments
IArmable.cs contains extensive historical email discussions about device types (NASCAR, TSRPRO, BlastTestTSR, TSRBasic, HEADSII, NGI) and multi-sample-rate handling. This is technical debt that should be removed from production code.
LinearizationFormula Serialization Format Changes
The polynomial serialization format differs between ToSLICEWarePolynomialString() (reverse order) and ToPolynomialString() (standard order). Additionally, IRTraccCalFactor is explicitly not supported in SLICEWare serialization.
Partial Class Dependencies
DataScaler.InvalidExcitationVoltageExceptionis a nested class within a partialDataScalerclass. The mainDataScalerimplementation is not present in these files.ShuntModeTypeis nested withinTest.Module.Channel.Sensor, which are all partial class containers. The main implementations are elsewhere.