基于Labview的CAN总线通信仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于虚拟仪器的CAN总线通信仿真
控制器局部网(CAN —CONTROLLERAREANETWORK )是BOSCH公司为现代汽车监测和控制领先推出的一种多主机局部网,由于其卓越性能现已广泛应用于工业自动化、多种控制设备、交通工具、医疗仪器以及建筑、环境控制等众多部门。
CAN 是一种多主方式的串行通讯总线。
一个由CAN 总线构成的单一网络中.理论上可以挂接无数个节点。
实际应用中,节点数目受网络硬件的电气特性所限制。
CAN 可提供高达1Mbit/s 的数据传输速率.这使实时控制变得非常容易。
另外。
硬件的错误检定特性也增强了CAN 的抗电磁干扰能力。
CAN 总线有以下特点:
1) CAN 可以是对等结构,即多主机工作方式,网络上任意一个节点可以在任意时刻主
动地向网络上其它节点发送信息,不分主从,通讯方式灵活。
2) CAN 网络上的节点可以分为不同的优先级,满足不同的实时需要。
3) CAN 采用非破坏性仲裁技术,当两个节点同时向网络上传送信息时,优先级低的节
点自动停止发送,在网络负载很重的情况下不会出现网络瘫痪。
4) CAN 可以点对点、点对多点、点对网络的方式发送和接收数据,通讯距离最远
10km(5kb/s),节点数目可达110个。
5) CAN采用的是短帧结构,每一帧的有效字节数为8个,具有CR(校验和其它检测措
施,数据出错几率极小。
CAN 节点在错误严重的情况下,具有自动关闭功能,不会影
响总线上其它节点操作。
6) 通讯介质采用廉价的双绞线,无特殊要求,用户接口简单,容易构成用户系统。
1 CAN总线工作机理
1.1 位仲裁要对数据进行实时处理。
就必须将数据快速传送,这就要求数据的物理传输通路有较高的速度。
在几个站同时需要发送数据时.要求快速地进行总线分配。
实时处理通过网络交换的紧急数据有较大的不同。
一个快速变化的物理量。
如汽车引擎负载,将比类似汽车引擎温度这样相对变化较慢的物理量更频繁地传送数据并要求更短的延时。
CAN 总线以报文为单位进行数据传送.报文的优先级结合在11 位标识符中.具有最低二进制数的标识符有最高的优先级。
这种优先级一旦在系统设计时被确立后就不能再被更改。
总线读取中的冲突可通过位仲裁解决。
1.2 报文格式
如图所示,在总线中传送的报文,每帧由7 部分组成。
CAN 协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位.扩展格式为29位。
在标准格式中,报文的起始位称为帧起始(SOF).然后是由11位标识符和远程发送请求位(RTR)组成的仲裁场。
RTR位标明是数据帧还是请求帧,在请求帧中没有数据字节。
控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。
它还包括一个保留位(ro),为将来扩展使用。
它的最后四个字节用来指明数据场中数据的长度(DLC)。
数据
场范围为0〜8个字节.其后有一个检测数据错误的循环冗余检查(CRC))应答场(ACK)包括应答位和应答分隔符发送站发送的这两位均为隐性电平(逻辑I )•这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。
用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文报文的尾部由帧结束标出。
在相邻的两条报文问有一很短的问隔位•如果这时没有站进行总线存取,总线将处于空闲状态。
1.3数据错误检测
不同于其它总线,CAN协议不能使用应答信息。
事实上,它可以将发生的任何错误用信号发出。
CAN协议可使用五种检查错误的方法,其中前三种为基于报文内容检查。
1.3.1循环冗余检查(CRC)
在一帧报文中加入冗余检查位可保证报文正确。
接收站通过CRC可判断报文是否
有错。
1.3.2 帧检查
这种方法通过位场检查帧的格式和大小来确定报文的正确性,用于检查格式上的错误。
1.3.3应答错误
如前所述,被接收到的帧由接收站通过明确的应答来确认。
如果发送站未收到应答,那么表明接收站发现帧中有错误,也就是说,ACK场已损坏或网络中的报文无站接收。
CAN协议也可通过位检查的方法探测错误。
1.3.4总线检测
有时,CAN中的一个节点可监测自己发出的信号。
因此,发送报文的站可以观测总线电平并探测发送位和接收位的差异。
1.3.5位填充
一帧报文中的每一位都由不归零码表示•可保证位编码的最大效率。
然而,如果在一帧报文中有太多相同电平的位•就有可能失去同步。
为保证同步•同步沿用位填充产生。
在j个生。
在五个连续相等位后.发送站自动插人一个与之互补的补码位接收时. 这
个填充位被自动丢掉例如,五个连续的低电平位后,CAN 自动插人一个高电平位CAN 通过这种编码规则检查错误,如果在一帧报文中有6 个相同位,CAN 就知道发生了错误。
2 虚拟仪器技术
2.1 虚拟仪器简介虚拟仪器技术目前已成为测试领域的主流技术,一个虚拟仪器系统主要由仪器硬件、计算机硬件和应用软件组成,应用软件又包括开发环境、应用程序和仪器驱动程序三部分。
Labview (LaboratoryVirtualinstrumentEngineering)是Nl 公司推出的虚拟仪器开发平台,采用图形化的编程语言,具有强大的人机界面设计和数据分析处理功能,提供了丰富的仪器驱动程序,便于快速创建灵活可靠的应用系统,主要用于仪器控制、数据采集、数据分析、数据显示等领域。
虚拟仪器的硬件基础为个人计算机,它采用虚拟仪器技术来开发。
虚拟仪器充分利用了PC 机的资源(处理器、存储器、显示器等)及插件卡功能(定时器A/D、D/A变换器、高速缓存、数字I/0电路等),通过支持软件来完成数据采集、过程通讯、数据分析处理及仪器界面设计等功能。
由于虚拟仪器建立在PC机的基础上,所以它可方便
地通过总线来挂接各类插件卡,从而实现了多种仪器功能的集成化。
软件是虚拟仪器的关键,软件设计主要包括仪器面板软件设计和仪器功能软件设计。
虚拟仪器的面板软件是利用计算机强大的图形处理能力,在屏幕上建立图形逼真、主体感强的仪器面板来替代传统硬件化仪器面板。
虚拟仪器面板上具有与实际仪器面板上相似的旋钮、开关、指示灯及其它控制部件,用户通过鼠标或键盘操作虚拟仪器。
与传统的编程语言比较,Labview图形编程方式能够节省85%以上的程序开发时间,其运行速度却几乎不受影响,体现出了极高的效率。
2.2 Labview 应用于仿真
Labview是一种基于图形编程语言的开发环境G语言。
使用这种语言编程时,
基本上不写程序代码,取而代之的是流程图或流程图。
它尽可能利用了技术人员、科学家、工程师所熟悉的术语、图标和概念,因此,Labview是一个面向最终用户的工具。
它可以增强你构建自己的科学和工程系统的能力,提供了实现仪器编程和数据采集系统的便捷途径。
简言之,Labview 功能强大、灵活方便。
它与传统编程语言有着诸多相似之处,如相似的数据类型、数据流控制结构、程序调试工具等,但二者最大的区别在于:传统编程语言是用文本语言编程,而Labview 用图形语言(即各种图标、图形符号、连线等)编程。
用Labview 编程无需太多编程经验,界面非常直观形象,都是工程师们熟悉的旋钮、开关、图形等,因此LabVlEW 对于没有丰富编程经验的工程师们来说无疑是个极好的选择。
再者,Labview也提供传统程序语言(如C语言)的接口,对于其自身不易或不擅长完成的任务(如数据处理)可通过利用其它编程语言来实现,从而最终增强了Labview的整体功能。
一个Labview程序分为三部分:前面板、框图程序、图标/接线端口。
前面板是用于模拟真实仪器的前面板;框图程序则是利用图形语言对前面板上的控件对象(分为控制量和指示量两种)进行控制;图标/接线端口用于把Labview程序定义成一个子程序,从而实现模块化编程。
与传统的编程语言比较,LabVIEW图形编程方式及其集成的丰富的函数模块使其在将仿真程序化时效率非常高,可以用它进行仿真、实时控制或者同时执行这两种工作。
LabVlEW具有:(1)可以方便地将仿真任务译为程序语言;(2)出色的数据可视化能力;(3)有适合仿真计算的数据结构范围;(4)通过简单的操作即可变量计算和参数设定;(5)精心构建于数学、信号理论上;(6)与现实世界有良好的互联性。
3 Labview 仿真CAN!信
用Labview模拟CAN通讯,主要是对CAN总线的数据链路层的数据传输进行仿真,CAN 总线的标准为CAN2.0A/B,数据格式为标准数据帧或扩展数据帧。
3.1仿真内容
一个典型的CAN结构可以用下图表示。
由于时间有限,因此本人选择了用Labview实现CAN总线通信的基本的收发功能。
具体的就是下面两个模块,数据发送模块和数据接收模块,发送模块包括了数据生成模块,CAN节点地址定义模块,数据分割模块和转化帧模块。
本人对仿真信号通信格式做了简化,对帧传输格式重新进行了定义,用Labview中的数组元素表示帧传输过程中的位,首位是帧开始位,1为开始,用一个数组元素表示,接着是RTR位,这代表了帧的类型,0表示是数据帧(远程帧),接着是地址位,实际上地址位和数据为并不止一位,但是为了简化起见,均将其作为一个元素处理,然后是数据,每帧的数据量最大是8个字节,用最多8个元素来表示,这8个元素每个为一个字节,最后还省略了数据校验部分,直接用了一个结束符元素来结束帧。
3.2程序结构
使用Labview仿真CAN通信主要两大部分:接收数据模块和发送数据模块。
数据生成模块仿真数据采集卡采集到后的数据,在本次仿真中,需发送的数据可以做一个数据发生器来模拟经
采集到的的数据进行通信;CAN节点地址定义模块主要是为了定义
CAN节点的位置,处理后的数据能够识别CAN节点控制器的位置,这样才能在控制系统中进行控制;数据分割模块是为了将数据发生器中的数据进行分割成不超过8字节的
单帧数据;转化帧模块主要功能是转载控制码和地址码在帧数据两端,在数据传输过程中,接收模块才能识别发送的数据并进行重组解码;地址识别模块是根据帧判断地址优先级来决定如何接收数据,接收的数据再经过帧转化模块转化成原来的数据格式。
一般地,还应包括数据存储模块,数据存储完成数据的记录,以便在需要进行数据回放以进一步分析时,可以将程序保存的数据记录文件读出。
在一个CAN工作周期,其工作流程图如图1所示。
3.3程序及面板
3.3.1数据发生模块
数据发生器是一个可以根据具体要求任意更改随机输入的程序,在本次仿真中,用了随机数发生器随机产生字符串作为输入数据处理后发送。
图4数据发生器
3.3.2数据发送模块
数据发送模块如图3.2所示。
当CAN工作的时候,将输入字符串数据处理为数组再进行数组分割加载控制码和地址码,分割循环次数及加载控制码、地址码位置与数据长度有关。
图5数据发送模块
3.3.3接收模块
接收模块前端为地址识别程序,当寄存器存在数据时,地址识别模块不断重复判断每帧数据的地址码,并判断优先级,将优先级最高的数据转入帧转化程序模块,帧转化模块将帧数据提取出来并判断数据时候完整,若不完整将已提取的数据存入发送寄存器并继续转化接收寄存器中的数据。
i 、
3.3.4
前面板 前面板分为三个部分,每部分的空间完全相同,不过其后台程序略有不同,这是因 为CAN1作为主控制模块不但可以接收 CAN2发送过来的数据,也可以接收 CAN3发 送的数据。
nOMIQt MU. 3
图7程序前面板
图6数据接收模块
ip ■ 11 V
3
| MQB9 191
* — -J。