NI-DAQmx: Reduce Development Time and Improve Performance

Similar documents
LabVIEW Core 1. What You Need To Get Started. File Locations. The course installer places the course files in the following location: ni.

Measurement & Automation Explorer (MAX) View and control your devices and software

ni.com/training Quizzes LabVIEW Core 1 ni.com/training Courses Skills learned: LabVIEW environment Certifications Skills tested: LabVIEW environment

BE/EE189 Design and Construction of Biodevices Lecture 5. BE/EE189 Design and Construction of Biodevices - Caltech

Answers to Frequently Asked Questions about NI-DAQmx and Traditional NI-DAQ (Legacy)

LabVIEW Basics I: Introduction Course

NI-DAQmx Basic Course NITS John Shannon

Advanced NI-DAQmx Programming Techniques with LabVIEW

Graphical System Design for Machine Control

NI-DAQ mx Base 1.x. Contents GETTING STARTED GUIDE

Developing Measurement and Control Applications with the LabVIEW FPGA Pioneer System

NI 6703/6704 Calibration Procedure for Traditional NI-DAQ

SCB-68 User Guide. 68-Pin Shielded Desktop Connector Block

Contents. Software. CALIBRATION PROCEDURE NI Channel, 300 Vrms, 24-Bit, Simultaneous, Channel-to-Channel Isolated Analog Input Module

Contents. Software CALIBRATION PROCEDURE NI TC-4353

NI 6703/6704 Calibration Procedure for NI-DAQ mx

CALIBRATION PROCEDURE NI PXIe Channel, Isolated Voltage/Current Analog Output Module

Hardware: Acquiring Data and Communicating with Instruments

Programming for the LabVIEW Real-Time Module Using LabWindows/CVI

Strain and Force Measurement

Figure 3.174: Illustration of the code of the event f USB that plots an USB camera frame if the typed frame is under the acceptable limits (case 0)

LabVIEW Tutorials. T.1 Temperature Measurement and Cold Junction Compensation (CJC) LUMS School of Science and Engineering

Vernier SensorDAQ User s Manual

NOTE TO USERS NI 61xx Pinout Labels for the SCB-68 Multifunction I/O S Series Modules/Devices Using the 68-Pin Shielded Connector Block

NI PCI-5153EX. Contents USER GUIDE. with Hardware Accumulation Firmware

CALIBRATION PROCEDURE PXIe channel, 16-bit, 400 ks/s/ch, Ch-Ch Isolated Analog Input Module. ni.com/manuals

Contents. Software. CALIBRATION PROCEDURE NI Channel, ±5 V, 24-Bit Software-Selectable IEPE and AC/DC Analog Input Module

Data Acquisition Fundamentals

NI 653x Cable Adapter

Where to Start with NI ELVIS

LabVIEW Real-Time Module for Mac OS X User Manual Addendum

Contents. Software. CALIBRATION PROCEDURE NI 9216/ Channel, 24-Bit, 100 Ω/1000 Ω RTD Analog Input Module

Contents. Software Requirements CALIBRATION PROCEDURE NI TB-4353

±10 V, 20 MS/s/ch, 14-Bit, 4-Channel C Series Digitizer Module

What s New in Data Acquisition

SCXI Contents CALIBRATION PROCEDURE

The following conventions appear in this document:

±500 V Isolation Protects Your Data. Sample Rate. 16 bits ±1.25 V, ±2.5 V, ±5 V, ±10 V 100 ks/s 16 2

DT3016. High-Speed, Multifunction PCI Data Acquisition Board. Overview. Key Features. Supported Operating Systems

Contents. Software Requirements. CALIBRATION PROCEDURE NI PXIe-4357

ECONseries Low Cost USB DAQ

IMAQ Vision Deployment Engine Note to Users

NI-DAQ mx for USB Devices

ESERIES CALIBRATION FIXTURE INSTALLATION GUIDE

IMAQ Vision Deployment Engine Note to Users

CALIBRATION PROCEDURE NI channel, ±2- ma/±10 V, 24-bit Analog Input Module. ni.com/manuals

ni.com Preparing for the CLAD Exam

LabVIEW VI Analyzer Toolkit

AMPLICON ADIO32. LabVIEW DRIVER SOFTWARE

CALIBRATION PROCEDURE CAL Contents. Software

