CAN通讯在VS2008中实现与应用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CAN通讯在VS2008中实现与应用

CAN通讯在VS2008中实现与应用   摘 要:CAN总线是控制器局域网总线(Controller Area Network)的简称。属于现场总线的范畴,是一种有效支持分布式控制或实时控制的串行通信网络。CAN总线是一种多主方式的串行通讯总线,是国际上应用最广泛的现场总线之一,现已被应用到各个自动化控制系统中,从高速的网络到低价位的多路接线都可以使用CAN总线。本文重点就CAN总线通信设计的实现进行介绍,利用PC机对通过CAN控制器以及CAN收发器上传上来的数据进行监控并通过CAN将PC机的命令下发给单片机或者其他硬件设备,实现类似于PC机与下位机的CAN通讯。   关键词:CAN通信;波特率;C#   中图分类号:TP311.1 文献标识码:A 文章编号:1674-7712 (2013) 10-0027-01   一、CAN通信简介   CAN是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率、抗电磁干扰性,而且要能够检测出总线的任何错误。当信号传输距离达10km时,CAN仍可提供高达50kbps的数据传输速率。CAN具有十分优越的特点:(1)较低的成本与极高的总线利用率;(2)数据传输距离可长达10km,传输速率可高达1Mbps[7];(3)可靠的错误处理和检错机制,发送的信息遭到破坏后可自动重发;(4)节点在错误严重的情况下具有自动退出总线的功能;(5)报文不包含源地址或目标地址,仅用标志符来指示功能信息和优先级信息。基于以上特点,CAN通讯越来越多的应用于工业控制上,尤其是电动汽车的监管上。   二、常用的API函数   实现CAN通讯首先要对CAN通讯卡的API函数进行了解,不同公司的CAN通信卡API不尽相同,以ZLG的USBCAN-2A为例,阐述在CAN通讯的实现与应用中,几个重要的API函数:(1)VCI_OpenDevice:该函数是用来创建一组设备,如CAN通信卡。该函数有两个参数,设备类型和设备索引号;(2)VCI_CloseDevice:该函数是用来关闭设备,即与设备断开。(3)VCI_InitCAN:该函数是用来初始化CAN通信卡。包括四个参数,设备类型、设备索引号、波特率和第几路CAN;(4)VCI_StartCAN:该函数是用来启动CAN控制器。包括三个参数,设备类型、设备索引号和第几路CAN;(5)VCI_ResetCAN:该函数是用来复位设备,进而系统重新初始化。包??三个参数,设备类型、设备索引号和第几路CAN;(6)VCI_Transmit:该函数是用来发送一帧或一组CAN信息。包括五个参数,设备类型、设备索引号、需要发送的数据、需要发送的数据长度和第几路CAN;(7)VCI_Receive:该函数是用来接收一帧或一组CAN信息。包括五个参数,设备类型、设备索引号、需要接收的数据、每次接收的数据长度、每次接收数据的时间和第几路CAN。   在创建一个新项目的时候,我们首先要初始化API函数,以VCI_OpenDevice为例,C#初始化API函数代码如下:   [DllImport(ControlCAN.dll,EntryPoint =VCI_OpenDevice,CharSet=CharSet.Ansi,CallingConvention = CallingConvention.StdCall)]   public static extern uint VCI_OpenDevice(uint DeviceType,uint DeviceInd,uint Reserved);   然后我们给他做个封装:   public bool OpenDevice()   {return VCI_OpenDevice(CommunicationControler.deviceType,   CommunicationControler.deviceIndex,CommunicationControler.deviceReserved) == 1 ? true : false;}   添加个类名ControlCAN,这样在应用时可以直接调用了,例如打开设备的代码为:   ControlCAN.OpenDevice();   三、初始化CAN并打开CAN卡   CAN的主要参数有波特率、滤波方式、工作方式、屏蔽码、验收码,我们把它们封装在InitDevice中,代码如下:   public bool InitDevice(String CheckCode,String MaskCode,String FilterMode,String WorkMode,String BraudRate)   {VCI_INIT_CONFIG InitConfig = n

文档评论(0)

3471161553 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档