def loop(_):
     self.dispatch(
         'position-changed',
         (
             sm,
             self.getPosition(sm)
         )
     )
     if not done:
         sleep(self.UPDATE).addCallback(loop)
Beispiel #2
0
def main():
    from sitz import TEST_STEPPER_MOTOR_SERVER
    from ab.abbase import getUserInput, sleep
    from ab.abclient import getProtocol
    from twisted.internet.defer import Deferred
    ## connect to server
    protocol = yield getProtocol(TEST_STEPPER_MOTOR_SERVER)
    ## get sm configuration
    config = yield protocol.sendCommand('get-configuration')
    delta = 2000
    for id in config.keys():
        # create client
        client = ChunkedStepperMotorClient(protocol, id)

        ## register for position updates
        def log(prompt, x):
            print '%s: %s' % (prompt, x)

        listener = partial(log, 'update for client %s' % client.id)
        client.addListener(client.POSITION, listener)

        ## change positions
        position = yield client.getPosition()
        delta /= 2
        yield client.setPosition(position + delta)

    position = yield client.getPosition()
    # demonstrate canceling capabilities
    delta = -10000
    d = Deferred()

    def onPositionChanged(newPosition):
        if d.called:
            print 'canceling!'
            client.cancel()
            client.removeListener(client.POSITION, onPositionChanged)
        else:
            print 'new pos: %d' % newPosition

    client.removeListener(client.POSITION, listener)
    client.addListener(client.POSITION, onPositionChanged)
    print ''
    yield sleep(.5)
    print 'starting long journey: press enter to quit'
    yield sleep(1.5)
    print ''
    e = client.setPosition(position + delta)
    yield getUserInput('')
    d.callback(None)
    yield e
    print 'shutting down'
    reactor.stop()
            def loop():
                voltages = yield protocol.sendCommand('get-voltages')
                for channel, voltage in voltages.items():
                    xData, yData = data[channel]
                    yData.pop(0)
                    scale = yield protocol.sendCommand('get-channel-parameter',
                                                       channel,
                                                       VM.VOLTAGE_RANGE)
                    scale = self.vrngk2v(scale)
                    yData.append(voltage)
                    plots[channel].setData(xData, yData)
                if recordToggle.isToggled():
                    with open(self.fileName, 'a') as file:
                        file.write('%s\n' % '\t'.join(
                            str(datum) for datum in
                            ([time.time()] +
                             [voltages[channel] for channel in recording])))

                for channel in channels:
                    item = items[channel]
                    if item.checkState() is QtCore.Qt.CheckState.Checked:
                        if channel not in checked:
                            checked.append(channel)
                            plotWidget.addItem(plots[channel])
                    elif channel in checked:
                        checked.remove(channel)
                        plotWidget.removeItem(plots[channel])
                callbackRate = yield protocol.sendCommand('get-callback-rate')
                yield sleep(1.0 / callbackRate)
                loop()
Beispiel #4
0
 def onStepped(data):
     input, output = data
     x.append(input)
     y.append(output)
     plot.setData(x, y)
     yield sleep(.05)
     scanToggle.completeStep()
     if listScanInputWidget is not None: listScanInputWidget.updateQueue()
Beispiel #5
0
 def onStepped(data):
     input, output = data
     x.append(input)
     y.append(output)
     plot.setData(x,y)
     yield sleep(.05)
     scanToggle.completeStep()
     if listScanInputWidget is not None: listScanInputWidget.updateQueue()
 def loop():
     # get latest values
     voltages = yield protocol.sendCommand('get-voltages')
     for channel, voltage in voltages.items():
         # extend the size of arrays if user asks for more values to be stored
         if self.newBufferVal == True: onBufferUpdate()
         
         # populate arrays from historical values
         xData, yData = data[channel]
         
         # pop oldest voltage
         yData = np.delete(yData,0)
                     #scale = yield protocol.sendCommand(
                     #    'get-channel-parameter',
                     #    channel,
                     #    VM.VOLTAGE_RANGE
                     #)
                     #scale = self.vrngk2v(scale)
         # add newest voltage
         yData = np.append(yData,np.asarray(voltage))
         
         # plot all voltages in range
         plots[channel].setData(
             xData,
             yData
         )
         
         # set the historical values to these values
         data[channel] = (xData, yData)
     
     # log values, if requested
     if recordToggle.isToggled():
         nextLine = []
         for channel in recording:
             nextLine.append(voltages[channel])
         self.LogFile.update(nextLine)
     
     # update selected list
     for channel in channels:
         tile = tiles[channel]
         if tile.checkState() is QtCore.Qt.CheckState.Checked:
             if channel not in checked:
                 checked.append(channel)
                 plotWidget.addItem(
                     plots[channel]
                 )
         elif channel in checked:
             checked.remove(channel)
             plotWidget.removeItem(
                 plots[channel]
             )
     
     # wait for server's callback rate (nom. 10Hz), iterate
     callbackRate = yield protocol.sendCommand('get-callback-rate')
     yield sleep(1.0 / callbackRate)
     loop()
