Converting a Camera Link Application from the NI-IMAQ API to the NI-IMAQdx API

Contents

Supported Software & Hardware

  • Vision Acquisition Software 2018 and later
  • PCIe-1427, PCIe-1433, PCIe-1437 and PXIe-1435


Reasons to switch to the NI-IMAQdx API

The NI-IMAQ API is not available in LabVIEW NXG.  Using the NI-IMAQdx API for Camera Link applications allows users to convert their existing LabVIEW applications from the NI-IMAQ API to the NI-IMAQdx API and then migrate the converted application to LabVIEW NXG.  Alternatively, a new Camera Link application can be developed directly in LabVIEW NXG.

The NI-IMAQdx API now serves as a unified API, allowing users to more easily switch between popular camera types, such as GigE Vision and USB3 Vision, and Camera Link without having to rewrite large portions of the acquisition engine for the given application.

Primary differences between the NI-IMAQ API and the NI-IMAQdx API

The following are several key differences between the NI-IMAQ API and the NI-IMAQdx API that should be considered when porting an existing application.

Region of Interest

The NI-IMAQ acquisition VIs offer the option of specifying a Region of Interest (ROI).  The NI-IMAQdx VIs do not have this option and will return the full image every time.  If you need a specific ROI, you must configure the NI-IMAQdx attributes “FrameGrabberAttributes::ImageSizeControls::OffsetX”, “FrameGrabberAttributes::ImageSizeControls::OffsetY”, “FrameGrabberAttributes::ImageSizeControls::Width”, and “FrameGrabberAttributes::ImageSizeControls::Height”.

Acquisition Timeout

In NI-IMAQ, the acquisition timeout (the amount of time to wait for an image before returning an error) is configured through the LabVIEW property node by setting the value for “Acquisition Parameters:Frame Timeout (ms)”.  In NI-IMAQdx, the timeout is an input to each acquisition VI and defaults to 5000 ms (e.g. “IMAQdx Snap2.vi”, IMAQdx Grab2.vi”, “IMAQdx Sequence2.vi”, “IMAQdx Get Image2.vi”, and “IMAQdx Extract Image.vi”).  You can configure the timeout through the NI-IMAQdx property node as well by setting the value for “AcquisitionAttributes::Timeout”.  To use this value, you must pass in -2 to the timeout input for the NI-IMAQdx acquisition VIs.

Triggering and Digital I/O

In NI-IMAQ, trigger and I/O line configuration, including pulse generation, is performed through the VIs located in the “Signal I/O” palette.  In NI-IMAQdx, this configuration is done by setting attributes through the property node.  It is strongly recommended to look at the NI-IMAQdx Compatibility for NI-IMAQ API (see the “Compatibility VIs” section for the location of the VIs) and example VIs to see how to do this.  Triggering and I/O can also be configured for NI-IMAQdx by using NI-MAX.  Saving the configuration in NI-MAX will persist these triggering and I/O settings to the camera file, and these settings will be applied to any session opened for the given device.

Bayer Decoding

When using Bayer encoded images, the NI-IMAQ acquisition VIs will return a monochrome image that must be passed to “IMAQ Bayer to RGB” VI to do the decoding into an RGB image.  In NI-IMAQdx, the Bayer decoding is performed before returning the images from the acquisition VIs when performing a Grab acquisition, so there is no need to call this extra decoding VI.  However, when performing a Ring acquisition, decoding the image in software prior to returning the image is not supported.  In this case, you can perform the Bayer decoding on the frame grabber (if using the PCIe-1437), perform the Bayer decoding on the camera and acquire an RGB image, or acquire a raw monochrome image and decode the image with the “IMAQ Bayer to RGB” VI as done when using the NI-IMAQ API.

Buffer Numbers

The buffer numbers in the NI-IMAQ API are 28 bits.  Values larger than 28 bits are reserved by the NI-IMAQ driver.  The buffer numbers in the NI-IMAQdx API are only 24 bits.  This means that it may be necessary to rewrite any logic that deals with specific buffer numbers to handle the change in the rollover value of the reported buffer number.

