with nidaqmx.Task() as task1, nidaqmx.Task() as task2,nidaqmx.Task() as task3,nidaqmx.Task() as task4:
print("我已经工作了")
task1.ao_channels.add_ao_voltage_chan("Dev1/ao1")
task2.ai_channels.add_ai_voltage_chan("Dev1/ai0:3")
task4.di_channels.add_di_chan('/Dev1/PFI14') # self.tport
task2.timing.cfg_samp_clk_timing(100000,sample_mode=nidaqmx.constants.AcquisitionType.CONTINUOUS, samps_per_chan=10000)
task2.triggers.start_trigger.cfg_dig_edge_start_trig('/Dev1/PFI14', trigger_edge=Edge.RISING) # 触发
write_task1 = stream_writers.AnalogSingleChannelWriter(task1.out_stream, auto_start=True)
write_task1.regen_mode = 10097
write_task1.write_one_sample(0.0, timeout=10)
with open("CH4_RF_data01", "a+") as f:
while self.qstate:
for i in range(20000):
data1 = task2.read(number_of_samples_per_channel=10000)
data1=np.array(data1)
data2=data1[3]/data1[0]
for i in data2:
f.write(str(i) + "\t")
f.write("\n")
#f.write(str(data2)+"\n")
self.qout.put(data2)
print(data2)
f.close()
原本这个程序是采集一个周期的 现在想采集多个周期的数据 然后加了 for i in range(20000):这句话 请问需要改哪些地方 感谢感谢
以下回答引用自chatGpt, 有用的话,请采纳哇!!!
如果你想采集多个周期的数据,你需要在 while 循环中添加一个计数器,当计数器达到你想要的周期数时,退出循环。同时,你需要在每个周期结束后将计数器加 1。
下面是修改后的代码示例:
with nidaqmx.Task() as task1, nidaqmx.Task() as task2, nidaqmx.Task() as task3, nidaqmx.Task() as task4:
print("我已经工作了")
task1.ao_channels.add_ao_voltage_chan("Dev1/ao1")
task2.ai_channels.add_ai_voltage_chan("Dev1/ai0:3")
task4.di_channels.add_di_chan('/Dev1/PFI14') # self.tport
task2.timing.cfg_samp_clk_timing(100000, sample_mode=nidaqmx.constants.AcquisitionType.CONTINUOUS, samps_per_chan=10000)
task2.triggers.start_trigger.cfg_dig_edge_start_trig('/Dev1/PFI14', trigger_edge=Edge.RISING) # 触发
write_task1 = stream_writers.AnalogSingleChannelWriter(task1.out_stream, auto_start=True)
write_task1.regen_mode = 10097
write_task1.write_one_sample(0.0, timeout=10)
with open("CH4_RF_data01", "a+") as f:
count = 0 # 计数器
while self.qstate and count < 20000: # 循环条件修改
data_list = []
for i in range(10000):
data = task2.read(number_of_samples_per_channel=1) # 逐个读取数据
data_list.append(data[0])
data1 = np.array(data_list)
data2 = data1[3] / data1[0]
for i in data2:
f.write(str(i) + "\t")
f.write("\n")
self.qout.put(data2)
print(data2)
if (count + 1) % 100 == 0: # 每采集 100 个周期打印一次计数器
print("已采集 {} 个周期".format(count + 1))
count += 1 # 计数器加 1
f.close()
在修改后的代码中,我们添加了一个计数器 count
,并将循环条件修改为 while self.qstate and count < 20000
,表示只要 qstate
为真且计数器小于 20000,就会一直循环采集数据。在每个周期结束后,将计数器加 1。同时,我们修改了读取数据的方式,逐个读取数据并将其添加到一个列表中,最后再将列表转换为 numpy 数组进行处理。在每采集 100 个周期时,打印一次计数器,以便于观察采集进度。
list1 = ['A', 'B', 'C']
list2 = [1, 2, 3]
tuple_list = [(m, n) for m in list1 for n in list2]
print(tuple_list)
dict_list = [{m: n} for m in list1 for n in list2]
print(dict_list)
输出:
[('A', 1), ('A', 2), ('A', 3), ('B', 1), ('B', 2), ('B', 3), ('C', 1), ('C', 2), ('C', 3)]
[{'A': 1}, {'A': 2}, {'A': 3}, {'B': 1}, {'B': 2}, {'B': 3}, {'C': 1}, {'C': 2}, {'C': 3}]
需要修改的地方如下: 1. 将原本的代码放在一个for循环中,循环的次数为所需的周期次数。例如,如果需要采集10个周期的数据,则该循环应该循环10次。 2. 根据题目需求,添加了一行代码"for i in range(20000):",因此,每个周期内进行的数据采集,都需要放在该for循环中,并嵌套一个for循环,循环次数为所需采集的数据数。如下代码所示:
for j in range(10): # 循环10次,采集10个周期的数据
for i in range(20000): # 每个周期采集20000个数据
data = collect_data() # 采集数据
save_data(data) # 存储数据
其中,collect_data()
为采集数据的方法,save_data(data)
为存储数据的方法,需要根据实际情况进行实现。另外,循环嵌套的顺序可以根据实际情况进行调整。