第5章 输入输出位传输现场总线缩略稿.docx
《第5章 输入输出位传输现场总线缩略稿.docx》由会员分享,可在线阅读,更多相关《第5章 输入输出位传输现场总线缩略稿.docx(87页珍藏版)》请在冰豆网上搜索。
第5章输入输出位传输现场总线缩略稿
第5章输入输出位传输现场总线
5.1位传输总线概述
由于现场总线开发组织或行业的不同,许多总线标准在其设计之初就带有典型的行业特色,适应特定对象的应用需求是其主要目标。
由此而产生的现场总线,功能相对简单,应用领域也是有限的。
本章将要学习的现场总线是它们的主要代表。
为实现输入/输出信息的双向交换,人们制定了多种快速、简单的现场总线网络协议。
它们的主要应用对象是具有开关量特征的传感器和执行器系统。
传感器可以是各种原理的位置接近开关及温度、压力、流量、液位开关等,执行器可以是各种开关阀,声、光报警器,也可以是继电器、接触器等低压开关电器。
因此又称这类总线为I/O现场总线。
当然,I/O现场总线也可以连接模拟量设备,只是模拟信号的传输要占据多个传输周期。
I/O现场总线的特点是采用位(bit)传输,其种类有很多,如应用于汽车领域的CAN总线,食品加工领域的P-Net,航空航天领域的SwiftNet,以及电气现场总线AS-i、DeviceNet、SDS、Seriplex等。
在这一章里,我们将着重学习目前较为普及的CAN(ControllerAreaNetwork)总线,并简单阐述其它I/O现场总线的基本原理及特点。
5.2汽车总线的分类
在汽车中,电子数据的总线通信可以追溯到上个世纪70年代,最初是希望用单一的总线协议,满足任何车辆数据的传送需要。
然而,在逐步发展过程中,却形成了汽车工程师协会(SAE)描述的三类现场总线,即汽车的数据通信需要多达三种网络来实现。
汽车工程师协会对汽车中的总线按其性能、应用范围和要求分为A、B和C三类。
如图5-1所示。
⑴A类总线。
这类总线的性能最低,用作低端的、非放射性诊断的通用通信,位传输速率一般小于10kbps,支持事件驱动的报文传输。
主要应用于车体电子系统,在这类应用中,最注重系统的造价。
最近两年中,这个方面的进步不大,应用最广泛的协议是LIN(LocalInterconnectNetwork),它主要用于汽车外围设备的网络连接,常见的应用是空调、车门、天窗等的控制与数据传输。
其它专用协议如美国通用汽车公司使用的UART等正逐步被淘汰。
⑵B类总线。
这类总线适合于高速应用,用作非诊断目的非关键性通信,传输速率在10kbps~125kbps之间,支持事件驱动和一些周期性报文传输,并具备静默/唤醒功能。
适合于高速应用,如发动机管理等。
然而,这类总线并不考虑与确定性和安全性相关的要求。
在这一方面的世界标准一直是CAN。
特别要指出的是,速率在100kbps左右的ISO11898主要应用于小汽车。
⑶C类总线。
这类总线必须涉及到与安全相关的性能,如状态的确定性、有界的执行时间、分布式的时钟同步、防止多路感应的复杂失真等。
位传输速率在125kbps~1Mbps之间。
协议必须支持周期性参数的实时传输(时间周期可能在几毫秒内)。
传输媒体是非屏蔽双绞线,而不是屏蔽双绞线或光纤。
主要用于速度较快、带宽较大的系统,如发动机定时、燃油输送等。
在一般的应用中,传输速率要求高于500kbps。
大部分客车使用ISO11898总线作为C类网络,采用的传输速率为500kbps。
速度在125kbps的高速CAN也可以应用在这类网络中。
在汽车总线中,CAN总线的应用最为普及,给汽车制造带来众多概念上的进步,但也有其局限性,汽车工业正在努力开发新的总线以适应现代汽车中不断增加的各种电子系统的需要,如TTP(Time-TriggeredProtocol)、TTCAN(Time-TriggeredCAN)和FlexRay等。
5.3CAN总线体系结构及协议标准
5.3.1CAN总线及其基本特点
CAN总线是德国Bosch公司在80年代初为解决汽车中大量的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议。
它是一种多主总线,通信媒体可以是双绞线、同轴电缆或光纤,通信速率可达1Mbps。
目前,CAN总线已被许多著名汽车制造商成功地应用于车体控制系统中,而且由于CAN具有极高的可靠性和独特的设计,特别适合工业过程监控设备的互连。
因此,越来越受到工业界的重视,并已被公认为是最有前途的现场总线之一。
由于CAN技术应用的普遍推广,导致要求通信协议的标准化。
为此,1991年9月Bosch公司制定并发布了CAN技术规范(Version2.0)。
该技术规范包括A和B两部分。
2.0A给出了CAN技术规范中定义的CAN报文格式,而2.0B给出了标准的和扩展的两种报文格式。
此后,1993年11月ISO正式颁布了道路交通运载工具—数字交换—高速通信控制器局域网(CAN)国际标准ISO11898,为控制器局域网标准化、规范化的推广铺平了道路。
CAN技术规范2.0A和2.0B以及CAN国际标准ISO11898是设计CAN应用系统的基本依据,也是应用设计工作的基本规范。
CAN能灵活有效地支持具有较高安全等级的分布式控制。
在汽车电子行业里,一般将CAN安装在车体的电子控制系统里,诸如电子门控单元、车灯控制单元、电气车窗、刮雨器等等,用以代替接线配线装置。
也使用CAN总线连接发动机控制单元、传感器、防滑系统等,其数据传输速度可达1Mbps。
由于CAN总线采用了许多新技术,与其它类型的总线相比,它在许多方面具有独特之处,主要表现在以下几个方面:
⑴采用面向报文的优先级控制方式,用标识符定义静态的报文优先权。
⑵采用短帧格式,总线上的报文以不同的固定报文格式发送,但长度受限。
⑶非破坏性的总线仲裁多主系统。
总线空闲时,任何节点都可以开始传送报文,优先级较低的节点会主动退出发送,而具优先级高的节点可以最终获得总线访问权,不受影响地继续传输数据。
⑷通信服务简便,阻隔期短。
⑸错误检测和错误处理机制先进。
为了获得最安全的数据发送,CAN的每一个节点均设有错误检测、错误标定及错误自检等措施。
⑹整个系统范围内保持数据一致性。
⑺延迟时间短,出错恢复快。
⑻总线驱动电路决定总线可接节点数,目前可达110个。
⑼通信距离与通信速率有关。
最低为40m,相应的通信速率是1Mbps;最远可达10km,相应的通信速率在5kbps以下。
不同的系统,CAN的速率可能不同。
可是,在一个给定的系统里,速率是唯一的,并且是固定的。
5.3.2CAN总线的体系结构
在现代汽车电子业中,用来实现开闭环控制任务(引擎管理、ABS防抱制动控制、舒适性电子工业等)的电子控制单元(ECU,ElectronicControlUnit)的数量越来越多了(如图5-1)。
控制单元间的大量数据交换是在极其严重的电磁干扰环境下完成的,且交换过程频繁而每个报文数据量极低(特征过程数据的循环发送,例如引擎速度)。
CAN总线技术规范在很大程度上满足了这类信息通信的需要。
CAN的体系结构中只定义了ISO/OSI模型的最低两层:
数据链路层和物理层。
应用层是通过专门用于特定工业领域的各种协议或CAN用户专用方案与物理媒体相连。
目前应用层主要使用的三个协议:
自动化用户组织(CiA,CANinAutomationUsersGroup)的CANopen;AllenBradley公司推出的DeviceNet;Honeywell公司开发的SDS(SmartDistributedSystems)。
这些标准化的应用层与通信过程几乎完全分离,所以这里不作深入介绍。
CAN的体系结构和功能如图5-2所示。
为了达到设计透明、实现灵活,在CAN技术规范中,数据链路层又分为逻辑链路控制(LLC)子层和媒体访问控制(MAC)子层,也被称为“对象层”和“传送层”。
物理层又划分为物理信令、物理媒体附属装置以及媒体相关接口。
LLC子层涉及报文过滤、超载通知、以及恢复管理。
MAC子层是CAN协议的核心。
它把接收到的报文提供给LLC子层,并接收来自LLC子层的报文。
MAC子层负责报文分帧、仲裁、应答、错误检测和标定。
MAC子层也被称作故障界定的实体监管。
故障界定为自检机制,以便把永久故障和短时间扰动区别开来。
LLC和MAC两个同等的协议实体通过交换帧来进行相互通信。
物理层定义信号如何进行传输,涉及位定时、位编码/解码、同步的描述。
本技术规范没有定义物理层的驱动器/接收器特性,以便允许根据它们的应用,对发送媒体和信号电平进行优化。
5.3.3CAN报文格式
CAN系统中,有四种不同类型的报文帧格式,分别为数据帧、远程帧、出错帧和超载帧。
其中:
数据帧将数据由发送器传至接收器;远程帧用以请求发送具有相同标识符的数据帧;出错帧用于通知总线上的节点有错误发生;而超载帧用于在前一帧和后续数据帧(或远程帧)之间提供附加延时。
另外,数据帧和远程帧借助帧间空间相互隔开。
1.数据帧
CAN用数据帧发送数据。
数据帧的结构如图5-3所示。
其核心部分是使用标识符确定报文的优先级而不是定义接收器的地址。
数据帧发送特定的由标识符描述的报文。
每个参与者对收到报文的标识符进行检验以辨别是否与其相关(接收过滤)。
报文的接收过滤原则还可以使报文被所有或多个节点一次接收。
这一功能对包括应用进程同步在内的许多情况非常有用。
数据帧由7个不同的位场组成,它们是:
帧起始、仲裁场、控制场、数据场、CRC场、确认场和帧结束。
数据场的长度可以为0。
⑴帧起始(标准格式和扩展格式)
帧起始(SOF,StartOfFrame)标志数据帧和远程帧的起始,仅由一个显性位组成,在CAN总线中,规定显性位为“0”。
只有当总线为空闲状态时,才允许节点开始发送,所有的节点必须同步于首先开始发送的那个节点的帧起始上升沿(参见5.3.7节中的“硬同步”)。
⑵仲裁场
仲裁场由标识符和远程发送请求(RTR,RemoteTransmissionRequest)位组成。
标识符长度为11位,按由高到低的顺序发送,依次为ID10,ID9,…,ID0,其中最高7位(ID10~ID4)不能全为隐性位,即不应全为“1”。
RTR位在数据帧中必须是显性位,而在远程帧中必须为隐性位。
⑶控制场
控制场由6位组成,其中4位用来指出数据场字节个数,用数据长度代码DLC(DLC,DataLengthCode)表示,另2位是用于未来DLC扩展的保留位。
在定义保留位功能之前,发送器必须按显性位发送,但是接收器认可显性位和隐性位的组合。
DLC的长度可为0,数据帧允许数据字节数目范围为0~8,表5-1中规定数值以外的其它数值不能使用。
表5-1数据长度代码表示的数据字节数编码
DLC
数据的字节数
DLC3
DLC2
DLC1
DLC0
0
0
0
0
0
0
0
0
1
1
0
0
1
0
2
0
0
1
1
3
0
1
0
0
4
0
1
0
1
5
0
1
1
0
6
0
1
1
1
7
1
0
0
0
8
⑷数据场
数据场包含待传输的数据,它可以为0~8个字节,每个字节包括8位。
首先发送的是最高位。
⑸CRC场
循环冗余码CRC场包括CRC序列,其后是CRC界定符。
CRC序列由循环冗余码求得的帧检查序列组成,最适用于位数小于127位(BCH码)的帧。
为实现CRC计算,被除的多项式系数由帧起始、仲裁场、控制场、数据场(如果存在)在内的无填充的位流给出,其15个最低位的系数是0。
此多项式除以下列生成多项式,所得到的余数就是发送到总线上的CRC序列。
G(x)=x15+x14+x10+x8+x7+x4+x3+1(5-1)
CRC序列之后是CRC界定符,仅由一个隐性位构成。
⑹确认场
确认场又称为ACK场,长度为2位:
ACK间隙和ACK界定符。
发送节点的ACK场中,送出两个隐性位。
在ACK间隙内,所有接收到匹配CRC序列的节点,以显性位改写发送器的隐性位送出一个确认。
ACK界定符为ACK场的第二位,其必须是隐性位,因此,ACK间隙被两个隐性位(CRC界定符和ACK界定符)所包围。
⑺帧结束
每个数据帧和远程帧均由7个隐性位组成的标志序列界定。
2.远程帧
远程帧可以启动源节点发送各自的数据。
需要数据的节点可以请求另一节点发送相应的数据帧。
数据帧和相应的远程帧是由相同的标识符命名的。
远程帧由6个不同的位场组成:
帧起始、仲裁场、控制场、CRC场、确认场、帧结束。
远程帧格式如图5-4所示。
与数据帧相反,远程帧的RTR位是隐性位,即数值“1”。
远程帧中没有数据场。
数据长度代码DLC的数值是不受约束的。
远程帧的其它位场与数据帧的相应位场相同。
3.出错帧
出错帧包括两个场。
第一个场由来各个节点的错误标志叠加得到,第二个场是错误界定符。
报文传输过程中,检测到任何一个节点出错,即于下一位开始发送出错帧,通知发送端停止发送。
出错帧格式如图5-5所示。
为了正确地终止出错帧,一种“错误认可”节点可以使总线处于空闲状态至少3位时间(如果“错误认可”接收器存在本地错误)。
因此,总线的载荷不应为100%。
1错误标志叠加
错误标志具有两种形式:
主动错误标志(activeerrorflag)和被动错误标志(passiveerrorflag)。
前者由6个连续的显性位组成,后者由6个连续的隐性位组成。
被动错误标志的各位可被来自其它节点的显性位改写。
一个检测到出错条件的“错误激活”节点,通过发送一个主动错误标志进行标注。
这一出错标注形式是发送6个连续的显性位,违背了适用于由帧起始至CRC界定符所有位场的位填充规则,或者破坏了ACK场或帧结束场的固定形式。
因而,总线上所有其它的节点将检测到出错条件并发送出错标志。
这样,在总线上被监控到的显性位序列是由各个节点单独发送的出错标志叠加而成。
该序列的总长度在最小值6与最大值12位之间变化。
一个检测到出错条件的处于“被动错误”节点,试图发送一个被动错误标志进行标注,该错误认可节点自被动错误标志为起点,等待6个相同极性的连续位,当检测到6个相同的连续位后,被动错误标志即告完成。
⑵错误界定符
错误界定符包括8个隐性位。
错误标志发送后,每个节点都送出隐性位,并监控总线,直到检测到隐性位。
然后开始发送其余的7个隐性位。
4.超载帧
超载帧包括两个位场:
超载标志和超载界定符,超载标志的由6个显性位组成,超载界定符由8个隐性位组成,帧格式如图5-6所示。
导致发送超载标志的情况有三种:
一是接收器内部要求对下一数据帧或远程帧进行延时;第二是在间歇场的第一和第二位检测到一个显性位;第三,CAN节点在错误界定符或超载界定符的最后一位采样到一个显性位。
由第一种超载情况引发的超载帧起点,只允许在期望间歇场的第一个位时间开始,而由后两种情况引发的超载帧在检测到显性位的后一位开始。
⑴超载标志
超载标志的全部形式对应于主动错误标志形式。
由于超载标志的形式破坏了间歇场的固定形式,因此,所有其它的节点都将检测到一个超载条件,并且由它们开始发送超载标志。
如果有的节点在间歇场的第3位期间检测到显性位,则这个位将被视为帧的起始。
⑵超载界定符
超载界定符和错误界定符具有相同的形式。
发送超载标志后,节点就一直监视总线,直到检测到一个由显性位到隐性位的发送,即出现显性位到隐性位的跳变。
此时,总线上的每一个节点均完成了超载标志的发送,并开始同时发送其余7个隐性位。
5.帧间空间
数据帧、远程帧通过帧间空间隔开。
与此相反,超载帧和出错帧前面不存在帧间空间,并且多个超载帧之间也不用帧间空间分隔。
帧间空间包括间歇场、总线空闲场,而对于先前帧已发送“错误认可”的节点,其帧间空间除了间歇场和总线空闲场外还包括暂停发送场,如图5-7(a)、(b)所示。
⑴间歇场
间歇场由3个隐性位组成。
间歇期间,所有的节点不允许发送数据帧或远程帧,仅起标注超载条件的作用。
注意:
如果CAN节点有一报文等待发送并且节点在间歇的第三位采集到一显性位,则此位被解释为帧的起始位,并从下一个位开始发送报文的标识符首位,而不用首先发送帧的起始位或成为接收器。
⑵总线空闲场
总线空闲时间可以是任意长度。
总线空闲时,任何节点均可访问总线以便发送。
在其它帧发送期间,等待发送的帧紧随间歇场之后的第一个位启动。
如果在总线空闲期间检测到总线上有显性位,可被理解为帧起始。
⑶暂停发送场
“错误认可”节点完成发送后,在开始下一次帧发送或认可总线空闲之前,它紧随间歇场后发出8个隐性位。
如果在此期间其它节点开始一次发送,则本节点将变为帧接收器。
5.3.4帧编码及其发送/接收
CAN帧的位流采用非归零码(NRZ)。
这意味着,在整个位时间内维持有效电平,要么为显性,要么为隐性。
其缺点是:
在连续数值相同的位较多时,没有用于各个网络节点同步的边沿。
正是由于这个原因,帧起始、仲裁场、控制场、数据场和CRC序列中使用了位填充,即发送器在5个相同极性的位后插入一个相反极性的附加位。
于是,使用附加沿的后同步就可以进行了。
这些填充位随后会被接收器去除。
图5-8给出一个位填充原理实例,该例中,发送器在每个相同极性的5位位序列之后插入一个补码位,即在被发送位序列①的第7位和第19位后,各插入了一个补码位。
对于帧中采用位填充编码的部分,接收器总是去除连续5个相同位之后的一位,这样就恢复了原先的位流。
数据帧或远程帧的其余位场(CRC界定符、确认场和帧结束)格式固定,不进行位填充。
出错帧和超载帧的格式也固定,同样不使用位填充方法进行编码。
一个帧应由SOF场开始逐个位场进行发送,每个场内应首先发送最高位,见图5-9。
对于发送器与接收器来说,一个帧的有效时间点是不同的。
对于发送器,若在帧结束完成前不存在错误,则该帧有效。
若一帧被破坏,则进行恢复处理。
对于接收器,若在帧结束最后一位前不存在错误,则该帧为有效。
5.3.5总线访问
CAN的总线访问控制采用了由CSMA/CD发展而来的CSMA/CA(载波监听多路访问/冲突避免,CarrierSenseMultipleAccesswithCollisionAvoidance)方法。
根据该方法,每个总线使用者,要对总线状态进行检测(载波监听),只要一定时间内总线未被占用,就可以发送报文。
当许多节点一起开始发送时,只有发送具有最高优先权帧的节点变为总线主站。
这种解决总线访问冲突的机理是基于竞争的仲裁。
仲裁期间,每个发送器将自身发送的位电平同总线上检测到的电平进行比较。
若相等,则节点可以继续发送。
当送出一个隐性电平(逻辑“1”),而检测到的为显性电平时(逻辑“0”),表明节点丢失仲裁,并且不应再送更多位。
当送出显性电平,而检测到的为隐性电平时,表明节点检测出位错误。
由于拥有高优先权的帧具有较低的标识符,其仲裁场是以更多的显性位开始。
因此,帧会保留在总线上,且数据并不被损坏(冲突避免)。
如图5-10给出一个CAN协议仲裁过程实例。
图中参入者1、2和3在①点同时开始仲裁过程,参入者2在②点失去总线访问权,而参入者1在③点,且分别转成接收模式;在仲裁阶段结束点④,只有参入者3拥有总线访问权,并继续向总线发送报文。
基于竞争的仲裁依靠标识符和紧随其后RTR位完成。
具有不同标识符的两个帧,优先权就体现在帧中,较高优先权的标识符具有较低的二进制数值。
若具有相同标识符的数据帧和远程帧同时被初始化,数据帧具有更高优先权,这一点是通过RTR位的数值体现的。
此外,CAN还规定了其它解决冲突的原则:
⑴在一个系统内,每条信息必须标以唯一的标识符;
⑵具有给定标识符和非零DLC的数据帧仅可由一个节点启动;
⑶远程帧只能以全系统内确定的DLC发送,该数据长度代码为对应数据帧的DLC。
若具有相同标识符和不同DLC的远程帧同时发送,将导致无法解决的冲突。
5.3.6错误检测与错误处理
正是由于汽车对数据传送安全性的要求较高,因此,最初为这一领域设计的CAN协议非常重视错误检测功能。
这些机制包括:
监测、填充规则校验、帧校验、15位CRC检验和应答检验。
1.错误类型
⑴位错误
节点在向总线发送位的同时也对总线进行监视。
如果所发送的位值与所监测的位值不相符合,则在此位时间里检测到一个位错误。
例外的情况是,在仲裁场的填充位流期间或ACK间隙送出隐性位而监测到显性位时,不视为位错误;送出被动错误标志,而检测到显性位的节点,不将其理解为位错误。
⑵填充错误
在使用位填充法进行编码的帧场中,出现了第6个连续相同的位电平时,将检测到一个填充错误。
⑶CRC错误
CRC序列由发送器的CRC计算结果构成。
接收器计算CRC的方法与发送器相同,当其计算结果与接收到CRC序列不相符,则检测到一个CRC错误。
⑷形式错误
当固定格式位场出现1个或多个非法位时,则检测到形式错误。
例外情况是:
接收器在帧结束的最后一位检测到显性位,不视为形式错误。
⑸确认错误
在ACK间隙期间,发送器未检测到显性位,则检测到一个应答错误。
当任何节点检测到位错误、填充错误、形式错误或应答错误时,则由该节点在下一位开始发送错误标志;当检测到CRC错误时,出错帧在紧随ACK界定符后的那位开始发送,除非其它出错条件的出错帧已经开始发送。
2.节点错误状态
应用上述机制检测到错误后,一个出错帧就会被发出,当前发送中断,下次发送通过另一次仲裁过程开始。
如果一个有故障的网络节点对报文的解码有误,使用出错帧方式进行错误处理会牵累总线,甚至产生阻塞。
由于这个原因,每个节点都会执行自监督。
如果一定量的报文被判出错,网络节点会切换至所谓的“错误认可”状态,这时来自总线其他部分的报文就不会再被破坏。
CAN总线中的任何一个节点,可能处于下列三种故障状态之一:
错误激活、错误认可、总线脱离。
错误激活节点可以正常参与总线通信,并在检测到错误时发出一个主动错误标志。
错误认可节点不允许发送主动错误标志,可以参与总线通信,但当检测到错误时,只能发出被动错误标志,而且发送后,错误认可节点在开始进一步发送前将等待一段附加时间(参见暂停发送说明)。
处于总线脱离状态的节点,既不发送也不接收任何帧,即不允许对总线有任何的影响。
3.错误界定规则
为了进行错误界定,总线上的每个单元中都设置有两个计数器,分别用于发送错误计数和接收错误计数。
计数规则如下(在给定帧发送期间,可能用到多个规则):
⑴接收器检测到一个错误,接收错误计数器加1。
但是,若在发送主动错误标志或超载标志期间检测到位错误,接收错误计数器不加1。
⑵接收器在发送错误标志后的第一位检出一个显性位,接收错误计数器加8。
⑶当发送器送出一个错误标志时,发送错误计数器值加8。
但有两个例外,一个是若发送器为错误认可,由于未检测到显性位应答或检测到一个应答错误,并且在送出其被动错误标志时,未检测到显性位;另一个是若由于仲裁期间发生的填充错误,发送器送出一个隐性位错误标志,但送出隐性,而检测到显性。
在此两种情况下,发送错误计数器值不变。
⑷发送器发送主动错误标志或超载标志时,若检测到位错误,则发送错误计数器加8。
⑸接收器发送主动错误标志或超载标志时,若检测到位错误,则接收错误计数器加8。
⑹在发送主动错误标志、被动错误标志或超载标志后,任何节点都允许最多7个连续的显性位。
在检测的第11个连续的显性位后(在主动错误标志或超载标志情况下),或紧随被动错误标志检测到第8个连续的显性位后,以及附加的8个连续的显性位的每个序列后,每个发送器的发送错误计数器加8,且每个接收器的接收错误计数器也加8。
⑺成功发送一帧后(得到应答,并且直至帧结束未出现错误),发送错误计数器减1,除非已经为0。
⑻成功接收一帧后(直至ACK间隙均无错误地接收,并成功送出ACK位),若接收错误计数器的值介于1~