SCAN_RANGE = [0.0, 1.0]
SCAN_TIME = 10.0

STREAM_SCALARS = ['Int8Scalar', 'Float64Scalar']
STREAM_WAVEFORMS = ['Int32Waveform']
EPICS_CHANELS = ['TESTIOC:TESTCALCOUT:Output']


stream = Stream("PID", dispatcher)

modulo, offset = 10,0
for name in STREAM_SCALARS:
    stream.addScalar(name, name, modulo, offset ) 
plot_types = {}
for name in STREAM_WAVEFORMS: 
    stream.addWaveform(name, name, modulo, offset ) 
    plot_types[name]=1


stream.initialize()
stream.start()

velocity  = abs(float(SCAN_RANGE[1]-SCAN_RANGE[0])) / SCAN_TIME
motor.setSpeed(motor.defaultSpeed)
motor.move(float(SCAN_RANGE[0]))
motor.setSpeed(float(velocity) )

channels = []
for name in EPICS_CHANELS:
    channel = Channel(name, 'd')
    channel.monitored= True
    channels.append(channel)


stream.waitCacheChange(10000)
motor.moveAsync(float(SCAN_RANGE[1])) 
try:
    mscan(stream, stream.getReadables() + channels, -1, SCAN_TIME, plot_types=plot_types)
finally:
    stream.close()  
    motor.setSpeed(motor.defaultSpeed)