When acquiring images using “IMAQdx Get Image2.vi” or “IMAQdx Extract Image.vi”, NI-IMAQdx allows the user to specify the Buffer Mode, which obviates the need to specify the buffer number input in many common cases.  See the documentation for those VIs for more details.

C Interface

While the LabVIEW APIs for NI-IMAQ and NI-IMAQdx are similar, the C APIs are not.  Like the LabVIEW API for NI-IMAQdx, the C API for NI-IMAQdx also uses the Vision image.  However, the NI-IMAQ C API uses raw buffers.  For this reason, the image/buffer management is very different between the two driver C APIs.  Unlike in LabVIEW, there is no compatibility API that is provided to aid in migrating an NI-IMAQ C application to NI-IMAQdx.  The recommendation is to use the NI-IMAQdx examples to demonstrate how to use the NI-IMAQdx API in a C application.  See the “Attribute Translation” and “Additional NI-IMAQdx Attribute” sections for help with mapping NI-IMAQ attributes and functionality to NI-IMAQdx attributes.

Migrating from NI-IMAQ to NI-IMAQdx

There are two ways to port from the NI-IMAQ API to the NI-IMAQdx API:  

  • Use the NI-IMAQdx Compatibility for NI-IMAQ API (see the “Compatibility VIs” section for the location of the VIs) for a more seamless transition.  For NI-IMAQ VIs that do not have a direct replacement in the NI-IMAQdx API, we provided a library of functions that have similar input/outputs to NI-IMAQ VIs but use the NI-IMAQdx driver in the background. This method will require you to mix and match NI-IMAQdx VIs that have a direct NI-IMAQ correspondence and the provided compatibility VIs.  
  • Use the NI-IMAQdx driver directly.  This option allows for the most code reuse between Camera Link and other camera types supported by NI-IMAQdx.

Direct VI Mapping

For some NI-IMAQ VIs, there is a direct correspondence with the NI-IMAQdx VIs.  The NI-IMAQ VIs in this list can be replaced with the corresponding NI-IMAQdx VI without any changes.  If an NI-IMAQ VI in this list has an input terminal that is not found in the corresponding NI-IMAQdx VI (e.g. Step x, Step y, Channel, Region of Interest), this feature is not implemented in NI-IMAQdx.

 

NI-IMAQ VI Name

NI-IMAQdx VI Name

IMAQ Init.vi

IMAQdx Open Camera.vi

IMAQ Close.vi

IMAQdx Close Camera.vi

IMAQ Grab Setup.vi

IMAQdx Configure Grab.vi

IMAQ Start.vi

IMAQdx Start Acquisition.vi

IMAQ Stop.vi

IMAQdx Stop Acquisition.vi

IMAQ Serial Read.vi

IMAQdx Serial Read.vi

IMAQ Serial Read Bytes.vi

IMAQdx Serial Read Bytes.vi

Figure 1. One-to one mapping of NI-IMAQ to NI-IMAQdx VIs

 

Compatibility VIs

For VIs that do not have a direct mapping, we are providing an NI-IMAQdx Compatibility for NI-IMAQ API to facilitate the migration.

These VIs are drop-in replacements for current NI-IMAQ VIs.  Each compatibility VI retains the behavior of the NI-IMAQ VI but instead uses the NI-IMAQdx API.  These VIs offer a quick way of transitioning from using the NI-IMAQ API to using the NI-IMAQdx API while keeping the VI behavior the same.  They are also good reference examples on how to use the NI-IMAQdx API with a Camera Link device.  Looking at the block diagram of the compatibility VIs illustrates how to implement NI-IMAQ features with the NI-IMAQdx API.

The name for each compatibility VI is of the form “NI-IMAQdx Compatibility - <NI-IMAQ VI name>.vi” and can be found in “C:\Program Files\National Instruments\LabVIEW XXXX\vi.lib\vision\driver\IMAQdxCompatibilityForIMAQ.llb”.  

These VIs will not show up in the Functions palette in LabVIEW. Use them from the LLB directly, or export the LLB to a folder and drag and drop them in LabVIEW. 