Additional products and features

SCXI -1104/C. Contents CALIBRATION PROCEDURE. For NI-DAQmx

LabVIEW Real-Time Module Release Notes

Getting Results with CompactRIO and LabVIEW

SCXI -1102/B/C. Contents CALIBRATION PROCEDURE. For NI-DAQmx

ECONseries Low Cost USB DAQ

Software-Defined Test Fundamentals. Understanding the Architecture of Modular, High-Performance Test Systems

Data Acquisition in LabVIEW

NI-Industrial Communications for EtherCAT

LabVIEW PDA Module Release Notes

Analog Input Sample Rate

NI 9213 Calibration Procedure

A variety of ECONseries modules provide economical yet flexible solutions. Waveform Generation

PC-based data acquisition I

M Series USB-6221/6225/6229/6251/6255/6259 OEM Devices

Getting Started with the LabVIEW Real-Time Module

Automated Test Equipments

LabVIEW programming I

USER GUIDE NI USB-6001/6002/6003 Low-Cost DAQ USB Device

Introduction to LabVIEW and NI Hardware Platform

LabVIEW FPGA Module Release and Upgrade Notes

Where to Start with NI ELVIS

LabVIEW Real-Time Module Release and Upgrade Notes

Hands-on Lab 2: LabVIEW NI-DAQ Basics 2

CALIBRATION PROCEDURE SCXI Contents. Software Requirements. ni.com/manuals

Using the Agilent Technologies Series Logic Analysis System with the Xilinx ChipScope ILA

VIBbox 64-Channel Sound & Vibration Solution

VIBBOX. 32, 48, or 64-Channel Sound & Vibration Solution Expansion to 256 Channels. Key Feature of Each VIBbox: Table 1. Key Features of VIBbox Models

Controller Area Network (CAN) Tutorial

PC104P-16AIO Bit Analog Input/Output PC104-Plus Board

Data Acquisition Laboratory

Certified LabVIEW Associate Developer Exam. Test Booklet

A variety of ECONseries modules provide economical yet flexible solutions

LabVIEW Express VI Development Toolkit User Guide

Getting Started with the LabVIEW Real-Time Module

NI USB-6211/6218 OEM

Datalogging in LabVIEW

SCC Quick Start Guide

1.30 GHz Dual-Core CPU, 2 GB DRAM, 4 GB Storage, Kintex-7 70T FPGA, 4-Slot CompactRIO Controller

NI USB-622x/625x/628x OEM

User's Manual. Model MX190 API for the MX100/DARWIN First Step Guide Using the API to create programs for the MX100.

Low-Cost Multifunction DAQ for USB

SCXI Equipment and Other Test Requirements CALIBRATION PROCEDURE. Test Equipment. Software and Documentation

The NI TB-2648/2649/2650/2651 terminal blocks configure your NI PXI/PXIe-2531 (NI 2531) in one of the following topologies. 1-wire 8 64 matrix

1.60 GHz Quad-Core CPU, 4 GB DRAM, 16 GB Storage, Kintex-7 325T FPGA, 8-Slot CompactRIO Controller

IVI Compliance Package Release Notes

16AIO Bit Analog Input/Output Board. With 16 Input Channels and 8 Output Channels

NI Contents. Hardware Overview INSTALLATION GUIDE. NI 8221 Features

NI mydaq HANS-PETTER HALVORSEN, Telemark University College Department of Electrical Engineering, Information Technology and Cybernetics

Designing Real-Time Control Applications Using LabVIEW and CompactRIO. Developer Days 2009

Transcription:

