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

15 KiB

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
Common/DTS.CommonCore/Interface/DASFactory/IAutoArmed.cs
Common/DTS.CommonCore/Interface/DASFactory/ITiltSensorCalAware.cs
Common/DTS.CommonCore/Interface/DASFactory/IRangeBandwidthLimited.cs
Common/DTS.CommonCore/Interface/DASFactory/IAutoArmStatus.cs
Common/DTS.CommonCore/Interface/DASFactory/ITimeSynchronization.cs
Common/DTS.CommonCore/Interface/DASFactory/IConnectedEthernetDevice.cs
Common/DTS.CommonCore/Interface/DASFactory/IDASConfigurationArg.cs
Common/DTS.CommonCore/Interface/DASFactory/IRealtime.cs
Common/DTS.CommonCore/Interface/DASFactory/IUDPQATSEntry.cs
Common/DTS.CommonCore/Interface/DASFactory/IDASFactory.cs
Common/DTS.CommonCore/Interface/DASFactory/ICommunication.cs
Common/DTS.CommonCore/Interface/DASFactory/IDiscoveredDevice.cs
Common/DTS.CommonCore/Interface/DASFactory/IAnalogInputDASChannel.cs
Common/DTS.CommonCore/Interface/DASFactory/IDASCommunication.cs
2026-04-16T12:19:30.502497+00:00 zai-org/GLM-5-FP8 1 5d1420792c49604c

DASFactory Interfaces Documentation

1. Purpose

This module defines the core abstraction layer for the Data Acquisition System (DAS) Factory pattern. It provides interfaces for device discovery, hardware communication, channel configuration, real-time data streaming, and diagnostics across multiple DAS hardware types (SLICE, TDAS, TSR, etc.). The interfaces enable polymorphic treatment of diverse hardware while exposing type-specific capabilities through optional interface implementation. This module serves as the contract layer between high-level application services and low-level hardware drivers.


2. Public Interface

IAutoArmed

bool AutoArmed { get; set; }

Simple marker interface for auto-arming capability.

ITiltSensorCalAware

double[] TiltSensorCals { get; }

Exposes tilt sensor calibration values. Returns an array of calibration coefficients.

IRangeBandwidthLimited

bool RangeBandwidthLimited { get; }

Read-only flag indicating if the device has range/bandwidth limitations applied.

IAutoArmStatus

DFConstantsAndEnums.CommandStatus AutoArmStatus { get; set; }

Tracks the command status of auto-arm operations using DFConstantsAndEnums.CommandStatus enum.

ITimeSynchronization

bool SupportsTimeSynchronization { get; }
DateTime SystemBaseTime { get; }

Indicates time synchronization support and provides the system base time reference.

IConnectedEthernetDevice

string MACAddress { get; }
int Port { get; }
string SerialNumber { get; set; }

Represents an ethernet-connected device with network identification properties.

IDASConfigurationArg

IDASCommunication DAS { get; }
bool BlankConfigurationRead { get; }
bool ConfigurationFailedValidation { get; }

Argument interface for configuration events. Used per comment "17872 Use DASConfig XMLs on disk when performing an emergency download with DAS that have blank filestore(s)".

IRealTime

List<int> RealtimeDASChannels { get; set; }
List<double> TiltAxisData { get; set; }
string UDPStreamAddress { get; }

Real-time data streaming interface. TiltAxisData provides Slice6 Axis 1/2/3 (X/Y/Z) tilt in degrees. UDPStreamAddress provides the S6/S6A realtime UDP stream endpoint.

IUDPQATSEntry

Extensive interface for UDP QATS (Quick Acquisition and Telemetry System) entries:

string ResponseHostMac { get; }
string ResponseClientMacAddress { get; }
string SerialNumber { get; }
byte ArmState { get; }
byte ArmMode { get; }
byte Started { get; }
byte Triggered { get; }
byte FaultFlags { get; }
uint SampleRate { get; }
ulong TotalSamples { get; }
ulong CurrentSample { get; }
ushort EventNumber { get; }
ulong FaultSampleNumber { get; }
ushort LegacyFaultFlags { get; }
float InputVoltage { get; }
float BackupVoltage { get; }
float BatterySOC { get; }
ulong EstimateMaxSamples { get; }
short TiltSensorCh1 { get; }
short TiltSensorCh2 { get; }
short TiltSensorCh3 { get; }
float SysTempC { get; }
byte SyncClockEnable { get; }
byte ADCExtClockSyncEnable { get; }
byte SyncClockStatus { get; }
byte ADCExtClockSyncStatus { get; }
ulong EventTriggerSample { get; }
float[] ChannelOffsetMV { get; }
float[] ShuntDeviationPercent { get; }
DateTime Timestamp { get; }

