python 循环采集


 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 个周期时,打印一次计数器,以便于观察采集进度。

  • 这篇博客: 玩转Python小技巧【i for i in range()】+【or】中的 嵌套元组和字典 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 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}]
    
  • 以下回答由chatgpt基于相关博客总结生成:

    需要修改的地方如下: 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)为存储数据的方法,需要根据实际情况进行实现。另外,循环嵌套的顺序可以根据实际情况进行调整。