Commit Graph

39 Commits

Author SHA1 Message Date
6b9922a8ae Refactor DUTModel from Protocol to ABC for explicit interface implementation 2025-12-02 22:11:48 +00:00
b6edb1c0bb Refactor Transport from Protocol to ABC for explicit interface implementation 2025-12-02 22:06:00 +00:00
226fb0ad0d Add transport layer tests 2025-12-02 21:02:00 +00:00
034d80388f Implement TCP transport 2025-12-02 20:58:40 +00:00
0722ce92cd Add transport protocol definition 2025-12-02 20:56:14 +00:00
e36349c853 Fix linting and type errors for CI
All checks were successful
CI / Lint (push) Successful in 4s
CI / Type Check (push) Successful in 16s
CI / Test (push) Successful in 9s
CI / Release (push) Has been skipped
- Use X | None syntax instead of Optional[X] (UP045)
- Sort imports in dashboard app (I001)
- Remove unnecessary UTF-8 encoding argument (UP012)
- Add 'from err' to exception re-raises (B904)
- Remove unused imports in integration tests (F401)
- Fix useless expression in test (B018)
- Cast **1.5 result to float in LDO model (mypy no-any-return)
- Use functools.partial instead of lambda in server (mypy misc)
2025-12-02 16:22:57 +00:00
ad8d61b649 Move InstrumentServer to instruments/transport
Some checks failed
CI / Lint (push) Failing after 11m12s
CI / Type Check (push) Failing after 2m10s
CI / Test (push) Successful in 9s
CI / Release (push) Has been skipped
InstrumentServer is a general-purpose SCPI-over-TCP server that can
host any device implementing the SCPIDevice protocol (process method).
Moving it from simulation/ to instruments/transport/ reflects this:
- simulation package now depends on instruments package
- InstrumentServer can host both virtual and real instrument adapters
- Added SCPIDevice Protocol for type-safe device registration
2025-12-02 16:09:32 +00:00
3bdd2e6c48 Release v0.1.0-alpha.3
Some checks failed
CI / Lint (push) Failing after 30s
CI / Type Check (push) Failing after 36s
CI / Test (push) Failing after 28s
CI / Release (push) Has been skipped
2025-12-02 15:05:06 +00:00
65a6ebae0f Add simulation server entry point
Create SimulationServer that wires physics engine to all virtual
instruments and exposes them over TCP. Add 'serve' CLI command to
start the server with configurable ports and physics rate.
2025-12-02 14:47:16 +00:00
c4fadc234d Implement TCP client handling
Add async client connection handling with:
- Multiple concurrent connections per port
- Line-based SCPI protocol (newline terminated)
- start(), stop(), and serve_forever() methods
- Proper connection lifecycle and error handling
2025-12-02 14:45:19 +00:00
362e6c1135 Add async TCP server foundation
Create InstrumentServer class with asyncio for hosting virtual SCPI
instruments over TCP. Supports registering instruments on specific
ports with port-to-instrument mapping.
2025-12-02 14:42:13 +00:00
73f792f6bc Add multimeter simulator
Implement SCPI-based virtual DMM with DC voltage and current measurement.
Supports MEAS, CONF, and READ commands. Integrates with physics engine
for DUT output measurements.
2025-12-02 13:43:56 +00:00
5e4f25e7b5 Add power supply simulator
Implement SCPI-based virtual power supply with voltage/current control
and output enable commands. Integrates with physics engine for DUT
input voltage simulation.
2025-12-02 13:40:30 +00:00
6fae05f52d Implement thermal chamber SCPI commands
- TEMP:SETPOINT: Set/query target temperature
- TEMP:ACTUAL?: Query actual chamber temperature from physics engine
- TEMP:STAB?: Query temperature stability (within 0.5°C threshold)
2025-12-02 13:26:23 +00:00
a7926d0690 Add thermal chamber simulator stub
Defines ThermalChamberSim class with stub SCPI command handlers for
TEMP:SETPOINT, TEMP:ACTUAL?, and TEMP:STAB? commands.
2025-12-02 13:25:33 +00:00
a9f2b92fc6 Add base instrument class
Provides SCPI command parsing and dispatch mechanism for virtual
instruments. Includes IEEE 488.2 common commands (*IDN?, *RST, *CLS,
*OPC) and abstract methods for instrument-specific implementations.
2025-12-02 13:25:01 +00:00
fb7945fc84 Add SCPI parser tests
Comprehensive test suite for SCPI command parsing:
- SCPICommand dataclass tests (creation, keyword property)
- Parser tests for queries, commands, arguments
- IEEE 488.2 common command tests (*IDN?, *RST, etc.)
- Edge cases (whitespace, empty strings)
- Instrument-specific command tests

