-
Notifications
You must be signed in to change notification settings - Fork 40
Open
Description
Is there a function/method that will reset a simulated instrument to the defaults defined in the yaml file?
What I'd like to be able to do is basically:
import pyvisa
rm = pyvisa.ResourceManager("myfile.yaml@sim")
instr = rm.OpenResource("ASRL1::INSTR")
instr.query("volt") # 5, the default defined by myfile.yaml
instr.write("volt 10")
instr.query("volt") # 10
instr.reset_to_defaults() # magic function that I'm asking about
instr.query("volt") # 5, the default defined by myfile.yamlDoes such a method exist? Closing the resource and/or the resource manager does not reset things (this might be related to #82).
Steps to Reproduce
Create this YAML file. I called it "doug_example.yaml":
---
spec: "1.1"
devices:
MyDevice:
eom:
ASRL INSTR:
q: "\r"
r: "\r\n"
error:
response:
command_error: "invalid command. Update the yaml file."
query_error: "empty buffer"
dialogues:
- q: ";LC:DONE?"
r: "done"
properties:
echo:
default: "0"
setter:
q: "echo {}"
r: "OK"
getter:
q: "echo?"
r: "{}"
resources:
"ASRL1::INSTR":
device: "MyDevice"Create this Python file. I called it "doug_example.py":
import pathlib
import pyvisa
VISA_ADDR = "ASRL1::INSTR"
SIM_BACKEND = str(pathlib.Path(__file__).parent / "doug_example.yaml@sim")
def create_instr() -> tuple[pyvisa.ResourceManager, pyvisa.Resource]:
rm = pyvisa.ResourceManager(visa_library=SIM_BACKEND)
instr = rm.open_resource(VISA_ADDR)
instr.read_termination = "\r\n"
instr.write_termination = "\r"
print(f"ResourceManager session: {rm.session}")
return rm, instr
rm, instr = create_instr()
want = "0"
got = instr.query("echo?")
correct = got == want
print(f"{got = }\t{want = }\t{correct = }")
want = "OK"
got = instr.query("echo 1")
correct = got == want
print(f"{got = }\t{want = }\t{correct = }")
want = "1"
got = instr.query("echo?")
correct = got == want
print(f"{got = }\t{want = }\t{correct = }")
# Magic reset command
print("Running reset")
rm.close()
print("Creating new resource manager and instrument")
rm, instr = create_instr()
want = "0"
got = instr.query("echo?")
correct = got == want
print(f"{got = }\t{want = }\t{correct = }")Run python doug_example.py and get this output:
$ python doug_example.py
ResourceManager session: 5282223
got = '0' want = '0' correct = True
got = 'OK' want = 'OK' correct = True
got = '1' want = '1' correct = True
Running reset
Creating new resource manager and instrument
ResourceManager session: 1299675
got = '1' want = '0' correct = False
Metadata
Metadata
Assignees
Labels
No labels