05-14-2019 10:01 AM
I have a NI-DAQmx 18.1 application that runs under openSUSE Leap 42.3. The program runs great on a PXI chassis (PXI-1042Q) using the PXI-4461 & PXI-4462 I/O boards. I can also run it on a PXIe chassis (PXIe-1082) using the hybrid PXI-4461 board. However it fails if I try to use a PXIe-4464. Currently I am configuring the PXIe-4464 pretty much the same as a PXI-4462 (they are both 4 channel analog input boards).
Calling DAQmxGetSyncPulseSyncTime() returns -200077: DAQmxErrorInvalidAttributeValue: "Requested value is not a supported value for this property. The property value may be invalid because it conflicts with another property." If I disable calls to DAQmxGetSyncPulseSyncTime() and DAQmxSetSyncPulseMinDelayToStart(), I get the same error from DAQmxTaskControl() when I try to commit the task.
Assuming this is a clock problem, I have tried using PXI_Clk10 & PXIe_Clk100 as the reference clock source to no avail.
Has anyone gotten the PXIe-4464 or any other PXIe I/O board to work with NI-DAQmx 18.1? If so, how did you configure it differently from a PXI I/O board?
05-23-2019 10:27 AM
In case anyone else runs into this, here is the solution...
Our program is based on 32-bit floats whereas the NI-DAQmx API uses 64-bit floats. We define the maximum voltage constant as "const float32 MAX_VOLTS = 42.4" and pass MAX_VOLTS and -MAX_VOLTS to DAQmxCreateAIVoltageChan(). This works just fine for all boards except the PXIe-4464. DAQmxCreateAIVoltageChan() does not report an error, but DAQmxStartTask() will fail. It turns out that the 32-bit representation of 42.4 (42.4000015) is slightly greater than the 64-bit representation (42.399999999999999) and apparently there is something in the 4464 driver that objects to this. Changing the constant to float64 solved the problem.