所以我用美国国家仪器公司的数据采集系统连续测量温度数据,我已经能够绘制实时温度测量值,并将其存储到数据帧中,然后我可以保存。
我想要做的是将"samplerate“范围设置得非常高(现在是301 ),然后在我不想再获取温度数据时停止它。有时我只需要收集100个样本,有时超过10k。
当我使用这段代码中断循环时,它会将我请求的内容打印到控制台中,但实际上我无法在控制台中键入任何内容。控制台完全不响应键盘中断。

有没有什么方法可以让我在不使用键盘的情况下提前跳出这个循环呢?
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)发布于 2020-08-10 03:24:40
你的问题是plt.show()。这本身就是一个循环,阻塞了代码的其余部分。
然而,matplotlib有一个在plt.show()之后捕获关键命令的功能。在这里看一下他们的演示。
https://matplotlib.org/3.1.0/gallery/event_handling/keypress_demo.html
发布于 2020-08-10 03:28:39
您需要的是在不同的(后台)线程中运行采样和绘图,以便您的主线程保持响应。
看一下线程模块https://docs.python.org/3/library/threading.html
策略:
F210
https://stackoverflow.com/questions/63330309
复制相似问题