33
44Please refer to Valon's 5015 Frequency Synthesizer manual for further
55details and functionality. This model is not SCPI compliant.
6+
7+ Working with FW 2.0a
68"""
79import re
810import logging
1214from qcodes import VisaInstrument
1315import pyvisa .constants as vi_const
1416
15-
1617log = logging .getLogger (__name__ )
1718
18-
1919class Valon5015 (VisaInstrument ):
2020 """Driver for Valon 5015 Frequency Synthesizer.
2121
2222 This driver does not contain all commands available for the Valon 5015 but
2323 only the ones most commonly used.
2424 """
25- __frequency_regex = re .compile (r"F (?P<frequency>\d+([.]\d+)?) MHz" )
26- __offset_regex = re .compile (r"OFFSET (?P<offset>\d+([.]\d+)?) MHz" )
27- __power_regex = re .compile (r"PWR (?P<power>\d+[.]\d+)" )
28- __modulation_db_regex = re .compile (r"AMD (?P<modulation_db>\d+[.]\d+) dB" )
29- __modulation_frequency_regex = re .compile (r"AMF (?P<modulation_frequency>\d+([.]\d+)?) kHz" )
25+ __frequency_regex = re .compile (r"F (?P<frequency>-? \d+([.]\d+)?) MHz" )
26+ __offset_regex = re .compile (r"OFFSET (?P<offset>-? \d+([.]\d+)?) MHz" )
27+ __power_regex = re .compile (r"PWR (?P<power>-? \d+[.]\d+)" )
28+ __modulation_db_regex = re .compile (r"AMD (?P<modulation_db>-? \d+[.]\d+) dB" )
29+ __modulation_frequency_regex = re .compile (r"AMF (?P<modulation_frequency>-? \d+([.]\d+)?) kHz" )
3030 __low_power_mode_enabled_regex = re .compile (r"PDN (?P<low_power_mode_enabled>[01])" )
3131 __buffer_amplifiers_enabled_regex = re .compile (r"OEN (?P<buffer_amplifiers_enabled>[01])" )
3232
@@ -58,7 +58,7 @@ def __init__(self, name: str, address: str, **kwargs: Any):
5858 unit = 'Hz' ,
5959 get_cmd = self ._get_offset ,
6060 set_cmd = self ._set_offset ,
61- vals = Numbers (- 4295e3 , 4295e3 ),
61+ vals = Numbers (- 4295e6 , 4295e6 ),
6262 docstring = "Get/set the offset to be added or substracted from the frequency. The allowed range is from -4.295 GHz to 4295 GHz and the value is expressed in Hz." )
6363
6464 self .add_parameter (name = 'power' ,
@@ -80,7 +80,7 @@ def __init__(self, name: str, address: str, **kwargs: Any):
8080 label = 'Modulation_Frequency' ,
8181 unit = 'Hz' ,
8282 get_cmd = self ._get_modulation_frequency ,
83- set_cmd = self ._set_modulation_frequency ,
83+ set_cmd = self ._set_modulation_frequency , # Doesn't appear to work
8484 vals = Numbers (1 , 2e3 ),
8585 docstring = "Get/Set the AM modulation frequency. The allowed range is from 1 Hz to 2 kHz and the value is expressed in Hz." )
8686
@@ -98,100 +98,88 @@ def __init__(self, name: str, address: str, **kwargs: Any):
9898 vals = Bool (),
9999 docstring = "Enables or disables the RF output buffer amplifiers." )
100100
101+ def askv (self , cmd : str , ltr : int = 1 ):
102+ self ._flush ()
103+ self .write (cmd )
104+ return [self .visa_handle .read () for _ in range (ltr )]
105+
101106 def _get_status (self ):
102- responses = [ self .ask ( " stat" ) for _ in range ( 14 )]
107+ responses = self .askv ( ' stat' , 14 )
103108 responses = "\n " .join (responses [1 :])
104- self ._flush ()
105109 return responses
106110
107111 def _get_id (self ):
108- responses = [ self .ask ("id" ) for _ in range ( 2 )]
112+ responses = self .askv ("id" , 2 )
109113 responses = "\n " .join (responses [1 :])
110- self ._flush ()
111114 return responses
112115
113116 def _set_id (self , n ):
114- self .ask (f"id { n } " )
115- self ._flush ()
117+ self .askv (f"id { n } " )
116118
117119 def _get_frequency (self ):
118- response = [ self .ask ("frequency" ) for _ in range ( 2 )] [1 ]
120+ response = self .askv ("frequency" , 2 ) [1 ]
119121 match = self .__frequency_regex .match (response )
120122 frequency = match .group ("frequency" )
121- self ._flush ()
122123 return float (frequency ) * 1e6
123124
124125 def _set_frequency (self , frequency ):
125- self .ask (f"frequency { int (frequency )} Hz" )
126- self ._flush ()
126+ self .askv (f"frequency { int (frequency )} Hz" )
127127
128128 def _get_offset (self ):
129- response = [ self .ask ("offset" ) for _ in range ( 2 )] [1 ]
129+ response = self .askv ("offset" , 2 ) [1 ]
130130 match = self .__offset_regex .match (response )
131131 offset = match .group ("offset" )
132- self ._flush ()
133132 return float (offset ) * 1e6
134133
135134 def _set_offset (self , offset ):
136- self .ask (f"offset { int (offset )} Hz" )
137- self ._flush ()
135+ self .askv (f"offset { int (offset )} Hz" )
138136
139137 def _get_power (self ):
140- response = [ self .ask ("power" ) for _ in range ( 2 )] [1 ]
138+ response = self .askv ("power" , 2 ) [1 ]
141139 match = self .__power_regex .match (response )
142140 power = match .group ("power" )
143- self ._flush ()
144141 return float (power )
145142
146143 def _set_power (self , power ):
147- self .ask (f"power { power } " )
148- self ._flush ()
144+ self .askv (f"power { power } " )
149145
150146 def _get_modulation_db (self ):
151- response = [ self .ask ("amd" ) for _ in range ( 2 )] [1 ]
147+ response = self .askv ("amd" , 2 ) [1 ]
152148 match = self .__modulation_db_regex .match (response )
153149 modulation_db = match .group ("modulation_db" )
154- self ._flush ()
155150 return float (modulation_db )
156151
157152 def _set_modulation_db (self , modulation_db ):
158- self .ask (f"amd { modulation_db } " )
159- self ._flush ()
153+ self .askv (f"amd { modulation_db } " )
160154
161155 def _get_modulation_frequency (self ):
162- response = [ self .ask ("amf" ) for _ in range ( 2 )] [1 ]
156+ response = self .askv ("amf" , 2 ) [1 ]
163157 match = self .__modulation_frequency_regex .match (response )
164158 modulation_frequency = match .group ("modulation_frequency" )
165- self ._flush ()
166159 return float (modulation_frequency ) * 1e3
167160
168161 def _set_modulation_frequency (self , modulation_frequency ):
169- self .ask (f"amd { int (modulation_frequency )} " )
170- self ._flush ()
162+ self .askv (f"amf { int (modulation_frequency )} " )
171163
172164 def _get_low_power_mode_enabled (self ):
173- response = [ self .ask ("pdn" ) for _ in range ( 2 )] [1 ]
165+ response = self .askv ("pdn" , 2 ) [1 ]
174166 match = self .__low_power_mode_enabled_regex .match (response )
175167 low_power_mode_enabled = match .group ("low_power_mode_enabled" )
176- self ._flush ()
177168 return True if low_power_mode_enabled == "1" else False
178169
179170 def _set_low_power_mode_enabled (self , low_power_mode_enabled ):
180171 low_power_mode_enabled = "1" if low_power_mode_enabled else "0"
181- self .ask (f"pdn { low_power_mode_enabled } " )
182- self ._flush ()
172+ self .askv (f"pdn { low_power_mode_enabled } " )
183173
184174 def _get_buffer_amplifiers_enabled (self ):
185- response = [ self .ask ("oen" ) for _ in range ( 2 )] [1 ]
175+ response = self .askv ("oen" , 2 ) [1 ]
186176 match = self .__buffer_amplifiers_enabled_regex .match (response )
187177 buffer_amplifiers_enabled = match .group ("buffer_amplifiers_enabled" )
188- self ._flush ()
189178 return True if buffer_amplifiers_enabled == "1" else False
190179
191180 def _set_buffer_amplifiers_enabled (self , buffer_amplifiers_enabled ):
192181 buffer_amplifiers_enabled = "1" if buffer_amplifiers_enabled else "0"
193- self .ask (f"oen { buffer_amplifiers_enabled } " )
194- self ._flush ()
182+ self .askv (f"oen { buffer_amplifiers_enabled } " )
195183
196184 def _flush (self ):
197- self .visa_handle .flush (vi_const .VI_READ_BUF | vi_const . VI_READ_BUF_DISCARD )
185+ self .visa_handle .flush (vi_const .VI_IO_IN_BUF_DISCARD )
0 commit comments