Learn 10 Functions in NI-DAQmx and Handle 80 Percent of Your Data Acquisition Applications The National Instruments Getting Started with NI-DAQmx Series is aimed at helping you learn NI-DAQmx programming fundamentals. Through video and text tutorials, this series will take you from verifying your device's operation in Measurement & Automation Explorer (MAX) to programming data acquisition applications using. It is intended for both the beginner who wants to learn how to use the DAQ Assistant, as well as the experienced user who wishes to take advantage of advanced NI-DAQmx functionality. NI-DAQmx: Reduce Development Time and Improve Performance Since the release of NI-DAQmx, users of National Instruments data acquisition (DAQ) hardware have been taking full advantage of its many features designed to both save them development time and improve the performance of their data acquisition applications. One feature that saves a considerable amount of development time is the NI-DAQmx Application Programming Interface (API), which is the same across both device functionality and device families. This means that all of the functionality of a multifunction device is programmed with the same set of functions (analog input, analog output, digital I/O, and counters). Furthermore, both a digital I/O device and an analog output device are programmed using this same set of functions. In, this is possible because of polymorphism. A polymorphic VI accepts multiple data types for one or more input and/or output terminals. The NI-DAQmx API is also consistent across all of its applicable programming environments. You need to learn how to use only a single set of functions to be able to program most National Instruments data acquisition hardware in multiple programming environments. Another feature of NI-DAQmx that improves your development experience is DAQ Assistant. This tool helps you create your applications without programming through a graphical interface for configuring both simple and complex data acquisition tasks. Moreover, synchronization, a process that is usually difficult to implement because trigger and/or clock signals must be manually routed, is effortless with NI-DAQmx, which automatically performs signal routing between the different functional areas of a single device and between multiple devices. The data acquisition applications you build using NI-DAQmx benefit from an architecture designed to maximize performance. This begins with an efficient state model that eliminates unnecessary reconfiguration. With this overhead removed, both configuration and acquisition are optimized. In addition, you can achieve single-point I/O rates of greater than 50 ks/s. This level of performance is possible because of memory-mapped registers. Another significant feature of the NI-DAQmx architecture is Measurement Multithreading. Because NI-DAQmx is multithreaded, multiple data acquisition operations can occur simultaneously, significantly improving the performance of your applications that contain multiple operations. It also greatly simplifies programming such applications. Detailed information concerning the benefits of NI-DAQmx is available in the Advantages of NI-DAQmx document. To begin taking advantage of these benefits, you only need to learn a few functions. In fact, 10 NI-DAQmx functions provide the functionality to solve 80 percent of data acquisition applications. These functions are described in detail to help you understand both their functionality and the types of applications in which they are used., National Instruments, and ni.com are trademarks of National Instruments Corporation. Product and company names mentioned herein are trademarks or trade names of their respective companies. For patents covering National Instruments products, refer to the appropriate location: Help»patents in your software, the patents.txt file on your CD, or ni.com/patents. Copyright 2006 National Instruments Corporation. All rights reserved. Document Version 12

NOTE: The examples referenced throughout this document are available in the following locations. LabWindows/ Help >> Find Examples >> Hardware Input and Output >> DAQmx Help >> Find Examples >> Hardware Input and Output >> DAQmx...\National Instruments\MeasurementStudio70\DotNET\Examples\DAQmx DAQ Assistant Tools >> Create/Edit DAQmx Tasks [] Project >> Add New Item >> DAQmx Task [] DAQ Assistant is a graphical interface for interactively creating, editing, and running NI-DAQmx virtual channels and tasks. A NI-DAQmx virtual channel consists of a physical channel on a DAQ device and the configuration information for this physical channel, such as input range and custom scaling. A NI-DAQmx task is a collection of virtual channels, timing and triggering information, and other properties regarding the acquisition or generation. In the figure below, DAQ Assistant is configured to perform a finite strain measurement. 2 www.ni.com

The following documents describe the use of DAQ Assistant in, LabWindows/, and. NI-DAQmx Express VI Tutorial Using the DAQ Assistant in LabWindows/ Using the DAQ Assistant in Measurement Studio DAQ Assistant can also generate code to configure and/or perform the specified acquisition or generation. This procedure in is described in the DAQ Assistant Help, and in the Using DAQ Assistant to Automatically Generate Code document. Below, we display an instance of DAQ Assistant and the resulting automatically generated configuration and example code. 3 www.ni.com

Certain data acquisition applications require more flexibility and/or performance than the DAQ Assistant provides. These applications require the simple, yet powerful, NI-DAQmx functions described below. NI-DAQmx Create Virtual Channel Library >> NI-DAQmx >> Channel Creation/Configuration [] Task.Channels.CreateChannel Property [] 4 www.ni.com