Beispiel #7
0
 def nudgeLoop():
     delta = slider.value()
     if delta:
         delta = int(delta / abs(delta) * pow(params[SLIDER],(float(abs(delta))-1.0)/99.0))
         d = Deferred()
         self.gotoRequested.emit((lcd.value()+delta,d))
         yield d
     yield sleep(self.NUDGE)
     if slider.isSliderDown():
         yield nudgeLoop()
     else:
         self.cancelRequested.emit()
Beispiel #8
0
 def nudgeLoop():
     delta = slider.value()
     if delta:
         delta = int(delta / abs(delta) *
                     pow(params[SLIDER],
                         (float(abs(delta)) - 1.0) / 99.0))
         d = Deferred()
         self.gotoRequested.emit((lcd.value() + delta, d))
         yield d
     yield sleep(self.NUDGE)
     if slider.isSliderDown():
         yield nudgeLoop()
     else:
         self.cancelRequested.emit()
 def loop():
     voltages = yield protocol.sendCommand('get-voltages')
     for channel, voltage in voltages.items():
         xData, yData = data[channel]
         yData.pop(0)
         scale = yield protocol.sendCommand(
             'get-channel-parameter',
             channel,
             VM.VOLTAGE_RANGE
         )
         scale = self.vrngk2v(scale)
         yData.append(voltage)
         plots[channel].setData(
             xData,
             yData
         )
     if recordToggle.isToggled():
         with open(self.fileName,'a') as file:
             file.write(
                 '%s\n' % '\t'.join(
                     str(datum) for datum in (
                         [time.time()] + [
                             voltages[channel]
                             for channel in
                             recording
                         ]
                     )
                 )
             )
             
     for channel in channels:
         item = items[channel]
         if item.checkState() is QtCore.Qt.CheckState.Checked:
             if channel not in checked:
                 checked.append(channel)
                 plotWidget.addItem(
                     plots[channel]
                 )
         elif channel in checked:
             checked.remove(channel)
             plotWidget.removeItem(
                 plots[channel]
             )
     callbackRate = yield protocol.sendCommand('get-callback-rate')
     yield sleep(1.0 / callbackRate)
     loop()
 def loop():
     # get latest values
     voltages = yield vmClient.getVoltages()
     xVolt = voltages[chanA]
     yVolt = voltages[chanB]
     
     callbackRate = yield vmClient.getCallbackRate()
     yield sleep(1.0 / callbackRate)
     
     # pop oldest value if history is too long, store latest value 
     #if len(self.history) > self.numAvg*self.numBins:
     #    self.history.pop(0)
     self.history.append( (xVolt, yVolt) )
     
     # sort new value into appropriate bin
     for binRange, xValue, yList in self.data.values():
         if xVolt >= binRange[0] and xVolt < binRange[1]:
             if len(yList) > self.numAvg:
                 yList.pop(0)
             yList.append(yVolt)
     # update plot
     updatePlot()
     
     loop()
Beispiel #11
0
def getVoltages(vmClient,timeBetweenNewVoltages):
    voltages = yield vmClient.getVoltages()
    yield sleep(timeBetweenNewVoltages)
    returnValue(voltages)
Beispiel #12
0
 def loop(_):
     self.dispatch('position-changed', (sm, self.getPosition(sm)))
     if not done:
         sleep(self.UPDATE).addCallback(loop)