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

13 KiB
Raw Permalink Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DataPRO/SensorDB/StreamInputSettingDefaults.cs
DataPRO/SensorDB/FactorySensorModel.cs
DataPRO/SensorDB/ThermocouplerSetting.cs
DataPRO/SensorDB/DigitalOutputDefaults.cs
DataPRO/SensorDB/CANSetting.cs
DataPRO/SensorDB/StreamInputSetting.cs
DataPRO/SensorDB/StreamOutputSetting.cs
DataPRO/SensorDB/CanSettingDefaults.cs
DataPRO/SensorDB/StringResources.Designer.cs
DataPRO/SensorDB/SensorRange.cs
DataPRO/SensorDB/UartSetting.cs
DataPRO/SensorDB/DigitalInputSensorDefault.cs
DataPRO/SensorDB/SquibSettingDefaults.cs
DataPRO/SensorDB/SquibSetting.cs
DataPRO/SensorDB/UartSettingDefaults.cs
DataPRO/SensorDB/DigitalOutputSetting.cs
DataPRO/SensorDB/SensorDBBase.cs
2026-04-16T03:47:59.601565+00:00 Qwen/Qwen3-Coder-Next-FP8 1 2cf9d8723752dc92

Documentation: DTS.SensorDB Module — Sensor Configuration Defaults and Settings


1. Purpose

This module provides a centralized abstraction for managing sensor-specific default configurations and persistent settings in the DataPRO system. It defines concrete types for various sensor input/output types (e.g., UDP stream, CAN, UART, digital I/O, squib, thermocouple), encapsulates their default values, and offers static methods to load, validate, commit, and restore defaults—either per-user (via TestSetupDefaults) or globally (via SettingsDB). The module serves as the bridge between high-level UI/configuration logic and low-level database/storage layers (DbOperations, SensorsCollection), ensuring consistent handling of sensor metadata, calibration parameters, and operational modes.


2. Public Interface

Classes

StreamInputSettingDefaults

  • string UDPAddress { get; set; }
    Gets/sets the UDP address for stream input. Backed by _defaultStreamInput.StreamInUDPAddress.
  • bool Validate()
    Returns true if UDPAddress starts with "udp" (case-insensitive) and is a well-formed absolute URI; otherwise false.
  • static void CommitChange(StreamInputSettingDefaults settingDefaults, int userID)
    Commits UDPAddress to user-specific settings using TestSetupDefaults.SetUserSetting with key PropertyEnums.PropertyIds.DefaultUDPStreamAddress.
  • static StreamInputSettingDefaults GetStreamInputSettingsDefault(int userID)
    Loads StreamInUDPAddress from user settings via TestSetupDefaults.GetUserSettingValueString, wraps it in a new SensorData, and returns a StreamInputSettingDefaults instance.
  • static StreamInputSettingDefaults GetStreamInputSettingsDefault(string user)
    Retrieves a sensor by serial number SensorConstants.TEST_SPECIFIC_STREAM_IN_SERIAL from SensorsCollection.SensorsList, wraps it in a SensorData, and returns a StreamInputSettingDefaults instance.

DigitalOutputDefaults

  • DigitalOutputModes OutputMode { get; set; }
    Gets/sets digital output mode via _defaultOut.DigitalOutputMode.
  • DigitalOutputModes[] AvailableModes { get; }
    Returns fixed array: { CCNC, CCNO, FVHL, FVLH }.
  • double DelayMS { get; set; }
    Gets/sets DigitalOutputDelayMS.
  • bool LimitDuration { get; set; }
    Gets/sets DigitalOutputLimitDuration; raises OnPropertyChanged("LimitDuration").
  • double DurationMS { get; set; }
    Gets/sets DigitalOutputDurationMS.
  • static void CommitChange(DigitalOutputDefaults settingDefaults, string user)
    Commits _defaultOut (cast to SensorData) via SensorsCollection.SensorsList.Commit.
  • static DigitalOutputDefaults GetDigitalOutDefault(string user)
    Retrieves sensor by serial number SensorConstants.TEST_SPECIFIC_DIGITAL_OUT_SERIAL, wraps in ISensorData, and returns DigitalOutputDefaults.

CanSettingDefaults

  • Properties: IsFD, ArbBaseBitrate, ArbBaseSJW, DataBitrate, DataSJW, FileType — all get/set via _defaultCans corresponding fields.
  • bool Validate()
    Always returns true.
  • static void CommitChange(CanSettingDefaults settingDefaults, int userID)
    Commits each property to user settings using TestSetupDefaults.SetUserSetting with keys from PropertyEnums.PropertyIds.DefaultCAN*.
  • static CanSettingDefaults GetCanSettingsDefault(int userID)
    Loads all CAN properties from user settings via TestSetupDefaults.GetUserSettingValue*, wraps in SensorData, and returns CanSettingDefaults.
  • static void RestoreDefaults(ICanSettingDefaults sensorDefaults)
    Resets all properties to constants from EmbeddedSensors (e.g., CANISFD_DEFAULT, CANFD_ARB_BASE_BITRATE_DEFAULT, etc.).

