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

14 KiB
Raw Permalink Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/SensorDB/SensorRange.cs
DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/SensorDB/SensorDB.cs
DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/SensorDB/DigitalInputSetting.cs
DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/SensorDB/ZeroMethod.cs
DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/SensorDB/DigitalOutputSetting.cs
DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/SensorDB/FilterClass.cs
DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/SensorDB/SquibSetting.cs
DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/SensorDB/IsoCode.cs
DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/SensorDB/CalibrationRecords.cs
DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/SensorDB/SensorsCollection.cs
2026-04-16T04:58:51.573580+00:00 Qwen/Qwen3-Coder-Next-FP8 1 56b13794f7fbf4fa

Documentation: DatabaseExport Sensor Data Types (Version 57)


1. Purpose

This module defines data structures and types used to represent sensor configurations, calibration metadata, and related settings for legacy database version 57 in the DataPRO system. It provides strongly-typed classes to deserialize sensor and channel configuration data from database rows (System.Data.DataRow) and serialize them for persistence or exchange. These types serve as an abstraction layer between the raw database schema and higher-level application logic, enabling consistent handling of sensor metadata, digital I/O settings, calibration records, and ISO location codes across the system.


2. Public Interface

SensorRange

  • Namespace: DatabaseExport
  • Fields:
    • double Low { get; set; }
    • double Medium { get; set; }
    • double High { get; set; }
  • Constructor: SensorRange(double _low, double _medium, double _high)
    Initializes all three range values.

LowHigh

  • Namespace: DatabaseExport
  • Fields:
    • double Low { get; set; }
    • double High { get; set; }
  • Constructor: LowHigh(double _low, double _high)
    Initializes low and high bounds.

SensorStatus

  • Namespace: DatabaseExport
  • Enum Values:
    • Available
    • InUse
    • OutForService
    • OutForCalibration
    • Retired

ShuntMode

  • Namespace: DatabaseExport
  • Enum Values:
    • None
    • Emulation
    • Internal
    • External

BridgeLeg

  • Namespace: DatabaseExport
  • Enum Values:
    • First
    • Second
    • Third
    • Fourth

CouplingModes

  • Namespace: DatabaseExport
  • Enum Values:
    • AC = 0
    • DC

DigitalInputSetting

  • Namespace: DatabaseExport
  • Inherits: SensorData
  • Constructors:
    • DigitalInputSetting()
      Initializes with defaults via SetDefaults.
    • DigitalInputSetting(DigitalInputSetting copy)
      Copy constructor; initializes with defaults after copying.
  • Static Method:
    • static void SetDefaults(SensorData sd)
      Sets default values for a SensorData instance:
      • AxisNumber = 0
      • NumberOfAxes = 1
      • Capacity = 1 (overwrites earlier 2400)
      • Bridge = Test.Module.Channel.Sensor.BridgeType.DigitalInput
      • DisplayUnit = "V"
      • BridgeResistance = double.NaN
      • CheckOffset = false
      • Manufacturer = "Generic"
      • OffsetToleranceHigh = 2500
      • OffsetToleranceLow = 2500
      • Model = "Digital Input Setting"
      • Shunt = ShuntMode.None
      • MeasureExcitation = false
      • MeasureNoise = false

ZeroMethod

  • Namespace: DatabaseExport
  • Fields:
    • Test.Module.Channel.Sensor.ZeroMethodType Method { get; set; }
    • double Start { get; set; }
    • double End { get; set; }
  • Constructors:
    • ZeroMethod(Test.Module.Channel.Sensor.ZeroMethodType zm, double _start, double _end)
    • ZeroMethod(string zm)
      Parses a comma-separated string: "MethodName,start,end"; throws no exception on failure—silently returns uninitialized if tokens < 3.
    • ZeroMethod(ZeroMethod copy)
      Deep copy.
  • Methods:
    • string ToDbString()
      Returns "Method,start,end" using default formatting.
    • string ToSerializeString()
      Returns "Method,start,end" using InvariantCulture for numbers.

DigitalOutputSetting

  • Namespace: DatabaseExport
  • Inherits: SensorData
  • Properties:
    • string ChannelDescription { get; set; }
      Getter returns SerialNumber; setter updates SerialNumber and raises OnPropertyChanged("ChannelDescription").
  • Constructors:
    • DigitalOutputSetting()
      Initializes with defaults via SetDefaults.
    • DigitalOutputSetting(System.Data.DataRow dr)
      Populates instance from database row. Supports fields from DbOperations.DigitalOutputSettings.Fields:
      • Version, OutputMode, LocalOnly, LimitDuration, LastModifiedBy, LastModified, DurationMSFloat, DelayMS, ChannelDescription, UserTags
      • DurationMS is ignored (marked obsolete).
  • Static Method:
    • static void SetDefaults(SensorData sd)
      Sets defaults:
      • SupportedExcitation = [Volt5]
      • Bridge = Test.Module.Channel.Sensor.BridgeType.TOMDigital
      • AxisNumber = 0, NumberOfAxes = 1
      • Capacity = 1
      • DisplayUnit = "V"
      • BridgeResistance = double.NaN
      • CheckOffset = false
      • Manufacturer = "Generic"
      • OffsetToleranceHigh = 2500
      • OffsetToleranceLow = 2500
      • Model = "Digital Output Setting"
      • Shunt = ShuntMode.None
      • MeasureExcitation = false
      • MeasureNoise = false

