2 #include "OutputsDAQmxSlave.h"
3 #include "parameters/IO.h"
4 #include "parameters/Scope.h"
12 throw ScopeException(
"The first area must not be a slave area! Reconfigure!!!!");
14 int32_t samplingtype = (_params.
requested_mode()==DaqModeHelper::continuous)?DAQmx_Val_ContSamps:DAQmx_Val_FiniteSamps;
21 , -_outputparams.
range()
22 , _outputparams.
range());
25 double pixelrate = 1/(_params.
areas[ThisAreaOrMasterArea(
area)]->daq.pixeltime()*1E-6);
27 int32_t pixelsperchan = _params.
areas[
area]->Currentframe().XTotalPixels();
29 pixelsperchan = _params.
areas[
area]->Currentframe().TotalPixels() * _params.
areas[
area]->daq.requested_frames() * _params.
areas[
area]->daq.averages();
36 if ( DaqTimingHelper::Mode::ReferenceClock ==_outputparams.
timing() )
51 OutputsDAQmxSlave::~OutputsDAQmxSlave(
void) {
68 int32_t sizeperchannel =
static_cast<int32_t
>(_zp.size() / 2);
69 int32_t blocksize = sizeperchannel/_blocks;
70 int32_t lastblocksize = blocksize + (sizeperchannel - blocksize*_blocks);
71 DBOUT(L
"OutputsDAQmxSlave::Write blocksize " << blocksize << L
" last block " << lastblocksize);
72 DBOUT(L
"OutputsDAQmxSlave::Write blocks " << _blocks << L
" sizeperchannel " << sizeperchannel << L
" totblocksize " << (_blocks-1)*blocksize+lastblocksize);
75 for ( uint32_t b = 0 ; b < _blocks ; b++ ) {
77 DBOUT(L
"OutputsDAQmxSlave::Write writeabort");
80 DBOUT(L
"OutputsDAQmxSlave::Write block " << b);
83 , ((b==_blocks-1)?lastblocksize:blocksize),
false, 2, DAQmx_Val_GroupByScanNumber);
99 task.
WriteAnalogI16(std::make_shared<std::vector<int16_t>>(2,0)->data(), 1,
true);
int32_t Write(const std::vector< int16_t > &_xyzp, const uint32_t &_blocks) override
we also take a std::vector but for the slave area it has only samples for z&p ! ...
ScopeString commontrigger
The trigger channel which is the internal common master trigger for all devices.
void SetRegeneration(const bool &_regenerate)
Sets the mode of sample regeneration.
The master parameters class.
Simple exception class for Scope.
void ConfigureReferenceClock(const std::wstring &_src, const float64 &_rate)
Configures the reference clock for the task.
int32_t WaitUntilDone(const float64 &_waittime)
Waits until the task is done.
DAQmx::CDAQmxAnalogOutTask zpout_task
Task for fast z/Pockels clocked by a pixel clock.
std::array< std::unique_ptr< Area >, SCOPE_NAREAS > areas
holds AreaParameters for all areas.
ScopeString externalclocksource
source terminal of an external clock for sampling clock (could be e.g.
std::wstring ClockString(const scope::DaqTimingHelper::Mode &_timing, const std::wstring &_externalclocksource)
Generates a string for the sample clock from daq_timing.
void Start() override
Start task.
std::atomic< bool > writeabort
Signal for aborting a write operation (since write is performed in several blocks, abort can happen in between)
ScopeNumber< double > referenceclockrate
rate in Hertz of the reference clock for sampling clock.
uInt32 ConfigureBuffer(const uInt32 &_sampsperchannel)
Configure the daqmx output buffer on the PC.
int32 WriteAnalogI16(const int16 *_data, int32 _sampsperchan, bool _autostart=false, int32 _timeout=2, bool32 _layout=DAQmx_Val_GroupByChannel)
Writes several samples to the buffer of an analog output task.
void SetWriteOffset(int32 posreltofirst)
Sets the write offset relative to the first buffer position.
This is the include file for standard system include files, or project specific include files that ar...
ScopeValue< DaqMode > requested_mode
requested acquisition mode (see DaqModeHelper)
void Start(void)
Starts the task.
void Stop() override
Stops task.
#define DBOUT(s)
A debug output to the debug console.
void ScopeExceptionHandler(const std::string &_origin, const bool &_log, const bool &_showmessagebox, const bool &_trace, const bool &_rethrow)
Handles all exceptions and does nice logging.
void CreateAOVoltageChannel(const std::wstring &_devices, const std::wstring &_channelname=L"", float64 _minval=-10.0, float64 _maxval=10.0, int32 _units=DAQmx_Val_Volts, const std::wstring &_customscalename=L"")
Creates an analog output channel Allowed values for terminal configuration (from NiDAQmx.h): Values for DAQmx_PhysicalChan_AI_TermCfgs and DAQmx_PhysicalChan_AO_TermCfgs Value set TerminalConfigurationBits .
Wraps a DAQmx Analog Output task.
void Clear(void)
Clear the task.
void CreateTask(const std::wstring &_name=L"")
void ConfigureSampleTiming(const std::wstring &_src, const float64 &_rate, const int32 &_samplesperchan, const int32 &_samplingtype=DAQmx_Val_ContSamps, const int32 &_actedge=DAQmx_Val_Rising)
Configures a sample timing for the task.
const uint32_t area
which area this one is for
ScopeNumber< double > range
Output range of the DAC to use for all outputs.
ScopeValue< DaqTiming > timing
where to get the sampling clock from? Onboard, from external reference clock, or from external source...
Parameters for fastz/Pockels signal generation with NI-DAQmx where zp are driven by a pixel clock fro...
OutputsDAQmxSlave(const uint32_t &_area, const parameters::OutputsDAQmxSlave &_outputparams, const parameters::Scope &_params)
Create the task for pockels and fast z.
ScopeString zpout
Analog output channel for fast z and Pockels cell (clocked by a pixel clock)
ZeroOutputsDAQmxSlave(const parameters::OutputsDAQmxSlave &_params)
Create a simple tasks for writing a scalar zero to all channels.
ScopeString referenceclocksource
source terminal of the reference clock for the sampling clock
void ConfigureDigStartTrigger(const std::wstring &_src, const int32 &_trigedge=DAQmx_Val_Rising)
Configures the start trigger.
void Stop(void)
Stops the task.
Wraps hardware connection for signal output to scanners, fast z control, and pockels cell...