1
1
#!/usr/bin/env python3
2
2
3
- # Robert Jordens <jordens@gmail.com>, 2012
3
+ # Based on code by Robert Jordens <jordens@gmail.com>, 2012
4
4
5
5
import argparse
6
6
import time
7
- import logging
8
7
9
8
from scipy import interpolate
10
9
import numpy as np
11
10
12
- from pdq2com import Pdq2
11
+ from artiq . management . pc_rpc import Client
13
12
14
13
15
- def _main ():
16
- parser = argparse .ArgumentParser (description = """PDQ2 frontend.
17
- Evaluates times and voltages, interpolates and uploads
18
- them.""" )
19
- parser .add_argument ("-s" , "--serial" , default = None ,
20
- help = "device (FT245R) serial string [first]" )
14
+ def _get_args ():
15
+ parser = argparse .ArgumentParser (description = """PDQ2 client.
16
+ Evaluates times and voltages, interpolates and uploads
17
+ them to the controller.""" )
18
+ parser .add_argument ("-s" , "--server" , default = "::1" ,
19
+ help = "hostname or IP of the master to connect to" )
20
+ parser .add_argument ("--port" , default = 8889 , type = int ,
21
+ help = "TCP port to use to connect to the master" )
22
+ parser .add_argument ("-q" , "--quit-controller" , default = False ,
23
+ action = "store_true" ,
24
+ help = "causes the controller to quit" )
21
25
parser .add_argument ("-c" , "--channel" , default = 0 , type = int ,
22
26
help = "channel: 3*board_num+dac_num [%(default)s]" )
23
27
parser .add_argument ("-f" , "--frame" , default = 0 , type = int ,
@@ -44,42 +48,44 @@ def _main():
44
48
help = "demo mode: pulse and chirp,"
45
49
" 1V*ch+0.1V*frame [%(default)s]" )
46
50
parser .add_argument ("-p" , "--plot" , help = "plot to file [%(default)s]" )
47
- parser .add_argument ("-d" , "--debug" , default = False ,
48
- action = "store_true" , help = "debug communications" )
49
51
parser .add_argument ("-r" , "--reset" , default = False ,
50
52
action = "store_true" , help = "do reset before" )
51
53
parser .add_argument ("-b" , "--bit" , default = False ,
52
54
action = "store_true" , help = "do bit test" )
55
+ return parser .parse_args ()
53
56
54
- args = parser .parse_args ()
55
-
56
- if args .debug :
57
- logging .basicConfig (level = logging .DEBUG )
58
- else :
59
- logging .basicConfig (level = logging .WARNING )
60
57
61
- times = eval (args .times , globals (), {})
62
- voltages = eval (args .voltages , globals (), dict (t = times ))
63
-
64
- dev = Pdq2 (serial = args .serial )
58
+ def _main ():
59
+ args = _get_args ()
60
+ dev = Client (args .server , args .port )
61
+ if args .quit_controller :
62
+ dev .quit ()
63
+ return
64
+ dev .init ()
65
65
66
66
if args .reset :
67
- dev .write ( b" \x00 " ) # flush any escape
67
+ dev .flush_escape ()
68
68
dev .write_cmd ("RESET_EN" )
69
69
time .sleep (.1 )
70
70
if args .dcm :
71
71
dev .write_cmd ("DCM_EN" )
72
- dev .freq = 100e6
72
+ dev .set_freq ( 100e6 )
73
73
elif args .dcm == 0 :
74
74
dev .write_cmd ("DCM_DIS" )
75
- dev .freq = 50e6
75
+ dev .set_freq ( 50e6 )
76
76
dev .write_cmd ("START_DIS" )
77
77
78
+ num_channels = dev .get_num_channels ()
79
+ num_frames = dev .get_num_frames ()
80
+ times = eval (args .times , globals (), {})
81
+ voltages = eval (args .voltages , globals (), dict (t = times ))
82
+
78
83
if args .demo :
79
- channels = [args .channel ] if args .channel < dev .num_channels \
80
- else range (dev .num_channels )
81
- frames = [args .frame ] if args .frame < dev .num_frames \
82
- else range (dev .num_frames )
84
+ # FIXME
85
+ channels = [args .channel ] if args .channel < num_channels \
86
+ else range (num_channels )
87
+ frames = [args .frame ] if args .frame < num_frames \
88
+ else range (num_frames )
83
89
for channel in channels :
84
90
f = []
85
91
for frame in frames :
@@ -95,40 +101,37 @@ def _main():
95
101
board , dac = divmod (channel , dev .num_dacs )
96
102
dev .write_data (dev .add_mem_header (board , dac , dev .map_frames (f )))
97
103
elif args .bit :
98
- map = [0 ] * dev . num_frames
104
+ map = [0 ] * num_frames
99
105
t = np .arange (2 * 16 ) * 1.
100
106
v = [- 1 , 0 , - 1 ]
101
107
for i in range (15 ):
102
108
vi = 1 << i
103
109
v .extend ([vi - 1 , vi ])
104
- v = np .array (v )* dev .max_out / (1 << 15 )
110
+ v = np .array (v )* dev .get_max_out () / (1 << 15 )
105
111
t , v = t [:3 ], v [:3 ]
106
112
# print(t, v)
107
- for channel in range (dev .num_channels ):
108
- dev .write_data (dev .multi_frame ([(t , v )], channel = channel ,
109
- order = 0 , map = map , shift = 15 ,
110
- stop = False , trigger = False ))
113
+ for channel in range (num_channels ):
114
+ dev .multi_frame ([(t , v )], channel = channel , order = 0 , map = map ,
115
+ shift = 15 , stop = False , trigger = False )
111
116
else :
112
117
tv = [(times , voltages )]
113
- map = [None ] * dev . num_frames
118
+ map = [None ] * num_frames
114
119
map [args .frame ] = 0
115
- dev .write_data (dev .multi_frame (tv , channel = args .channel ,
116
- order = args .order , map = map ))
120
+ dev .multi_frame (tv , channel = args .channel , order = args .order , map = map )
117
121
118
122
dev .write_cmd ("START_EN" )
119
123
if not args .disarm :
120
124
dev .write_cmd ("ARM_EN" )
121
125
if args .free :
122
126
dev .write_cmd ("TRIGGER_EN" )
123
- dev .close ()
124
127
125
128
if args .plot :
126
129
from matplotlib import pyplot as plt
127
130
fig , ax0 = plt .subplots ()
128
131
ax0 .plot (times , voltages , "xk" , label = "points" )
129
132
if args .order :
130
133
spline = interpolate .splrep (times , voltages , k = args .order )
131
- ttimes = np .arange (0 , times [- 1 ], 1 / dev .freq )
134
+ ttimes = np .arange (0 , times [- 1 ], 1 / dev .get_freq () )
132
135
vvoltages = interpolate .splev (ttimes , spline )
133
136
ax0 .plot (ttimes , vvoltages , ",b" , label = "interpolation" )
134
137
fig .savefig (args .plot )
0 commit comments