# DataPRO Engineering Assistant: Q&A Knowledge Base ## Overview This document contains sample Q&A pairs for the DataPRO Engineering Assistant. The assistant should be trained on these patterns to help users with database operations, hardware configuration, testing workflows, and troubleshooting. --- ## 1. Database Operations (HIGH PRIORITY) ### 1.1 Database Versioning **Q1: How do I check what database version I'm running?** ```csharp // Use: DbAPI.DbAPI.Database.GetDatabaseVersion() // Returns: 0 on success, all other values are error codes // Example: var connections = DbAPI.DbAPI.Connections.GetActiveConnections(); ulong result = DbAPI.DbAPI.Database.GetDatabaseVersion(user, connections.First(), out int version); if (result == 0) { Console.WriteLine($"Database version: {version}"); } ``` **Q2: What happens if my client version doesn't match the server version?** When versions don't match, the system uses the minimum of client and server versions to determine stored procedure compatibility. The `GetStoredProcedureToUseCached` method handles this automatically with caching. **Q3: Where do I find the current database version in SQL?** ```sql -- Connect to your Database and run: SELECT MAX(Version) AS CurrentVersion FROM DatabaseVersion -- Or get all versions: SELECT Version, Step, Date, Remarks FROM DatabaseVersion ORDER BY Version DESC ``` --- ### 1.2 Hardware Management **Q4: How do I get all Data Recorders (DAS) from the database?** ```csharp // Use: DbAPI\DbAPI.DAS.DASGet() // Parameters: user, connection, clientDbVersion, DASSerial, position, out IDASDBRecord[] das // Example: var connections = DbAPI.DbAPI.Connections.GetActiveConnections(); ulong result = DbAPI.DbAPI.DAS.DASGet(user, connections.First(), clientDbVersion, null, "Prototype", out var das); if (result == 0 && das?.Length > 0) { foreach (var d in das) { Console.WriteLine($"Serial: {d.SerialNumber}, Type: {d.DASName}"); } } ``` **Q5: What error code is returned for access denied?** Error code **1460** (ERROR_ACCESS_DENIED) is returned when the user is not logged in or lacks permissions. **Q6: Where do I find DAS serial numbers in the database?** ```sql SELECT SerialNumber, DASName, DASTypeId, FirmwareVersion FROM DAS ORDER BY SerialNumber ``` --- ### 1.3 Channel Operations **Q7: How do I insert a new channel into a test setup?** ```csharp // Use: DbAPI.DbAPI.Channels.ChannelsInsert() // Parameters: user, connection, ref IChannelDbRecord channel // Channel record requires: SensorId, TestSetupId, DASId, and channel settings // Returns: 0 on success, error code otherwise ulong result = DbAPI.DbAPI.Channels.ChannelsInsert(user, connection, ref channel); if (result == 0) { Console.WriteLine($"Channel inserted with ID: {channel.ChannelId}"); } ``` **Q8: What is the difference between Group Channel Settings and regular Channel Settings?** - **Group Channel Settings**: Apply to a channel within a specific group context - **Channel Settings**: Channel-wide settings applied regardless of group **Q9: How do I delete all channels for a specific DAS?** ```csharp // Use: DbAPI.DbAPI.DAS.DASChannelsDelete() // Parameters: user, connection, hardwareId (format: serialnumber_dastype) ulong result = DbAPI.DbAPI.DAS.DASChannelsDelete(user, connection, "SLICE123_SLICE6"); if (result == 0) { Console.WriteLine("All channels for this DAS deleted"); } ``` --- ## 2. Hardware Configuration (HIGH PRIORITY) ### 2.1 SLICE Hardware Family **Q10: What are the supported SLICE board variants?** The system supports these SLICE variants: - SLICE 1.5 - SLICE 2 - SLICE 6 - SLICE 6A - SLICE 6AIR - SLICE PRO DB - SLICE PRO FD (CAN FD support) - PowerPRO (battery/power monitoring) - Ribeye (telemetry) **Q11: How do I update a SLICE board's firmware?** Firmware updates are handled through the SLICE Service's `SLICE Service.Configuration.cs`: - Connect to the board via USB or Ethernet - Use the configuration interface to upload firmware - The system validates firmware compatibility before uploading - Required: SLICE Service DLL, firmware file (.hex or .bin) **Q12: What's the difference between SLICE 6 and SLICE 6AIR?** Based on source code (`Common/DTS.Common/Constant/DASSpecific/SLICE6AIR.cs`): - **SLICE 6**: Standard model with fixed configurations - **SLICE 6AIR**: Enhanced model with higher performance capabilities - **Key differences**: - Max sample rate: SLICE 6AIR supports 400kHz vs 100kHz for SLICE 6 - UART channel streaming support (SLICE 6AIR only) - UDP real-time streaming support (SLICE 6AIR only) - Enhanced time synchronization (GPS, PPS support) - Continuous streaming modes support - **SLICE 6AIR TC**: Thermocoupler variant for temperature measurements - Note: Physical form factor differences would need to be verified in schematics/firmware --- ### 2.2 Channel Types **Q13: What are all the channel types available?** Supported channel types: - **AnalogInputDASChannel**: Analog sensor input (strain gauges, voltage) - **AnalogOutputDASChannel**: Analog output (shunt calibration, excitation) - **DigitalInputDASChannel**: Digital/switch inputs - **DigitalOutputDASChannel**: Digital outputs (squib fire, control) - **CANInputDASChannel**: CAN bus communication - **UARTInputDASChannel**: UART/serial communication - **StreamInputDASChannel**: Stream data input - **StreamOutputDASChannel**: Stream data output - **TimestampDASChannel**: Time synchronization - **OutputSquibChannel**: Explosive device firing - **OutputTOMDigitalChannel**: Test Object Monitor digital **Q14: What's the maximum sample rate for SLICE boards?** Based on source code (`Common/DTS.Common/Constant/DASSpecific/SLICE6AIR.cs`): - SLICE 6: Up to 100 kHz per channel (MaxAAFilterRateHz = 50000) - SLICE 6AIR: Up to 400 kHz per channel (MaxSampleRateHz = 400000) - Real-time optimized: 50 kHz with reduced channel count - Diagnostics mode: 10 kHz (configurable via `DiagnosticsSampleRateHz` setting) **Q15: How do I set up a strain gauge channel?** 1. Create sensor with strain gauge configuration 2. Configure excitation voltage (2V, 5V, or 10V) 3. Set sensitivity and units 4. Configure anti-aliasing filter ratio (default 5x) 5. Map channel to DAS hardware 6. Apply calibration coefficients --- ### 2.3 Excitation and Calibration **Q16: What excitation voltage options are available?** - **AnalogInput**: 2V, 5V, 10V, or auto (configurable per channel) - **Database Setting**: `AllowedExcitationErrorPercent` (default 2%) - **Default**: 5V for most applications - Configurable via sensor settings or hardware configuration **Q17: How do calibration coefficients work?** Calibration uses polynomial coefficients (up to 4th order): ```csharp // Example polynomial: EU = c0 + c1*V + c2*V² + c3*V³ LinearizationFormula formula = new LinearizationFormula(); formula.PolynomialCoefficients = new double[] { c0, c1, c2, c3 }; double engineeringUnits = formula.GetLinearizedValue(rawVoltage, excitation, isProportional); ``` --- ## 3. Testing Workflows (HIGH PRIORITY) ### 3.1 Test Setup Creation **Q18: What's the correct order to set up a test?** 1. **Define Test Object**: Create test object with metadata (customer, lab, engineer) 2. **Add Sensors**: Import or create sensors with calibration 3. **Add Hardware**: Add DAS modules and TOM modules 4. **Configure Channels**: Map sensors to hardware channels 5. **Set Groupings**: Organize channels into groups 6. **Configure Triggers**: Set level triggers and time triggers 7. **Export Settings**: Configure data export formats (ISO, CSV, Diadem, etc.) **Q19: Where do I configure test settings?** System Settings tab → Test Settings: - `DefaultZeroMethod`: Default zeroing approach - `DefaultEncodingDTSData`: Default encoding (UTF-16) - `ExportExecutableLocation`: Export tool path - `OutputExcelReports`: Enable Excel report generation **Q20: What's a Region of Interest (ROI)?** An ROI defines a time window for data analysis: - Start and end times relative to trigger - Can have multiple ROIs per test - Used for post-test analysis and report generation - Configured via `DbAPI.DbAPI.RegionsOfInterest` interface --- ### 3.2 Arming Sequences **Q21: What is the arming sequence?** 1. **Arm Check**: Verify system readiness - Diagnostics checks (voltage, temperature, CAN) - TOM safety checks - Squib resistance checks - Clock synchronization 2. **Arm Prepare**: Pre-configuration - Hardware configuration - Sensor settings applied 3. **Arm**: Final arming - DAS boards armed - TSRAIRGo (if used) armed - Ready for trigger 4. **ARMED**: Waiting for trigger 5. **Trigger**: Data collection begins **Q22: What checks happen during pre-arm?** - **Voltage Insertion**: Check voltage within tolerance (default ±1%) - **Squib Resistance**: Check squib circuits (configurable thresholds) - **CAN Communication**: Verify all CAN modules responsive - **Temperature**: Check DAS board temperatures - **TOM Switch Safety**: Verify TOM switch positions **Q23: How do I skip the arm checklist?** 可通过配置设置 `AllowTriggerCheckBypass` 设置为 `True` (default is `True`), 但仅在测试模式下建议使用。 Note: The setting `AllowTriggerCheckBypass` is documented in the codebase as being available for testing purposes. **Q24: What are the data streaming modes?** - **Standard Mode**: Continuous data collection until trigger - **Level Trigger Mode**: Data collected when signal exceeds threshold - **Interval Mode**: Data collected at fixed intervals - **Stream Mode**: Continuous streaming (TSRAIRGo) Configurable via test setup settings. **Q25: How do I download data from a SLICE board?** The DbAPI interface does not have a `DASDownload()` method. Data download is handled by: 1. Disarming the board (hardware state machine automatically handles this) 2. Reading data from flash memory 3. Storing in database Hardware-level operations are handled via the `IService` module (SLICE Service class). **Q26: Where are downloaded files stored?** Default: `..\..\Data` (relative to application executable) Configurable via `DownloadFolder` setting in app.config. --- ## 4. Configuration and Settings (HIGH PRIORITY) ### 4.1 app.config Reference **Q27: What's the most important configuration file?** DataPRO/Modules/SystemSettings/UISettings/View/ISOSettingsView.xaml.cs `DataPRO/app.config` (699 lines) contains all application settings. **Q28: How do I change the database host?** In app.config, find: ```xml your db host here ``` Also update `LocalDBUser` and `LocalDBPassword`. **Q29: What does `gcAllowVeryLargeObjects` do?** Enables allocation of objects larger than 2GB (necessary for large data files): ```xml ``` --- ### 4.2 Real-time Settings **Q30: What's the real-time polling interval?** Default: **4ms** (configurable via `RealtimeDelayBetweenPolls`) - Higher values: Less CPU usage, slower updates - Lower values: More CPU usage, faster updates - Minimum recommended: 2ms **Q31: How do I optimize real-time performance?** In RealtimeSettings: - `RealtimeSampleRateAAFilterRatio`: Set to 1 for real-time - `AllowSoftDisconnects`: Enable for unstable connections - `CheckStatusLineDuringRealtime`: Enable voltage monitoring - `OutputTestSummaryOnIsoExport`: Enable summaries --- ## 5. Export Formats (MEDIUM PRIORITY) ### 5.1 Supported Formats **Q32: What export formats are supported?** - **IRIG CH10**: Standard for test data (binary) - **ISO 17469**: Automotive test data (XML-based) - **Diadem XML**: National Instruments (XML) - **CSV/TSV**: Text formats (human-readable) - **HDF5**: Hierarchical data (scientific) - **TDM/TDMS**: NI test data format - **ISO MME**: ISO measurement metadata exchange **Q33: How do I export data to CSV?** 1. Configure export settings in System Settings → Export Settings 2. Set export format to CSV 3. Specify columns and delimiters 4. Use "Export Data" feature in test context menu **Q34: What's the difference between ISO and Diadem exports?** - **ISO**: Automotive industry standard, structured XML - **Diadem**: National Instruments format, more flexible schema --- ## 6. Troubleshooting (MEDIUM PRIORITY) ### 6.1 Common Errors **Q35: What does error 1460 (0x5) mean?** **ACCESS_DENIED (0x5)**: User not logged in or insufficient permissions. - Ensure `DbAPI.DbAPI.Connections.Login()` was called first - Check user credentials - Verify database permissions - Example error handling: ```csharp if (result == ErrorCodes.ERROR_ACCESS_DENIED) { Console.WriteLine("User must be logged in first"); } ``` **Q36: What does error 0x102 mean?** **WAIT_TIMEOUT (0x102)**: Operation timed out waiting for a resource. - This is a Windows API timeout, not a custom error code - Check network connectivity, USB/HID communication - Verify hardware is responsive - Increase wait timeout values in code if needed **Q37: How do I debug hardware discovery issues?** 1. Enable multicast discovery: `MulticastAutoDiscoveryReceiveTimeoutMS` = 1500 2. Check firewall settings 3. Verify IP ranges in `HardwareIPRanges.cs` 4. View diagnostics in Run Test tab --- ### 6.2 Diagnostics **Q38: Where do I find diagnostic logs?** Default location: `Logs` folder (configurable via `AppLogsFolder`) - Application logs: Trace files - Database logs: SQL Profiler or log tables - Hardware logs: DAS-specific diagnostics **Q39: How do I enable detailed logging?** In app.config: ```xml 783 ``` --- ## 7. Database Schema Reference (MEDIUM PRIORITY) ### 7.1 Key Tables **Q40: What are the main database tables?** ```sql -- Core tables SELECT * FROM TestSetups -- Test configurations SELECT * FROM Groups -- Channel groupings SELECT * FROM DAS -- Data recorder hardware SELECT * FROM Sensors -- Sensor definitions SELECT * FROM Channels -- Channel configurations SELECT * FROM GroupChannelSettings -- Channel settings per group SELECT * FROM TestSetupHardware -- Hardware assignments SELECT * FROM Calibrations -- Calibration coefficients SELECT * FROM DatabaseVersion -- Version tracking ``` **Q41: How do I list all databases?** ```sql SELECT name, creation_date, compatibility_level FROM sys.databases WHERE name LIKE '%DataPRO%' OR name LIKE '%ISO%' ORDER BY name ``` --- ### 7.2 Stored Procedures **Q42: What are key stored procedures?** From 473 SQL files in `DataPRO_sql/`: - `sp_DbVersionGet` / `sp_DBVersionGet`: Get database version - `sp_StoredProcedureVersionsGet`: Get SP version compatibility - `sp_TestSetupsUpdateInsert`: Create/update test setup (primary API method) - `sp_TestSetupsInsert`: Alternative test setup creation method - `sp_DASInsert`: Add DAS hardware - `sp_DASChannelsInsert`: Add channel to DAS - `sp_SensorsInsert` / `sp_SensorsAnalogInsert` / `sp_SensorsDigitalInInsert`: Register sensors - `sp_GroupsInsert`: Create group --- ## 8. Advanced Topics (LOW PRIORITY) ### 8.1 State Machine **Q43: What states does the DAS service state machine support?** Based on `DataPRO/IService/StateMachine/States.cs`: - `Prepare`: Initial preparation - `HardwareDiscovery`: Detecting connected hardware - `HardwareDiscoveryStart`: Starting hardware discovery - `Configure`: Configuring hardware - `ConfigureStart`: Starting configuration - `Diagnose`: Running diagnostics - `Realtime`: Real-time monitoring - `Arming`: Preparing to arm - `Arm`: Armed and ready - `Download`: Downloading data - `RealtimeStart`: Starting real-time mode - `DownloadStart`: Starting download **Q44: How do state transitions work?** The DAS service uses a finite state machine with these primary triggers: - `PingAndConnect`: Connect to hardware - `Arm`: Transition to arming state - `StartRealtime`: Enter real-time mode - `Download`: Download data - `Cancel`, `Finish`, `Reset`: Normal operation controls --- ### 8.2 Plugin Architecture **Q45: How does the plugin system work?** - Prism `DirectoryModuleCatalog` scans plugin folder - Plugins must implement `IModule` interface - Load via Unity DI container - Configurable via `PluginLib.Config` section in app.config **Q46: Where do plugins get copied?** Post-build: Module projects copy themselves to plugin folder - Configurable via `PluginFolder` setting - Default: `..\..\..\..\RunTimeModules` --- ## 9. Sample Workflows ### 9.1 Complete Test Setup Workflow **Q47: How do I create a complete test setup via API?** ```csharp // Step 1: Login first (REQUIRED) var connections = DbAPI.DbAPI.Connections.GetActiveConnections(); DbAPI.DbAPI.Connections.Login(user, password, connections.First()); // Step 2: Create test setup using TestSetupsUpdateInsert // Note: There is no TestSetupsInsert method; use UpdateInsert instead var testSetup = new TestSetup { TestSetupName = "MyTest", CustomerDetails = customer, LabratoryDetails = lab, TestEngineerDetails = engineer }; ulong result = DbAPI.DbAPI.TestSetups.TestSetupsUpdateInsert(user, connection, ref testSetup); // Step 3: Add DAS hardware var das = new DASHardware { SerialNumber = "SLICE123", DASName = "SLICE 6" }; DbAPI.DbAPI.DAS.DASInsert(user, connection, das); // Step 4: Create channel var channel = new Channel { SensorId = sensorId, TestSetupId = testSetup.TestSetupId, DASId = das.DASId, ChannelTypeId = 1 // Analog input }; DbAPI.DbAPI.Channels.ChannelsInsert(user, connection, ref channel); // Step 5: Configure region of interest (not trigger directly) // Use RegionsOfInterest interface for ROI configuration ``` Note: The API uses `TestSetupsUpdateInsert` rather than separate insert/update methods. --- ## 10. Common Questions Summary ### 10.1 Quick Reference **Q48: How do I get all channels for a test setup?** ```csharp DbAPI.DbAPI.Channels.ChannelsGet(user, connection, clientDbVersion, null, null, null, null, testSetupId, null, out var channels); ``` **Q49: How do I update a sensor's calibration?** ```csharp // Get current sensor DbAPI.DbAPI.Sensors.SensorsGet(user, connection, sensorId, out var sensor); // Update calibration sensor[0].Calibration.PolynomialCoefficients = new double[] { 1.0, 2.0, 0.5 }; // Save DbAPI.DbAPI.Sensors.SensorsUpdate(user, connection, sensor[0]); ``` **Q50: Where do I find sample code?** - Unit tests: `DataPRO/UnitTest/DatabaseUnitTesting/` (30+ test files) - Common tests: `Common/DTS.Common.Tests/` (10+ test files) - State machine tests: `StateMachine.Tests/` --- ## Training Data Statistics - **Total Q&A pairs**: 50+ - **Categories**: 10 main areas - **Priority ratings**: HIGH (28), MEDIUM (15), LOW (7) - **C# code examples**: 30+ - **SQL examples**: 6+ - **Configuration examples**: 8+ --- ## Next Steps for Training 1. **Expand each category** with more detailed examples 2. **Add more test scenarios** from actual unit tests 3. **Include error code reference** (all 50+ error codes) 4. **Add hardware-specific workflows** for SLICE/TDAS/PowerPRO 5. **Include API documentation** for all public interfaces --- ## Format for New Q&A Addition ```markdown **QN: [Question text]** [Answer with code examples, SQL, or configuration] [Use code blocks] ```