这要看你要了解到多深程度?
23楼的朋友,如果你只是想修某一款车.你只要找到相关的修理手册,它就会告诉你一些网络控制基本原理.该车网络结构,怎么测量各节点参数值,怎么去根据诊断仪提示的故障代码(有的甚至直接从诊断电脑告知是什么故障),去查找故障点,该怎么排除故障.
3 Q q( [* c, }! f# Z$ x这就是因为由于现代汽车用了多路传输,控制系统共享信息量陡增,控制范围也就扩大了许多,使得车上的控制电脑跟普通的电脑一样,具备容错(比如:系统的降级安全模式),智能化(比如:模糊控制)功能.也由于用了电脑(ECU),很多信息可以用程序来处理(就是所谓的"软件"),这样使得在车辆控制系统中,在不增加任何装备的条件下,实现车主个性化设置.3 S2 S. }4 t; B$ F: r; O7 N
我们把前者叫诊断,后者叫配置,你只要搞懂某款车的控制系统诊断和配置方法,就可以做这款车的维修服务了。
1 `* u8 f8 F% O/ E5 H+ @0 |但你如果真正想了解它的原理,那是要有一定的理论知识的,比如电子技术/控制技术/编码技术也就是数字技术,由于篇幅原因,也不是一下子能说清楚,这里有专家发表了篇比较好的文章,不知你是否曾看过,我想这对于你在这方面了解可能有些帮助。现摘录如下- Y ?6 @6 n, I! M
CAN 通信协议简介
5 w; I( k8 ^% c' k7 K一、概述
0 t9 B/ @: ~0 o对于一般控制,设备间通信可以通过串行网络完成。因此,BOSCH 公司开发了CAN 总线
" H5 P2 s9 \! h7 `) F4 c9 c(C ontroller Area Network),并已取得国际标准化组织认证(ISO11898),其总线结构0 v+ b, Y/ ?+ y
可参照I SO/OSI 参考模型。同时,国际上一些大的半导体厂商也积极开发出支持CAN 总
5 O6 F% R3 l" Z- a4 p& V% ^线的专用芯片。通过CAN 总线,传感器、控制器和执行器由串行数据线连接起来。它不
2 Q$ C0 p- E: s/ S. }4 O. `" V; S/ T仅仅是将电缆按树形结构连接起来,其通信协议相当于ISO/OSI 参考模型中的数据链路6 N/ s# p& y% H8 m
层,网络可根据协议探测和纠正数据传输过程中因电磁干扰而产生的数据错误。CAN 网络 @9 o3 F6 y2 V8 X3 Q2 x1 Q
的配制比较容易,允许任何站之间直接进行通信,而无需将所有数据全部汇总到主计算
3 C+ M: u' @" G. X: ?. t; Z机后再行处理。
; p5 P$ p* n/ W. k8 q; V4 z* ?二、CAN 在国外的发展
2 M R [7 ?) T4 z对机动车辆总线和对现场总线的需求有许多相似之处,即较低的成本、较高的实时处- X# n1 L: w" S6 c6 Z& J" ]2 I
理能力和在恶劣的强电磁干扰环境下可靠的工作。奔驰S 型轿车上采用的就是CAN 总线
+ B& J4 l0 v- F5 s4 i系统;美国商用车辆制造商们也将注意力转向CAN 总线;美国一些企业已将CAN 作为内部7 F4 @9 x) T$ \7 e
总线应用在生产线和机床上。同时,由于CAN 总线可以提供较高的安全性,因此在医疗领' o9 w- B& {$ L* \( M! X, S3 [
域、纺织机械和电梯控制中也得到广泛应用。
& m4 p1 w X# F! c' F三、CAN 的工作原理
7 D9 {/ O. q9 n当CAN 总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对
/ M5 [3 I' z# R$ `6 W每个节点来说,无论数据是否是发给自己的,都对其进行接收。每组报文开头的11 位字
' h( ]; i( y, c8 ] k# M$ l, ?符为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案。在同一系统
; k- ?+ {" I* U* o9 ~中标识符是唯一的,不可能有两个站发送具有相同标识符的报文。当几个站同时竞争总3 P) w$ @4 Q7 `
线读取时,这种配置十分重要。
7 q6 k* W* ]5 n& mCAN 总线的报文发送和接收参见图1。当一个站要向其它站发送数据时,该站的CPU 将要
' e9 K5 k* e9 k: N发送的数据和自己的标识符传送给本站的CAN 芯片,并处于准备状态;当它收到总线分配2 ~: }! J2 f5 p5 `7 J
时, 转为发送报文状态。CAN 芯片将数据根据协议组织成一定的报文格式发出,这时网上
# X$ }! j' t R$ E/ J的其它站处于接收状态。每个处于接收状态的站对接收到的报文进行检测,判断这些报
6 X y) L6 {! e文是否是发给自己的,以确定是否接收它。
7 y9 P7 k: i+ z9 @- `0 d3 r由于CAN总线是一种面向内容的编址方案,因此很容易建立高水准的控制系统并灵活9 O3 @6 c2 M4 e1 v, k$ K' S7 p
地进行配置。我们可以很容易地在CAN 总线中加进一些新站而无需在硬件或软件上进行2 `* K* p. b5 i, H; e
修改。当所提供的新站是纯数据接收设备时,数据传输协议不要求独立的部分有物理目0 ^: W1 X" p, e8 V5 Q+ s5 u8 M* W
的地址。它允许分布过程同步化,即总线上控制器需要测量数据时,可由网上获得,而无* V1 `1 I' O( y( T" X1 s3 E, a) f
须每个控制器都有自己独立的传感器。; a3 ?' p$ b; N8 j) z. G
四、位仲裁
: C7 H* q. ^' C# L要对数据进行实时处理,就必须将数据快速传送,这就要求数据的物理传输通路有较
1 `1 q6 R* \+ d9 a( z* O* r- S4 W高的速度。在几个站同时需要发送数据时,要求快速地进行总线分配。实时处理通过网5 o7 D0 L( h, |5 O% n+ f; {1 y
络交换的紧急数据有较大的不同。一个快速变化的物理量,如汽车引擎负载,将比类似汽! {3 v$ W3 T# d# j2 F( V
车引擎温度这样相对变化较慢的物理量更频繁地传送数据并要求更短的延时。1 c3 y8 b; L3 f1 O8 k1 l
CAN 总线以报文为单位进行数据传送,报文的优先级结合在11 位标识符中,具有最低' X: \( j( N; {1 o" @9 X; x
二进制数的标识符有最高的优先级。这种优先级一旦在系统设计时被确立后就不能再被2 x: g* n9 A, o3 Z- _0 @
更改。总线读取中的冲突可通过位仲裁解决。如图2 所示,当几个站同时发送报文时,站( x. L0 H- L1 W( t
1 的报文标识符为011111;站2 的报文标识符为0100110;站3 的报文标识符为0100111。
" l( v1 i2 E9 g所有标识符都有相同的两位01,直到第3 位进行比较时,站1 的报文被丢掉,因为它的第. i3 o Z5 W& F! h
3 位为高,而其它两个站的报文第3 位为低。站2 和站3 报文的4、5、6 位相同,直到第
/ v# k0 q1 z9 a& ]8 [" a7 位时,站3 的报文才被丢失。注意,总线中的信号持续跟踪最后获得总线读取权的站的$ F. B" Q4 i+ x# U/ K
报文。在此例中,站2 的报文被跟踪。这种非破坏性位仲裁方法的优点在于,在网络最终
& M# v, J* s4 a% H7 B0 O. ^& k确定哪一个站的报文被传送以前,报文的起始部分已经在网络上传送了。所有未获得总
& \# T T: N/ ^( |6 B8 q. a- } f. K线读取权的站都成为具有最高优先权报文的接收站,并且不会在总线再次空闲前发送报
7 l3 n) I! D7 x3 \! r文。. ~; H8 [: Z# d$ S% d! _
CAN 具有较高的效率是因为总线仅仅被那些请求总线悬而未决的站利用,这些请求是2 g" S- d0 Q- c
根据报文在整个系统中的重要性按顺序处理的。这种方法在网络负载较重时有很多优点,
8 z) P! [2 Z1 w因为总线读取的优先级已被按顺序放在每个报文中了,这可以保证在实时系统中较低的
: l% [9 B3 _6 ^$ ]4 R9 x( g个体隐伏时间。
, j* V/ b* ]2 I% p* {对于主站的可靠性,由于CAN 协议执行非集中化总线控制,所有主要通信,包括总线读
) e% m# I0 z" C: d, s/ [取 (许可)控制,在系统中分几次完成。这是实现有较高可靠性的通信系统的唯一方法。
7 C8 Y/ G/ H5 Q# N# p五、CAN 与其它通信方案的比较! r @6 K& c8 x4 m* R- U
在实践中,有两种重要的总线分配方法:按时间表分配和按需要分配。在第一种方法
# J3 ]9 B) P2 P2 k/ W中 ,不管每个节点是否申请总线,都对每个节点按最大期间分配。由此,总线可被分配给
* B7 Q7 {$ S/ _# m m每个站并且是唯一的站,而不论其是立即进行总线存取或在一特定时间进行总线存取。7 `% F b' p, r, t9 x0 ]
这将保证在总线存取时有明确的总线分配。在第二种方法中,总线按传送数据的基本要
& C& t" V$ Q* F! c5 ^* j+ c) R求分配给一个站 ,总线系统按站希望的传送分配(如:Ethernet CSMA/CD)。因此,当多个2 q: m" @) H" P4 F- D* t/ {+ F
站同时请求总线存取时,总线将终止所有站的请求,这时将不会有任何一个站获得总线: W w$ [9 _8 ^) e" G: }' \* _
分配。为了分配总线,多于一个总线存取是必要的。% o! J1 Y4 g" e$ Y# w
CAN 实现总线分配的方法,可保证当不同的站申请总线存取时,明确地进行总线分配。这
) y. \! O) w) |种位仲裁的方法可以解决当两个站同时发送数据时产生的碰撞问题。不同于Ethernet
* ]5 U1 C$ k0 b! w! l. m. o) E网络的消息仲裁,CAN 的非破坏性解决总线存取冲突的方法,确保在不传送有用消息时总
- a( V1 F) U# B, c. f线不被占用。甚至当总线在重负载情况下,以消息内容为优先的总线存取也被证明是一
/ Y& P" V* w' i2 p, T9 j种有效的系统。虽然总线的传输能力不足,所有未解决的传输请求都按重要性顺序来处
" c% m* P6 A: p理。在CSMA/CD 这样的网络中,如Ethernet,系统往往由于过载而崩溃,而这种情况在CAN, p: @+ `. }; }8 r
中不会发生。
+ W! N, R* U% a2 u7 q! [六、CAN 的报文格式' d% r& p7 p# F6 ~
在总线中传送的报文,每帧由7 部分组成,见图3。CAN 协议支持两种报文格式,其唯
& } M0 f1 z1 E' n一的不同是标识符(ID) 长度不同, 标准格式为11 位, 扩展格式为29' ~7 q0 F4 O4 {8 c: n, s
位。 @@TB17125002.GIF;
% t a0 G+ i! O0 H! j6 Z# S在标准格式中,报文的起始位称为帧起始(SOF),然后是由11 位标识符和远程发送请! g, a; m4 W8 c5 `7 b$ N7 m& r
求位 (RTR)组成的仲裁场。RTR 位标明是数据帧还是请求帧,在请求帧中没有数据字节。
8 _- @8 H4 s% i. w控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留+ \6 Y1 I8 ^$ n. Q9 p$ X: E9 g
位 (ro),为将来扩展使用。它的最后四个字节用来指明数据场中数据的长度(DLC)。数; X+ J$ n* P* O7 _( G5 D. L6 ]3 X1 z
据场范围为0~8 个字节,其后有一个检测数据错误的循环冗余检查(CRC)。
+ B/ k! b8 G* @, M* ]" L' }应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑1),
0 g0 y& p8 m& u. K( G$ ^' s) |( f1 o这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。用这种方法,发送站可以保证" ?; y' S# s5 u4 t
网络中至少有一个站能正确接收到报文。. l" N N' Q5 p3 w7 T
报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站
+ r+ ]& r! q' `$ d% N, v# I1 |) H2 H* O进行总线存取,总线将处于空闲状态。! p/ U, x4 e: B2 k& x
七、数据错误检测
% h' C8 b0 V5 T& T不同于其它总线,CAN 协议不能使用应答信息。事实上,它可以将发生的任何错误用信号
2 O" @$ H# P B2 Z6 ]; F' M发出。CAN 协议可使用五种检查错误的方法,其中前三种为基于报文内容检查。
( \) z: @& H% Q. K% g* v1 E# X1.循环冗余检查(CRC)
6 i4 ?2 a- s7 I- W }- U- f& {2 p( z在一帧报文中加入冗余检查位可保证报文正确。接收站通过CRC 可判断报文是否有
' m# {4 h9 k& q! C/ z错。, U% B* U; g- n$ D. h( b
2.帧检查
: `; G7 w5 \& R+ n6 N3 o这种方法通过位场检查帧的格式和大小来确定报文的正确性,用于检查格式上的错
2 U9 [/ P& O4 _+ {9 q误。
2 ?- `- Z! ]7 r$ ^3.应答错误9 E5 @0 Q" ?/ a) z S4 x) B
如前所述,被接收到的帧由接收站通过明确的应答来确认。如果发送站未收到应答,
8 ]1 Y3 g0 O3 S7 r9 P那么表明接收站发现帧中有错误,也就是说,ACK 场已损坏或网络中的报文无站接收。CAN
+ i8 q: v, \$ R2 U3 e5 A* ~$ m协议也可通过位检查的方法探测错误。1 l' y2 D" ~% O
4.总线检测$ p8 }! a" E8 P5 n* v( w1 a
有时,CAN 中的一个节点可监测自己发出的信号。因此,发送报文的站可以观测总线电
) W$ L) |- n3 _, a平并探测发送位和接收位的差异。
. `, s8 C. o+ W. X% B- a5.位填充, ^* \" Q; w$ B8 g
一帧报文中的每一位都由不归零码表示,可保证位编码的最大效率。然而,如果在一
$ ` y- k1 J" Q. g, ]; H帧报文中有太多相同电平的位,就有可能失去同步。为保证同步,同步沿用位填充产生。( e1 q. ]6 O u/ q
在五个生。在五个连续相等位后,发送站自动插入一个与之互补的补码位;接收时,这个' ?3 x4 g6 Q9 B* ]$ ~1 s% G
填充位被自动丢掉。例如,五个连续的低电平位后,CAN 自动插入一个高电平位。CAN 通
- d4 } P, z; N; _% P3 d过这种编码规则检查错误,如果在一帧报文中有6 个相同位,CAN 就知道发生了错误。/ ~! L+ F5 b' _) b
如果至少有一个站通过以上方法探测到 一个或多个错误,它将发送出错标志终止当
7 d1 ]# X+ W+ N; G4 X. |- [! t前的发送。这可以阻止其它站接收错误的报文,并保证网络上报文的一致性。当大量发
9 O+ |! M6 h* j# Y送数据被终止后,发送站会自动地重新发送数据。作为规则,在探测到错误后23 个位周
2 v: O3 F. [ {+ } d' `! N7 Z( J期内重新开始发送。在特殊场合,系统的恢复时间为31 个位周期。
* B1 O) ?! V/ B0 ~& {但这种方法存在一个问题,即一个发生错误的站将导致所有数据被终止,其中也包括
+ ^$ }) I! U5 M正确的数据。因此,如果不采取自监测措施,总线系统应采用模块化设计。为此,CAN 协议
0 `- ?8 q; l- w3 I# G& Z4 c0 P提供一种将偶然错误从永久错误和局部站失败中区别出来的办法。这种方法可以通过对, P n3 g- G: |: ~' i
出错站统计评估来确定一个站本身的错误并进入一种不会对其它站产生不良影响的运8 e: \' d7 z# c% h2 M8 C/ X7 K$ v
行方法来实现,即站可以通过关闭自己来阻止正常数据因被错误地当成不正确的数据而
! B# @% f, e x; ^8 w% h被终止。
. |& [: k# G2 P! G u, Y+ H八、CAN 的可靠性
2 `- @* l5 W3 k& p* @' M6 H为防止汽车在使用寿命期内由于数据交换错误而对司机造成危险,汽车的安全系统 c9 d" r6 L R4 @9 j
要求数据传输具有较高的安全性。如果数据传输的可靠性足够高,或者残留下来的数据9 ^4 d/ C8 }- u2 f
错误足够低的话,这一目标不难实现。从总线系统数据的角度看,可靠性可以理解为,对
+ x* h- z* Q9 q. g' R传输过程产生的数据错误的识别能力。
( V0 ? A: X1 O) W7 G; V1 ?" U, V \1 ~残余数据错误的概率可以通过对数据传输可靠性的统计测量获得。它描述了传送数
2 d; W8 k- L2 C# g0 d据被破坏和这种破坏不能被探测出来的概率。残余数据错误概率必须非常小,使其在系% z2 t* K I5 O. `6 _
统整个寿命周期内,按平均统计时几乎检测不到。计算残余错误概率要求能够对数据错+ P5 A5 r: |1 i9 l, p+ h* e. h
误进行分类 ,并且数据传输路径可由一模型描述。如果要确定CAN 的残余错误概率,我0 Z9 X( F' n3 {: u& a7 h
们可将残留错误的概率作为具有80~90 位的报文传送时位错误概率的函数,并假定这个
, l- M; k G8 p2 |系统中有5~10 个站,并且错误率为1/1000,那么最大位错误概率为10—13 数量级。例
% q4 a$ n6 ~) V5 G如,CAN 网络的数据传输率最大为1Mbps,如果数据传输能力仅使用50%,那么对于一个工3 v: J! V( E) Y( @! n
作寿命4000 小时、平均报文长度为 80 位的系统,所传送的数据总量为9×1010。在系! |- x# b% I% t
统运行寿命期内,不可检测的传输错误的统计平均小于10—2 量级。换句话说,一个系统5 t7 }/ C4 W! Q1 G, h; g* h* t
按每年365 天,每天工作8 小时,每秒错误率为0. 7 计算,那么按统计平均,每1000 年才
4 ?6 X9 |7 M3 i0 d" H0 v$ }) w会发生一个不可检测的错误。