Below is the full list of compatibility VIs.  The connector panes for the compatibility VIs are identical to the NI-IMAQ VI they replace, and, therefore, they should serve as a drop-in replacement.  If an NI-IMAQ VI in this list has an input terminal that is not found in the corresponding compatibility VI (e.g. Step x, Step y, Channel, Region of Interest), this feature is not implemented in NI-IMAQdx.  The detailed help for each of these compatibility VIs points to the NI-IMAQ documentation as the functionality is the same.

 

NI-IMAQ VI Name

Compatibility VI Name

IMAQ Configure Trigger3.vi

IMAQdx Compatibility – IMAQ Configure Trigger3.vi

IMAQ Copy Acquired Buffer.vi

IMAQdx Compatibility – IMAQ Copy Acquired Buffer.vi

IMAQ Extract Buffer.vi

IMAQdx Compatibility – IMAQ Extract Buffer.vi

IMAQ Generate Pulse3.vi

IMAQdx Compatibility – IMAQ Generate Pulse3.vi

IMAQ Get Buffer.vi

IMAQdx Compatibility – IMAQ Get Buffer.vi

IMAQ Get Camera Attribute.vi

IMAQdx Compatibility – IMAQ Get Camera Attribute.vi

IMAQ Grab Acquire.vi

IMAQdx Compatibility – IMAQ Grab Acquire.vi

IMAQ Reset Encoder Position.vi

IMAQdx Compatibility – IMAQ Reset Encoder Position.vi

IMAQ Sequence.vi

IMAQdx Compatibility – IMAQ Sequence.vi

IMAQ Serial Write.vi

IMAQdx Compatibility – IMAQ Serial Write.vi

IMAQ Set Camera Attribute.vi

IMAQdx Compatibility – IMAQ Set Camera Attribute.vi

IMAQ Snap.vi

IMAQdx Compatibility – IMAQ Snap.vi

IMAQ Status.vi

IMAQdx Compatibility – IMAQ Status.vi

IMAQ Trigger Drive2.vi

IMAQdx Compatibility – IMAQ Trigger Drive2.vi

IMAQ Trigger Read2.vi

IMAQdx Compatibility – IMAQ Trigger Read2.vi

IMAQ Trigger Route2.vi

IMAQdx Compatibility – IMAQ Trigger Route2.vi

IMAQ Wait Signal2.vi

IMAQdx Compatibility – IMAQ Wait Signal2.vi

Figure 2. Mapping of NI-IMAQ to Compatibility VIs

Attribute Translation

Migrating NI-IMAQ VIs to NI-IMAQdx VIs is usually a fairly simple process of replacing the NI-IMAQ VI with the corresponding NI-IMAQdx VI or compatibility VI.  However, if the application is using LabVIEW property nodes, the porting from NI-IMAQ to NI-IMAQdx is more involved.

Figure 4 below gives a mapping of relevant NI-IMAQ attributes to the corresponding attributes in NI-IMAQdx.  In the left column, you will find the NI-IMAQ attributes listed by their LabVIEW property node layout and their C attribute identifier, as found in niimaq.h.  In the right column, the corresponding fully qualified NI-IMAQdx attribute name is shown followed by the LabVIEW property node location if the attribute has a direct mapping to the NI-IMAQdx property node.

Figure 3 below shows an example of a property node with two NI-IMAQ attributes on top and a corresponding property node for these same attributes in NI-IMAQdx below.  If a property node location is listed for an NI-IMAQdx attribute in the table below, then that attribute maybe be set in a manner like the “Width” attribute.  However, if there is not a property node location listed in the table for the NI-IMAQdx attribute, then the “Active Attribute” must first be set to the name of the attribute that you wish to interact with followed by the “Value”.  The “Active Attribute” can be specified by either the fully qualified name or the leaf name as shown for the “DeviceVHAEnable” attribute below.  To ensure that all of the attribute sets and gets are being performed on the desired attribute, always put the “Active Attribute” and “Value” nodes for a given attribute in the same instance of a property node rather than setting the “Active Attribute” in one property node instance and performing the set or get to the “Value” in another property node instance.

