用Matlab控制NI数据采集卡实现实时数据采集(1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2 用户界面和应用实例
通常在开发一个实际的应用程序时都会尽量 做到界面友好 ,本文以此为目的为本程序制作了 GU I图形用户界面 ,采用简单的控件实现基本的 功能 。制作控件时 ,主要考虑控件操作函数和回 调函数的制作 。在操作函数中完成对控件属性的 设置 ;在回调函数中直接写入 C - M EX 文件 ,在 编辑框中输入参数后按回车 ,自动完成数据采集 , 并绘制曲线 。编辑框的程序语句如下所示 。
M a tlab 是 M a thW o rks 公司推出的一套高性 能的数值运算和可视化软件 ,它将数值分析 、矩阵 运算 、信号处理和图形显示结合在一起 ,包含大量 高度集成的函数可供调用 , 命令语句功能十分强 大 ,为科学研究 、工程设计以及众多学科领域提供
了一种简洁 、高效的编程工具 。但是 M a tlab使用 的是解释性语言 ,因而大大限制了它的执行速度 。 为实现实时监控的需要 , M a thW o rks公司从 V e r2 sion6. 1开始推出了数据采集工具箱 , 提供了与一 些主要仪器 、仪表和 I /O 板卡的接口 ,其中包括了 N I公 司 N I - DAQm x 产 品 , 但 目 前 M a tlab 和 U SB - 6008还没有现成的接口函数可以调用 , 只 提供了自带的 N I - DAQm x B ase 软件 。该软件 包含用 V C 编写的 W indow s环境下对板卡通道的 读写操作函数 。本文为了在 M a tlab 环境下运用 此采集卡实现实时监控 ,采用动态链接的方法 , 在 C - M EX 文件中调用 N I公司提供的数据采集卡 函数库 ,实现对硬件底层 I /O 的实时读写 。
( taskHandle, clockSource, samp leRate, DAQm x_Val _ R ising, DAQmx _ Val _ ContSamp s, samp lesPer2 Chan) ) ;
…… / /采集数据 for ( i = 0; i < n; i + + ) { DAQmxErrChk ( DAQmxB aseR2 eadAnalogF64 ( taskHandle, pointsToRead, tim eout,
产品
模拟输入
采样率 输入范围
输入精度
输入量程 模拟输出 输出精度
计数 /
(次 / s)
(V )
定时器
I源自文库/O
U SB - 6008
8S E /4D I
12 bit
1万
±20
8
2
12 b it
1
12
U SB - 6009
8S E /4D I
14 bit
418 万
±20
8
2
12 b it
1
12
由表 1可知 , N I U SB - 6008具有基本的数据 采集功能 ,其应用范围包括简单的数据记录 , 便携 式测量 和 学 术 机 构 的 实 验 室 试 验 。N I U SB 6008可 使 用 L abV IEW 或 C 以 及 自 带 的 N I DAQm x B ase测量服务软件 , 创建用户自定义的 测量系统 。但这些只能完成简单的测量和分析 , 若要完成复杂的工程运算或实时控制还须借助其 他的软件环境 。
第 19卷第 5期 2006年 10月
常州工学院学报
Jou rna l of C hangzhou Ins titu te of Techno logy
V o l. 19 N o. 5 O c t. 2006
用 M atlab控制 N I数据采集卡实现实时数据采集
许大好 李询 谢倩
(南京农业大学工学院农业电气工程系 , 江苏 南京 210031)
M EX是 M atlab 的可执行程序 , 是 M atlab 调 用其他语言编写的程序或算法的接口 , 在 W in2 dow s环境下是扩展名为 DLL 的动态链接库 。C M EX是基于 C的 M EX文件 ,他们能像 M 文件和 内部函数一样运行 ,也可像 M 函数一样被调用 。 由于 USB - 6008提供的是基于 VC 的函数库 ,故 采用 C - M EX 文件 。生成 C - M EX 文件必须完 成以下工作 :
图 1 计算程序框图 计算程序主要分为 4部分 : 1)对相关的参数进行设置 ,创建采样任务 句柄 。 2)调用采集卡函数 ,创建任务句柄 ,设置采 样通道和采样频率 。 3)依据由函数入口参数传递的采样个数 ,调 用采样函数 ,采集数据 。
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
M EX的源代码由两个截然不同的部分组成 , 分别完成不同的功能 。第一部分称为入口子程 序 ,其作用是在 M atlab系统与被调用的外部子程 序之间建立通信联系 。入口子程序必须是 mex2 Function,其 构 成 形 式 为 : void mexFunction ( int nlhs, mxA rray 3p lhs [ ] , int nrhs, const mxA rray 3p rhs[ ] ) { /3实现 M atlab与计算子程序通信的 代码 3 / }其中 : nlhs, nrhs为整型 ,分别表示输出输 入变量的个数 ; p lhs[ ] , p rhs[ ]为 m xA rray型指 针数组 ,分别表示输出输入变量的地址 。
1)M EX文件系统的配置 。在 M atlab环境下 输入编译器的配置命令 µ mex - setup设置 V isual C++为外部的 C语言编译器 。
2)按 M EX 文 件 格 式 , 编 写 基 于 C 语 言 的 M EX源代码 。在 M atlab环境下 ,利用 C++编译器 将扩展名为. C的源代码编译成动态链接库 (D ll) 文件 。 111 C - M EX文件的格式
TaskHandle taskHandle = 0; int n = 3 a; char chan [ ] = “Dev1 / ai0”; char clockSource [ ] = “OnboardClock”; float64 samp leRate = 5000. 0; / / 设置数据缓冲 #define bufferSize ( u Int32) 20 float64 data [ bufferSize ]; …… / /调用采集卡库函数 ,建立任务 ,对采样 通道 、采样频率等进行设置 DAQm xErrChk ( DAQmxB aseC reateTask (“”, &taskHandle) ) ; DAQm xErrChk ( DAQm xBaseCreateA IVolt2 ageChan ( taskHandle, chan,“”, DAQmx_Val_Cfg_ Default, m in, max, DAQmx_Val_Volts, NULL ) ) ; DAQmxErrChk (DAQmxB aseCfgSampC lkTim ing
第 5期
许大好 ,李询 ,谢倩 :用 M atlab控制 N I数据采集卡实现实时数据采集
37
4)任务结束 ,清除任务句柄 。 #include“m ex. h” #include“N IDAQmxB ase. h”
#include < stdio. h > void caiji ( double 3 a, double 3 b) { / /创建任务句柄和设置通道参数
摘要 :为实现在 M a tlab环境下应用 N I数据采集卡实现实时数据采集 ,提出了通过链接动态链
接库 ,在 C - M EX 文件中调用 N I U SB - 6008数据采集卡的驱动函数 ,成功驱动数据采集卡获取数
据 。该方法的使用 ,为 M atlab控制其他高性能数据采集卡提供了有益的操作思路 。
关键词 : M a tlab; N I数据采集卡 ; M EX 文件
中图分类号 : TP274 + . 2 文献标识码 : A
文章编号 : 1671 - 0436 ( 2006) 05 - 0035 - 04
0 引言
的关键因素之一 。本文设计中实际采用的 N I数 据采集卡是 N I公司生产的 U SB - 6008型多功能
第二部分称为计算功能子程序 ,它包含所有 实际需要完成的功能的源代码 ,它由入口子程序 调用 。 112 接口程序的实现
void mexFunction ( int nlhs, mxA rray 3p lhs [ ] , int nrhs, mxA rray 3p rhs[ ] )
{ double 3 a; / /定义输入采样个数指针 double 3 b; / /定义指向采样数据指针 int ncols; a = mxGetPr (p rhs[ 0 ] ) ; / /指向输入数组 的首地址 ncols = 3 a; / /得到采样个数
数据采集与分析是生产和科学实验的重要手 数据采集卡 。其 功能 参数 如表 1 所示 ( U SB -
段 ,也是实现自动控制的前提和基础 。合理地选 6008, 6009使用手册 ) 。
择采集卡和软件平台是保障数据采集和实时监控
表 1 N I U SB - 6008 和 U SB - 6009数据采集卡性能参数
p lhs [ 0 ] = mxCreateDoubleM atrix ( 1, ncols, mxREAL ) ; / /创建输出矩阵 , 13 ncols矩阵
b =mxGetPr(p lhs[ 0 ] ) ; / /得到输出变量 的指针
caiji ( a, b) ; / /调用计算程序 } 113 计算程序的实现 本计 算 程 序 的 主 要 功 能 是 调 用 N I USB 6008的驱动函数库中的读数据函数 ,实现对板卡 的读操作 (若要完成写操作也可按同样的方法实 现 ) 。对于任何 C - M EX 文件 ,程序中都必须包 括“mex. h”文件 ,使得进入点和接口程序可以正 确地声明 ,本程序中还应包括 N IUSB - 6008 W in2 dow s的 驱动 程序 的头 文 件“N IDAQmxB ase. h ”。 计算程序的程序框图如图 1所示 。
DAQm x_Val_GroupB yScanNum ber, data, bufferSize, &pointsRead, NULL ) ) ;
b [ i] = data [ 0 ]; } …… / /结束任务 if ( taskHandle ! = 0) { DAQmxBaseStopTask ( taskHandle) ; DAQm xBaseClearTask ( taskHan2 dle) ;
收稿日期 : 2006207205
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
36
常州工学院学报
2006年
1 M a tlab接口程序 C - M EX文件
h _ edit = uicontrol ( h _ fig, ′style′, ′edit′, ′un it′,
′norm alized′, position′, [ 0. 67, 0. 59, 0. 25, 0. 14 ] , . . .
} …… } 虽然在 C - MEX 的 头 文 件 中 已 包 含 了 N I USB - 6008 W indow s 的 驱 动 程 序 的 头 文 件 “N IDAQmxB ase. h”,在编译该文件时仍然要添加 N IDAQm xBase. lib文件 ,使 C - M EX 文件动态链 接板卡的函数库文件 。 编译 的 命 令 为 µ mex caiji. cpp N IDAQm x2 B ase. lib。
相关文档
最新文档