IDASFactory

Primary factory interface for DAS device management:

bool PingAll();
string Language { get; set; }
void TakeOwnership();
bool AllowSDBCommandPort { get; set; }
double S6ConnectNewTimeout { get; set; }
string[] SliceDBHostNames { get; set; }
string[] GetConnectedDevices();
string[] TDASHostNames { get; set; }
string[] TDASSerialPortNames { get; set; }
string TDASSerialRackSerialNumber { get; set; }
List<IDASCommunication> GetDASList();
List<IDASCommunication> GetSortedDASList();
List<ICommunication> GetDevList();
void DetachAllDevices(bool detachUSB = false);
void Refresh(ActionCompleteDelegate action);
int MultiCastAutoDiscoveryDefaultTimeoutMS { get; set; }
SortableBindingList<IDiscoveredDevice> AutoDiscoverMulticast(bool discoverParents = true);

ICommunication

Low-level communication interface extending IComparable<ICommunication> and IComparable<string>:

IConnection Transport { get; set; }
void SetupReader();
int ReceiveBufferSize { get; set; }
string SerialNumber { get; set; }
string FirmwareVersion { get; set; }
byte ProtocolVersion { get; set; }
ICommunication_DASInfo DASInfo { get; set; }
Dictionary<DFConstantsAndEnums.ProtocolLimitedCommands, byte> MinimumProtocols { get; set; }
void InitMinProto();
bool IsCommandSupported(DFConstantsAndEnums.ProtocolLimitedCommands command);
byte GetMinProto(DFConstantsAndEnums.ProtocolLimitedCommands command);
event EventHandler OnDisconnected;
string ConnectString { get; }
bool Connected { get; }
void Connect(string ConnectString, CommunicationConstantsAndEnums.CommunicationCallback Callback, object CallbackObject, int CallbackTimeout, string ipAddress);
void Disconnect(bool reuseSocket, CommunicationConstantsAndEnums.CommunicationCallback Callback, object CallbackObject, int CallbackTimeout);
void Close(int Timeout);
void Flush(int Timeout);
bool ExecuteIsBusy { get; set; }
void Execute(byte[] byteData, CommunicationConstantsAndEnums.CommunicationCallback Callback, object CallbackObject, int CallbackTimeout);
void PseudoExecute(byte[] byteData, CommunicationConstantsAndEnums.CommunicationCallback Callback, object CallbackObject, int CallbackTimeout);
byte[] SyncExecute(byte[] byteData, int Timeout);
void Cancel();
void ForceCancel();
bool IsCanceled();
void ClearCancel();
ManualResetEvent CancelEvent { get; }

IDiscoveredDevice

Interface for multicast-discovered devices:

string Serial { get; set; }
MultiCastDeviceClasses DevClass { get; set; }
string Mac { get; set; }
IDiscoveredDevice Parent { get; set; }
bool IsParent(IDiscoveredDevice possibleChild);
int GetPort(IDiscoveredDevice device);
int GetSlot(IDiscoveredDevice child, Dictionary<string, IDiscoveredDevice> lookup);
int GetSlotOnPort(IDiscoveredDevice child, Dictionary<string, IDiscoveredDevice> lookup);
bool IsModule { get; set; }
int Port { get; set; }
int PositionOnDistributor { get; set; }
int PositionOnChain { get; set; }
bool Dhcp { get; set; }
string Ip { get; set; }
string Subnet { get; set; }
string Gateway { get; set; }
string Dns { get; set; }
bool Connected { get; set; }
string ConnectedIp { get; set; }
string ConnectedHost { get; set; }
ushort SystemId { get; set; }
string Location { get; set; }
string FirmwareVersion { get; set; }  // Format: [Product Name]-[FW/BL]-[REL/DBG]-[Board #]-[FW Ver Name]
string BuildId { get; set; }
IConnectedEthernetDevice[] Connections { get; set; }

