1

私は現在、pygtkとgladeを使用して、2つの電圧間の電圧スイープを制御するプログラムを作成しています。

出力に問題が発生した場合、安全機能としてスイープを中断することができるのではないかと考えていました。以下にスイープコードを投稿しました。基本的に私が欲しいのは、sys.exit()を実行してGUIまたはプログラムを閉じることなくスクリプトに挿入できる「停止」ボタンに接続する関数です。

def drange(start, stop, step):
    r = start
    while min(start, stop) <= r <= max(start, stop):
        yield r
        r = r + step

def setchan(self, widget, N, v_f=None):
    delay = float(self.delayer.get_text())/1000
    if (v_f == None): float( self.volt_widgets[int(N-1)][0].get_text())
    self.min = float( self.volt_widgets[int(N-1)][1].get_text())
    self.max = float( self.volt_widgets[int(N-1)][2].get_text())
    if v_f > self.max:
        print "The channel voltage would be set to more than the allowed maximum"
        raise ValueError
    if v_f < self.min:
        print "The channel voltage would be set to less than the allowed minimum"
        raise ValueError
    v_f = self.translate_Vf_to_Vb(self.poldacs[int(N-1)], v_f)
    self.device.do_set_dac( v_f, N )

def sweepchan(self, widget, N):
    self.get_pol()
    delay = float(self.delayer.get_text())/1000
    numstep = int(self.stepper.get_text())
    v_i = self.translate_Vb_to_Vf(self.poldacs[N-1], self.device.do_get_dac(N))
    v_f = float( self.volt_widgets[int(N-1)][0].get_text())
    self.min = float( self.volt_widgets[int(N-1)][1].get_text())
    self.max = float( self.volt_widgets[int(N-1)][2].get_text())

    if v_f > self.max:
        print "The final voltage is set to higher than the allowed maximum"
        return
    if v_f < self.min:
        print "The final voltage is set to less than the allowed minimum"
        return

    vstep = (v_f - v_i)/numstep
    if abs(vstep) <= 0.00001:
        print "The current voltage and final voltage are the same"
        return
    for V in drange(v_i, v_f, vstep):
        self.setchan( None, N, V)
        time.sleep(delay)
4

0 に答える 0