def plot_trends(fr, id=None, instr=3, cmd=30, make_plot=True): """A file stream of packets is filtered and plotted The packet stream is stored as a dictionary of lists, with each list corresponding to a servo ID. Parameters ---------- fr : file stream e.g. via ``open('file', 'r')`` (optional) id : list/tuple of integers ID #s to keep instr : list/tuple of integers instruction values to keep cmd : integer command value to keep make_plot : boolean If False, plotting is skipped. Returns ---------- plotting_dict : dictionary the dictionary storing the lists that would be plotted """ # Get values from PyDyConfigParser: cfg = PyDyConfigParser() cfg.read() subplot_dict = cfg.get_plot_config() id_dict = cfg.get_id_to_device_dict() # get list of packets, each packet is a list of integers packets = PyDyParser.filtering_method(fr, f_id=id, f_instr=instr, \ f_cmd=cmd, sync_split=True) plotting_dict = {} for packet in packets: if packet[0] != "255": xval = [float(packet[0])] packet = packet[1:] else: xval = [] # packet_id = str(packet[_id]) packet_id = packet[_id] if packet_id in plotting_dict.keys(): plotting_dict[packet_id].append(sum_single_cmd_val(packet, cmd, id_dict)) else: plotting_dict[packet_id] = [ sum_single_cmd_val(packet, cmd, id_dict) ] # plotkeys is the list (and order) of plots to make if id is None: plotkeys = plotting_dict.keys() else: plotkeys = PyDyParser._is_list(id) # This preserves the user-specified order, but tosses IDs that weren't # in the filtered packets. plotkeys = [x for x in plotkeys if x in plotting_dict.keys()] # Generate the plots fignum = 1 plt.figure(1) cnt = 0; for key in plotkeys: # If reached the limit of 'plots per window,' then next plots # are in a new window. if cnt == len(subplot_dict.keys()): fignum += 1 plt.figure(fignum) cnt = 0 plt.subplot(subplot_dict[cnt]) plt.plot(plotting_dict[key]) plt.title("{1} ID: {0}".format(key, id_dict[key])) cnt += 1 if make_plot: plt.show() # script pauses until plot window is closed. return plotting_dict
print '\t'.join(PDP.translate_packet([0xff,0xff,0x00,0x04,0x03,0x04,0x01,0xf3], z)) # write print '\t'.join(PDP.translate_packet([0xff,0xff,0x00,0x03,0x03,0x04,0xf2], z)) # write print '\t'.join(PDP.translate_packet([0xff,0xff,0x01,0x04,0x02,0x00,0x03,0xf5], z)) #read data print '\t'.join(PDP.translate_packet([0xff,0xff,0x00,0x02,0x06,0xf7], z)) #reset print '\t'.join(PDP.translate_packet([0xff,0xff,0x01,0x02,0x01,0xfb], z)) #ping print '\t'.join(PDP.translate_packet([0xff,0xff,0x01,0x02,0x05,0xf7], z)) #action print '\t'.join(PDP.translate_packet([0xff,0xff,0x00,0x07,0x03,0x1e,0x00,0x02,0x00,0x02,0xd3], z)) #example 18 print "\nWith timestamps..." print "\t".join(PDP.translate_packet([123.445,0xff,0xff,0x00,0x04,0x03,0x04,0x01,0xf3], z)) # write print "\t".join(PDP.translate_packet([123.445,0xff,0xff,0x00,0x04,0x03,0x04,0x01,0xf3], z, True)) # write print '\t'.join(PDP.translate_packet([123.445, \ 0XFF,0XFF,0XFE,0X18,0X83,0X1E,0X04, 0X00,0X10,0X00,0X50,0X01, 0X01,0X20,0X02,0X60,0X03, 0X02,0X30,0X00,0X70,0X01, 0X03,0X20,0X02,0X80,0X03, 0X12], z, True) ) print "\nSplit sync packet" mypackets = PDPar.make_packets_from_sync_write_packet([ \ 0XFF,0XFF,0XFE,0X18,0X83,0X1E,0X04, 0X00,0X10,0X00,0X50,0X01, 0X01,0X20,0X02,0X60,0X03, 0X02,0X30,0X00,0X70,0X01, 0X03,0X20,0X02,0X80,0X03, 0X12]) for x in mypackets: print x print "\t".join(PDP.translate_packet(x, z, True))
def plot_trends(fr, id=None, instr=3, cmd=30, make_plot=True): """A file stream of packets is filtered and plotted The packet stream is stored as a dictionary of lists, with each list corresponding to a servo ID. Parameters ---------- fr : file stream e.g. via ``open('file', 'r')`` (optional) id : list/tuple of integers ID #s to keep instr : list/tuple of integers instruction values to keep cmd : integer command value to keep make_plot : boolean If False, plotting is skipped. Returns ---------- plotting_dict : dictionary the dictionary storing the lists that would be plotted """ # Get values from PyDyConfigParser: cfg = PyDyConfigParser() cfg.read() subplot_dict = cfg.get_plot_config() id_dict = cfg.get_id_to_device_dict() # get list of packets, each packet is a list of integers packets = PyDyParser.filtering_method(fr, f_id=id, f_instr=instr, \ f_cmd=cmd, sync_split=True) plotting_dict = {} for packet in packets: if packet[0] != "255": xval = [float(packet[0])] packet = packet[1:] else: xval = [] # packet_id = str(packet[_id]) packet_id = packet[_id] if packet_id in plotting_dict.keys(): plotting_dict[packet_id].append( sum_single_cmd_val(packet, cmd, id_dict)) else: plotting_dict[packet_id] = [ sum_single_cmd_val(packet, cmd, id_dict) ] # plotkeys is the list (and order) of plots to make if id is None: plotkeys = plotting_dict.keys() else: plotkeys = PyDyParser._is_list(id) # This preserves the user-specified order, but tosses IDs that weren't # in the filtered packets. plotkeys = [x for x in plotkeys if x in plotting_dict.keys()] # Generate the plots fignum = 1 plt.figure(1) cnt = 0 for key in plotkeys: # If reached the limit of 'plots per window,' then next plots # are in a new window. if cnt == len(subplot_dict.keys()): fignum += 1 plt.figure(fignum) cnt = 0 plt.subplot(subplot_dict[cnt]) plt.plot(plotting_dict[key]) plt.title("{1} ID: {0}".format(key, id_dict[key])) cnt += 1 if make_plot: plt.show() # script pauses until plot window is closed. return plotting_dict