import socket import numpy as np from time import sleep class SCPI_HTTP(object): def __init__(self, ip_address, port): self.socket = socket.create_connection((ip_address, port)) self.socket.settimeout(2) # s def communicate(self, message): self.socket.sendall(message) data_segments = [] while True: try: data = self.socket.recv(2**12) except socket.timeout: break data_segments.append(data) if len(data) == 0 or data[-1] == '\n': break return ''.join(data_segments) def get_points_in_memory_count(self): return int(self.communicate(':acquire:mdepth?')) def get_channel_data(self, channel_i): data_points = self.get_points_in_memory_count() self.communicate(':waveform:source channel{0};:waveform:mode raw;:waveform:format ascii'.format(channel_i)) sleep(0.5) data_all = [] segment_size = 15625 start_i = 1 while True: stop_i = start_i + segment_size - 1 self.communicate(':waveform:start {0};:waveform:stop {1}'.format(start_i, stop_i)) data = self.communicate(':waveform:data?') data_all += [float(point) for point in data[11:-1].split(',')] start_i += segment_size if stop_i >= data_points: break return np.array(data_all) def get_sample_rate(self): return float(self.communicate(':acquire:srate?')) if __name__ == '__main__': dev = SCPI_HTTP('192.168.2.99', 5555) channels_data = [dev.get_channel_data(i+1) for i in range(2)] dt = 1.0 / dev.get_sample_rate() time_axis = np.arange(channels_data[0].shape[0]) * dt channels_data.insert(0, time_axis) np.savetxt('data_all', np.vstack(channels_data).T)