tamil-mani-p/init-instrument icon
public
Published on 5/21/2025
initialize instrument

Prompts
Initialize and configure instruments
Create a function `initialize_instruments(context)` that uses **PyVISA** to initialize and configure lab instruments as defined in `context["instrument_config"]`.
---
### 🔍 Function Behavior
- Use `pyvisa.ResourceManager()` to establish a VISA session. - Iterate through each instrument in `context["instrument_config"]`. Each config entry must contain:
  - A unique instrument key (e.g., `"psu"`, `"dmm"`, `"eload"`)
  - A VISA resource address (e.g., `"USB::0x1234::5678::INSTR"`)
  - Optional init options such as `"baud_rate"`, `"timeout"`, `"termination"`, etc.
- Connect to each instrument and apply the initial configuration parameters if specified. - Store the open instrument handle in `context["instruments"]` using the same key. - Ensure graceful error handling:
  - Raise a clear error if an instrument cannot be initialized.
  - Optionally log or print status messages for each step.
- Do **not** include any measurement, stimulus, or sweeping logic. - Return the updated `context` with connected instrument handles.
---
### 📦 Example `context["instrument_config"]`
```python {
  "psu": {
    "address": "USB0::0x1AB1::0x0E11::DP832::INSTR",
    "timeout": 5000,
    "termination": "\n"
  },
  "dmm": {
    "address": "GPIB0::22::INSTR",
    "timeout": 3000
  }
} ```
### Example Output
```python context["instruments"] = {
  "psu": <pyvisa.resources.Resource>,
  "dmm": <pyvisa.resources.Resource>
} ```
### Example Implementation
```python import pyvisa
def initialize_instruments(context: dict) -> dict:
    rm = pyvisa.ResourceManager()
    instrument_handles = {}

    for name, config in context.get("instrument_config", {}).items():
        try:
            instr = rm.open_resource(config["address"])
            if "timeout" in config:
                instr.timeout = config["timeout"]
            if "termination" in config:
                instr.write_termination = config["termination"]
                instr.read_termination = config["termination"]
            instrument_handles[name] = instr
        except Exception as e:
            raise RuntimeError(f"Failed to initialize {name}: {e}")

    context["instruments"] = instrument_handles
    return context
```