UartSettingDefaults

  • Properties: BaudRate, DataBits, StopBits, Parity, FlowControl, DataFormat.
  • StopBits[] AvailableStopBits { get; }
    { None, One, OnePointFive, Two }.
  • Parity[] AvailableParities { get; }
    { None, Odd, Even, Mark, Space }.
  • Handshake[] AvailableFlowControls { get; }
    { None }FlowControl is hardcoded to Handshake.None per comment //FB 30486.
  • bool Validate()
    Always returns true.
  • static void CommitChange(UartSettingDefaults settingDefaults, int userID)
    Commits all properties to user settings via TestSetupDefaults.SetUserSetting.
  • static UartSettingDefaults GetUartSettingsDefault(int userID)
    Loads properties from user settings, parses enums (StopBits, Parity, DataFormat) from strings, wraps in SensorData, returns instance.
  • static void RestoreDefaults(IUartSettingDefaults sensorDefaults)
    Resets to constants from UARTRecord and EmbeddedSensors.

DigitalInputSensorDefault

  • double ConstantCurrentBreakpointADC { get; set; }
    Breakpoint for CCNO/CCNC modes.
  • double VoltageBreakpointADC { get; set; }
    Breakpoint for THL/TLH modes.
  • bool DisplaySPDADC { get; set; }
    Whether to display analog SLICE PRO DIGITAL ADC data.
  • bool Validate()
    Always returns true.
  • static IDigitalInputDefaults GetDigitalInputDefaults(string user)
    Loads breakpoint values and DisplaySPDADC from SettingsDB with fallback defaults from DTS.Common.Constant.DigitalInputs.
  • static void Save(IDigitalInputDefaults defaults)
    Persists values to SettingsDB and updates corresponding static fields in DTS.Common.Constant.DigitalInputs.
  • static void RestoreDefaults(IDigitalInputDefaults sensorDefaults)
    Resets to default constants from DTS.Common.Constant.DigitalInputs.

SquibSettingDefaults

  • Properties: ToleranceLowDefault, ToleranceHighDefault, OutputCurrentDefault, MeasurementTypeDefault, FireModeDefault, LimitDurationDefault, FireDurationMS, FireDelayMS.
  • SquibFireMode[] AvailableModes { get; }
    { CAP, CONSTANT }.
  • bool IsConstantCurrent { get; }
    true if FireModeDefault == SquibFireMode.CONSTANT.
  • bool ToleranceValid { get; }
    true if ToleranceLowDefault < ToleranceHighDefault.
  • bool Validate()
    Returns ToleranceValid.
  • static void CommitChange(SquibSettingDefaults settingDefaults, string user)
    Commits _defaultSquib (cast to SensorData) via SensorsCollection.SensorsList.Commit.
  • static SquibSettingDefaults GetSquibSettingsDefault(string user)
    Retrieves sensor by serial number SensorConstants.TEST_SPECIFIC_SQUIB_SERIAL, wraps in ISensorData, returns instance.

ThermocouplerSetting, CanSetting, StreamInputSetting, StreamOutputSetting, UartSetting, DigitalOutputSetting, SquibSetting

All are concrete SensorData subclasses with:

  • SetDefaults(SensorData sd) — static method that initializes sensor metadata (e.g., Bridge, Manufacturer, Model, BridgeResistance, SupportedExcitation, etc.) to type-specific defaults.
  • Commit(SensorData setting) — static method that calls SetDefaults, wraps in a record type (ICANRecord, IStreamInputRecord, etc.), invokes DbOperations.Sensors*UpdateInsert, and sets setting.DatabaseId on success (hr == 0).
  • Constructors:
    • Default (: base())
    • Copy (: base(copy))
    • Record-based (ICANRecord, IStreamInputRecord, ISquibDbRecord, etc.) — populates fields from database record; logs exceptions via APILogger.

SensorRange

  • double Low, Medium, High — range values.
  • SensorRange(string value)
    Parses comma-separated string (e.g., "1.0,2.0,3.0"); throws InvalidDataException if not exactly 3 values.
  • string ToSerializeString()
    Returns "Low,Medium,High" using invariant culture.
  • SensorRange(XElement elem, string prefix, string tblName, string id)
    Parses <prefix-SensorRange> element with Low, Medium, High attributes; throws if missing.
  • XElement ToXElement(string prefix)
    Creates <prefix-SensorRange> with attributes.
  • void Update(XElement elem, string prefix)
    Updates existing elements attributes.

