SoftIntegration Demos for Ch and Toolkits
Demos
Ch
Ch Control System
Ch CGI
Ch ODBC
ChExcel
Ch DAQ

Graphical Library

Ch Data Acquisition Package for NI-DAQ Demos.

To completely understand two demo programs below for real-time data acquisition, you only need to read this on-line Quick Introduction to NI-DAQ

Example 1
The program daq.ch below illustrates how Ch Data Acquisition Package for NI-DAQ is used. This program can be found in the directory CHHOME/toolkit/demos/NIDAQ/ after installation of the Ch Data Acquisition Package for NI-DAQ, where CHHOME is the home directory in which Ch is installed.

After NI-DAQ is installed and configured, the program is readily to run without compilation, which will give you a quick start on programming NI-DAQ in Ch. The program will acquire 500 data points within 3 seconds through channel 2. The data are displayed as a plot. In the example below, the input signal is a sine wave for function sin(10x) generated through a function generator as shown in the displayed plot.

/*- --------------------------------------------------------------------- This program will acquire data from channel 2 of the AT-MIO-16E-10 board. All settings are made in the program itself, there are not any inputs for the user. The current settings are: data points 500 - set with the COUNT -----------------------------------------------------------------------*/ #include <windows.h> /* needed for NI-DAQ */ #include <nidaq.h> /* NI-DAQ functions */ #include <stdio.h> /* input/output functions */ #include <chplot.h> /* ploting functions */ #include <numeric.h> /* use linspace() */ #define COUNT 500 /* # of data points */ #define NUM_OF_SEC 3 /* amount of time to take data */ int main() { short InDevice = 1, /* device number of A/D card set in NI-DAQ */ InChannel = 2, /* channel to read from */ InGain = 1, /* gain to apply to the reading */ InBuffer[COUNT] = {0}, /* buffer to hold data from A/D card */ InStatus; /* return value of NI-DAQ functions for error check */ long InTimeOut = 360; /* # of timer ticks to wait for data to be acquired before assume error */ unsigned long InCount = COUNT; /* # of data points to take */ double InRate = COUNT/NUM_OF_SEC, /* frequency of data acquisition */ GainAdjust = 1, /* factor to adjust the gain in binary to value conversion */ Offset = 0, /* binary offset needed in binary to value conversions */ time[COUNT], /* buffer to hold time stamp */ VoltBuffer[COUNT]; /* buffer to hold converted data */ CPlot plot; /* instantiate a plot class */ /****** print a header to the screen ******/ printf ("This program will acquire %d points from channel %d.\n", InCount, InChannel); /****** set time for timeout and error check ******/ if ((InStatus = Timeout_Config(InDevice, InTimeOut)) != 0) { printf ("Timeout_Config error %d\n",InStatus); exit(InStatus); } /****** acquire data and error check ******/ if ((InStatus = DAQ_Op(InDevice, InChannel, InGain, InBuffer, InCount, InRate)) != 0) { printf ("DAQ_Op error %d\n",InStatus); exit(InStatus); } /****** convert binary data to input data type and error check ******/ if ((InStatus = DAQ_VScale(InDevice, InChannel, InGain, GainAdjust, Offset, InCount, InBuffer, VoltBuffer)) != 0) { printf ("DAQ_VScale error %d\n",InStatus); exit(InStatus); } /****** plot the data ******/ linspace(time, 0, NUM_OF_SEC); plotxy(time, VoltBuffer,"Data acquired through Ch DAQ Toolkit for NI-DAQ","time (sec)", "Voltage (volts)",&plot); plot.grid(PLOT_ON); plot.plotting(); } daq.png

Example 2
The example code below is from NI-DAQ distribution. The program can readily run in Ch Standard Edition without any modification.

/********************************************************************* * * Example program: * DAQOp.c * * Description: * Read a waveform from one analog input channel using internal * timing (uses high-level NI-DAQ functions) * * Example Category: * AI * * Example Task Types: * BUF, 1CH, BURST, IMMED, SYNC, INTTRIG * * List of key parameters: * lTimeout, dSampRate * * [Since variables are hardcoded, there is no guarantee that this * program will work for your setup. This example is simply * presented as a code snippet of how you can use NI-DAQ functions * to perform a task.] * * List of NI-DAQ Functions used in this example: * Timeout_Config, NIDAQErrorHandler, DAQ_Op, DAQ_VScale * * [NOTE: For further details on each NI-DAQ function, please refer * to the NI-DAQ On-Line Help (NIDAQPC.HLP).] * * Pin Connection Information: * Connect your analog signal to AI channel 1. The default analog * input mode for the DAQ device will be used. * * [For further I/O connection details, please refer to your hardware * User Manual.] * * [For further details on how to run this example, please refer to * the NI-DAQ Examples On-Line Help (NIDAQEx.HLP).] * *********************************************************************/ /* * Includes: */ #include "nidaqex.h" /* * Main: */ void void main(void) { /* * Local Variable Declarations: */ i16 iStatus = 0; i16 j = 0; i16 iRetVal = 0; i16 iDevice = 1; i32 lTimeout = 180; i16 iChan = 2; i16 iGain = 1; f64 dSampRate = 1000.0; u32 ulCount = 100; f64 dGainAdjust = 1.0; f64 dOffset = 0.0; static i16 piBuffer[100] = {0}; static f64 pdVoltBuffer[100] = {0.0}; i16 iIgnoreWarning = 0; /* This sets a timeout limit (#Sec * 18ticks/Sec) so that if there is something wrong, the program won't hang on the DAQ_Op call. */ iStatus = Timeout_Config(iDevice, lTimeout); iRetVal = NIDAQErrorHandler(iStatus, "Timeout_Config", iIgnoreWarning); /* Acquire data from a single channel. */ /* HINT: You can easily replace this with the SCAN_Op function. */ iStatus = DAQ_Op(iDevice, iChan, iGain, piBuffer, ulCount, dSampRate); iRetVal = NIDAQErrorHandler(iStatus, "DAQ_Op", iIgnoreWarning); iStatus = DAQ_VScale(iDevice, iChan, iGain, dGainAdjust, dOffset, ulCount, piBuffer, pdVoltBuffer); iRetVal = NIDAQErrorHandler(iStatus, "DAQ_VScale", iIgnoreWarning); printf(" The data is available in 'pdVoltBuffer'.\n"); for (j = 0; j < 100 ; j = j + 5) { printf ("\n%f %f %f ",pdVoltBuffer[j],pdVoltBuffer[j+1], pdVoltBuffer[j+2]); printf ("%f %f",pdVoltBuffer[j+3],pdVoltBuffer[j+4]); } } /* End of program */