Files
DP44/enriched-qwen3-coder-next/DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport.md

203 lines
11 KiB
Markdown
Raw Normal View History

2026-04-17 14:55:32 -04:00
---
source_files:
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/IServicePublic.cs
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/SerializedSettings.cs
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/CustomChannel.cs
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/TestGraph.cs
generated_at: "2026-04-16T04:56:56.352649+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "8e151bb0bac120f4"
---
# DatabaseExport
## Documentation: `DatabaseExport` Module (Version 57)
---
### 1. **Purpose**
This module provides data structures and serialization utilities for exporting and managing test configuration data in **Version 57** of the database schema. It defines core channel types (`DASChannel`, `DASOutputChannel`, `DigitalOutputDASChannel`, `OutputSquibChannel`, `OutputTOMDigitalChannel`) used to represent hardware I/O configurations, along with supporting classes for custom channels (`CustomChannel`, `CustomChannelList`), serialized application settings (`SerializedSettings`), and graph configuration (`TestGraph`). The module enables persistence of user-defined test setups—including channel assignments, thresholds, and hardware-specific modes—by mapping them to database-compatible formats (e.g., SQL string encodings for thresholds and channel lists). It serves as a legacy compatibility layer for older database versions, preserving backward compatibility with prior schema definitions.
---
### 2. **Public Interface**
#### `DASChannel`
- **Type**: `class`
- **Attributes**: `[Serializable]`
- **Description**: Base class for all DAS (Data Acquisition System) channels. No public members defined.
#### `OutputDASChannel : DASChannel`
- **Type**: `class`
- **Attributes**: `[Serializable]`
- **Description**: Base class for output channels.
#### `DigitalOutputDASChannel : OutputDASChannel`
- **Type**: `class`
- **Attributes**: `[Serializable]`
- **Description**: Represents a digital output channel.
#### `OutputTOMDigitalChannel : DigitalOutputDASChannel`
- **Type**: `class`
- **Attributes**: `[Serializable]`
- **Description**: Base class for SQUIB digital output channels.
- **Nested Enum**: `DigitalOutputMode`
- `NONE = 0`
- `FVLH = 1 << 0` (5V, low-to-high transition)
- `FVHL = 1 << 1` (5V, high-to-low transition)
- `CCNO = 1 << 2` (contact closure, normally open)
- `CCNC = 1 << 3` (contact closure, normally closed)
#### `OutputSquibChannel`
- **Type**: `class`
- **Attributes**: `[Serializable()]`
- **Description**: Base class for SQUIB output channels.
- **Nested Enums**:
- `SquibFireMode`
- `NONE = 1 << 0`
- `CAP = 1 << 1` (capacitor discharge)
- `CONSTANT = 1 << 2` (constant current discharge)
- `AC = 1 << 3` (AC discharge)
- `SquibMeasurementType`
- `NONE = 0`
- `CURRENT = 1 << 0`
- `INIT_SIGNAL = 1 << 1`
- `VOLTAGE = 1 << 2`
#### `SerializedSettings`
- **Type**: `sealed class`
- **Nested Enum**: `Keys`
Contains **120+** static string-based keys for global settings (e.g., `ExportINIFile`, `DefaultIsoChannelSensorCompatibilityLevel`, `RealtimeSampleRates`, `SLICE6_PowerSetting`, `SPSINDEX_0` through `SPSINDEX_23`, etc.).
- **Public Properties** (selected examples):
- `ExportINIFile`: `string`
Gets/sets the path to the export INI file (default: `""`). Uses `SettingsDB.GetGlobalValue`/`SetGlobalValue`.
- `IsoChannelSensorCompatibilityLevel`: `IsoChannelSensorCompatibilityLevels`
Gets/sets the default compatibility level for ISO channels (default: `Warn`). Parses from string via `SettingsDB`.
- `TestSetupAutomaticMode`: `bool`
Gets/sets whether Test Setup defaults to automatic mode (default: `false`).
- `TestSetupDefaultCommonStatusLine`: `bool`
Gets/sets whether to show a common status line in Test Setup (default: `true`).
- `TestSetupAutomaticProgressDelayMS`: `int`
Gets/sets delay (ms) before automatic progress in Test Setup (default: `0`).
- `ISOSupportLevel`: `ISOSupportLevels`
Gets/sets ISO support mode (default: `ISO_ONLY`). Enum values:
- `ISO_ONLY`
- `TRANSITORY`
- `NO_ISO`
#### `CustomChannel : IComparable<CustomChannel>`
- **Type**: `class`
- **Description**: Wrapper for `MMEPossibleChannels` to support user-defined (non-ISO13499) channels. Mirrors database tables without modifying the core ISO schema.
- **Properties**:
- `Channel`: `MMEPossibleChannels` (read-only)
- `TestObject`, `Position`, `MainLocation`, `FinLoc1`, `FinLoc2`, `FinLoc3`, `PhysicalDimension`, `Direction`, `FilterClass`:
Getters/setters that propagate changes to `Channel` via `Set_*` methods (e.g., `Channel.Set_Test_Object(...)`).
- `Text1`: `string``Channel.Text_L1`
- `Remarks`: `string``Channel.Remarks`
- **Methods**:
- `CustomChannel(MMEPossibleChannels channel, bool newChannel = true)`
Constructor initializes backing fields from `ISO13499FileDb.IsoDb`, catching `ExpiredISOFieldException` in `_expiredErrors`.
- `CompareTo(CustomChannel other)`: `int`
Compares by `Text1` (ordinal string comparison).
- `GetValues()`: `Dictionary<string, string>`
Returns all channel fields as key-value pairs (keys: `DbOperations.MMETables.MMEPossibleChannelsFields.*` enum names; values: string representations).
#### `CustomChannelList`
- **Type**: `class`
- **Description**: Singleton list of all custom channels loaded from `ISO13499FileDb.IsoDb`.
- **Properties**:
- `List`: `CustomChannelList` (static, thread-safe singleton)
- `AllChannels`: `CustomChannel[]`
Returns all channels (lazy-loaded via `PopulateChannelsIfNecessary()`).
- **Methods**:
- `PopulateChannelsIfNecessary()`: `void`
Loads channels from `ISO13499FileDb.IsoDb.GetSQLPossibleChannels()`, wraps each in `CustomChannel`, sorts by `Text1`.
#### `TestGraph`
- **Type**: `class`
- **Description**: Represents a test graph configuration, including channels, thresholds, and axis ranges.
- **Constants**:
- `SEPARATOR = "§"`
- `CURRENT_SUFFIX = "_CU"`
- **Properties**:
- `GraphName`, `GraphDescription`: `string`
- `UseDomainMin/Max`, `DomainMin/Max`, `UseRangeMin/Max`, `RangeMin/Max`: `bool`/`double`
- `Thresholds`: `double[]`
- `Channels`: `TestObjectChannel[]`
Returns channels *currently assigned* to the graph (filtered by presence in `_groups`/`_addedGroups`).
- `AvailableChannels`: `TestObjectChannel[]`
Returns all channels *available* for assignment (from `_groups`/`_addedGroups`, including SQUIB Current/Voltage variants).
- **Methods**:
- `GetThresholdsSQL()`: `string`
Encodes thresholds as `{(t1)§(t2)§...}`.
- `SetThresholdsFromSQL(string sThresholds)`: `void`
Parses `{(t1)§(t2)§...}` into `_thresholds`.
- `GetChannelsForSQL()`: `string`
Encodes channel IDs as `{(id1)§(id2)§...}` after resolving channel IDs (handles SQUIB Current suffix `_CU`).
- `SetChannelsFromSQL(string sChannels)`: `void`
Parses channel IDs and populates `_channels` via `AddChannel`.
- `GetTestGraphKey(TestObjectChannel ch)`: `string`
Generates key: `<Serial>_<Name>_<Type>`; appends `_CU` for SQUIB Current channels.
---
### 3. **Invariants**
- **Channel Serialization**:
- Thresholds and channel lists are encoded as SQL-compatible strings using `{...}` delimiters and `§` separators.
- SQUIB Current channels are uniquely identified by appending `"_CU"` to their graph key (see `GetTestGraphKey`).
- **CustomChannel Consistency**:
- Setting any property (e.g., `TestObject`, `Position`) immediately propagates the value to the underlying `Channel` object via `Set_*` methods.
- `CustomChannel` instances are compared *only* by `Text1` (ordinal comparison).
- **Singleton Safety**:
- `CustomChannelList.List` uses double-checked locking (`lock(MyLock)`) for thread-safe initialization.
- **Settings Persistence**:
- All `SerializedSettings` properties delegate to `SettingsDB.GetGlobalValue*`/`SetGlobalValue*` methods (e.g., `GetGlobalValueBool`, `SetGlobalValueInt`).
- Enum properties fall back to defaults on parse failure.
---
### 4. **Dependencies**
#### **Internal Dependencies**
- `ISO13499FileDb.IsoDb`: Used by `CustomChannel` to resolve ISO fields (e.g., `GetMainLocationByIso`, `GetFilterClassByIso`).
- `DbOperations.MMETables.*`: Enumerations for field names (e.g., `MMEPossibleChannelsFields.ID`).
- `Test.Module.Channel.Sensor.BridgeType`: Used in `TestGraph.AddChannels` to detect SQUIB sensors (`BridgeType.SQUIB`).
- `SensorsCollection.SensorsList`: Used in `TestGraph` to retrieve sensor metadata (e.g., `IsDigitalOutput()`, `Bridge` type).
- `SettingsDB`: Static class for global settings persistence (used by `SerializedSettings`).
- `TestTemplate`, `TestTestObject`, `TestObjectChannel`: Referenced but not defined in these files (assumed to be in other modules).
#### **External Dependencies**
- `System` (core types: `SerializableAttribute`, `Enum`, `string`, `List<T>`, `Dictionary<TKey,TValue>`, `CultureInfo`, `StringBuilder`, `Linq`).
#### **Dependents**
- Likely consumed by:
- Database export/import logic (e.g., saving/loading test setups).
- Test Setup UI (for channel assignment, graph configuration).
- Settings persistence layer (e.g., `SerializedSettings` usage).
---
### 5. **Gotchas**
- **SQUIB Channel Handling**:
- `TestGraph` *dynamically* adds SQUIB Current and Voltage channels to `AvailableChannels` if not already present. The Current variant is uniquely keyed with `"_CU"` suffix.
- `ContainsCurrentChannel` checks for `"_CU"` suffix, but `ContainsVoltageChannel` does not—this asymmetry may cause issues if Voltage channels are later renamed or re-keyed.
- **Channel ID Resolution**:
- `GetChannelsForSQL()` refreshes `_channels` by resolving against `AvailableChannels` (to handle ID changes post-creation). This may silently drop channels if their keys no longer resolve.
- **`CustomChannel` Constructor**:
- `MMEPossibleChannels` is *copied* if `newChannel == true` (via `new MMEPossibleChannels(channel)`), but *shared* otherwise. This could lead to unintended side effects if the original `channel` is mutated.
- `ExpiredISOFieldException` is caught and stored in `_expiredErrors`, but this list is not exposed—consumers cannot detect or handle expired fields.
- **Settings Parsing**:
- `SerializedSettings` properties use `Enum.TryParse` with fallback to defaults. If the stored string is invalid (e.g., `"UNKNOWN"`), the default is used silently—no logging or error is raised.
- **Hardcoded Delimiters**:
- `TestGraph` uses `"§"` as a separator. If this character appears in channel IDs or threshold values, parsing will break.
- **Missing Type Safety**:
- Thresholds are hardcoded as `double` in `SetThresholdsFromSQL`, but the comment notes future extensibility. No validation ensures only doubles are stored.
- **`CustomChannelList` Initialization**:
- `_dictChannels` (commented out) suggests a previous attempt to cache by ISO code. Its removal may impact performance if lookups by ISO code are frequent.
> **None identified from source alone.**
> *(Note: The above "gotchas" are inferred from code structure and behavior—not external documentation.)*