IAnalogInputDASChannel

Comprehensive interface for analog input channel configuration (100+ members). Key properties include:

Bridge Configuration:

SensorConstants.BridgeType TypeOfBridge { get; set; }
SensorConstants.BridgeType[] SupportedBridges { get; set; }
double BridgeResistanceOhms { get; set; }

Sensor Properties:

double SensorCapacityEU { get; set; }
double SensorCapacity { get; set; }
string SensorPolarity { get; set; }
double DesiredRangeWithHeadroomEU { get; set; }
double SensitivityMilliVoltsPerEU { get; set; }
double SensitivityMilliVoltsPerEUNormalized { get; }
bool IsProportionalToExcitation { get; set; }
bool IsInverted { get; set; }

Channel Identification:

string OriginalChannelName { get; set; }
string ChannelName2 { get; set; }
string ChannelId { get; set; }
string ChannelGroupName { get; set; }
string HardwareChannelName { get; set; }

Excitation:

ExcitationVoltageOptions.ExcitationVoltageOption Excitation { get; set; }
ExcitationVoltageOptions.ExcitationVoltageOption[] SupportedExcitation { get; set; }
bool IsSupported(ExcitationVoltageOptions.ExcitationVoltageOption o);

Digital Input:

DigitalInputModes[] SupportedDigitalInputModes { get; set; }
DigitalInputModes DigitalMode { get; set; }
string DIUnits { get; set; }
bool DigitalInputChannel { get; set; }

Zero Configuration:

ZeroMethodType ZeroMethod { get; set; }
double ZeroAverageStartSeconds { get; set; }
double ZeroAverageStopSeconds { get; set; }
double InitialEU { get; set; }
string InitialOffset { get; set; }

Diagnostics:

bool ShuntIsEnabled { get; set; }
int ShuntTargetADC { get; set; }
bool VoltageInsertionCheckEnabled { get; set; }
bool RemoveOffset { get; set; }
bool VerifyOffset { get; set; }
double OffsetToleranceLowMilliVolts { get; set; }
double OffsetToleranceHighMilliVolts { get; set; }
IDiagnosticResult Diagnostics { get; }
IDiagnosticResult DiagnosticInformation { get; }

Level Triggering:

double? TriggerBelowThresholdEu { get; set; }
double? TriggerAboveThresholdEu { get; set; }
bool AlreadyLevelTriggered { get; set; }
double MeasuredEULevelTriggerCheck { get; set; }

XML Serialization:

void WriteElementEnd(XmlWriter writer);
void WriteXml(XmlWriter writer);
void WriteXmlCRC32(XmlWriter writer);
string GetSupportedExcitationSerialized();
string GetSupportedDigitalInputModesSerialized();
string GetSupportedBridgesSerialized();

IDASCommunication

Primary interface for DAS unit interaction. Extends multiple capability interfaces:

  • IConfiguration, IDiagnos, ITriggerCheck, IRealTime, IArmStatus, IDownload, IInformation
  • IComparable<IDASCommunication>, IDisposable, IAutoArmStatus, IAutoArmed, IRangeBandwidthLimited, ITimeSynchronization

Key Properties:

ExcitationStatus ExcitationStatus { get; set; }
DateTime? FirstUseDate { get; set; }
bool IsFirstUseDateSupported { get; set; }
bool IsStreamingSupported { get; set; }
HardwareTypes GetHardwareType();
int RecordId { get; set; }
string SerialNumber { get; set; }
string FirmwareVersion { get; }
bool DiagnosticsHasBeenRun { get; set; }
bool ConfigureHasBeenRun { get; set; }
string MACAddress { get; set; }
string[] DownstreamMACAddresses { get; set; }

Voltage Thresholds:

float InputLowVoltage { get; set; }
float InputMediumVoltage { get; set; }
float InputHighVoltage { get; set; }
float BatteryLowVoltage { get; set; }
float BatteryMediumVoltage { get; set; }
float BatteryHighVoltage { get; set; }
double MinimumValidInputVoltage { get; set; }
double MaximumValidInputVoltage { get; set; }
double MinimumValidBatteryVoltage { get; set; }
double MaximumValidBatteryVoltage { get; set; }

