Я настраиваю некоторые базовые c аппаратные интерфейсы, используя NI DAQ (USB 6259), и хочу прочитать канал так же, как осциллограф прочитал бы вход (например, синусоидальную волну в этом примере). Я только учу Python, так что я надеюсь, что это базовый c вопрос.
Вот мой код:
# dynamic graph with input from NI USB-6259 sine wave from signal generator
import scipy.stats as stats
import matplotlib.pyplot as plt
import numpy as np
import time
import nidaqmx
%autoreload
#initialise the graph and settings
fig, ax = plt.subplots(figsize=(10, 5))
plt.ion()
fig.show()
fig.canvas.draw()
for i in range(0,100):
with nidaqmx.Task() as task:
task.ai_channels.add_ai_voltage_chan("Dev1/ai0")
#task.ai_channels.add_ai_voltage_chan("Dev1/ai1")
data = task.read(number_of_samples_per_channel=1)
ax.plot(i, data[0], '.', color='black', ms=5)
fig.canvas.draw() # draw
i = i+1
Синусоидальная диаграмма
, которая создает синусоидальный график. Ось X в основном расширяется до тех пор, пока 100 итераций чтения канала не будут завершены, и постепенно строит мой график. 100 итераций произвольны, но, по крайней мере, позволили мне увидеть поступающие данные. Я хотел бы, чтобы это выполнялось бесконечно, например, до тех пор, пока не будут соблюдены какие-то другие критерии или ввод pu sh или что-то в этом роде. Сложность состоит в том, что диапазон оси X просто масштабируется все больше и больше, тогда как я хотел бы, чтобы размер окна данных был фиксированным, а также просто перемещался по мере эволюции оси X - точно так же, как осциллограф. Я пробовал довольно много способов через поиск в Google, но пока не удалось. Я уверен, что это решенная проблема, поэтому любые указатели noob были бы хороши. В конечном итоге я планирую отправить сигнал DAQ для управления гальваническими зеркалами.