Figure 3. NI-IMAQ Acquisition Window Width conversion to NI-IMAQdx Property Node

If the NI-IMAQ attribute that you are using is not shown in the table below, then it was either deemed deprecated or did not have a direct mapping to an NI-IMAQdx attribute.  Consider if the attribute is necessary to your application or if you can accomplish the same goal by using other NI-IMAQdx attributes.  If you find that you still need the information provided by the NI-IMAQ attribute, contact National Instruments for support.

 

NI-IMAQ Property Node / Attribute Constant

NI-IMAQdx Attribute Name / Property Node

Acquisition Parameters:Acquisition Window:Height

IMG_ATTR_ACQWINDOW_HEIGHT

FrameGrabberAttributes::ImageSizeControls::Height

Acquisition Attributes:Height

Acquisition Parameters:Acquisition Window:Left

IMG_ATTR_ACQWINDOW_LEFT

FrameGrabberAttributes::ImageSizeControls::OffsetX

Acquisition Attributes:Offset X

Acquisition Parameters:Acquisition Window:Top

IMG_ATTR_ACQWINDOW_TOP

FrameGrabberAttributes::ImageSizeControls::OffsetY

Acquisition Attributes:Offset Y

Acquisition Parameters:Acquisition Window:Width

IMG_ATTR_ACQWINDOW_WIDTH

FrameGrabberAttributes::ImageSizeControls::Width

Acquisition Attributes:Width

Acquisition Parameters:External Trigger Line Filter

IMG_ATTR_EXT_TRIG_LINE_FILTER

FrameGrabberAttributes::DigitalIOControls::LineFilterTTLEnable

Acquisition Parameters:Frame Timeout (ms)

IMG_ATTR_FRAMEWAIT_MSEC

AcquisitionAttributes::Timeout

Acquisition Attributes:Timeout

Acquisition Parameters:Number of Post Trigger Buffers

IMG_ATTR_NUM_POST_TRIGGER_BUFFERS

FrameGrabberAttributes::AcquisitionControls::BuffersAfterAcqEndTrigger

Acquisition Parameters:RTSI Trigger Line Filter

IMG_ATTR_RTSI_LINE_FILTER

FrameGrabberAttributes::DigitalIOControls::LineFilterRTSIEnable

Acquisition Parameters:Variable Height Acquisition

IMG_ATTR_VHA_MODE

FrameGrabberAttributes::DeviceControls::DeviceVHAEnable

Device Information:Interface Type

IMG_ATTR_INTERFACE_TYPE

FrameGrabberAttributes::DeviceControls::DeviceInterfaceType

Device Information:Linescan Camera

IMG_ATTR_LINESCAN

CameraAttributes::DeviceControls::DeviceScanType

Device Information:Number of External Trigger Lines

IMG_ATTR_NUM_EXT_LINES

FrameGrabberAttributes::DeviceControls:: DeviceLinesTTL

Device Information:Number of ISO In Trigger Lines

IMG_ATTR_NUM_ISO_IN_LINES

FrameGrabberAttributes::DeviceControls::DeviceLinesIsoIn

Device Information:Number of ISO Out Trigger Lines

IMG_ATTR_NUM_ISO_OUT_LINES

FrameGrabberAttributes::DeviceControls:: DeviceLinesIsoOut

Device Information:Number of RTSI Trigger Lines

IMG_ATTR_NUM_RTSI_LINES

FrameGrabberAttributes::DeviceControls:: DeviceLinesRTSI

Device Information:Serial Number

IMG_ATTR_GETSERIAL

CameraInformation::SerialNumberLow

Camera Information:Serial Number Low

Encoder:Divide Factor

IMG_ATTR_ENCODER_DIVIDE_FACTOR

FrameGrabberAttributes::EncoderControls::EncoderDivider

Encoder:Phase A & B Filter

IMG_ATTR_ENCODER_FILTER

FrameGrabberAttributes::EncoderControls::EncoderFilterEnable

Encoder:Phase A Polarity

