weixin_40505870 2023-04-27 15:46 采纳率: 0%
浏览 21

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):这句话 请问需要改哪些地方 感谢感谢

  • 写回答

2条回答 默认 最新

  • 桃宝护卫队 2023-04-27 17:49
    关注

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

    评论

报告相同问题?

问题事件

  • 创建了问题 4月27日