FactorySensorModel

  • static SensorModel CreateModelFromSensor(SensorData sd, SensorCalibration sc, User currentUser)
    Copies all relevant fields from sd and sc into a new SensorModel, including LastModified = DateTime.Now, LastUpdatedBy = currentUser.UserName.

SensorDBBase

  • static XElement GetTagValue(XElement elem, string tag, string id, string TableName)
    Returns element; throws if missing.
  • static XElement GetTagValueSafe(XElement elem, string tag, string id, string TableName)
    Returns element or null.
  • static void GetValue<T>(...) — generic overloads to extract values (string, int, double, bool, enums like SensorStatus, BridgeType, ShuntMode, ExcitationVoltageOption, FilterClassType, ZeroMethodType) from XML elements, with safe parsing and fallbacks (e.g., double.NaN, ExcitationVoltageOption.UndefinedVolt5).

3. Invariants

  • StreamInputSettingDefaults.UDPAddress must be a well-formed absolute URI starting with "udp" (case-insensitive) for Validate() to return true.
  • SquibSettingDefaults.ToleranceValid requires ToleranceLowDefault < ToleranceHighDefault.
  • DigitalOutputDefaults.FlowControl is always Handshake.None (hardcoded per comment).
  • UartSettingDefaults.FlowControl is always Handshake.None (hardcoded per comment).
  • All *Setting types call SetDefaults(...) during construction and Commit(...), ensuring consistent metadata (e.g., Bridge, Manufacturer, Model) before persistence.
  • SensorDBBase.GetValue<T> methods are designed to be resilient: enums parse with fallbacks, double parsing falls back to NaN, and XML parsing throws descriptive exceptions.

4. Dependencies

Dependencies of this module:

  • DTS.Common.*:
    • DTS.Common.Base.BasePropertyChanged (base for property-change-aware classes)
    • DTS.Common.Enums.* (ExcitationVoltageOptions, DigitalOutputModes, SquibFireMode, BridgeType, ShuntMode, etc.)
    • DTS.Common.Interface.Sensors (ISensorData, IThermocouplerRecord, ICANRecord, etc.)
    • DTS.Common.Classes.Sensors (SensorData, SensorCalibration, SensorModel)
    • DTS.Common.Storage (DbOperations, CANRecord, StreamInputRecord, etc.)
    • DTS.Common.Utilities.Logging (APILogger)
    • DTS.Common.Constant.* (DigitalInputs, EmbeddedSensors)
  • DTS.Slice.Users.UserSettings (TestSetupDefaults, PropertyEnums)
  • DTS.Slice.Users (User)
  • DTS.SensorDB.SensorsCollection (used in DigitalOutputDefaults, SquibSettingDefaults, DigitalOutputSetting)
  • System.*: System.Xml.Linq, System.IO.Ports, System.Data, System.Data.SqlClient

Dependencies on this module:

  • UI/configuration layers likely consume *SettingDefaults types to populate forms and commit changes.
  • DbOperations and SensorsCollection depend on record types (*Record) defined in DTS.Common.Storage (not shown here), which are instantiated by *Setting.Commit(...).

5. Gotchas

  • StreamInputSettingDefaults.Validate() only checks UDPAddress format; it does not verify network reachability or correctness of port/protocol beyond "udp" prefix.
  • CanSettingDefaults.Validate() and others (e.g., UartSettingDefaults, DigitalInputSensorDefault) always return true—no validation logic is implemented beyond SquibSettingDefaults.
  • Hardcoded FlowControl = Handshake.None in UartSettingDefaults and DigitalOutputDefaults is explicitly commented (//FB 30486); changing this would require code modification.
  • SensorDBBase.GetValue<T> for ExcitationVoltageOption normalizes strings like "2.5""Volt2_5" and falls back to Volt5 on parse failure—this may mask invalid input.
  • SquibSetting.SquibDescription is a wrapper around SerialNumber; changing it updates SerialNumber.
  • SquibSetting.Comment defaults to SerialNumber or UserValue1; UserValue1 is also used for ArticleId/EID in some contexts.
  • **DigitalOutputSetting and SquibSetting constructors accept IDigitalOutDbRecord/ISquibDbRecord and IDataRecord—these are likely used during database loading but may not be thread-safe or idempotent.
  • StreamInputSettingDefaults.GetStreamInputSettingsDefault(string user) ignores the user parameter and uses a constant serial number—this may be intentional for test-specific defaults.
  • StringResources.Designer.cs is auto-generated; manual edits will be overwritten.
  • SensorRange uses invariant culture for parsing/formatting—assumes decimal separator is ..

None identified beyond the above.