私は現在、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)