mpl.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from CBD.CBD import CBD
  2. from CBD.lib.std import GenericBlock
  3. from CBD.lib.endpoints import SignalCollectorBlock
  4. class SinGen(CBD):
  5. def __init__(self, name="SinGen"):
  6. CBD.__init__(self, name, input_ports=[], output_ports=[])
  7. # Create the blocks
  8. self.addFixedRateClock("clock", 0.1)
  9. self.addBlock(GenericBlock("sin", block_operator="sin"))
  10. self.addBlock(SignalCollectorBlock("collector"))
  11. # Connect the blocks
  12. self.addConnection("clock-clock", "sin", output_port_name='time')
  13. self.addConnection("sin", "collector")
  14. sinGen = SinGen("SinGen")
  15. from CBD.realtime.plotting import PlotManager, LinePlot, follow
  16. from CBD.simulator import Simulator
  17. import matplotlib.pyplot as plt
  18. # from matplotlib.animation import PillowWriter
  19. #
  20. fig = plt.figure(figsize=(5, 5), dpi=100)
  21. ax = fig.add_subplot(111)
  22. ax.set_ylim((-1, 1)) # The sine wave never exceeds this range
  23. manager = PlotManager()
  24. manager.register("sin", sinGen.findBlock('collector')[0], (fig, ax), LinePlot(color='red'))
  25. manager.connect('sin', 'update', lambda d, axis=ax: axis.set_xlim(follow(d[0], 10.0, lower_bound=0.0)))
  26. sim = Simulator(sinGen)
  27. sim.setVerbose("test.txt")
  28. sim.setRealTime()
  29. sim.run(20.0)
  30. # writer = PillowWriter(fps=25)
  31. # manager.get('sin').get_animation().save("demo_sine.gif", writer=writer)
  32. #
  33. plt.show()