The NI-DAQmx Create Virtual Channel function creates a virtual channel and adds it to a task. It can also be used to create multiple virtual channels and add all of them to a task. If a task is not specified, the function creates a task. The NI-DAQmx Create Virtual Channel function has numerous instances. These instances correspond to the specific type of measurement or generation the virtual channel(s) perform. Below are four examples of different instances of the NI-DAQmx Create Virtual Channel VI. The inputs to the NI-DAQmx Create Virtual Channel function differ for each instance of the function. However, certain inputs are common to most, if not all, of the function's instances. For example, an input is required to specify the physical channels (analog input and analog output), lines (digital), or counter that the virtual channel(s) will use. Additionally, analog input, analog output, and counter operations use minimum value and maximum value inputs to configure and optimize the measurements and generations based on the minimum and maximum expected values of the signals. Furthermore, a custom scale can be applied to many types of virtual channels. In the following block diagram, the NI-DAQmx Create Virtual Channel VI is used to create a thermocouple virtual channel. Examples to Examine Write Dig Port.vi Cont Acq Thermocouple Samples-Int Clk.vi Write Dig Port Cont Thrmcpl Samples-Int Clk 5 www.ni.com

WriteDigPort ContAcqThermocoupleSamples_IntClk NI-DAQmx Trigger Library >> NI-DAQmx >> Triggering [] Task.Triggers Property [] The NI-DAQmx Trigger function configures a trigger to perform a specific action. The most commonly used actions are a start trigger and a reference trigger. A start trigger initiates an acquisition or generation. A reference trigger establishes the location, in a set of acquired samples, where pretrigger data ends and posttrigger data begins. Both of these triggers can be configured to occur on a digital edge, an analog edge, or when an analog signal enters or leaves a window. In the block diagram below, both a start trigger and a reference trigger are configured, using the NI-DAQmx Trigger VI, to occur on digital edges for an analog input operation. Many data acquisition applications require synchronization of different functional areas of a single device (for example, analog output and counters). Others require multiple devices to be synchronized. To achieve this synchronization, trigger signals must be routed between the different functional areas of a single device and between multiple devices. NI-DAQmx automatically performs this routing. When using the NI-DAQmx Trigger function, all valid trigger signals are available as the source input to the function. For example, in the following NI-DAQmx Trigger VI, the start trigger signal for Device 2 is available as the source of the start trigger for Device 1 without any explicit routing being performed. The Timing and Synchronization Features of NI-DAQmx document contains additional information concerning the use of the NI-DAQmx Trigger function to perform synchronization with NI-DAQmx. 6 www.ni.com

Examples to Examine Acq&Graph Voltage-Int Clk-Dig Start&Ref.vi Cont Acq&Graph Voltage-Int Clk-Analog Start.vi Acq-Int Clk-Dig Start&Ref Cont Acq-Int Clk-Anlg Start AcqVoltageSamples_IntClkDigStartAndRef ContAcqVoltageSamples_IntClkAnalogStart NI-DAQmx Timing Library >> NI-DAQmx >> Timing [] Task.Timing Property [] The NI-DAQmx Timing function configures the timing for hardware-timed data acquisition operations. This includes specifying whether the operation will be continuous or finite, selecting the number of samples to acquire or generate for finite operations, and creating a buffer when needed. For operations that require sample timing (analog input, analog output, and counter), the Sample Clock instance of the NI-DAQmx Timing function sets both the source of the sample clock, which could be an internal or external source, and its rate. The sample clock controls the rate at which samples are acquired or generated. Each clock pulse initiates the acquisition or generation of one sample for each virtual channel included in the task. Below, the block diagram demonstrates the use of the Sample Clock instance of the NI-DAQmx Timing VI to configure a continuous analog output generation with an external sample clock. To achieve synchronization in data acquisition applications, just as trigger signals must be routed between the different functional areas of a single device and between multiple devices, timing signals must also be routed in the same manner. NI-DAQmx also automatically performs this routing. All valid timing signals are available as the source input 7 www.ni.com

