通过使用键盘停止运行时,Python代码运行

问题描述 投票:0回答:1

我有一个Phidg​​etBridge,它连接到2号应变计。我收到信号并使用此代码进行校准。但是,当我运行它时,它只显示一张打印,或者我想打印很多(使用此代码,我希望以50ms(即20 Hz)的数据间隔打印数据)。

from Phidget22.Phidget import *
from Phidget22.Devices.VoltageRatioInput import *
import time
import datetime

TIME_OUT = 5000 #5s beofre it throws a timeout exception 
DATA_INTERVAL = 50 #1000ms sample frequency 

A0 = -6.128983223994E-06
B0 = -0.000059639277340

A1 = -6.101017778744E-06
B1 = -0.000286467338645

def onVoltageRatioChange0(self, voltageRatio):
    Masse = (voltageRatio - (B0) ) / (A0)
    self.masse = Masse

def onVoltageRatioChange1(self, voltageRatio):
    Masse = (voltageRatio - (B1) ) / (A1)
    self.masse = Masse
def main():

        voltageRatioInput0 = VoltageRatioInput()
        voltageRatioInput0.masse = 0
        voltageRatioInput0.setChannel(0)
        voltageRatioInput0.setOnVoltageRatioChangeHandler(onVoltageRatioChange0)
        voltageRatioInput0.openWaitForAttachment(TIME_OUT)
        voltageRatioInput0.setBridgeGain(BridgeGain.BRIDGE_GAIN_128)
        voltageRatioInput0.setDataInterval(DATA_INTERVAL)

        voltageRatioInput1 = VoltageRatioInput()
        voltageRatioInput1.masse = 0
        voltageRatioInput1.setChannel(1)
        voltageRatioInput1.setOnVoltageRatioChangeHandler(onVoltageRatioChange1)
        voltageRatioInput1.openWaitForAttachment(TIME_OUT)
        voltageRatioInput1.setBridgeGain(BridgeGain.BRIDGE_GAIN_128)
        voltageRatioInput1.setDataInterval(DATA_INTERVAL)

        print(str(voltageRatioInput0.masse) + " / " + str(voltageRatioInput1.masse))

        try:
            input("Press Enter to Stop\n")

        except (Exception, KeyboardInterrupt):

            pass

        voltageRatioInput0.close()
        voltageRatioInput1.close()


main()
python electronics
1个回答
0
投票

您只需要一个无限循环(while True),该循环将一直运行直到引发KeyboardInterrupt异常。此外,为了每50毫秒运行一次打印新结果,您只需要在sleep(0.05)循环的末尾添加while

from time import sleep

try:
    while True:
        # your code goes here

        # Finally sleep for 50ms
        sleep(0.05)

except KeyboardInterrupt:
    pass

0
投票

我已将您的代码改编为使用While循环:

from Phidget22.Phidget import *
from Phidget22.Devices.VoltageRatioInput import *
import time
import datetime

TIME_OUT = 5000  # 5s beofre it throws a timeout exception
DATA_INTERVAL = 50  # 1000ms sample frequency

A0 = -6.128983223994E-06
B0 = -0.000059639277340

A1 = -6.101017778744E-06
B1 = -0.000286467338645


def onVoltageRatioChange0(self, voltageRatio):
    Masse = (voltageRatio - (B0)) / (A0)
    self.masse = Masse


def onVoltageRatioChange1(self, voltageRatio):
    Masse = (voltageRatio - (B1)) / (A1)
    self.masse = Masse


def main():
    while True:

        voltageRatioInput0 = VoltageRatioInput()
        voltageRatioInput0.masse = 0
        voltageRatioInput0.setChannel(0)
        voltageRatioInput0.setOnVoltageRatioChangeHandler(
            onVoltageRatioChange0)
        voltageRatioInput0.openWaitForAttachment(TIME_OUT)
        voltageRatioInput0.setBridgeGain(BridgeGain.BRIDGE_GAIN_128)
        voltageRatioInput0.setDataInterval(DATA_INTERVAL)

        voltageRatioInput1 = VoltageRatioInput()
        voltageRatioInput1.masse = 0
        voltageRatioInput1.setChannel(1)
        voltageRatioInput1.setOnVoltageRatioChangeHandler(
            onVoltageRatioChange1)
        voltageRatioInput1.openWaitForAttachment(TIME_OUT)
        voltageRatioInput1.setBridgeGain(BridgeGain.BRIDGE_GAIN_128)
        voltageRatioInput1.setDataInterval(DATA_INTERVAL)

        print(
            str(voltageRatioInput0.masse) + " / " +
            str(voltageRatioInput1.masse))

        try:
            input("Press Enter to Stop\n")
        except (Exception, KeyboardInterrupt):
            pass

        voltageRatioInput0.close()
        voltageRatioInput1.close()


main()

0
投票

您可能想做这样的事情:

import time

while True:
    try:

        print('my code output') #substitute this line with your code

        time.sleep(0.05) #50 ms interval

    except KeyboardInterrupt:
        answer = input("Quit? Y/N")
        if answer.upper() == 'Y':
            break

print('Program terminated by the user')
© www.soinside.com 2019 - 2024. All rights reserved.