首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不使用键盘或键盘中断的情况下中断实时while循环来收集数据?

如何在不使用键盘或键盘中断的情况下中断实时while循环来收集数据?
EN

Stack Overflow用户
提问于 2020-08-10 03:09:22
回答 2查看 30关注 0票数 0

所以我用美国国家仪器公司的数据采集系统连续测量温度数据,我已经能够绘制实时温度测量值,并将其存储到数据帧中,然后我可以保存。

我想要做的是将"samplerate“范围设置得非常高(现在是301 ),然后在我不想再获取温度数据时停止它。有时我只需要收集100个样本,有时超过10k。

当我使用这段代码中断循环时,它会将我请求的内容打印到控制台中,但实际上我无法在控制台中键入任何内容。控制台完全不响应键盘中断。

有没有什么方法可以让我在不使用键盘的情况下提前跳出这个循环呢?

代码语言:javascript
复制
import nidaqmx
import matplotlib.pyplot as plt
import pandas as pd

plt.ion()

Samples = []
time = []
freezerTemp = []
rightSideTemp = []

def print_menu():
    print('Press "3" and hit "Enter" to exit ')
    print('3. Exit')

with nidaqmx.Task() as task:

    FreezerT = task.ai_channels.add_ai_thrmcpl_chan("cDAQ1Mod1/ai0")
    RightSideT = task.ai_channels.add_ai_thrmcpl_chan("cDAQ1Mod1/ai3")
    #This controls the sample/second. i.e. if 2 then 2 samples/second.
    samplerate = task.timing.samp_clk_rate = 1

    while True:
        print_menu()

        for samplerate in range(301):
            data = task.read()
            Samples.append(samplerate)
            freezerTemp.append(data[0])
            rightSideTemp.append(data[1])
            time.append(samplerate/1)

            plt.xlabel('Samples')
            plt.ylabel('Temperature (C)')
            plt.scatter(samplerate,freezerTemp[samplerate],c='r')
            plt.scatter(samplerate,rightSideTemp[samplerate],c='b')
            plt.pause(0.05)
            plt.show()

        choice = input('Enter a number: ')
        if choice == '3':
            break

df = pd.DataFrame({'Samples': Samples,
                    'Time(sec)': time,
                'Freezer Temperature': freezerTemp,
                'Right Side': rightSideTemp})

print(df)
EN

回答 2

Stack Overflow用户

发布于 2020-08-10 03:24:40

你的问题是plt.show()。这本身就是一个循环,阻塞了代码的其余部分。

然而,matplotlib有一个在plt.show()之后捕获关键命令的功能。在这里看一下他们的演示。

https://matplotlib.org/3.1.0/gallery/event_handling/keypress_demo.html

票数 0
EN

Stack Overflow用户

发布于 2020-08-10 03:28:39

您需要的是在不同的(后台)线程中运行采样和绘图,以便您的主线程保持响应。

看一下线程模块https://docs.python.org/3/library/threading.html

策略:

  • 将采样和绘图函数放在不同线程中
  • 启动线程
  • 显示您的菜单
  • 停止菜单中的其他线程

F210

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63330309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档