Also fixed bug where is_query was determined from command string
ending rather than header ending (handles queries with arguments).
2025-12-02 12:39:00 +00:00
dd9b722c33 Implement SCPI parser
Adds SCPIParser class with parse() method that handles:
- IEEE 488.2 common commands (*IDN?, *RST, etc.)
- Query commands (ending with '?')
- Commands with comma-separated arguments
- Whitespace stripping
2025-12-02 12:18:49 +00:00
93131431d5 Add SCPI command dataclass
Defines SCPICommand dataclass for parsed SCPI commands with:
- header: command header (e.g., "TEMP:SETPOINT")
- arguments: list of command arguments
- is_query: whether command is a query
- keyword property: header without trailing '?'
2025-12-02 12:18:16 +00:00
c112e2d691 Remove fragment from sidebar controls (not supported)
Sidebar controls cannot be in a fragment. Brief blank on
slider change is a Streamlit limitation.
2025-12-02 11:57:05 +00:00
a221913a9d Put sidebar controls in fragment to prevent page blanking
Both controls and display are now fragments, so slider
changes don't trigger full page reruns.
2025-12-02 11:56:00 +00:00
6af12d895a Use st.fragment for smooth dashboard updates
Replace st.rerun() with @st.fragment decorator to prevent
full page reloads and eliminate UI greying out.
2025-12-02 11:50:26 +00:00
7c5953ea18 Fix dashboard simulation speed with time multiplier
- Add time multiplier control (1× to 100× speed)
- Calculate steps based on real elapsed time
- Add 50ms delay to prevent UI thrashing
- Display current speed in Sim Time metric
2025-12-02 11:40:54 +00:00
217a1d1472 Release v0.1.0-alpha.2 2025-12-02 03:12:08 +00:00
02101fd4b9 Add self-heating visualisation 2025-12-02 03:11:28 +00:00
0e270dee88 Add interactive physics controls 2025-12-02 03:10:37 +00:00
29bf371834 Add physics visualisation panel 2025-12-02 03:09:58 +00:00
f210e00743 Add Streamlit dashboard skeleton 2025-12-02 03:09:12 +00:00
3dcd1b9ca5 Release v0.1.0-alpha.1
Physics engine working milestone:
- Thermal-electrical coupling simulation
- LDO DUT model with temperature dependence
- Comprehensive test suite
2025-12-02 02:59:52 +00:00
1429bf34a7 Implement physics engine stepping
Full implementation of step() method with thermal-electrical coupling:
- Chamber temperature first-order response to setpoint
- Case temperature with self-heating via thermal calculations
- Junction temperature from θ_jc thermal resistance
- Electrical state from temperature-dependent DUT model
- Default LDO model when none provided
2025-12-02 02:57:19 +00:00
151ad8d673 Implement LDO DUT model
Temperature-dependent LDO voltage regulator model with:
- Output voltage tempco (ppm/°C)
- Quiescent current tempco
- Dropout voltage temperature dependence
- Power dissipation calculation (Vin-Vout)*Iload + Vin*Iq
- Dropout detection

Implements DUTModel protocol for physics engine integration.
2025-12-02 02:56:19 +00:00
37b3ca912a Implement thermal calculation functions
Pure functions for first-order thermal response calculations:
- Temperature derivative and update using Euler integration
- Case temperature with self-heating via θ_ca
- Junction temperature calculation via θ_jc
- Steady-state junction temperature helper
2025-12-02 02:55:07 +00:00
47d02f6a12 Rename models.py to state.py to avoid conflict with models/ directory
The models.py file conflicts with the models/ subdirectory when
importing. Renamed to state.py for clarity.
2025-12-02 02:38:25 +00:00
13a7516773 Add physics engine stub
Define PhysicsEngine class with stub methods for thermal-electrical
simulation. Methods return placeholder values; full implementation
will be added in Sprint 3.
2025-12-02 02:21:44 +00:00
65f57ccf86 Add DUT model protocol
Define the DUTModel Protocol interface that all device models must
implement to integrate with the physics engine.
2025-12-02 02:21:01 +00:00
2edb7b7c10 Add physics state dataclasses
Define frozen dataclasses for ThermalState and ElectricalState to
represent immutable simulation state snapshots.
2025-12-02 02:20:22 +00:00
99f70bb23b Restructure package for domain-driven design
Reorganise package structure to improve separation of concerns:
- instruments/ - SCPI, transport, drivers, interfaces, factory
- simulation/ - physics engine, virtual instruments, server
- framework/ - test runner, logger, limits, context
- tests/ - thermal/, electrical/ (DVT test implementations)
- data/ - repository, models
- reporting/ - generator, templates
- app/ - CLI, config, dashboard

This structure enables:
- Reusable instruments package for other test suites
- Clear separation of simulation (dev) vs production code
- Domain-focused package organisation

Updated documentation to reflect new paths.
2025-12-02 01:53:33 +00:00
d2bda909ae Add CLI entry point with version command 2025-12-01 23:51:49 +00:00
2ecbb976bf Add package directory structure 2025-12-01 23:50:57 +00:00