FilterClass

  • Namespace: DatabaseExport
  • Nested Enum: FilterClassType
    • None = 0
    • AdHoc = -1
    • CFC10 = 17
    • CFC60 = 100
    • CFC180 = 300
    • CFC600 = 1000
    • CFC1000 = 1650
  • Fields:
    • FilterClassType FClass { get; set; }
    • double Frequency { get; set; }
  • Constructors:
    • FilterClass(FilterClassType fc)
      Initializes FClass and Frequency (e.g., CFC60Frequency = 100.0). Throws on unknown type.
    • FilterClass(string fclass)
      Parses string (e.g., "100", "CFC60", "123.45"). Maps known numeric codes to enum values; falls back to AdHoc with parsed frequency.
  • Methods:
    • override string ToString()
      Returns "None", "17 (CFC10)", etc., or numeric string for AdHoc.

SquibSetting

  • Namespace: DatabaseExport
  • Inherits: SensorData
  • Properties:
    • string SquibDescription { get; set; }
      Getter returns SerialNumber; setter updates SerialNumber and raises OnPropertyChanged("SquibDescription").
    • bool BypassCurrentFilter { get; set; }
    • bool BypassVoltageFilter { get; set; }
    • string ArticleId { get; set; }
      Getter returns Id; setter updates Id and raises OnPropertyChanged("ArticleId").
  • Constructors:
    • SquibSetting(System.Data.DataRow dr)
      Populates from tblTOMSquibChannels. Supports fields from DbOperations.Squib.Fields:
      • Version, SquibToleranceLow, SquibToleranceHigh, SquibOutputCurrent, SquibDescription, MeasurementType, LocalOnly, LimitDuration, LastModifiedBy, LastModified, ISOCode, FireMode, DurationMS, DelayMS, BypassVoltageFilter, BypassCurrentFilter, ArticleId, UserValue1, UserValue2, UserValue3, UserTags
  • Static Method:
    • static void SetDefaults(SensorData sd)
      Sets defaults:
      • AxisNumber = 0, Capacity = 5, NumberOfAxes = 1
      • Manufacturer = "Generic", Model = "Squib Setting"
      • Shunt = ShuntMode.None
      • CheckOffset = false
      • BridgeResistance = -1
      • MeasureNoise = false, MeasureExcitation = false
      • Bridge = Test.Module.Channel.Sensor.BridgeType.SQUIB
      • SupportedExcitation = [Volt5]
      • DisplayUnit = "V"
      • Comment = SerialNumber (if UserValue1 is empty/whitespace)

IsoCode

  • Namespace: DatabaseExport
  • Fields:
    • string TestObject { get; set; } (1 char, index 0)
    • string Position { get; set; } (1 char, index 1)
    • string MainLocation { get; set; } (4 chars, indices 25)
    • string FineLocation1 { get; set; } (2 chars, indices 67)
    • string FineLocation2 { get; set; } (2 chars, indices 89)
    • string FineLocation3 { get; set; } (2 chars, indices 1011)
    • string PhysicalDimension { get; set; } (2 chars, indices 1213)
    • string Direction { get; set; } (1 char, index 14)
    • string FilterClass { get; set; } (1 char, index 15)
  • Constructors:
    • IsoCode(string isoCode)
      Normalizes input to 16 chars: truncates if >16, pads with '?' if <16.
  • Properties:
    • string StringRepresentation { get; set; }
      Getter returns full 16-char string; setter normalizes to 16 chars (truncates/pads with '0' if shorter).

CalibrationRecords

  • Namespace: DatabaseExport
  • Fields:
    • CalibrationRecord[] Records { get; set; }
  • Constructors:
    • CalibrationRecords()
      Initializes with one default CalibrationRecord.
    • CalibrationRecords(CalibrationRecords copy)
      Deep copy of Records.
    • CalibrationRecords(string records)
      Parses serialized string via FromSerializedString.
  • Methods:
    • void FromSerializedString(string s)
      Splits on "__x__" (with fallback "___xx___"), constructs CalibrationRecords.
    • string ToSerializedString(SensorCalibration sc)
      Serializes each CalibrationRecord, escapes "__x__""___xx___".

