CAN调用动态库必看.doc_第1页
CAN调用动态库必看.doc_第2页
CAN调用动态库必看.doc_第3页
CAN调用动态库必看.doc_第4页
CAN调用动态库必看.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、前言(界绍Matlab加载USBCAN设备的原理,可以忽略,直接进入第二章节:操作步骤)Matlab调用c+的动态库一般用两种方法,一种是用Loadlibrary的方法,一种是用mex技术的方法。由于用Loadlibray的方法直接调用会出现很多问题,因为Matlab的结构体和指针的用法不是很强大,发送数据会错乱和接收数据显示不出来等。因此,现在提供的Demo用mex技术来做。所为mex技术,写一个cpp文件,这个文件里一定有一个函数mexFunction,这个函数作为Matlab与c+动态库的接口。例如#include mex.h#includeControlCAN.h#pragma comment(lib,ControlCAN.lib)void mexFunction(int nlhs,mxArray *plhs,int nrhs, const mxArray *prhs)if( nrhs != 3) mexErrMsgTxt(输入参数个数不对!);return;nlhs=2;double p1 = *(double*)mxGetPr(prhs0);double p2 = *(double*)mxGetPr(prhs1);double p3 = *(double*)mxGetPr(prhs2);plhs0=mxCreateDoubleMatrix(1,1,mxREAL);double *output1 =(double*)mxGetPr(plhs0);*output1=VCI_OpenDevice(p1,p2,p3);其中#include mex.h 一定要。第二第三行是加载动态库,mexFunction是接口函数,参数nlhs是参数个数,plhs是输入参数,nrhs输出参数个数,prhs输出参数。P1,p2,p3是输入参数,output1是输出参数。这个文件写完后把它放在Matlab的Work工作目录里,然后在Matlab的命令行里输入 mex -setup和mbuild -setup进行编译环境设置。设置为VC6.0的编译环境。一切就绪后,在命令行里输入mex VCI_OpenDevice.cpp.就生成一个VCI_InitCAN.mexw32的文件(如果是64位系统会生成VCI_InitCAN.mexw64)。这样我们在命令行或M文件里调用VCI_OpenDevice(4,0,0),返回1就可以调用成功。由于原来的动态库里需要传递或返回结构体数组指针,这在Matlab里极不方面,因此在Mex文件里改成用数组或矩阵来传递,这样在Matlab里面很方便调用,而且提高了效率。注意VCI_Transmit(DEVICETYPE,DEVICEINDEX,CANINDEX, Frames,SendNums);第四个参数Frames其实是一个n*18的矩阵,其中一行代表一帧,n是要发送的帧数。下面说说每列和原来的VCI_CAN_obj结构体的对应关系:第一列 ID第二列TimeStamp第三列TimeFlag第四列SendType第五列RemoteFlag第六列ExternFlag第七列 DataLen第8列到15列是8个字节的数据,16列到18列Reserved GetLength,Frames=VCI_Receive(DEVICETYPE,DEVICEINDEX,CANINDEX,len,WaitTime);这是经过Mex改造的接收数据函数。GetLength :接收到的帧数Frames: 数据矩阵,是一个GetLength*18的矩阵。原来的VCI_Receive函数里有6个参数的,在这里只有5个分别是设备类型,设备索引,设备通道,最多接收的帧数,等待时间。二、操作步骤提供的样例为64位,32位请参数后续步骤。1、 操作环境测试环境:MATLAB:R2009b 64bit(win64)操作系统:win7 64位VS2008安装目录:C:Program Files (x86)Microsoft Visual Studio 9.0(需安装VC X64编译器,注:在安装VS2008时,有相应的勾选项目)MATLAB样列:64bit (里面包含的ControlCAN.dll、ControlCAN.lib为64位)2、 将光盘二次开发示例源代码CAN_Demo(matlab)文件夹拷贝到C盘根目录。3、 启动matlab,设置工作目录4、 在Matlab的命令行里输入 mex -setup和mbuild -setup进行编译环境设置。注意:按下图操作,编译器的数量与序号可能不一样,按实际情况选择。下图为编译器实际的安装目录。核对目录是否正确。5、删除原有编译生成的文件,以便重新编译。也可以跳过此步骤,直接运行5、 编译:一切就绪后,在命令行里输入mex VCI_OpenDevice.cpp.就生成一个VCI_InitCAN.mexw32的文件(如果是64位系统会生成VCI_InitCAN.mexw64)。这样我们在命令行或M文件里调用VCI_OpenDevice(4,0,0),返回1就可以调用成功。注:依次编译10个函数(按需编译)。6、 运行:双击CAN_Demo.m再点运行。按图选择设备型号,滤波模式,发送格式设为自发自收,用于测试。其它值不变更。点击连接,启动CAN,再点发送即可。可以看到一帧发送的数据,一帧收到的数据。此时,完成了MATLAB加载USBCAN设备的全部流程。7、 对于32位系统,需要安装windows 3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论