13 KiB
source_files, generated_at, model, schema_version, sha256
| source_files | generated_at | model | schema_version | sha256 | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
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()
ReturnstrueifUDPAddressstarts with"udp"(case-insensitive) and is a well-formed absolute URI; otherwisefalse.static void CommitChange(StreamInputSettingDefaults settingDefaults, int userID)
CommitsUDPAddressto user-specific settings usingTestSetupDefaults.SetUserSettingwith keyPropertyEnums.PropertyIds.DefaultUDPStreamAddress.static StreamInputSettingDefaults GetStreamInputSettingsDefault(int userID)
LoadsStreamInUDPAddressfrom user settings viaTestSetupDefaults.GetUserSettingValueString, wraps it in a newSensorData, and returns aStreamInputSettingDefaultsinstance.static StreamInputSettingDefaults GetStreamInputSettingsDefault(string user)
Retrieves a sensor by serial numberSensorConstants.TEST_SPECIFIC_STREAM_IN_SERIALfromSensorsCollection.SensorsList, wraps it in aSensorData, and returns aStreamInputSettingDefaultsinstance.
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/setsDigitalOutputDelayMS.bool LimitDuration { get; set; }
Gets/setsDigitalOutputLimitDuration; raisesOnPropertyChanged("LimitDuration").double DurationMS { get; set; }
Gets/setsDigitalOutputDurationMS.static void CommitChange(DigitalOutputDefaults settingDefaults, string user)
Commits_defaultOut(cast toSensorData) viaSensorsCollection.SensorsList.Commit.static DigitalOutputDefaults GetDigitalOutDefault(string user)
Retrieves sensor by serial numberSensorConstants.TEST_SPECIFIC_DIGITAL_OUT_SERIAL, wraps inISensorData, and returnsDigitalOutputDefaults.
CanSettingDefaults
- Properties:
IsFD,ArbBaseBitrate,ArbBaseSJW,DataBitrate,DataSJW,FileType— all get/set via_defaultCan’s corresponding fields. bool Validate()
Always returnstrue.static void CommitChange(CanSettingDefaults settingDefaults, int userID)
Commits each property to user settings usingTestSetupDefaults.SetUserSettingwith keys fromPropertyEnums.PropertyIds.DefaultCAN*.static CanSettingDefaults GetCanSettingsDefault(int userID)
Loads all CAN properties from user settings viaTestSetupDefaults.GetUserSettingValue*, wraps inSensorData, and returnsCanSettingDefaults.static void RestoreDefaults(ICanSettingDefaults sensorDefaults)
Resets all properties to constants fromEmbeddedSensors(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 }—FlowControlis hardcoded toHandshake.Noneper comment//FB 30486.bool Validate()
Always returnstrue.static void CommitChange(UartSettingDefaults settingDefaults, int userID)
Commits all properties to user settings viaTestSetupDefaults.SetUserSetting.static UartSettingDefaults GetUartSettingsDefault(int userID)
Loads properties from user settings, parses enums (StopBits,Parity,DataFormat) from strings, wraps inSensorData, returns instance.static void RestoreDefaults(IUartSettingDefaults sensorDefaults)
Resets to constants fromUARTRecordandEmbeddedSensors.
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 returnstrue.static IDigitalInputDefaults GetDigitalInputDefaults(string user)
Loads breakpoint values andDisplaySPDADCfromSettingsDBwith fallback defaults fromDTS.Common.Constant.DigitalInputs.static void Save(IDigitalInputDefaults defaults)
Persists values toSettingsDBand updates corresponding static fields inDTS.Common.Constant.DigitalInputs.static void RestoreDefaults(IDigitalInputDefaults sensorDefaults)
Resets to default constants fromDTS.Common.Constant.DigitalInputs.
SquibSettingDefaults
- Properties:
ToleranceLowDefault,ToleranceHighDefault,OutputCurrentDefault,MeasurementTypeDefault,FireModeDefault,LimitDurationDefault,FireDurationMS,FireDelayMS. SquibFireMode[] AvailableModes { get; }
{ CAP, CONSTANT }.bool IsConstantCurrent { get; }
trueifFireModeDefault == SquibFireMode.CONSTANT.bool ToleranceValid { get; }
trueifToleranceLowDefault < ToleranceHighDefault.bool Validate()
ReturnsToleranceValid.static void CommitChange(SquibSettingDefaults settingDefaults, string user)
Commits_defaultSquib(cast toSensorData) viaSensorsCollection.SensorsList.Commit.static SquibSettingDefaults GetSquibSettingsDefault(string user)
Retrieves sensor by serial numberSensorConstants.TEST_SPECIFIC_SQUIB_SERIAL, wraps inISensorData, 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 callsSetDefaults, wraps in a record type (ICANRecord,IStreamInputRecord, etc.), invokesDbOperations.Sensors*UpdateInsert, and setssetting.DatabaseIdon success (hr == 0).- Constructors:
- Default (
: base()) - Copy (
: base(copy)) - Record-based (
ICANRecord,IStreamInputRecord,ISquibDbRecord, etc.) — populates fields from database record; logs exceptions viaAPILogger.
- Default (
SensorRange
double Low,Medium,High— range values.SensorRange(string value)
Parses comma-separated string (e.g.,"1.0,2.0,3.0"); throwsInvalidDataExceptionif 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 withLow,Medium,Highattributes; throws if missing.XElement ToXElement(string prefix)
Creates<prefix-SensorRange>with attributes.void Update(XElement elem, string prefix)
Updates existing element’s attributes.
FactorySensorModel
static SensorModel CreateModelFromSensor(SensorData sd, SensorCalibration sc, User currentUser)
Copies all relevant fields fromsdandscinto a newSensorModel, includingLastModified = 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 ornull.static void GetValue<T>(...)— generic overloads to extract values (string, int, double, bool, enums likeSensorStatus,BridgeType,ShuntMode,ExcitationVoltageOption,FilterClassType,ZeroMethodType) from XML elements, with safe parsing and fallbacks (e.g.,double.NaN,ExcitationVoltageOption.Undefined→Volt5).
3. Invariants
StreamInputSettingDefaults.UDPAddressmust be a well-formed absolute URI starting with"udp"(case-insensitive) forValidate()to returntrue.SquibSettingDefaults.ToleranceValidrequiresToleranceLowDefault < ToleranceHighDefault.DigitalOutputDefaults.FlowControlis alwaysHandshake.None(hardcoded per comment).UartSettingDefaults.FlowControlis alwaysHandshake.None(hardcoded per comment).- All
*Settingtypes callSetDefaults(...)during construction andCommit(...), ensuring consistent metadata (e.g.,Bridge,Manufacturer,Model) before persistence. SensorDBBase.GetValue<T>methods are designed to be resilient: enums parse with fallbacks,doubleparsing falls back toNaN, 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 inDigitalOutputDefaults,SquibSettingDefaults,DigitalOutputSetting)System.*:System.Xml.Linq,System.IO.Ports,System.Data,System.Data.SqlClient
Dependencies on this module:
- UI/configuration layers likely consume
*SettingDefaultstypes to populate forms and commit changes. DbOperationsandSensorsCollectiondepend on record types (*Record) defined inDTS.Common.Storage(not shown here), which are instantiated by*Setting.Commit(...).
5. Gotchas
StreamInputSettingDefaults.Validate()only checksUDPAddressformat; it does not verify network reachability or correctness of port/protocol beyond"udp"prefix.CanSettingDefaults.Validate()and others (e.g.,UartSettingDefaults,DigitalInputSensorDefault) always returntrue—no validation logic is implemented beyondSquibSettingDefaults.- Hardcoded
FlowControl = Handshake.NoneinUartSettingDefaultsandDigitalOutputDefaultsis explicitly commented (//FB 30486); changing this would require code modification. SensorDBBase.GetValue<T>forExcitationVoltageOptionnormalizes strings like"2.5"→"Volt2_5"and falls back toVolt5on parse failure—this may mask invalid input.SquibSetting.SquibDescriptionis a wrapper aroundSerialNumber; changing it updatesSerialNumber.SquibSetting.Commentdefaults toSerialNumberorUserValue1;UserValue1is also used forArticleId/EIDin some contexts.- **
DigitalOutputSettingandSquibSettingconstructors acceptIDigitalOutDbRecord/ISquibDbRecordandIDataRecord—these are likely used during database loading but may not be thread-safe or idempotent. StreamInputSettingDefaults.GetStreamInputSettingsDefault(string user)ignores theuserparameter and uses a constant serial number—this may be intentional for test-specific defaults.StringResources.Designer.csis auto-generated; manual edits will be overwritten.SensorRangeuses invariant culture for parsing/formatting—assumes decimal separator is..
None identified beyond the above.