154 lines
6.4 KiB
Markdown
154 lines
6.4 KiB
Markdown
|
|
---
|
||
|
|
source_files:
|
||
|
|
- DataPRO/TDASCommands/TestTriggerCommands.cs
|
||
|
|
- DataPRO/TDASCommands/CommandBase.cs
|
||
|
|
- DataPRO/TDASCommands/TDASCommandPacketBase.cs
|
||
|
|
generated_at: "2026-04-17T15:49:45.052194+00:00"
|
||
|
|
model: "zai-org/GLM-5-FP8"
|
||
|
|
schema_version: 1
|
||
|
|
sha256: "b0635eb6f7e0c765"
|
||
|
|
---
|
||
|
|
|
||
|
|
# TDAS Command Module Documentation
|
||
|
|
|
||
|
|
## 1. Purpose
|
||
|
|
|
||
|
|
This module provides the command infrastructure for communicating with TDAS (Test Data Acquisition System) hardware. It implements a command/response protocol for sending control commands (such as test triggers) and receiving data, handling packet construction, response parsing, communication throttling, and diagnostic logging. The module supports both single-module and broadcast command modes for controlling test trigger states (ARM, STATUS, OFF) across TDAS recording devices.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. Public Interface
|
||
|
|
|
||
|
|
### `TestTrigger` (class)
|
||
|
|
Executes test trigger commands against a specific TDAS module.
|
||
|
|
|
||
|
|
**Constructors:**
|
||
|
|
- `TestTrigger(DTS.Common.Interface.DASFactory.ICommunication sock)` — Creates command with default 30000ms timeout.
|
||
|
|
- `TestTrigger(DTS.Common.Interface.DASFactory.ICommunication sock, int msTimeout)` — Creates command with custom timeout.
|
||
|
|
|
||
|
|
**Properties:**
|
||
|
|
- `int ModuleIndex` — Gets or sets the target module index.
|
||
|
|
- `SubCommandValues SubCommand` — Gets or sets the subcommand (`ARM`, `STATUS`, `OFF`).
|
||
|
|
- `StatusValues TriggerStatus` — Gets the trigger status from the response (`ARMED`, `OFF`).
|
||
|
|
|
||
|
|
**Nested Enums:**
|
||
|
|
- `SubCommandValues { ARM, STATUS, OFF }`
|
||
|
|
- `StatusValues { ARMED, OFF }`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### `TestTriggerBroadcast` (class)
|
||
|
|
Executes broadcast test trigger commands to TDAS modules.
|
||
|
|
|
||
|
|
**Constructors:**
|
||
|
|
- `TestTriggerBroadcast(DTS.Common.Interface.DASFactory.ICommunication sock, int moduleIndex)`
|
||
|
|
- `TestTriggerBroadcast(DTS.Common.Interface.DASFactory.ICommunication sock, int moduleIndex, int msTimeout)`
|
||
|
|
|
||
|
|
**Properties:**
|
||
|
|
- `TestTrigger.SubCommandValues SubCommand` — Gets or sets the subcommand.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### `CommandBase` (class)
|
||
|
|
Base class for TDAS commands providing execution, response handling, and logging.
|
||
|
|
|
||
|
|
**Constructors:**
|
||
|
|
- `CommandBase(DTS.Common.Interface.DASFactory.ICommunication sock)`
|
||
|
|
- `CommandBase(DTS.Common.Interface.DASFactory.ICommunication sock, int timeoutMillisec)`
|
||
|
|
|
||
|
|
**Properties:**
|
||
|
|
- `string ResponseData` — Lazy-loaded response data; calls `ProcessData()` on first access.
|
||
|
|
- `bool SingleModuleCommand` — Gets or sets whether this is a single-module command.
|
||
|
|
- `string RackSerialNumber` — Gets or sets the rack serial number (default: `"NONE"`).
|
||
|
|
|
||
|
|
**Methods:**
|
||
|
|
- `bool IsErrored()` — Returns `true` if response starts with `"err"` (case-insensitive).
|
||
|
|
- `string GetErrorString()` — Extracts error message from response starting at `"ERR"` + 4 characters.
|
||
|
|
- `void SyncExecute()` — Executes command with semaphore-based throttling.
|
||
|
|
- `static void InitializeSemaphore(double delay, int spots)` — Initializes throttling parameters.
|
||
|
|
- `static void RollLog()` — Triggers log file rollover.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### `TDASCommandPacketBase` (class)
|
||
|
|
Builds and parses TDAS command packets.
|
||
|
|
|
||
|
|
**Constructors:**
|
||
|
|
- `TDASCommandPacketBase(CommandString cs)` — Creates packet from a command string.
|
||
|
|
- `TDASCommandPacketBase(byte[] buffer, CommandPacketBase command)` — Creates packet from response bytes.
|
||
|
|
|
||
|
|
**Properties:**
|
||
|
|
- `bool RackCommand` — Gets or sets whether this is a rack-level command.
|
||
|
|
- `bool SingleModuleCommand`
|
||
|
|
- `string RackSerialNumber`
|
||
|
|
- `int ModuleIndex` — Must be < 10; throws `Exception` otherwise. Setting this sets `RackCommand = false`.
|
||
|
|
- `bool AllModule`
|
||
|
|
- `bool RebuildBytes` — When `true`, forces byte rebuild on serialization.
|
||
|
|
- `bool ExpectsData`
|
||
|
|
- `bool ExpectsMultipleLines`
|
||
|
|
- `int LinesExpected`
|
||
|
|
- `bool UseMDBMode` — Enables MDB (Memory Data Block) parsing mode.
|
||
|
|
- `bool MonitorDataMode`
|
||
|
|
- `bool RealtimeCommand`
|
||
|
|
- `byte CharWait` — Character wait value (default: `0x01`).
|
||
|
|
- `int ReplyWait` — Reply wait value (default: `30`).
|
||
|
|
|
||
|
|
**Methods:**
|
||
|
|
- `byte[] ToBytes()` — Serializes packet to 536-byte CDB format.
|
||
|
|
- `string GetCommandString(int index)` — Gets command string at index.
|
||
|
|
- `CommandString GetCommandStringObject(int index)` — Gets `CommandString` object at index.
|
||
|
|
- `string ToCommandString()` — Returns ASCII command string from bytes.
|
||
|
|
- `int GetExpectedBytes()` — Returns expected data bytes in MDB mode.
|
||
|
|
- `short[] GetData()` — Extracts data from MDB blocks.
|
||
|
|
- `PacketState VerifyPacket(byte[] Bytes)` — Validates response packet completeness.
|
||
|
|
- `void GetNextSequenceNumber()` — Assigns next global sequence number (thread-safe).
|
||
|
|
- `void ComputeCRCs()` — No-op in this implementation.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### `CommandString` (abstract class)
|
||
|
|
Base class for defining command strings.
|
||
|
|
|
||
|
|
**Properties:**
|
||
|
|
- `virtual string RequiredResponseString` — Required response marker for packet completion validation.
|
||
|
|
- `bool ExpectsData` — Default: `true`.
|
||
|
|
- `bool ExpectsMultipleLines`
|
||
|
|
- `int LinesExpected`
|
||
|
|
- `bool RackCommand` — Default: `true`.
|
||
|
|
- `bool SingleModuleCommand`
|
||
|
|
- `string RackSerialNumber`
|
||
|
|
- `int Length` — Cached byte length of command.
|
||
|
|
|
||
|
|
**Methods:**
|
||
|
|
- `virtual byte[] GetParameters()` — Override to provide command parameters; default returns empty array.
|
||
|
|
- `string GetCommandPortion()` — Returns the command string.
|
||
|
|
- `string GetCommandDescription()` — Returns command description.
|
||
|
|
- `byte[] GetBytes()` — Serializes command with parameters and CRLF terminator.
|
||
|
|
- `void RebuildBytes()` — Clears cached bytes to force rebuild.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### `CommandPacketException` (class)
|
||
|
|
Exception for command packet errors.
|
||
|
|
|
||
|
|
**Constructor:**
|
||
|
|
- `CommandPacketException(ERROR_CODES errorCode, string description)`
|
||
|
|
|
||
|
|
**Properties:**
|
||
|
|
- `ERROR_CODES ErrorCode` — Returns `UNKNOWN` if not set.
|
||
|
|
|
||
|
|
**Enum:**
|
||
|
|
- `ERROR_CODES { TOO_MANY_COMMANDS = 0, TOO_MANY_BYTES = 1, UNKNOWN = 2 }`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. Invariants
|
||
|
|
|
||
|
|
1. **Module Index Constraint:** `ModuleIndex` must be less than 10; otherwise `TDASCommandPacketBase` throws an `Exception`.
|
||
|
|
2. **Command Limits:** Maximum of 1 command per packet (`MAX_CMD = 1`) and maximum 512 bytes per command (`MAX_CMD_SIZE = 512`).
|
||
|
|
3. **Packet Size:** CDB packet size is fixed at 536 bytes (`CDB_SIZE = 536`).
|
||
|
|
4. **MDB Block Sizes:** `MDB_BLOCK_SIZE = 52`, `DMA_SIZE = 1024`, `DMA_BLOCK_SIZE = 1076`.
|
||
|
|
5. **Default Timeout:** Commands default to 30000ms timeout.
|
||
|
|
6. **Default Throttling:** Semaphore defaults to 3 concurrent spots with 100ms delay.
|
||
|
|
7. **Status Packet Structure:** TDAS status packet is 20 bytes, ending with 4 bytes of `0xFF` at positions 16-19.
|
||
|
|
8. **Sequence Numbers:**
|