def loop(_): self.dispatch( 'position-changed', ( sm, self.getPosition(sm) ) ) if not done: sleep(self.UPDATE).addCallback(loop)
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()
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 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()
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 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()
def getVoltages(vmClient,timeBetweenNewVoltages): voltages = yield vmClient.getVoltages() yield sleep(timeBetweenNewVoltages) returnValue(voltages)
def loop(_): self.dispatch('position-changed', (sm, self.getPosition(sm))) if not done: sleep(self.UPDATE).addCallback(loop)