IMG_ATTR_ENCODER_PHASE_A_POLARITY

FrameGrabberAttributes::EncoderControls::EncoderPolarityA

Encoder:Phase B Polarity

IMG_ATTR_ENCODER_PHASE_B_POLARITY

FrameGrabberAttributes::EncoderControls:: EncoderPolarityB

Encoder:Position (U64)

IMG_ATTR_ENCODER_POSITION

FrameGrabberAttributes::EncoderControls::EncoderValue

Encoder:Use IO Board Input

IMG_ATTR_ENCODER_USE_IO_BOARD_INPUT

FrameGrabberAttributes::EncoderControls::EncoderUseIOBoardInput

Image Parameters:Bayer:Algorithm

IMG_ATTR_BAYER_ALGORITHM

AcquisitionAttributes::Bayer::Algorithm

Image Parameters:Bayer:Blue Gain

IMG_ATTR_BAYER_BLUE_GAIN

AcquisitionAttributes::Bayer::GainB

Acquisition Attributes:Bayer:Gain B

Image Parameters:Bayer:Green Gain

IMG_ATTR_BAYER_GREEN_GAIN

AcquisitionAttributes::Bayer::GainG

Acquisition Attributes:Bayer:Gain G

Image Parameters:Bayer:Onboard Decode Enable

IMG_ATTR_BAYER_ONBOARD_DECODE_ENABLE

AcquisitionAttributes::Bayer::OnboardDecodeEnable

Image Parameters:Bayer:Onboard Decode Force RGB32

IMG_ATTR_BAYER_ONBOARD_DECODE_FORCE_RGB32

AcquisitionAttributes::Bayer::OnboardDecodeForceRGB32

Image Parameters:Bayer:Pattern

IMG_ATTR_BAYER_PATTERN

AcquisitionAttributes::Bayer::Pattern

Acquisition Attributes:Bayer:Pattern

Image Parameters:Bayer:Red Gain

IMG_ATTR_BAYER_RED_GAIN

AcquisitionAttributes::Bayer::GainR

Acquisition Attributes:Bayer:Gain R

Image Parameters:Binary Threshold High

IMG_ATTR_BIN_THRESHOLD_HIGH

FrameGrabberAttributes::LUTControls::LUTBinaryThresholdHigh

Image Parameters:Binary Threshold Low

IMG_ATTR_BIN_THRESHOLD_LOW

FrameGrabberAttributes::LUTControls::LUTBinaryThresholdLow

Image Parameters:Image Type

IMG_ATTR_IMAGE_TYPE

Not needed.  NI-IMAQdx will cast images to the correct type.  You can query the image type using the Vision Development Module API.

Image Parameters:Invert

IMG_ATTR_INVERT

FrameGrabberAttributes::ImageFormatControls::ReverseY

Image Parameters:Look-Up Table

IMG_ATTR_LUT

FrameGrabberAttributes::LUTControls::LUT

Status Information:Acquisition in Progress

IMG_ATTR_ACQ_IN_PROGRESS

StatusInformation::AcqInProgress

Status Information:Acquisition In Progress

Status Information:Frame Count

IMG_ATTR_FRAME_COUNT

StatusInformation::LastBufferCount

Status Information:Last Buffer Count

Status Information:Last Valid Frame

IMG_ATTR_LAST_VALID_FRAME

StatusInformation::LastBufferNumber

Status Information:Last Buffer Number

Status Information:Lost Frames

IMG_ATTR_LOST_FRAMES

StatusInformation::LostBufferCount

Status Information:Lost Buffer Count

Status Information:Power Over Camera Link

IMG_ATTR_POCL_STATUS

FrameGrabberAttributes::DeviceControls::DevicePoCLStatus

Status Information:Power Over Camera Link Base

IMG_ATTR_POCL_STATUS_BASE

FrameGrabberAttributes::DeviceControls::DevicePoCLStatusBase

Status Information:Power Over Camera Link Med/Full

IMG_ATTR_POCL_STATUS_MED_FULL

FrameGrabberAttributes::DeviceControls::DevicePoCLStatusMediumFull

