Jag använder PyCharm Community 2023.3.2, fullt uppdaterat.
Exempel (del av min class för NI):
Kod: Markera allt
def Measure_Output(self, Reads):
if not Reads:
return 0.0, 0.0, 0.0
task = nidaqmx.Task()
task.ai_channels.add_ai_voltage_chan(self.Out_Pad_N, terminal_config=nidaqmx.constants.TerminalConfiguration.RSE, min_val= 0.0, max_val=10.0, units=nidaqmx.constants.VoltageUnits.VOLTS)
task.ai_channels.add_ai_voltage_chan(self.Out_mA_N, terminal_config=nidaqmx.constants.TerminalConfiguration.RSE, min_val= 0.0, max_val=10.0, units=nidaqmx.constants.VoltageUnits.VOLTS)
task.ai_channels.add_ai_voltage_chan(self.Out_Volt_N, terminal_config=nidaqmx.constants.TerminalConfiguration.RSE, min_val= 0.0, max_val=10.0, units=nidaqmx.constants.VoltageUnits.VOLTS)
#task.timing.cfg_samp_clk_timing(1000, active_edge=Edge.RISING, sample_mode=AcquisitionType.FINITE)
task.timing.cfg_samp_clk_timing(1000, active_edge=Edge.RISING, sample_mode=AcquisitionType.FINITE, samps_per_chan=Reads) # Ändrat till detta
task.start() # Tillagt!!!
Pad_Raw, mA_Raw, Vout_Raw = task.read(Reads)
task.stop()
task.close()
return Pad_Raw, mA_Raw, Vout_Raw
Jag har verifierat detta vid att se på längden av varje retur-lista efter kallet och det fungerar perfekt.
Men nu plötsligt får jag:
DaqWarning: Warning 200010 occurred. Finite acquisition or generation has been stopped before the requested number of samples were acquired or generated.
Jag har inte fått denna varning tidigare och programmet gör ändå som det ska, alla data-lister som kommer har rätt storlek osv. så jag anar inte vad som sker.
Någon som har en aning om vad som händer?
EDIT:
Jag har hittat något nu! Om jag lägger in en:
task.wait_until_done(1.0)
direkt efter task.read(Reads)
får jag inte detta problem.
Hela programmet kör långsammare då varje task helt klart behöver mer tid på sig - men det får jag ta.
Mer EDIT:
Om jag i raden:
task.timing.cfg_samp_clk_timing(1000, active_edge=Edge.RISING, sample_mode=AcquisitionType.FINITE)
lägger till så att den läser:
task.timing.cfg_samp_clk_timing(1000, active_edge=Edge.RISING, sample_mode=AcquisitionType.FINITE, samps_per_chan=Reads)
kommer timingen åter till "normal" hastighet.
Jag har även lagt till en task.start() efter timingen är inställd, det gav lite extra hastighet.
Såklart har jag tagit bort vänta-funktionen efter detta.
Sista EDIT:
Jag inser att det att jag rent faktisk startar task ('task.start()') ihop med att jag anger antal mätningar som ska tas ('samps_per_char= Reads') är vad som ska till, då startas samplingen direkt när task startas.