Channel & Memory:

int NumberOfConfiguredChannels();
int NumberOfChannels();
long MaxMemory();
int MaxModules { get; set; }

Sample Rates:

uint MinSampleRate();
uint MaxSampleRate(int numberOfConfiguredChannels);
uint MaxAAFilterRate();

Capability Queries:

bool SupportsAutoArm();
bool SupportsLevelTrigger();
bool SupportsRealtime();
bool SupportsMultipleEvents();
bool SupportsTriggerInversion();
bool SupportsStartInversion();
bool SupportsHardwareInputCheck();
bool SupportsMultipleSampleRealtime();
bool SupportsIndividualChannelRealtimeStreaming { get; }
bool InvertTrigger { set; }
bool InvertStart { get; set; }
bool IgnoreShortedStart { get; set; }
bool IgnoreShortedTrigger { get; set; }

Hardware Type Checks:

bool IsEthernetDistributor();
bool IsSlice6Distributor();
bool IsBattery();
bool IsTSRAIR();
bool IsSlice6Air();
bool ControlsDAQ();
bool IsStreamingSupported { get; set; }

Operations:

void ReadFirstUseDate();
void SetIsStreamingSupported(bool supported = false);
bool ConnectionCheck();
double[] GetNominalRanges(SensorConstants.BridgeType bridge);
bool CheckAAF(float rate);
bool RequireDiagnosticRateMatchSampleRate();
ulong GetPhaseShiftSamples(uint ModuleIndex, double ActualSampleRate, uint HardwareAAF, ulong originalT0);
bool GetCanCheckArmStatus();

3. Invariants

  1. Channel Configuration: A channel is considered "configured" if and only if SerialNumber field is populated (per IsConfigured() contract in IAnalogInputDASChannel).

  2. First Use Date: FirstUseDate is only valid when IsFirstUseDateSupported is true. A null value indicates the hardware has not been used since calibration.

  3. Protocol Versioning: Commands must be checked via IsCommandSupported() before execution on ICommunication implementations, as protocol support varies by firmware version.

  4. SetupReader Requirement: SetupReader() must be called whenever a socket is connected (per comment in ICommunication).

  5. Diagnostics/Configuration State: DiagnosticsHasBeenRun and ConfigureHasBeenRun flags indicate whether these operations have been executed and should be checked before relying on diagnostic results.

  6. Phase Shift Calculation: GetPhaseShiftSamples() returns 0 for most DAS types as phase delay is only known for specific hardware.

  7. Position Hierarchy: For devices on a SLICE6DB, PositionOnDistributor and PositionOnChain track device location when individual SLICE6 devices are not shown in UI.


4. Dependencies

This module depends on:

  • DTS.Common.Enums - Core enumerations
  • DTS.Common.Enums.Communication - Communication-specific enums
  • DTS.Common.Enums.DASFactory - DAS factory enums including DFConstantsAndEnums, MultiCastDeviceClasses
  • DTS.Common.Enums.Hardware - HardwareTypes, ExcitationStatus
  • DTS.Common.Enums.Sensors - SensorConstants.BridgeType, SensorConstants.CouplingModes, ExcitationVoltageOptions, DigitalInputModes, ZeroMethodType
  • DTS.Common.Interface.Communication - Communication interfaces
  • DTS.Common.Interface.Connection - IConnection interface
  • DTS.Common.Interface.DASFactory.ARM - ARM-related interfaces
  • DTS.Common.Interface.DASFactory.Config - Configuration interfaces
  • DTS.Common.Interface.DASFactory.Diagnostics - IDiagnosticResult, IDiagnos
  • DTS.Common.Interface.DASFactory.Download - Download interfaces
  • DTS.Common.Interface.Sensors.SoftwareFilters - IFilterClass
  • DTS.Common.Interface.StatusAndProgressBar - ActionCompleteDelegate
  • DTS.Common.Utilities - SortableBindingList<T>
  • System.Xml - XmlWriter for serialization

What depends on this module:

Cannot be determined from source alone, but IDASCommunication documentation states it is "the most used data structure in the API" with nearly all hardware services taking List<IDASCommunication> as a parameter.


5. Gotchas

  1. SoftwareFilterClass Refactoring (IAnalog