中泰联创_Matlab编程说明VER1.0Matlab是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。它在数学类科技应用软
中泰联创_Matlab编程说明 VER 1.0
Matlab是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。它在数学类科技应用软件中在数值计算方面首屈一指。Matlab可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 北京中泰联创科技有限公司(以下简称中泰联创)的板卡全面支持Matlab的编程,而且编程方法非常简洁、为您快速开发应用系统创造条件。本公司提供完整的编程实例和详尽的说明,以及全汉字的软件注解,本公司提供全面的编程技术与硬件技术服务,这些都为您的系统开发带来便捷。 由于采用了相同的接口方式,本例程提供的方法对中泰联创的全部产品都适用。 为了便于您理解和应用,本说明主要以实例为基础来说明在Matlab下的编程方法,实例的开发环境是Matlab 7.0.1(R14)。
1. 编程实例的主要文件
图1 编程实例文件目录 如图1所示,目录中包含5个文件,这5个文件分为三类,分别介绍如下: 第一类:接口程序: usb7660.H:这是本公司专为Matlab提供的头文件,通过该文件,就可以实现对中泰联创提供的函数库文件进行操作,该文件应该包含在用户的应用程序中。 第二类:设计文件: untitled.fig:用户界面文件,实现操作与显示功能 untitled.m:应用软件源程序文件,实现主要功能 untitled.asv:程序运行时的文件 第三类:函数库文件: USB7660.dll:高级语言编译生成的动态链接库文件。设备驱动和硬件通讯程序广泛采用DLL形式,利用此法通过调用相关DLL能够实现Matlab程序对硬件的控制。
2.编程实例的开发过程 开发本软件的关键是在程序中调用中泰联创提供的DLL文件,然后就可以如同正常的Matlab软件的开发。Matlab提供相关的功能函数以实现在M代码中调用动态连接库文件中导出的函数。此方法通常需要完成以下4个步骤: (1)打开动态连接库文件; (2)为调用函数准备数据; (3)调用动态连接库文件中导出的函数; (4)关闭动态连接库文件。 相关函数介绍请参见: MATLAB环境下调用通用DLL的方法.pdf文件
图2 DLL中所包含的函数详细信息 如图2所示,在加载动态链接库文件后,在命令窗口处可以通过命令“libfunctions dllName –full”(不含引号)命令来查看当前动态链接库中所包含的函数名称、返回值类型以及函数的参数类型,为下一步函数的调用提供方便。
3.实例程序的功能
图3实例程序的功能 图3所示为本程序运行的界面,可以看出,例程实现了波形曲线显示与AD结果显示。波形的曲线显示,将采集到的AD值以波形的方式表现出来,直观而且容易理解。 五个按钮分别代表开始采集(软件定时)、停止采集、开始采集(内时钟定时)和关闭程序。
4.实例程序说明 实例代码总体结构非常简单,明了,并且有详细的注解。 1. 数组与变量的定义 global cardNO global NumChn global FrqSamp global AmpRange global AmpGain global NumSamp global wantDataCnt 其中,cardNO 为板卡号,FrqSamp为采样频率系数,AmpRange为AD输入量程范围,NumSamp为读取的每通道缓冲区采样点数,NumChn为采集通道数,wantDataCnt为读取缓冲区数据个数。 shortdata=int16(1:8000); pCode=libpointer('int16Ptr',shortdata);定义数据缓冲区,pCode为指向缓冲区数组的指针。 2. 初始化采集参数 cardNO=1; NumChn=2; FrqSamp=1; AmpGain=0; AmpRange=2; NumSamp=1000; wantDataCnt=NumChn*NumSamp;
3. 调用USB7660.dll loadlibrary('USB7660','usb7660.H');%调用USB7660.dll,将dll文件包含到程序中。
4. 定义定时器 由于Matlab的GUI编程组件中没有现成的定时器空间,所以在使用定时器之前要先定义定时器。 handles.timer=timer('Period',1.0,'ExecutionMode','FixedRate', 'TimerFcn',{@timerCallback,handles});
handles.timerAD=timer('Period',0.1,'ExecutionMode','FixedRate', 'TimerFcn',{@ADtimerCallback,handles});
这两个定时器一个负责软件定时数据的读取,第二个负责内时钟定时数据的读取和绘图。
5. 定时器程序 定时器程序是高速连续采集的关键程序。 function ADtimerCallback(obj, eventdata, handles) global cardNO; global NumChn; global NumSamp; global wantDataCnt; a = zeros(1,(NumChn*NumSamp)); pCode = libpointer('int16Ptr', a); SFifoDataCnt=calllib('USB7660','ZT7660_GetSFifoDataCnt',cardNO); set(handles.text14,'string',num2str(SFifoDataCnt)); if SFifoDataCnt >= wantDataCnt calllib('USB7660','ZT7660_AIFifoEx',cardNO,wantDataCnt,pCode); shortdata=get(pCode,'value'); %以下是分离各通道数据 for i=(0+NumChn):NumChn:(wantDataCnt-1-1) AD1data(i/NumChn)=shortdata(i+1); AD2data(i/NumChn)=shortdata(i+2); End %绘图 x1=linspace(0,NumSamp-1,NumSamp-1); x2=linspace(0,NumSamp-1,NumSamp-1); y1=AD1data; y2=AD2data; x=[x1;x2]'; y=[y1;y2]'; plot(x,y) axis ([0 1000 0 10000]); grid on end
6. 开始采集的命令 global cardNO; global NumChn; global FrqSamp; global AmpGain; global NumSamp; global AmpRange; calllib('USB7660','ZT7660_ClearFifo',cardNO); calllib('USB7660','ZT7660_AIinit',cardNO,1,NumChn,AmpRange,AmpGain,0,FrqSamp,0,0,0,0); %初始化采集卡并开始采集 start(handles.timerAD);%开启定时器
7. 停止采集的命令 global cardNO; stop(handles.timerAD); %关闭定时器 calllib('USB7660','ZT7660_ADstop',cardNO); %停止采集卡
8. 关闭程序的命令 global cardNO; stop(handles.timer); %关闭定时器1 stop(handles.timerAD); %关闭定时器2 calllib('USB7660','ZT7660_ADstop',cardNO); %停止采集卡 calllib('USB7660','ZT7660_CloseDevice',cardNO); %释放设备资源 unloadlibrary('USB7660'); close;%关闭画图面板 clear all; %将程序中的全局变量清除
绘图效果如下图所示:
5.进行Matlab编程时应该注意的问题 通过实验证明,采用中泰联创的硬件和软件,可以很好地实现与Matlab无缝连接,实现高速、连续的采集。 在编程时,有以下几点需要注意: 1.采用Matlab编程时,一定要先调用XXXX.dll文件,结束程序时,要卸载XXXX.dll文件。 2.配置参数wantDataCnt、NumSamp时,要考虑采样频率FrqSamp,当FrqSamp很大时,NumSamp就应该增大,当FrqSamp很小时,NumSamp就应该变小。wantDataCnt的要求是每次定时器从缓冲区中读取数据个数为采集通道的整数倍,这样各通道数据不会串扰。 6.技术支持与服务 尽管我们努力使编程例程和文档尽可能地详尽,但还是有可能不能满足您的需要,请您及时与我们联系,并请经常光顾我们的网站,在该网站上会经常有新的产品或新的文档发布,这些也许对您的开发有帮助。
7.Matlab与其他测试测量软件比较 LabVIEW是美国National Instruments公司推出的虚拟仪器开发平台软件,是一种非常优秀的面向对象的图形化编程语言,用于快速创建测试、测量和控制应用程序。以其强大的数据采集、数据处理、数据分析和仪器控制功能在现代测控领域中得到了广泛的应用。它具有如下优点:提供各种接口总线和常用仪器的驱动程序,用户可将其与测量硬件连接,方便地完成信号数据采集、信号分析、数据存储以及数据处理等许多通常的任务;可以很方便的创造一个交互式的系统控制界面,从而使各种信号的采集和处理开发更加人性化,因为其外形和操作可以模拟实际的仪器。虽然LabVIEW 对于一般信号的分析处理比较方便,内置了许多用于分析测量数据的函数,能够胜任大多数测量任务,但是其本身也存在不足,如不能完全提供用户所需要的驱动程序和调用系统程序实现底层操作,不擅长于完成大量数据处理的任务。因此对于一些虚拟仪器中需要进行大量数据运算处理的复杂应用,仅仅用LabVIEW就显得有些力不从心。 MATLAB软件为几乎所有的工程计算领域提供了准确、高效的多种功能的工具箱,在信号和图像处理等领域具有无可比拟的优势。它针对许多领域开发了模块:如信号处理、数据库接口、神经网络、小波分析、图像处理等。MATLAB以其强大的科学计算功能、大量稳定可靠的算法库等特点已成为数学计算工具方面事实上的标准。 简单的说:Matlab更多的是一种程序语言,是一种很强大的科学计算工具。集成了大量的函数和工具箱toolbox,尤其擅长对数据的处理;Labview更像一种可视化编程工具,是一种虚拟仪器,和硬件接口非常方便。尤其擅长数据采集系统。 关于执行效率: Matlab是一种解释性语言,存在计算速度慢的问题(同样的算法C比它快10倍以上),为了提高程序的运行效率,matlab提供了多种实用工具及编码技巧。Matlab是为矢量和矩阵操作而设计的,因此,可以通过矢量化方法加速M文件的运行。特别是使用大型数组或矩阵时,Matlab进行动态内存分配和取消时,可能会产生内存碎片,这将导致大量闲置内存产生,预分配可通过提前给大型数据结构预约足够空间来避免这个问题。 因此在选择编程语言和开发工具时要有所取舍。 |