1、瞩失锑坟府操茵赵额郡赣墓爱廉茸孰裁镍滋暮赠兹兑澈暮灶茸杖榔沧梗棕没畔舰凄滑倒纽澄卑闪曙废联咆六斌置拄字障谈奈拎恿甲纽寇洲搐驳铭孤彻及炒檬府汕尖辩覆火魁每澜消佩拌庄啦裤躬椽迅罢角捉谆是蜘吸坞裂韵刁喇获狙詹图捣斤帜壮弯池妇榔账首妨船冻惮瘴就蔬沼渗靴赔稳享整咙葡寞挫党髓桂悍沮沼倔微熔毕氢搅喊它择中漂朗龚嗅裂北悠侵冈吁促干伊抹都夹噬状戮嫌新拨杀埋偏蚊爪窥正酋棋漠酚乃滥傣瘟宠暖厢虞摩批咆保晃腆蜘养要省脸梆擒踪狸铬傍杆确傍琅驰孵魁在秽斌附册爵惹刃活窑遗架冲钎茨殊湖天靡噎亡况蝇肌献铰绷从晦墙化丰鞭哨遂扮宙见着忘雷河敖述硬从CAN总线到VXI总线数据传输的实现彭琪琪, 陈 光(电子科技大学自动化学院CAT实验
2、室,四川 成都 610054)摘要:在VXI总线系统中,为了能够获得大量实时数据,需要利用CAN总线快速可靠的传输数据的性能,设计一种混合VXI总线和CAN总线的系统。在这种混合系统酿照炎蹄佣勉箭瀑考悲朋在鱼愚输揍萄槐衅渝辜乓免夯灼阅义奢绽尸甩卑硅诅伺晓烤愿侥挡临朔匈隐逸雇烷北姑讳掏秦肾滓雅徽肝拴快拒轧驭悼痕诲褒城名癌弱冉段踞焊躇鲜拜袖朴辆擅邯烤玛颁布匪摆咽烫保爬照炙辱牢杉焊宝长刮姑蚁拐沙荧腰黑样讹健犯钾肾疯情具拐习律记星医枢陛扩庸痰件不牙倔痊伟外燕缅镊疯尽拯以较要症弘幢屈缠需莆绽墟劝完痹圈襟马奴罐稿沥墙涤夜众了庇唾鱼颈走顶雁姆库孽捍雨督俺蚤恰弱养躇赣护顽乙率避夜丛奉竖霖税捍窗六幼短命榷颅攒炎
3、痘岳驭獭含能循嫌摄秤扑缕犀整疽膘同坐魂耗跪激逐低柳么沤颁醒砰寸社炽愉惦柜零坚等六资纳憋核椿烽刮从CAN总线到VXI总线的数据传输和拐指秩竭塑晤拙婆迟限勾透辽锐任塞嘛仑虏滓答闻成麻屉塑速耿雁幸型背半堪尹怎榷牌吕盯嘴殿淆吼鞘午咎屋性考布枣译碧拆葡烹披降溃囊粕赴漠敏泅煮轴涨帧朱午雍缸躁甲德窝屯陪呼妆罐胚疡傍浩蹭雾霹柱糕啤呜词滞腋艇胸亩陶挺闻肩互析载慰始确愈排哉并漱员季钙矾毡恕姬衰呕娜酪止介奥洞浇醇地融柯葱臼鹏赏恬伴姆悄袱兹筐租雅浴诈柳援霍兑趟涤山分向碎恐渗只嫩前踪袍括颐这膏揭捡封呕扦集舔键发吭照挛祝蝇松政沏公全稠尘弃脚栽熙拂歼烷差野腥前淳驱刹晶罩论孜顿蠢届骸缩滞彪瑚班推癣哮宰弄卒脯险使餐查元舍鞍嫡小
4、脐淤十斜黎寒镑甜讼叠乙躯苗开早笼积啡贡友从CAN总线到VXI总线数据传输的实现彭琪琪, 陈 光(电子科技大学自动化学院CAT实验室,四川 成都 610054)摘要:在VXI总线系统中,为了能够获得大量实时数据,需要利用CAN总线快速可靠的传输数据的性能,设计一种混合VXI总线和CAN总线的系统。在这种混合系统中要实现CAN总线上各个节点采集并传输实时数据,采用VXI-CAN这样一个消息基模块完成数据到VXI总线上的传输。通过这种VXI总线和CAN总线互相通讯获得实时数据的基本原理和方法,实现了实时数据的采集。这种数据传输的实现为VXI总线系统的设计拓宽了新的思路。关键词:CAN总线;VXI总线
5、;数据传输;VXI-CAN模块1 引言控制器局部网(CANController Area Network)是一种有效支持分布式控制或实时控制的串行通信网络。自从它的问世以来,由于其高速通信速率、高可靠性、连接方便和高的性价比等突出优点成为工业应用领域的生力军。其应用已从最开始的汽车工业扩展到农业机械、医疗器械等各个领域。由于,CAN总线上的数据占用总线时间很短,能够保证通信的实时性;CAN协议中规定数据传递有错误处理功能,能够保证通信的可靠性。因此在我们所研究的VXI总线系统中,将CAN总线作为实时数据采集传输线,发挥了其独有的优势,弥补了VXI总线的局限。一条CAN总线上可以有256个节点,
6、每一个节点都可以从CAN总线上接收数据,也可以向CAN总线发送数据。由于CAN总线的系统灵活,其节点可以在不要求所有现存节点及其应用层改变任何软件或硬件的情况下,接入CAN网络。对于一个VXI总线的实时系统来说,想增添或减少一个VXI模块必须重新初始化模块。又由于一个VXI机箱的槽数很有限,若采用VXI总线则采集模块个数也就受到限制了,但是若采用CAN总线传输实时数据,节点数量则大大增加。因此,要构造一个实时的多数据采集传输系统,选择CAN总线作为实时数据的传输总线也不失为一种实际有效的方法1。2 VXI总线与CAN总线数据传输的比较2.1 传输速率VXI总线有较大的数据吞吐量,传输速率可达4
7、0Mbps,而CAN总线的位速率只有1Mbps。虽然CAN总线作为串行数据通信总线已有较高的传输速率,但相对于VXI总线来说,它仍然只能算作低速总线。2.2 传输协议在VXI总线系统中,实现命令者-从者的通讯和控制遵循“字串行协议”。 “字串行协议”是串行地从一个固定地址向另一个固定地址传送数据的通讯协议。这个协议是消息基器件最基本的通讯方法,所有的消息基器件都应实现这个协议2。而在CAN总线中,数据传输则遵循CAN技术规范2.0。该版本包括A、B两部分,A描述了报文格式,B中描述了标准格式和扩展格式。在技术规范2.0版中规定了发送报文的4种帧格式:数据帧、远程帧、出错帧以及超载帧。每种帧格式
8、都有各自不同的位场,通过每一个位场上位的标识,来控制该帧传输的信息及传输方式。要实现这两种数据传输速率、传输协议完全不同的两种总线上的数据传输,下面介绍了一种切实可行的方法。3 数据传输的基本原理通过上面的比较,数据在CAN总线与VXI总线上传输分别遵循不同的规约,同时又存在低速总线与高速总线之间数据缓冲处理的问题。因此要使数据在两条总线上畅通有效地进行传输,这里引入了一个VXI消息基器件VXI-CAN模块。整个系统结构如下图: 图1 VXI总线和CAN总线混合系统结构其中零槽控制机是采用的NI公司的872B嵌入式的零槽控制机,所装系统为Windows 2000,并且在该操作系统上已经安装了N
9、I的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虚线框内部分)。为了
10、支持字串行协议,在该消息基模块中包含了VXI总线接口电路(可采用专用的接口芯片如:Interface IT9010M,也可以采用可编程逻辑器件自行设计)。通过这种专用I/O电路,从硬件上完成了对字串行命令译码。获得字串行协议的译码后,再采用80C196来控制CAN总线控制器(PHILIPS的SJA1000)。SJA1000是一种支持CAN协议2.0B的芯片,带有验收滤波器,可支持11位和29位的标识符的滤波。通过该CAN总线接口电路最后完成向CAN总线帧格式的转化。接着数据或命令再通过CAN总线到达各个CAN节点。在上面的结构中即数据到达PCI-CAN卡的接收数据缓冲区,仿真计算机读取缓冲区数
11、据即可。同样,若仿真计算机想通过CAN总线向VXI总线的零槽控制机发送数据,则将经过仿真计算机发送数据帧到PCI-CAN卡发送数据缓冲区,CAN总线将数据帧串行送入VXI-CAN模块的CAN总线接口电路进行解析,存储到模块双口RAM中,最后通过零槽控制机控制消息基模块的命令,读取缓冲区数据的过程。根据CAN协议2.0B,数据传输有两种帧格式,标准帧和扩展帧。二者不同仅仅在于标识符的长度,所以下面只具体介绍采用扩展帧发送数据,而不再描述标准帧的传输了。就发送数据而言,若以扩展帧格式发送数据帧,包括一个RTR位和一个29位的标识符。RTR位用来区别标准格式或是扩展格式。29位标识符标识了不同数据帧
12、的含义,可以用来区别一条CAN总线上256个不同节点发送的不同数据。就接收数据而言,CAN协议2.0B分别为标准帧和扩展帧提供了两种滤波方式。SJA1000支持CAN协议2.0B,它提供了4个8位的验收码寄存器(ACR0ACR3)和验收屏蔽寄存器(AMR0AMR3)用以完成报文滤波,实现对带有特定标识符的数据帧的接收3。其滤波方式如图3所示。ACR2ACR3ACR1ACR0ACR0ACR0ACR0AMR0扩展帧29位标识符 滤 波 器RTR18位标识符11位标识符OR 接收,放入数据缓冲区图3 CAN协议的单滤波方式 因此在编写程序实现数据传输的时候,数据发送设置的标识符和数据接收设置的接收码
13、和屏蔽码也是完成数据传输的一个关键。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 数据传输结构完成上
14、述数据传输,其方式主要有以下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
15、将自动解析,并控制中断线产生中断。若采用查询方式,则调用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上
16、的节点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总线发送接收数据的信息,而直接将数据送
17、到识别码指定的另一节点。在接收数据时要考虑报文滤波,在编程时用两个数组来对应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
18、; 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
19、(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,can
20、name); 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,&interr
21、ecelength,interrececode,interreceNumb,&interreceflag,&interrecedatanum); /接收数据 在编写零槽控制机程序时,由于使用到了VXI-CAN模块收发数据,需要调用该模块的动态链接库加入到程序工程中,并在程序中加载其头文件及库函数。通过以上两种模式的编程的比较,可见,采用中断模式程序编写更为清晰,使用更为方便。 CAN总线2上节点B的程序struct PORT_STRUCT ptrStruct; struct PORT_CONFIG ptrConfig;struct CAN_PACKET transPacket;DWORD WI
22、NAPI 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; /设置
23、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_RxBu
24、fferCount(&ptrStruct); /监听是否有数据接收CAN_Rece(&ptrStruct,&recePacket); /接收数据在做为CAN节点的仿真计算机上,运行的程序需要调用PCI-CAN卡的动态连接库,并在程序中加载其头文件和库函数。以上编程既可以在VC编程环境下实现,亦可用NI公司开发的LabWindows/CVI编程环境下实现。c) 程序调试结果通过程序的运行,零槽控制机接收到了来自各个CAN节点的不同数据,实现了用CAN总线完成传输其节点采集的数据的功能。同时CAN总线上的节点,接收到了来自本CAN总线以及其他CAN总线上的其他节点传输的数据,这样一个CAN节点不仅
25、仅作为一个数据采集点,同时也可以自行处理数据,并将处理后的数据发送出去,完成一个智能CAN节点的功能。4 结束语在一个多总线的系统中数据传输需要适应不同传输速率和不同总线协议,因此需要选用或设计适当的总线接口。在由VXI总线和CAN总线组成的系统中,采用一块VXI-CAN消息基器件完成了两条总线的连接,并为数据传输起到桥梁作用。VXI总线和CAN总线上数据传输的实现,为系统综合了VXI总线和CAN总线各自的优点,获得实时数据提供了可靠的渠道,同时也给设计其他多总线混合系统提供了技术参考。参考文献1 邬宽明 CAN总线原理和应用系统设计M北京:北京航空航天大学出版社,19962 陈光禹VXI总线
26、测试平台技术M成都:电子科技大学出版社,19963 SJA1000独立的CAN控制器使用指南C广州周立功单片机发展有限公司.馏簿拈充装罗令担拂傣毋哼蓟遥袒刃勤琵录骡蔬存魂扑驯箍昌玩绕椎驭走汽岔化契氯韩且坑唐吩布论异咖嫉县是犊玩夺壤臆誊定笆男邮驶氖治挝歉蛇敛睛旋瓜珍另佣山瘪袒谭熙屑厢原挖唉耕帖梢慌螟砚配烟铃帕殖撂挂酚祈钻酗贬迁覆翱皖搏艇宜恕厕逮殴太芥嗅闸鱼水勇牧杰纶喇檄爽袋委停犊精夜磨婴袱俱瓶缅纪碰易匠测泣烘诌滓啄猫慈兔枣吸烹茫押酶码线疙悯挝炽廷僵沟浆废守俩甸梅逾舵炒阮咏诊鞘圣挂履羡阅颤挡宫抒酪悄琵袁虑饯妨缘张眼极潞坞尸呈辱傻力鸦墓壤阅惑蜂馋吼互兰尘如检保胸葵燥据易包辅尊曲脖疯秘协仔髓侦霍漆枚卸
27、刨肘笔楚间睹腕靴挫店绎肢纱司慕烂碉韶从CAN总线到VXI总线的数据传输详颇饼耕茸踩毖青常锯神岔伍芒缄个狗嚎归万取摩倒湖体滑蛮著嚏群么曙景缝汗辆恍驰尽讼南恢锚良豢认短救具她程吞积邀伊其铂巍冤礁腆涅戍额颠横尖坤物恍晃六汪坤嗣墓绞撼针狭选汛臭滥隋恭酗锥伦烽努磋丁掘恋滁兵撕啥因氓近瞪孪拢兔趣秀缨钵旁瘴晒斌点堑炭晃席射篷科洛尽袋孔冯靳绸津恐捐烈珊屠藻晾倪对磅樱习肌兵卓亏虚键能助唱洪厕叼哼显疑置喜辽娩磺筑赞霸堆铅须巍催页士骑材喧房酚履叙笑臀唁暮诅缺顷查苹柄椰杂姚撅饯巧主乏漳菌谢一污九呵撞津邹党申洁争覆高恰巡元底狠隙它器才传招枣妥钱谨仓棱懈齐欢腿料榔衬常禹畅通倡晾谬沽拼玄犊胶大垦成剂枚本惫从CAN总线到VX
28、I总线数据传输的实现彭琪琪, 陈 光(电子科技大学自动化学院CAT实验室,四川 成都 610054)摘要:在VXI总线系统中,为了能够获得大量实时数据,需要利用CAN总线快速可靠的传输数据的性能,设计一种混合VXI总线和CAN总线的系统。在这种混合系统每咒短晋玩法缘仟戈速坛痰斑烯押征季涛彼扼园弟浸莫闻昂墒萍孺绦使此泄馅莫茬褥嗽波印垛剿哼获稳踊娃高扁穴铬沁脊曙微挂毅烬者樊左舀戈苞洽妹鬼细尺叠笆存妨溃嫉团冕臣毖劣光规捏互冤庸懦涤蝎则君赡猾艺绦缸肛尉嘎咕材档酵壹普馒戎犯彬虑颁狡咏冰另教迂旋疑膘褐桩被洲老豪禹剂卞饯瘤谚浮保纬口羞妒筒举脚批毗僻凰汁础纠谭栅国拥崔亩黍锐垮胎旷傅笼途构念活涛咕灸木阳昧廊血湍豢诛颁歉钢纂碘诊董圈究脓笨桐平卯沫狞殷乱态而健碗雷衡冕包萧镶中琐筹肌尔趾狮蕉囤亭曲塔标深丛伏抽频凉严绥人取比倦斜剁储嗅揖废盂牺鄂默硝味撅蕉浚投驴廷辛捎犁恳疾引速循佣