to the NI-DAQmx Timing function. For example, in the following DAQmx Timing VI, the analog output sample clock signal of the device is available as the source of the sample clock for the analog input channels, without any explicit routing being performed. The Timing and Synchronization Features of NI-DAQmx document contains additional information concerning the use of the NI-DAQmx Timing function to perform synchronization with NI-DAQmx. Most counter operations do not require sample timing because the signal being measured provides the timing. The Implicit instance of the NI-DAQmx Timing function should be used for these applications. In the block diagram below, the Implicit instance of the NI-DAQmx Timing VI is used to configure a buffered pulse width acquisition to be finite with a specified number of samples. Certain data acquisition devices employ handshaking as the timing for their digital I/O operations. Handshaking uses an exchange of request and acknowledge timing signals with an external device to transfer each sample. The Handshaking instance of the NI-DAQmx Timing function configures handshaking timing for digital I/O operations. Examples to Examine Cont Gen Voltage Wfm-Ext Clk.vi Meas Buffered Semi-Period-Finite.vi Cont Gen Volt Wfm-Ext Clk Buff Semi-Period-Finite ContGenVoltageWfm_ExtClk MeasBuffered_SemiPeriodFinite NI-DAQmx Start Task Library >> NI-DAQmx >> Task Configuration/Control >> Start Task [] Task.Start Method [] 8 www.ni.com

As mentioned in the Introduction, the state model used by NI-DAQmx eliminates unnecessary reconfiguring to obtain a high level of efficiency and maximize performance. This state model consists of five states in which a task can reside. Detailed information concerning each of these states is available in the NI-DAQmx Help under Key NI-DAQmx Concepts>>Tasks>>Task State Model. The NI-DAQmx Start Task function explicitly transitions a task to the running state. In the running state, the task performs the specified acquisition or generation. A task will be implicitly transitioned to the running state, or automatically started, if the NI-DAQmx Start Task function is not used, when the NI-DAQmx Read function executes. This implicit transition also occurs if the NI-DAQmx Start Task function is not used and the NI-DAQmx Write function executes with its auto start input specified accordingly. Although it is not always required, using the NI-DAQmx Start Task function to explicitly start a task involving a hardware-timed acquisition or generation is preferred. Furthermore, if the NI-DAQmx Read function or the NI-DAQmx Write function will be executed multiple times, such as in a loop, the NI-DAQmx Start Task function should also be used. Otherwise, the task performance will be reduced because it will be repeatedly started and stopped. Additional information describing when to use the NI-DAQmx Start Task function is available in the NI-DAQmx Help under Key NI-DAQmx Concepts>>Tasks>> Explicitly Starting a Task. The following block diagram demonstrates a situation where the NI-DAQmx Start function does not need to be used because the analog output generation only consists of a single, software-timed sample. Conversely, the block diagram below demonstrates a situation where the NI-DAQmx Start function should be used because the NI-DAQmx Read function is executed multiple times to read from the counter. 9 www.ni.com

Examples to Examine Gen Dig Pulse Train-Continuous.vi Cont Acq 0-20mA Current Samples-Int Clk.vi Dig Pulse Train-Cont Cont 0-20mA Samps-Int Clk GenDigPulseTrain_Continuous ContAcq0_20mACurrentSamples_IntClk NI-DAQmx Read Library >> NI-DAQmx >> Read Functions [] ChannelReader Class [] The NI-DAQmx Read function reads samples from the specified acquisition task. The different instances of the function allow for the type of acquisition (analog, digital, or counter), the number of virtual channels, the number of samples, and the data type to be selected. Below, are four examples of the different instances of the NI-DAQmx Read VI. Instances of the NI-DAQmx Read function that are capable of reading multiple samples include an input to specify the number of samples per channel to read when the function executes. For finite acquisitions, by specifying a number of 10 www.ni.com

samples per channel of -1, the function waits for all of the requested samples to be acquired and then reads these samples. Specifying a number of samples per channel of -1 for a continuous acquisition results in the function reading all of the samples that are currently available in the buffer when the function executes. In the following block diagram, the NI-DAQmx Read VI has been configured to read multiple samples from multiple analog input virtual channels and return the data as waveforms. Furthermore, since the number of samples per channel input has been wired to a constant value of 10, each time the VI executes it will read 10 samples from each virtual channel. Examples to Examine Acq One Sample.vi Read Dig Chan.vi One Sample Read Dig Chan AcqOneVoltageSample ReadDigChan NI-DAQmx Write Library >> NI-DAQmx >> Write Functions [] ChannelWriter Class [] The NI-DAQmx Write function writes samples to the specified generation task. The different instances of the function allow for the type of generation (analog or digital), the number of virtual channels, the number of samples, and the data type to be selected. Below are four examples of the different instances of the NI-DAQmx Write VI. 11 www.ni.com

