15 KiB
source_files, generated_at, model, schema_version, sha256
| source_files | generated_at | model | schema_version | sha256 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
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,IInformationIComparable<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
-
Channel Configuration: A channel is considered "configured" if and only if
SerialNumberfield is populated (perIsConfigured()contract inIAnalogInputDASChannel). -
First Use Date:
FirstUseDateis only valid whenIsFirstUseDateSupportedistrue. Anullvalue indicates the hardware has not been used since calibration. -
Protocol Versioning: Commands must be checked via
IsCommandSupported()before execution onICommunicationimplementations, as protocol support varies by firmware version. -
SetupReader Requirement:
SetupReader()must be called whenever a socket is connected (per comment inICommunication). -
Diagnostics/Configuration State:
DiagnosticsHasBeenRunandConfigureHasBeenRunflags indicate whether these operations have been executed and should be checked before relying on diagnostic results. -
Phase Shift Calculation:
GetPhaseShiftSamples()returns 0 for most DAS types as phase delay is only known for specific hardware. -
Position Hierarchy: For devices on a SLICE6DB,
PositionOnDistributorandPositionOnChaintrack device location when individual SLICE6 devices are not shown in UI.
4. Dependencies
This module depends on:
DTS.Common.Enums- Core enumerationsDTS.Common.Enums.Communication- Communication-specific enumsDTS.Common.Enums.DASFactory- DAS factory enums includingDFConstantsAndEnums,MultiCastDeviceClassesDTS.Common.Enums.Hardware-HardwareTypes,ExcitationStatusDTS.Common.Enums.Sensors-SensorConstants.BridgeType,SensorConstants.CouplingModes,ExcitationVoltageOptions,DigitalInputModes,ZeroMethodTypeDTS.Common.Interface.Communication- Communication interfacesDTS.Common.Interface.Connection-IConnectioninterfaceDTS.Common.Interface.DASFactory.ARM- ARM-related interfacesDTS.Common.Interface.DASFactory.Config- Configuration interfacesDTS.Common.Interface.DASFactory.Diagnostics-IDiagnosticResult,IDiagnosDTS.Common.Interface.DASFactory.Download- Download interfacesDTS.Common.Interface.Sensors.SoftwareFilters-IFilterClassDTS.Common.Interface.StatusAndProgressBar-ActionCompleteDelegateDTS.Common.Utilities-SortableBindingList<T>System.Xml-XmlWriterfor 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
- SoftwareFilterClass Refactoring (IAnalog