Status Information:Temperature

IMG_ATTR_TEMPERATURE

FrameGrabberAttributes::DeviceControls::DeviceTemperature

Figure 4. Mapping of NI-IMAQ to NI-IMAQdx Properties

Additional NI-IMAQdx Attributes

The full list of attributes can be seen in NI-MAX.  First select your device in Devices and Interfaces tree in the left view.  Then select the Camera Attributes tab in the right view.  By default, only the “Camera Attributes” category is visible.  This is where any attributes that have been defined in the NI-IMAQ camera file will be enumerated.  To view the entire tree of available attributes, click “View Options” in the toolbar above the attribute tree, and select “All Attributes”.

Interact with the “Camera Attributes”, the same way that you would with other attributes.  First set the “Active Attribute” in the LabVIEW property node to the name of the attribute, and then set the “Value”.  Numeric attributes can be set as a double, and enumerated attributes can be set as a string.

The NI-IMAQdx API exposes the triggering and I/O functionality of the frame grabber using a GenICam-like attribute model rather than through a set of VIs as with the NI-IMAQ API.  The compatibility VIs are implemented using these NI-IMAQdx attributes.  The compatibility VIs can be used to provide a familiar experience when migrating an application from NI-IMAQ to NI-IMAQdx, or the NI-IMAQdx attributes may be used directly.  Below is a list of the additional triggering and I/O attributes available that have not already been listed in the Attribute Translation section.

 

NI-IMAQdx Attribute Name

FrameGrabberAttributes::AcquisitionControls::AcquisitionBurstFrameCount

FrameGrabberAttributes::AcquisitionControls::TriggerSelector

FrameGrabberAttributes::AcquisitionControls::TriggerMode

FrameGrabberAttributes::AcquisitionControls::TriggerSource

FrameGrabberAttributes::AcquisitionControls::TriggerActivation

FrameGrabberAttributes::AcquisitionControls::TriggerDivider

FrameGrabberAttributes::DeviceControls::PoCLEnable

FrameGrabberAttributes:: DeviceControls::DeviceSerialActionCommandsEnable

FrameGrabberAttributes:: DeviceControls::DeviceSerialPortBaudRate

FrameGrabberAttributes:: DeviceControls:: DeviceSerialPortDataBits

FrameGrabberAttributes:: DeviceControls:: DeviceSerialPortStopBits

FrameGrabberAttributes:: DeviceControls:: DeviceSerialPortParityBit

FrameGrabberAttributes:: DeviceControls:: DeviceSerialPortDTRPolarity

FrameGrabberAttributes:: DeviceControls:: DeviceSerialPortRTSPolarity

FrameGrabberAttributes:: DeviceControls:: DeviceSerialTerminationString

FrameGrabberAttributes::DigitalIOControls::LineSelector

FrameGrabberAttributes::DigitalIOControls:: LineMode

FrameGrabberAttributes::DigitalIOControls:: LineInverter

FrameGrabberAttributes::DigitalIOControls:: LineStatus

FrameGrabberAttributes::DigitalIOControls:: LineStatusAll

FrameGrabberAttributes::DigitalIOControls:: LineSource

FrameGrabberAttributes::DigitalIOControls::LineFormat

FrameGrabberAttributes::DigitalIOControls:: UserOutputSelector

FrameGrabberAttributes::DigitalIOControls:: UserOutputValue

FrameGrabberAttributes::DigitalIOControls:: UserOutputValueAll

FrameGrabberAttributes::EncoderControls::EncoderResetPosition

FrameGrabberAttributes::ImageSizeControls::PayloadSize

FrameGrabberAttributes::PulseGeneration::PulseGeneratorSelector

FrameGrabberAttributes::PulseGeneration::PulseGeneratorMode

FrameGrabberAttributes::PulseGeneration::PulseGeneratorTriggerSource

FrameGrabberAttributes::PulseGeneration::PulseGeneratorTriggerActivation

FrameGrabberAttributes::PulseGeneration::PulseGeneratorTimerSource

FrameGrabberAttributes::PulseGeneration::PulseGeneratorDelay

