Scope
Example config for a one-area DAQmx system using two NI-6259 cards

The drawback in the previous configuration is that one card generates the output signal for both x and y scanners.

Since on one DAQmx card you can only have one output task with one sample clock, you have to generate a whole frame as signals although every line and every column is the same. Using two cards has two main advantages:

  • The size of the internal buffer of DAQmx is limited, near 3000x3000 pixels is the limit and you get weird allocation errors. By using two cards, one will generate the x scanner (and Pockels) signals with the pixel clock. The other card generates the y scanner (and fast z) signals with the line clock. For a 3000x3000 you only have to have two buffers with 3000 samples each.
  • If you change e.g. the Pockels value during live scanning Scope has to rewrite the whole frame into the DAQmx buffer. Thus you get the updated Pockels value only in the frame after the frame you clicked on the slider. Using two cards the output buffers are much smaller and (at least for the x and pockels signals) the update is visible very quickly.

Copy ScopeDefinesExamples.h (which is in the repository) to ScopeDefine.h by using Windows Explorer (not Visual Studio!). Git ignores ScopeDefines.h so that you can adapt this to your needs without messing up for other people. Now choose the following defines in ScopeDefines.h

  • #define SCOPE_NAREAS 1
  • #define SCOPE_USE_TWOCARDDAQMX_OUTPUTS
  • #define SCOPE_USE_DAQMX_INPUTS and xyz hardware as you want it e.g. #define SCOPE_USE_NOXYFPUSTAGE and #define SCOPE_USE_GALIL_XYZSTAGE. Then compile your scope.exe.

Now to the xml file (remember: you cann find all the parameters here in scope::parameters with detailed descriptions!):

<outputs>
<OutputRange_V>5</OutputRange_V>
<MinOutputScanner_V>-3</MinOutputScanner_V>
<MaxOutputScanner_V>3</MaxOutputScanner_V>
<MinOutputPockels_V>0</MinOutputPockels_V>
<MaxOutputPockels_V>2</MaxOutputPockels_V>
<XPOutString>PXI-6259_0/ao0:1</XPOutString>
<YZOutString>PXI-6259_1/ao0:1</YZOutString>
<PixelTimingMethod>ReferenceClock</PixelTimingMethod>
<LineTimingMethod>ReferenceClock</LineTimingMethod>
<MinimumPixelTime_us>0.8</MinimumPixelTime_us>
<PixelReferenceClockSource>PXI_Clk10</PixelReferenceClockSource>
<LineReferenceClockSource>PXI_Clk10</LineReferenceClockSource>
<ReferenceClockRate_Hz>1e+007</ReferenceClockRate_Hz>
<ReferenceClockRate_Hz>1e+007</ReferenceClockRate_Hz>
<ExternalPixelClockString>/PXI-6259_0/PXI_Trig1</ExternalPixelClockString>
<ExternalLineClockString>/PXI-6259_1/PXI_Trig2</ExternalLineClockString>
</outputs>

This is very similar to Example config for a one-area DAQmx system using one NI-6259 card but here you have to provide two strings with the channels on the two boards. You also have to configure the timing method for both cards. Ideally you use two identical cards and put the same values for both cards in here. If you use two different cards, make sure the minimum pixel time is the one from the slower board.

The rest of the xml file is identical to Example config for a one-area DAQmx system using one NI-6259 card.