It initially appears that reading from digital IO with
nidaqmx-python may be synchronous, causing too long to loop over reads, yielding error messages as below.
I wonder if
nidaqmx.streaming_readers is required to read asynchronously as the name implies?
nidaqmx.errors.DaqError: The application is not able to keep up with the hardware acquisition.
Increasing the buffer size, reading the data more frequently, or specifying a fixed number of samples to read instead of reading all available samples might correct the problem. Property: DAQmx_Read_RelativeTo Requested Value: DAQmx_Val_CurrReadPos
Property: DAQmx_Read_Offset Requested Value: 0
Task Name: _unnamedTask<0>
Status Code: -200279
nidaqmx synchronous read code
This code reads 3 binary lines at once via the Port interface
#!/usr/bin/env python from time import time import nidaqmx as nd with nd.Task() as task: task.di_channels.add_di_chan('Dev1/port0/line0:2', line_grouping=nd.constants.LineGrouping.CHAN_PER_LINE) task.timing.cfg_samp_clk_timing(rate=Fs, sample_mode=nd.constants.AcquisitionType.CONTINUOUS, ) print('initializing',fn) with h5py.File(fn,'w',libver='latest') as f: f['tstart'] = time() # TODO use GPS time over serial instead b = f.create_dataset("di",(3,Nframenight),dtype=bool) sleep(3) print('starting fire log loop to',fn) i=0 while True: tic=time() data = task.read(number_of_samples_per_channel=Nsampread) print(time()-tic)