My goal is to write digital patterns, first a long lasting setup pattern is written, and then a faster burst of pattern is written. I also need to synchronize this task with other actions (for example, clock generation). For the synchronization, I use the trigger functionality. Thus I have two write actions in one task, and this task is synchronized to a trigger. However, with the trigger task and the write task, only the first write call DAQmxWriteDigitalU32 works, and the second write call is ineffectual. Does the second write call need to another rising trigger?
# DAQmx Configure Code DAQmxCreateTask("taskSrlO", byref(taskHandleSrlO)) # DAQmx Create Channel DAQmxCreateDOChan(taskHandleSrlO, "Dev1/port0/line0:1, Dev1/port0/line2:7", "", DAQmx_Val_ChanForAllLines) # DAQmx Timing Setup DAQmxCfgSampClkTiming(taskHandleSrlO, "", 1, DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, 1+dataSrlO.size) wrtSrlO = c_int(0) # DAQmx Write Code DAQmxWriteDigitalU32(taskHandleSrlO, 1+dataSrlO.size, 0, 10.0, DAQmx_Val_GroupByChannel, dataSrlO, byref(wrtSrlO), None) #Start output at trigger, the trigger in in taskHandle1 DAQmxCfgDigEdgeStartTrig( taskHandleSrlO, "/Dev1/PFI14", DAQmx_Val_Rising); # DAQmx Start Code DAQmxStartTask(taskHandleSrlO) # DAQmx Configure Code DAQmxCreateTask("", byref( taskHandle1)); DAQmxCreateCOPulseChanTime( taskHandle1, "Dev1/ctr2", "", DAQmx_Val_Seconds, DAQmx_Val_Low, 0.001,0.50e-3,1.00e-6); DAQmxStartTask(taskHandle1) # DAQmx Wait Code #DAQmxWaitUntilTaskDone(taskHandle1,10.0); # DAQmx Clear Code #DAQmxClearTask(taskHandle1); DAQmxWaitUntilTaskDone( taskHandleSrlO, 5); print("Written1: %d\n" % wrtSrlO.value) DAQmxStopTask(taskHandleSrlO) # DAQmx Timing Setup (frequency = 50) DAQmxCfgSampClkTiming(taskHandleSrlO, "", 50.0, DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, 1+dataSrlO2.size) # DAQmx Write Code (autostart = 1) DAQmxWriteDigitalU32(taskHandleSrlO, 1+dataSrlO2.size, 1, 10.0, DAQmx_Val_GroupByChannel, dataSrlO2, byref(wrtSrlO), None) print("before Written2: %d\n" % wrtSrlO.value) DAQmxWaitUntilTaskDone( taskHandleSrlO, 50e-0); print("before Written2: %d\n" % wrtSrlO.value)