FrameGrabberAttributes::PulseGeneration::PulseGeneratorDuration

FrameGrabberAttributes::PulseGeneration::PulseGeneratorDelayEncoderCounts

FrameGrabberAttributes::PulseGeneration::PulseGeneratorDurationEncoderCounts

FrameGrabberAttributes::PulseGeneration::PulseGeneratorEnable

Figure 5. New NI-IMAQdx Attributes

Error Code Translation

Camera Link support in NI-IMAQdx still makes use of the NI-IMAQ driver.  Therefore, when using Camera Link devices, NI-IMAQdx VIs can emit NI-IMAQ error codes.  If the NI-IMAQ error code is in the list below, it will automatically be converted into the corresponding NI-IMAQdx error code before being returned.  If the NI-IMAQ error code is not in the list, it will be returned as-is without translation.

In addition, the system can send commands and data to other devices, such as programmable logic controllers (PLCs) and operator interfaces, using industrial protocols such as Ethernet/IP, RS232/RS485, Modbus serial, and Modbus/TCP. Compact Vision Systems also have a dedicated Gigabit Ethernet port for network connectivity and two high-speed USB ports for external data storage. With enterprise connectivity, you can also monitor the inspection results, view images, or store data in databases for statistical process control.

 

NI-IMAQ

NI-IMAQdx

Error Name

Error Code

Error Name

Error Code

IMG_ERR_SYSTEM_MEMORY_FULL

-1074397181

IMAQdxErrorSystemMemoryFull

-1074360320

IMG_ERR_DRIVER_FAULT

-1074396947

IMAQdxErrorInternal

-1074360319

IMG_ERR_BAD_POINTER

-1074397027

IMAQdxErrorInvalidPointer

-1074360317

IMG_ERR_BAD_INTERFACE_FILE

-1074397163

IMAQdxErrorInvalidInterface

-1074360316

IMG_ERR_ADDRESS_OUT_OF_RANGE

-1074396946

IMAQdxErrorInvalidAddress

-1074360314

IMG_ERR_BAD_DEVICE_TYPE

-1074397022

IMAQdxErrorInvalidDeviceType

-1074360313

IMG_ERR_NOT_SUPPORTED

-1074397183

IMAQdxErrorNotImplemented

-1074360312

IMG_ERR_DEVICE_NOT_FOUND

-1074397029

IMAQdxErrorCameraNotFound

-1074360311

IMG_ERR_DEVICE_IN_USE

-1074396995

IMAQdxErrorCameraInUse

-1074360310

IMG_ERR_BOARD_NOT_INITIALIZED

-1074397046

IMAQdxErrorCameraNotInitialized

-1074360309

IMG_ERR_BOARD_CLOSED

-1074396961

IMAQdxErrorCameraRemoved

-1074360308

IMG_ERR_BOARD_RUNNING

-1074397151

IMAQdxErrorCameraRunning

-1074360307

IMG_ERR_BOARD_NOT_RUNNING

-1074397154

IMAQdxErrorCameraNotRunning

-1074360306

IMG_ERR_INVALID_ATTRIBUTE

-1074397098

IMAQdxErrorAttributeNotSupported

-1074360305

IMG_ERR_INVALID_BUFFER_ATTRIBUTE

-1074397025

IMAQdxErrorAttributeNotSupported

-1074360305

IMG_ERR_INVALID_CAMERA_ATTRIBUTE

-1074396962

IMAQdxErrorAttributeNotSupported

-1074360305

IMG_ERR_ATTRIBUTE_NOT_SETTABLE

-1074397116

IMAQdxErrorAttributeNotSettable

-1074360304

IMG_ERR_ATTRIBUTE_NOT_READABLE

-1074397101

IMAQdxErrorAttributeNotReadable

-1074360303

IMG_ERR_BUFFER_NOT_AVAILABLE

-1074397014

IMAQdxErrorBufferNotAvailable

-1074360301

IMG_ERR_NO_BUFFERS_CONFIGURED

-1074397158

IMAQdxErrorBufferListEmpty

-1074360300