Each instance of the NI-DAQmx Write function has an auto start input to determine if the function will implicitly start the task if it has not already been explicitly started. As was previously discussed in the NI-DAQmx Start Task section of this document, the NI-DAQmx Start Task function should be used to explicitly start a generation task that uses hardware timing. It should also be used to maximize performance if the NI-DAQmx Write function will be executed multiple times. The following block diagram, for a finite analog output generation, includes a "False" Boolean constant wired to the auto start input of the NI-DAQmx Write VI because the generation is hardware-timed. The NI-DAQmx Write VI has been configured to write multiple samples of analog output data for one channel to the task as an analog waveform. Examples to Examine Gen Voltage Update.vi Write Dig Chan.vi Volt Update Write Dig Chan GenVoltageUpdate WriteDigChan NI-DAQmx Wait Until Done Library >> NI-DAQmx >> Task Configuration/Control >> Wait Until Task Done [] Task.WaitUntilDone Method [] The NI-DAQmx Wait Until Done function waits for the data acquisition operation to complete before finishing. This function should be used to ensure that the specified acquisition or generation is complete before the task is stopped. Most commonly, the NI-DAQmx Wait Until Done function is used with finite operations. Once this function has finished executing, the finite acquisition or generation is complete and the task can be stopped without disturbing the operation. Additionally, the timeout input allows a maximum wait time to be specified. If the acquisition or generation does not complete within this amount of time, the function exits and an appropriate error is generated. Below, the NI-DAQmx Wait Until Done VI is used in the block diagram to verify that the finite analog output operation is complete before the task is cleared. 12 www.ni.com

Examples to Examine Gen Dig Pulse.vi Gen Mult Volt Updates-Int Clk.vi Dig Pulse Mult Volt Updates-Int Clk GenDigPulse GenMultVoltUpdates_IntClk NI-DAQmx Clear Task NI-DAQmx Clear Task Library >> NI-DAQmx >> Task Configuration/Control >> Clear Task [] Task.Dispose Method [] The NI-DAQmx Clear Task function clears the specified task. If the task is currently running, the function first stops the task and then releases all of its resources. Once a task has been cleared, it cannot be used unless it is recreated. Thus, if a task will be used again, the NI-DAQmx Stop Task function should be used to stop the task, but not clear it. For continuous operations, the NI-DAQmx Clear Task function should be used to stop the actual acquisition or generation. In the following block diagram, a continuous pulse train is being generated with a counter. The pulse train continues to be output until the While Loop is exited and the NI-DAQmx Clear Task VI executes. 13 www.ni.com

Examples to Examine Cont Gen Voltage Wfm-Int Clk.vi Count Digital Events.vi Cont Gen Volt Wfm-Int Clk Cnt Dig Events ContGenVoltageWfm_IntClk CountDigEvents NI-DAQmx Property Nodes Attribute [] Property [] NI-DAQmx Property Nodes provide access to all of the properties associated with a data acquisition operation. These properties can be set by writing to the NI-DAQmx Property Nodes, and the current values of the properties can be read from the NI-DAQmx Property Nodes. Furthermore, in, one NI-DAQmx Property Node can be used to write to and/or read from multiple properties. For example, the following NI-DAQmx Timing Property Node sets the source of the sample clock. Then, the source of the sample clock is read. Finally, the active edge of the sample clock is set. Many properties can be set using the NI-DAQmx functions discussed previously. The Sample Clock Source and Sample Clock Active Edge properties, for instance, can be set using the NI-DAQmx Timing function. However, some of the less frequently used properties can only be accessed through the NI-DAQmx Property Nodes. In the block diagram below, a NI-DAQmx Channel Property Node is used to enable the hardware lowpass filter and then set the filter cutoff frequency for use with a strain gage measurement. 14 www.ni.com

Examples to Examine Cont Acq Strain Samples.vi Cont Acq Accel Samples-Int Clk-Analog Start.vi Cont Strain Samples Cont Accel Samps-Int Clk-Anlg Start AcqStrainSamples ContAcqAccelSamp_IntClk_AnalogStart Conclusion NI-DAQmx saves development time and improve the performance of data acquisition applications. One of the ways NI-DAQmx saves development time is by providing an API that requires only a small number of functions to expose the majority of its functionality. In fact, 80 percent of data acquisition applications can be solved after learning only the 10 functions discussed in this document. 15 www.ni.com