0

我尝试使用 Ni-Daq 来产生脉冲。nidaqmx提供的例子如下:

    import nidaqmx
from nidaqmx.types import CtrTime


with nidaqmx.Task() as task:
    task.co_channels.add_co_pulse_chan_time("Dev1/ctr0")

    sample = CtrTime(high_time=0.001, low_time=0.002)

    print('1 Channel 1 Sample Write: ')
    print(task.write(sample))

但是在我运行这个脚本之后,它会产生一些错误,如下所示:

raise DaqError(error_buffer.value.decode("utf-8"), error_code) DaqError:任务没有缓冲或者没有通道。如果任务没有缓冲,请使用此函数的标量版本。如果任务没有通道,则向任务添加一个。任务名称:_unnamedTask<0>

状态码:-201395

是什么导致了问题?如何解决?

非常感谢!

4

1 回答 1

0

NI-DAQmx 的 Python 示例针对 NI 的 X 系列设备(6 3 xx 型号)进行了调整。6 2 xx 型号是 M 系列设备,它们的计数器对您如何编程它们更加挑剔。简而言之:脉冲规格必须在创建通道时给出,以后不能给出。X 系列设备没有此限制。

配置脉冲的形状

代替

task.co_channels.add_co_pulse_chan_time("Dev1/ctr0")

尝试

# https://github.com/ni/nidaqmx-python/blob/master/nidaqmx/_task_modules/co_channel_collection.py#L160
task.co_channels.add_co_pulse_chan_time(
    counter="Dev1/ctr0",
    low_time=0.002,
    high_time=0.001)

而且由于您以这种方式指定了脉冲,因此您不再需要进入write()通道。当你想启动脉冲序列时,只需使用

task.start()

配置脉冲序列的长度

当您生成脉冲序列时,您可以告诉驱动程序发出有限数量的脉冲或连续方波。

start()执行任务之前,请使用cfg_implicit_timing(). 此片段生成 1200 个脉冲:

# https://github.com/ni/nidaqmx-python/blob/master/nidaqmx/_task_modules/timing.py#L2878
pulse_count = 1200;
task.cfg_implicit_timing(
    sample_mode=AcquisitionType.FINITE,
    samps_per_chan=pulse_count)
于 2018-04-23T17:10:05.653 回答