




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
从CAN总线到VXI总线数据传输的实现彭琪琪, 陈 光(电子科技大学自动化学院CAT实验室,四川 成都 610054)摘要:在VXI总线系统中,为了能够获得大量实时数据,需要利用CAN总线快速可靠的传输数据的性能,设计一种混合VXI总线和CAN总线的系统。在这种混合系统中要实现CAN总线上各个节点采集并传输实时数据,采用VXI-CAN这样一个消息基模块完成数据到VXI总线上的传输。通过这种VXI总线和CAN总线互相通讯获得实时数据的基本原理和方法,实现了实时数据的采集。这种数据传输的实现为VXI总线系统的设计拓宽了新的思路。关键词:CAN总线;VXI总线;数据传输;VXI-CAN模块1 引言控制器局部网(CANController Area Network)是一种有效支持分布式控制或实时控制的串行通信网络。自从它的问世以来,由于其高速通信速率、高可靠性、连接方便和高的性价比等突出优点成为工业应用领域的生力军。其应用已从最开始的汽车工业扩展到农业机械、医疗器械等各个领域。由于,CAN总线上的数据占用总线时间很短,能够保证通信的实时性;CAN协议中规定数据传递有错误处理功能,能够保证通信的可靠性。因此在我们所研究的VXI总线系统中,将CAN总线作为实时数据采集传输线,发挥了其独有的优势,弥补了VXI总线的局限。一条CAN总线上可以有256个节点,每一个节点都可以从CAN总线上接收数据,也可以向CAN总线发送数据。由于CAN总线的系统灵活,其节点可以在不要求所有现存节点及其应用层改变任何软件或硬件的情况下,接入CAN网络。对于一个VXI总线的实时系统来说,想增添或减少一个VXI模块必须重新初始化模块。又由于一个VXI机箱的槽数很有限,若采用VXI总线则采集模块个数也就受到限制了,但是若采用CAN总线传输实时数据,节点数量则大大增加。因此,要构造一个实时的多数据采集传输系统,选择CAN总线作为实时数据的传输总线也不失为一种实际有效的方法。2 VXI总线与CAN总线数据传输的比较2.1 传输速率VXI总线有较大的数据吞吐量,传输速率可达40Mbps,而CAN总线的位速率只有1Mbps。虽然CAN总线作为串行数据通信总线已有较高的传输速率,但相对于VXI总线来说,它仍然只能算作低速总线。2.2 传输协议在VXI总线系统中,实现命令者-从者的通讯和控制遵循“字串行协议”。 “字串行协议”是串行地从一个固定地址向另一个固定地址传送数据的通讯协议。这个协议是消息基器件最基本的通讯方法,所有的消息基器件都应实现这个协议。而在CAN总线中,数据传输则遵循CAN技术规范2.0。该版本包括A、B两部分,A描述了报文格式,B中描述了标准格式和扩展格式。在技术规范2.0版中规定了发送报文的4种帧格式:数据帧、远程帧、出错帧以及超载帧。每种帧格式都有各自不同的位场,通过每一个位场上位的标识,来控制该帧传输的信息及传输方式。要实现这两种数据传输速率、传输协议完全不同的两种总线上的数据传输,下面介绍了一种切实可行的方法。3 数据传输的基本原理通过上面的比较,数据在CAN总线与VXI总线上传输分别遵循不同的规约,同时又存在低速总线与高速总线之间数据缓冲处理的问题。因此要使数据在两条总线上畅通有效地进行传输,这里引入了一个VXI消息基器件VXI-CAN模块。整个系统结构如下图: 图1 VXI总线和CAN总线混合系统结构其中零槽控制机是采用的NI公司的872B嵌入式的零槽控制机,所装系统为Windows 2000,并且在该操作系统上已经安装了NI的VISA库,能够支持基于VISA库函数的编程。4路CAN-VXI卡是一个VXI消息基器件,它的每一个接口都可以连一条CAN总线,故该模块允许连接4条CAN总线。CAN总线上用一个仿真计算机作为CAN的一个节点,它与CAN总线的接口是一块PCI-CAN卡。在上面的VXI系统中,基本传输原理如下图。仿真计算机PCI-CAN卡 背板总线 CAN PCI 零槽控制机VXI总线接口电路CAN总线接口控制电路控制数据缓冲及数据读写的单片机 总线 总线 图2 数据传输硬件结构当零槽控制机想通过CAN总线向CAN节点发送命令或数据时,数据或命令首先通过背板总线到VXI-CAN模块(图2虚线框内部分)。为了支持字串行协议,在该消息基模块中包含了VXI总线接口电路(可采用专用的接口芯片如:Interface IT9010M,也可以采用可编程逻辑器件自行设计)。通过这种专用I/O电路,从硬件上完成了对字串行命令译码。获得字串行协议的译码后,再采用80C196来控制CAN总线控制器(PHILIPS的SJA1000)。SJA1000是一种支持CAN协议2.0B的芯片,带有验收滤波器,可支持11位和29位的标识符的滤波。通过该CAN总线接口电路最后完成向CAN总线帧格式的转化。接着数据或命令再通过CAN总线到达各个CAN节点。在上面的结构中即数据到达PCI-CAN卡的接收数据缓冲区,仿真计算机读取缓冲区数据即可。同样,若仿真计算机想通过CAN总线向VXI总线的零槽控制机发送数据,则将经过仿真计算机发送数据帧到PCI-CAN卡发送数据缓冲区,CAN总线将数据帧串行送入VXI-CAN模块的CAN总线接口电路进行解析,存储到模块双口RAM中,最后通过零槽控制机控制消息基模块的命令,读取缓冲区数据的过程。根据CAN协议2.0B,数据传输有两种帧格式,标准帧和扩展帧。二者不同仅仅在于标识符的长度,所以下面只具体介绍采用扩展帧发送数据,而不再描述标准帧的传输了。就发送数据而言,若以扩展帧格式发送数据帧,包括一个RTR位和一个29位的标识符。RTR位用来区别标准格式或是扩展格式。29位标识符标识了不同数据帧的含义,可以用来区别一条CAN总线上256个不同节点发送的不同数据。就接收数据而言,CAN协议2.0B分别为标准帧和扩展帧提供了两种滤波方式。SJA1000支持CAN协议2.0B,它提供了4个8位的验收码寄存器(ACR0ACR3)和验收屏蔽寄存器(AMR0AMR3)用以完成报文滤波,实现对带有特定标识符的数据帧的接收。其滤波方式如图3所示。ACR2ACR3ACR1ACR0ACR0ACR0ACR0AMR0扩展帧29位标识符 滤 波 器RTR18位标识符11位标识符OR 接收,放入数据缓冲区图3 CAN协议的单滤波方式 因此在编写程序实现数据传输的时候,数据发送设置的标识符和数据接收设置的接收码和屏蔽码也是完成数据传输的一个关键。4 数据传输的程序设计4.1 数据传输系统描述VXI总线按照上面所讲的数据传输基本原理,编写程序完成如图4的一个数据传输系统。完成由CAN总线1上节点A发送数据到零槽控制机,在由零槽控制机将数据处理后发送到CAN总线2上的节点B。同时CAN总线2上节点A直接通过转发将数据发送到该总线上节点B。接收VXI总线命令及数据向VXI总线发送命令及数据 VXI-CAN模块 接收CAN总线命令及数据向CAN总线发送命令及数据 CAN 总 线 1 CAN总线节点2-ACAN总线节点2-BCAN总线节点1-BCAN总线节点1-A CAN 总 线 2 图4 数据传输结构完成上述数据传输,其方式主要有以下3种:CAN总线1上的节点A向VXI总线零槽发送数据。所发数据帧中29位标识符对应的4个识别码分别为00H、01H、00H、00H。识别码2用来区别这条CAN总线上256个不同节点。因此在不和其他节点识别码冲突时,当然可以用00HffH中任意数字表示该节点。将设置好的4个识别码作为发送数据函数的参数,调用PCI-CAN卡的驱动函数,将数据发送到VXI-CAN的数据接收缓冲区。当它接收到含有这样识别码的帧时,则将该帧所含的8个数据再通过VXI接口电路发到VXI上,指定零槽控制机接收。这一过程可由中断和查询两种方式完成。若采用中断则将识别码4设置为50H,VXI-CAN将自动解析,并控制中断线产生中断。若采用查询方式,则调用VXI-CAN模块的函数查询接收缓冲区是否有数据。VXI总线上的零槽控制机向CAN总线上某一节点发送数据(如向CAN总线2上的节点B)。则零槽控制机程序调用VXI-CAN模块的驱动函数,将数据发送到VXI-CAN模块上的CAN总线2对应的数据缓冲区内,直到节点B执行接收命令将数据从缓冲区内取回。另外,若此时CAN总线2上其他节点也希望接收到数据,只需要直接向缓冲区发送读取数据的命令即可。CAN总线2上的节点A向该总线上其他站点发送数据。则所发数据帧中标识符对应的识别码分别为02H、01H、00H、02H。识别码1的02H代表CAN总线2上的节点B,识别码2的 01H代表CAN总线2上的节点A,识别码4的02H标示CAN总线2。因初始化VXI-CAN模块设置接收参数并允许中断有 是否有中断无等待中断执行中断服务程序 收取VXI-CAN模块数据缓冲区内数据调用VXI-CAN模块发送数据函数,发送数据到CAN总线2上节点A的缓冲区图5 零槽控制机的程序流程此最后一个识别码01H04H对应得就是4个CAN接口。同样地,仿真计算机通过调用PCI-CAN卡的驱动函数,将带有这4个识别码的数据发送到VXI-CAN的数据接收缓冲区。当VXI-CAN的数据接收缓冲区接收到含有这样识别码的帧时,则不再向VXI总线发送接收数据的信息,而直接将数据送到识别码指定的另一节点。在接收数据时要考虑报文滤波,在编程时用两个数组来对应ACR0ACR3和AMR0AMR3寄存器。在以下的编程中,我们将4个屏蔽码全设为0。接收码与发送数据帧中的识别码一致就可以了。初始化节点A设置发送参数发送指定标识码的帧a) 零槽控制机及各节点仿真计算机程序流程如图5所示。图6 CAN总线1上节点A的程序流程初始化节点A设置接收参数无数据在缓冲区查询缓冲区接收数据标志 有数据在缓冲区接收在缓冲区的帧 图7 CAN总线2上节点B的程序流程b) 核心程序 零槽控制机程序若采用监听模式接收数据,主要代码如下:int main () int canname4 = 1,0,0,0; int acceptcode4 = 0,1,0,0; /用数组表示4个接收码 int screen4 = 0,0,0,0; /用数组表示4个屏蔽码 AMC3401_init(VXI0:224:INSTR,1,0,&AMC3401); /初始化VXI-CAN模块 AMC3401_reset(AMC3401,canname); AMC3401_UpdataFre(AMC3401,canname,41920); AMC3401_inceptcode(AMC3401,0,acceptcode,screen); /设置屏蔽码和接收码while (n!=1) n=AMC3401_receiveFlag(AMC3401,0,&n); /监听是否有数据接收 AMC3401_receive(AMC3401,0,&recelength,rececode,receNumb,&receflag,&recedatanum);/接收数据若采用中断模式接收数据,主要代码如下:int main () int canname4 = 1,0,0,0; int acceptcode4 = 0,1,0,80; int screen4 = 0,0,0,0; AMC3401_init(VXI0:224:INSTR,1,0,&AMC3401); /初始化VXI-CAN模块 AMC3401_reset(AMC3401,canname); AMC3401_UpdataFre(AMC3401,canname,41920); AMC3401_inceptcode(AMC3401,0,acceptcode,screen); /设置屏蔽码和接收码 AMC3401_enableInter(AMC3401,intercallback); /安装中断句柄 ViStatus _VI_FUNCH intercallback(ViSession vi,ViEventType etype,ViEvent event,ViAddr userHandle) AMC3401_Interruptreceive(AMC3401,0,&interrecelength,interrececode,interreceNumb,&interreceflag,&interrecedatanum); /接收数据 在编写零槽控制机程序时,由于使用到了VXI-CAN模块收发数据,需要调用该模块的动态链接库加入到程序工程中,并在程序中加载其头文件及库函数。通过以上两种模式的编程的比较,可见,采用中断模式程序编写更为清晰,使用更为方便。 CAN总线2上节点B的程序struct PORT_STRUCT ptrStruct; struct PORT_CONFIG ptrConfig;struct CAN_PACKET transPacket;DWORD WINAPI thrdfunc(LPVOID)HANDLE hthrd;int main () ptrStruct.card = 0; ptrConfig.workMode = 0x01; ptrConfig.filterMode = 0x0; ptrConfig.accMask = 0x00000000; /设置屏蔽码 ptrConfig.accCode = 0x00002002; /设置接收码 ptrConfig.timer0 = 0x0; ptrConfig.timer1 = 0x14; ptrConfig.control = 0x01; transPacket.rtr = 0x0; /设置RTR位 transPacket.CAN_ID = 0x01000020; /设置29位标识符 transPacket.length = 0x8; a=CAN_Trans(&ptrStruct,&transPacket); /发送数据 hthrd=CreateThread(NULL,0,thrdfunc,0,0,&hthrdid2); /创建监听数据的线程DWORD WINAPI thrdfunc(LPVOID)while(receiveallow!=1|count=0) receiveallow=CAN_Inquiry_Rece(&ptrStruct); count=CAN_Get_RxB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽保安员考试题库及答案
- 标准化合同范本与审批流程工具
- 农贸市场管理软件采购合同
- 家庭农场综合经营承包合同
- 社区初级考试题库及答案
- 采购合同审查与验收标准流程表
- 钣金工技能考试题及答案
- 天津高铁安检考试题及答案
- 乌鲁木齐物理课标考试真题及答案
- 诏安中考模拟考试题目及答案
- 沈阳2025年辽宁沈阳辽中区四家事业单位面向区内事业单位遴选18人笔试历年参考题库附带答案详解
- 2025年中国内河码头行业市场深度分析及发展趋势预测报告
- 《国际贸易术语》课件
- 小学生美术素养的综合评价体系构建与实践
- 化学反应中的表示课件九年级化学(2024)上册
- 过敏性紫癜课件
- T-CSUS 69-2024 智慧水务技术标准
- 《全国计算机等级考试教程:二级WPS Office高级应用与设计》全套教学课件
- 专题种猪性能测定
- 纺织厂员工劳动合同范本
- 光伏项目合伙投资协议书
评论
0/150
提交评论