IMG_ERR_BUFFER_LIST_ALREADY_LOCKED

-1074397023

IMAQdxErrorBufferListLocked

-1074360299

IMG_ERR_BUFFER_LIST_NOT_LOCKED

-1074397165

IMAQdxErrorBufferListNotLocked

-1074360298

IMG_ERR_TIMEOUT

-1074397150

IMAQdxErrorTimeout

-1074360293

IMG_ERR_CANNOT_WRITE_FILE

-1074396912

IMAQdxErrorFileAccess

-1074360290

IMG_ERR_CANNOT_READ_FILE

-1074396911

IMAQdxErrorFileAccess

-1074360290

IMG_ERR_BAD_CAMERA_FILE

-1074397160

IMAQdxErrorInvalidCameraFile

-1074360288

IMG_ERR_INSTALLATION_CORRUPT

-1074396952

IMAQdxErrorDLLNotFound

-1074360284

IMG_ERR_VIDEO_LOCK

-1074397153

IMAQdxErrorCameraUnreachable

-1074360276

IMG_ERR_SERIAL_READ_TIMEOUT

-1074397037

IMAQdxErrorTimeout

-1074360293

IMG_ERR_SERIAL_WRITE_TIMEOUT

-1074397036

IMAQdxErrorTimeout

-1074360293

Figure 6. NI-IMAQ to NI-IMAQdx error code mapping

NI-IMAQ functionality not supported in NI-IMAQdx

Some NI-IMAQ VIs do not have compatibility or direct replacements in the NI-IMAQdx API.

The following VIs are not supported in NI-IMAQdx.  

NI-IMAQ VI Name

Comments

IMAQ Occurrence Config2.vi

Occurrences are not supported through the NI-IMAQdx driver.  Use asynchronous events instead.  See example VI “C:\Program Files (x86)\National Instruments\LabVIEW 2018\examples\Vision Acquisition\NI-IMAQdx\Low Level\Low-Level Grab Async.vi”.

IMAQ Configure List.vi

NI-IMAQdx does not require that you configure a buffer list.  You can either remove this VI completely or replace with NI-IMAQdx Ring Acquisition VIs.  

IMAQ Configure Buffer.vi

NI-IMAQdx does not require that you configure each individual buffer used in the acquisition.  NI-IMAQdx does not support the “skip count” feature.  You can either remove this VI completely or replace with NI-IMAQdx Ring Acquisition VIs.  

IMAQ Fit ROI.vi

This behavior is not directly supported in NI-IMAQdx.  Set the “Width”, “Height”, “OffsetX, and “OffsetY” attributes to emulate the behavior.

IMAQ Set User LUT.vi

This feature is not supported by any Camera Link boards that can be used in NI-IMAQdx.

Figure 7. Unsupported NI-IMAQ functions in NI-IMAQdx

Camera Files for Camera Link cameras using NI-IMAQdx

Camera Link devices in NI-IMAQdx make use of both NI-IMAQdx and NI-IMAQ camera files.   

Similar to using a Camera Link camera in NI-IMAQ, the camera attributes are stored in the NI-IMAQ .icd file located in the “Documents/National Instruments/NI-IMAQ/Data” folder.  There are also some frame grabber attributes that are stored in this camera file.  When converting an application from the NI-IMAQ API to the NI-IMAQdx API, no changes to this file are needed.  Note that NI-IMAQ camera files are only used with Camera Link devices; using NI-IMAQdx with cameras on other buses will not use the NI-IMAQ camera files at all.

In addition to the NI-IMAQ .icd and .iid files, when using the NI-IMAQdx API, each Camera Link camera will have associated NI-IMAQdx .iid and .icd files located in the “Documents/National Instruments/NI-IMAQdx/Data” folder.  The NI-IMAQdx .icd file stores additional frame grabber attributes that are not stored in the NI-IMAQ camera file (e.g. triggering and I/O settings).  To deploy a configuration to another system, it is necessary to copy both the NI-IMAQ and NI-IMAQdx .iid and .icd files to the new system.

Was this information helpful?

Yes

No