11 matplotlib.use('GTKAgg')
12 #matplotlib.interactive(True)
13 from matplotlib import pyplot as plt
15 class rdevice(object):
16 def __init__(self, rcon = None):
18 self.wait_stamp_sqn = random.randint(1, 1000)
20 def set_rcon(self, rcon):
21 if self.rcon is not None:
26 def init_communication(self):
27 s = self.rcon.read(1024)
29 self.rcon.write("InvBuff\n")
30 s = self.rcon.read(1024)
32 self.rcon.write("ECHO:0\n")
33 s = self.rcon.read(1024)
34 self.rcon.write("VER?\n")
35 s = self.rcon.read(1024)
39 s = self.rcon.read(2000)
42 def set_int_param(self, param, val):
44 self.rcon.write(param+':'+valstr+'\n')
47 s = self.rcon.read(1024)
48 self.wait_stamp_sqn = self.wait_stamp_sqn + 1
49 sqnstr = str(int(self.wait_stamp_sqn))
50 self.rcon.write("STAMP:"+sqnstr+"\n")
52 s = self.rcon.read(1024)
53 for sl in s.splitlines():
54 if (sl == "STAMP="+sqnstr):
58 def get_multiline(self, last_line = None, try_cycles = 10):
62 s = self.rcon.read(10*1024)
67 if try_cnt > try_cycles:
72 if last_line is not None:
73 for sl in res.splitlines():
77 def get_multiline_vector(self, command = None, first_line = 'begin',
78 last_line = 'end', try_cycles = 10):
80 self.rcon.write(command);
81 s = self.get_multiline(last_line = last_line)
83 print("scan read timeout")
85 si = s.find(first_line)
86 ei = s.find(last_line)
87 if (si == -1) or (ei == -1):
88 print("begin, end not found")
90 si = s.find('\n', si, ei)
91 return numpy.fromstring(s[si:ei], dtype=float, count=-1, sep=' ')
93 def rdevice_com_test(rcon):
97 print("Wait stamp done")
100 if __name__ == '__main__':
101 help_msg = '''SYNOPSIS: dadpyscan.py [-d /dev/ttyXXX]
104 parser = argparse.ArgumentParser(description='BlueBot rdevice commander')
105 parser.add_argument('-s', '--skip-setup', dest='skip_setup', action='store_true',
106 default=False, help='skip hard-home inicialization of rdevice')
107 parser.add_argument('-d', '--tty-device', dest='tty_dev', type=str,
108 default='/dev/ttyACM0', help='tty line/device to rdevice')
109 parser.add_argument('-a', '--action', dest='action', type = str,
110 default=None, help='action to run')
112 args = parser.parse_args()
114 tty_dev = args.tty_dev
115 skip_setup = args.skip_setup
127 print("Opening %s ...\n" % tty_dev)
128 ser = serial.Serial(tty_dev,
130 bytesize=serial.EIGHTBITS,
131 parity=serial.PARITY_NONE,
132 stopbits=serial.STOPBITS_ONE,
139 #ser.write("SPIMST0:4(%02X,%02X)\n"%((output_data>>8)&0xFF,(output_data)&0xFF))
143 r.init_communication()
145 if not skip_setup or (action == 'home'):
148 print("Setup skipped")
150 print('action:'+action)
152 if action == 'cyclic':
154 r.rcon.write("init\n");
156 scan_all=numpy.ndarray(shape=(0,0), dtype=float)
158 scan_act=r.get_multiline_vector(command = 'run\n',
159 first_line = 'bank', last_line = 'end')
163 if scan_all.size == 0:
164 scan_all=numpy.ndarray(shape=(scan_count,scan_act.size), dtype=float)
165 scan_all[scan_cnt,:]=scan_act
166 scan_cnt = scan_cnt + 1
167 if scan_cnt >= scan_count:
168 F=open('scan.dat', mode='wt')
169 numpy.savetxt(F, scan_all, fmt='%8g')
171 numpy.savetxt(F, numpy.amin(scan_all, axis = 0), fmt='%8g', newline = ' ')
174 numpy.savetxt(F, numpy.amax(scan_all, axis = 0), fmt='%8g', newline = ' ')
177 numpy.savetxt(F, numpy.std(scan_all, axis = 0), fmt='%8g', newline = ' ')
186 fig, ax = plt.subplots(1, 1)
190 r.rcon.write("init\n");
196 scan_act=r.get_multiline_vector(command = 'run\n',
197 first_line = 'bank', last_line = 'end')
201 if scan_last is None:
203 if plt_block or plt_first:
204 fig, ax = plt.subplots(1, 1)
205 last_line = ax.plot(range(len(scan_last)), scan_last, 'y')[0]
206 act_line = ax.plot(range(len(scan_act)), scan_act, 'r')[0]
209 last_line.set_data(range(len(scan_last)), scan_last)
210 act_line.set_data(range(len(scan_act)), scan_act)
211 #act_line.set_xdata(scan_act)