CalibrationRecord

  • Namespace: DatabaseExport
  • Fields:
    • double Sensitivity { get; set; }
    • double ZeroPoint { get; set; }
      Computed from Poly.ZeroPositionIntercept / Poly.CalibrationFactor if Poly.CalibrationFactor ≠ 0; else returns stored _zeroPoint.
    • LinearizationFormula Poly { get; set; }
    • bool AtCapacity { get; set; } = false
    • string EngineeringUnits { get; set; } = "g"
    • Test.Module.Channel.Sensor.SensUnits SensitivityUnits { get; set; } = NONE
    • Test.Module.Channel.Sensor.ExcitationVoltageOption Excitation { get; set; } = Volt5
    • int CapacityOutputIsBasedOn { get; set; } = 1
  • Constructors:
    • CalibrationRecord()
      Initializes Poly = new LinearizationFormula().
    • CalibrationRecord(string s)
      Parses via FromString.
    • CalibrationRecord(CalibrationRecord copy)
      Deep copy.
  • Methods:
    • string ToSerializedString(SensorCalibration parentCal)
      Serializes fields (including Poly) with escaping of list separators.
    • void FromString(string s)
      Parses serialized string.

3. Invariants

  • SensorRange: No explicit validation; Low, Medium, High may be any double.
  • ZeroMethod: Parsing from string silently fails if fewer than 3 comma-separated tokens; no exception thrown.
  • FilterClass: Constructor from FilterClassType throws System.Exception for unknown types. Constructor from string may assign AdHoc with arbitrary frequency.
  • IsoCode: All 16 positions are always populated; missing/short inputs are padded with '?', excess truncated. Setter for StringRepresentation pads with '0' (not '?') if shorter than 16.
  • CalibrationRecord.ZeroPoint: Computed value takes precedence over stored _zeroPoint if Poly.CalibrationFactor ≠ 0.
  • SensorsCollection:
    • Singleton via SensorsList (thread-safe via lock).
    • GetSensorBySerialNumber excludes sensors with Broken = true, DoNotUse = true, or NumberOfAxes > 1 or AxisNumber > 0.
    • AllSensorsDb excludes multi-axis sensors but not Broken/DoNotUse.
    • Sensors loaded from tblSensors, tblDigitalInputSetting, tblTOMSquibChannels, tblTOMDigitalChannels into a single _sensorDictionary.

4. Dependencies

Internal Dependencies (Inferred from Source)

  • Test.Module.Channel.Sensor namespace:
    • Types used: ZeroMethodType, BridgeType, ExcitationVoltageOption, SensUnits
  • DbOperations namespace:
    • Nested types: DigitalOutputSettings.Fields, Squib.Fields, DigitalInputSettings.Fields
    • Methods: GetCommand(), Connection.QueryDataSet(...)
  • SensorData base class: Used by DigitalInputSetting, DigitalOutputSetting, SquibSetting. Not provided in source, but assumed to define common properties like SerialNumber, Id, Version, LastModified, TagsBlobBytes, Broken, DoNotUse, UserValue1, etc.
  • LinearizationFormula: Referenced by CalibrationRecord. Not provided in source.

External Dependencies

  • System (core types: Enum, Convert, StringBuilder, CultureInfo)
  • System.Data (DataRow, DataSet, DBNull)
  • System.Collections.Generic

What Depends on This Module?

  • SensorsCollection.SensorsList is used to load and cache all sensor configurations at runtime.
  • DigitalInputSetting, DigitalOutputSetting, SquibSetting are instantiated from database rows during initialization.
  • CalibrationRecords and CalibrationRecord are used to serialize/deserialize calibration metadata.

5. Gotchas

  • DigitalInputSetting.SetDefaults sets Capacity = 2400 then immediately overwrites to 1 — likely a typo or legacy artifact.
  • ZeroMethod constructor from string silently ignores malformed input — no exception, no logging; returns partially initialized object.
  • IsoCode.StringRepresentation setter pads with '0', but constructor/partial setters pad with '?' — inconsistent default padding.
  • CalibrationRecord.ZeroPoint is computed only when Poly.CalibrationFactor ≠ 0 — stored _zeroPoint may be stale if Poly changes.
  • SensorsCollection.GetSensorBySerialNumber returns null for multi-axis sensors — even if valid — due to legacy restriction "Disable 6-axis sensor capability".
  • FilterClass constructor from string may assign AdHoc for unrecognized values — no validation that frequency is positive or meaningful.
  • DigitalOutputSetting copy constructor is commented out — no deep copy support for this type.
  • CalibrationRecords uses custom separators ("__x__" and "___xx___") — risk of collision if data contains these strings; escaping is manual and error-prone.
  • SensorData is not defined in provided sources — behavior of inherited properties (e.g., Id, SerialNumber, TagsBlobBytes) must be inferred from usage.
  • SquibSetting.Comment defaults to SerialNumber if UserValue1 is empty, but UserValue1 is set from DB row — potential for unintended override.