用于隔离控制器局域网络中的故障的方法和装置\n[0001] 相关申请的交叉引用\n[0002] 此申请要求2013年10月18日提交的美国临时申请号61/892,506的权益,该申请以引用的方式并入本文。\n技术领域\n[0003] 此披露涉及与控制器局域网络中的通信相关的故障隔离。\n背景技术\n[0004] 此部分中的陈述仅提供与本披露有关的背景信息。因此,这些陈述并不意欲构成先前技术的承认。\n[0005] 车辆系统包括多个子系统,举例来说包括发动机、变速器、乘坐/操纵、刹车、HVAC以及乘客保护。可以使用多个控制器来监控和控制子系统的操作。控制器可以配置成通过控制器局域网络(CAN)来通信,以响应于操作者命令、车辆操作状态以及外部条件来调整车辆的操作。在一个控制器中可能发生故障,这影响通过CAN总线的通信。\n[0006] 诸如CAN的网络的拓扑是指网络元件间的连接布置,并且优选地包括具有互连或分散的电力、接地或通信链路的多个节点。物理拓扑描述包括链路和节点的物理元件的布置或布局,其中节点包括控制器和其他连接的器件并且链路包括以适合的电缆、导线、印刷线路板(PWB)、印刷电路板(PCB)、柔性条等的形式的电力、接地或通信链路。逻辑拓扑描述使用电力、接地或通信链路的节点之间的网络内的数据消息流、电力或接地。已知的CAN系统使用总线拓扑来进行所有控制器之间的通信连接,可以包括线性拓扑、星形拓扑或星形与线性拓扑的组合。已知的高速CAN系统使用线性拓扑,其中已知的低速CAN系统使用星形与线性拓扑的组合。已知的CAN系统使用单独的电力拓扑和接地拓扑来用于到所有控制器的电力线和接地线。已知的控制器通过在CAN总线上以不同周期发送的消息来彼此通信。\n[0007] 已知系统在消息接收控制器处检测故障,其中使用控制器的交互层上的信号监视和信号超时监控来实现对消息的故障检测。故障可以被报告为通信丢失,例如所通信的数据消息的丢失。这些检测系统通常不能识别故障的根本原因,并且不能区别瞬时与间歇故障。一个已知的系统需要单独监控网络的物理拓扑的硬件和空间细节来有效地监控和检测网络中的通信故障。\n[0008] 可以在车辆制造和组装过程中车外产生用于网络拓扑的故障表征并且将其快闪编程到系统中。在车辆系统的一个实施例中,由于不同的车辆和控制器配置可以存在多个拓扑变体。这增加车辆制造厂中计时管理的复杂度并且可能降低制造生产率。\n发明内容\n[0009] 描述移动系统上的控制器局域网络(CAN),该网络包括多个联接的通信节点,所述节点包括车上监控控制器。一种用于监控CAN的方法包括识别CAN的所有节点之间的链路和相关节点并且根据所有链路与监控控制器的连接次序来将所有链路分等级,包括将较低等级分配给链路中接近监控控制器的链路并且将较高等级分配给链路中远离监控控制器的链路。对于所述链路中的每个链路,识别出远离监控器的相关节点。车上监控控制器以具有最高等级的链路开始为每个链路确定故障表征,所述故障表征包括对于相应链路中的每一个而言识别出的相关节点中远离监控器的节点。\n[0010] 1.一种用于监控移动系统上的控制器局域网络(CAN)的方法,控制器局域网络包括多个联接的节点,节点包括车上监控控制器,所述方法包括:\n[0011] 识别控制器局域网络的节点之间的通信链路和相关节点;\n[0012] 根据通信链路与监控控制器的连接次序来将通信链路分等级,包括将较低等级分配给通信链路中接近监控控制器的链路并且将较高等级分配给通信链路中远离监控控制器的链路;\n[0013] 对于通信链路中的每一个通信链路,识别相关节点中哪一个远离监控控制器;以及\n[0014] 使用监控控制器基于对于通信链路中的每一个通信链路而言识别出的远离监控控制器的节点对通信链路中的每一个通信链路确定故障表征。\n[0015] 2.如方案1所述的方法,其中使用监控控制器基于对于通信链路中的每一个通信链路而言识别出的远离监控控制器的节点对通信链路中的每一个通信链路确定故障表征包括使用监控控制器以具有最高等级的通信链路开始为通信链路中的每一个通信链路确定故障表征,所述故障表征包括对于相应通信链路中的每一个通信链路而言识别出的相关节点中远离监控控制器的节点。\n[0016] 3.如方案1所述的方法,其进一步包括响应于指示的故障使用故障表征来隔离控制器局域网络中的故障。\n[0017] 4.如方案3所述的方法,其中响应于指示的故障使用故障表征来隔离控制器局域网络中的故障包括响应于指示的故障使用故障表征来隔离控制器局域网络中对于通信链路的故障。\n[0018] 5.如方案1所述的方法,其进一步包括:\n[0019] 将用于通信链路的故障表征传达到车外器件;以及\n[0020] 响应于指示的故障,使用车外器件基于用于通信链路的故障表征来隔离控制器局域网络中的故障。\n[0021] 6.如方案1所述的方法,其中使用监控控制器以具有最高等级的通信链路开始为通信链路中的每一个通信链路确定故障表征,所述故障表征包括对于相应通信链路中的每一个通信链路而言识别出的相关节点中远离监控控制器的节点,包括:\n[0022] 识别对于最高等级的通信链路而言远离监控控制器的相关节点,并且产生包括识别出的相关节点的相应故障集;以及\n[0023] 迭代地减少等级,识别对于与减少的等级相关的通信链路而言远离监控控制器的相关节点,并且产生包括识别出的相关节点的相应故障集。\n[0024] 7.如方案1所述的方法,其中使用监控控制器确定用于通信链路中的每一个通信链路的故障表征包括确定包括总线链路开路故障、控制器故障以及总线短路故障中的一个的故障表征。\n[0025] 8.一种用于监控包括多个联接的通信节点的控制器局域网络(CAN)的车载方法,包括:\n[0026] 识别包括车上监控控制器的控制器局域网络的联接的通信节点之间的通信链路;\n[0027] 识别与通信链路中的每一个通信链路相关的通信节点中的成对节点;\n[0028] 识别对于每个通信链路而言联接的通信节点中哪一个远离监控控制器;\n[0029] 根据通信链路与监控控制器的连接次序来将通信链路分等级,包括将较低等级分配给接近监控控制器的通信链路并且将较高等级分配给远离监控控制器的通信链路;以及[0030] 使用监控控制器以具有最高等级的通信链路开始为通信链路中的每一个通信链路确定故障表征,所述故障表征包括对于相应通信链路中的每一个通信链路而言识别出的相关的通信节点中远离监控控制器的节点。\n[0031] 9.如方案8所述的方法,其进一步包括响应于指示的故障使用故障表征来隔离控制器局域网络中的故障。\n[0032] 10.如方案8所述的方法,其进一步包括:\n[0033] 将用于通信链路的故障表征传达到车外器件;以及\n[0034] 响应于指示的故障,使用车外器件基于用于通信链路的故障表征来隔离对于控制器局域网络中的通信链路的故障。\n[0035] 11.如方案8所述的方法,其中使用监控控制器以具有最高等级的通信链路开始为通信链路中的每一个通信链路确定故障表征,所述故障表征包括对于相应通信链路中的每一个通信链路而言识别出的相关节点中远离监控控制器的节点,包括:\n[0036] 识别对于最高等级的通信链路而言远离监控控制器的相关节点,并且产生包括识别出的相关节点的相应故障集;以及\n[0037] 迭代地减少等级,识别对于与减少的等级相关的通信链路而言远离监控控制器的相关节点,并且产生包括识别出的相关节点的相应故障集。\n[0038] 12.如方案8所述的方法,其中使用监控控制器确定用于通信链路中的每一个通信链路的故障表征包括确定包括总线链路开路故障、控制器故障以及总线短路故障中的一个的故障表征。\n附图说明\n[0039] 现在将参照附图通过示例描述一个或多个实施例,其中:\n[0040] 图1示出根据本披露的包括控制器局域网络(CAN)的移动车辆,所述网络包括CAN总线和多个节点(例如控制器和车外器件);\n[0041] 图2示出根据本披露的示例性CAN,其包括各自通过如图所示的链路连接的控制器、监控控制器、电源、星形蓄电池组以及接地;\n[0042] 图3示出根据本披露的检测CAN中的非活动的控制器的车上CAN监控例行程序;\n[0043] 图4示出根据本披露的用来获得用于CAN的故障表征的车上例行程序;以及[0044] 图5-1至图5-10示出根据本披露的用来获得用于CAN的一个实施例的故障表征的车上例行程序的执行,包括通过车上例行程序展示进程以获得故障表征。\n具体实施方式\n[0045] 现在参照附图,其中展示仅用于说明某些示例性实施例的目的而非用于限制其的目的。图1示意性地示出包括控制器局域网络(CAN)50的移动车辆8,该网络包括CAN总线15和多个节点(即,控制器10、20、30和40)。术语“节点”是指信号地连接到CAN总线15并且能够通过CAN总线15发送、接收和/或转发信息的任何活动的电子器件。控制器10、20、30和40中的每一个信号地连接到CAN总线15并且电气地连接到电力网60和接地网70。控制器10、20、\n30和40中的每一个是电子控制器或者配置成监控和/或控制车辆8的子系统中的操作和/或控制车辆8的子系统通信并且通过CAN总线15通信的另一个车载电子器件。在一个实施例中,控制器中的一个(例如,控制器40)被配置成监控CAN 50和CAN总线15,并且在本文可以称为监控器、CAN监控器或监控节点。替代地或另外地,控制器10、20、30和40中的每一个可以配置成监控CAN 50和CAN总线15。控制器40信号地连接到通信器件42,该通信器件配置成使用直接的硬线连接器43和/或无线远程信息处理连接器44来将数字消息传达到车外器件\n45。直接的硬线连接器43和无线远程信息处理连接器44使用任何适合的通信协议。\n[0046] CAN 50的所示实施例是可以在多个系统配置中的任一个中使用的CAN的非限制性示例。每个CAN使用包括节点(包括控制器和其他电子器件)之间的电力、接地和通信链路的物理布置的网络拓扑。诸如CAN的网络拓扑是指网络元件之间的连接布置,并且优选地包括具有其间的互连或分散的电力、接地或通信链路的多个节点。开发出拓扑图,包括通信拓扑、电力拓扑和接地拓扑。网络拓扑与节点和其他元件(例如,电源和接地源)之间的通信、电力和接地连接性有关,并且节点之间的物理或线性距离、物理互连、传输速率和/或信号类型是次要考虑。因此,可以在提供类似或公共功能的不同的车辆配置中发现公共网络拓扑。\n[0047] CAN总线15包括多个通信链路,包括控制器10与控制器20之间的第一通信链路51、控制器20与控制器30之间的第二通信链路53以及控制器30与控制器40之间的第三通信链路55。电力网60包括电源62,例如,电气地连接到第一电力总线64和第二电力总线66以通过电力链路向控制器10、20、30和40提供电力的蓄电池。如图所示,电源62通过以串联配置布置的电力链路连接到第一电力总线64和第二电力总线66,其中电力链路69连接第一电力总线64和第二电力总线66。第一电力总线64通过以星形配置布置的电力链路连接到控制器10和20,其中电力链路61连接第一电力总线64和控制器10并且电力链路63将第一电力总线64连接到控制器20。第二电力总线66通过以星形配置布置的电力链路连接到控制器30和40,其中电力链路65连接第二电力总线66和控制器30并且电力链路67将第二电力总线66连接到控制器40。接地网70包括连接到第一接地总线74和第二接地总线76以通过接地链路向控制器10、20、30和40提供电气接地的车辆接地72。如图所示,车辆接地72通过以串联配置布置的接地链路连接到第一接地总线74和第二接地总线76,其中接地链路79连接第一接地总线74和第二接地总线76。第一接地总线74通过以星形配置布置的接地链路连接到控制器10和20,其中接地链路71连接第一接地总线74和控制器10并且接地链路73将第一接地总线74连接到控制器20。第二接地总线76通过以星形配置布置的接地链路连接到控制器30和40,其中接地链路75连接第二接地总线76和控制器30并且接地链路77将第二接地总线76连接到控制器40。可以使用具有类似效果的用于控制器10、20、30和40以及CAN总线15的通信、电力和接地的分布的其他拓扑。\n[0048] 车外器件45可以包括在车辆诊断和修复中心的维修车间中使用的手持式扫描工具。车外器件45还可以包括远程定位的服务中心。车外器件45被配置成与通信器件42通信,包括询问控制器40以获得消息。车外器件45优选地包括控制器元件、内存元件(包括可以与CAN 50相关的系统专用网络拓扑)以及如本文描述执行以远程地识别CAN 50中的故障的分析元件。如本文所描述,车上监控控制器(例如,控制器40)产生可以传达给车外器件45的用于系统专用网络拓扑的每一个链路的故障表征,并且车外器件45可以用来基于其检测并隔离故障。\n[0049] 控制模块、模块、控制、控制器、控制单元、ECU、处理器和类似术语意味着以下各项中的一个或多个的任一个或各种组合:专用集成电路(ASIC)、电子电路、执行一个或多个软件或固件程序或例行程序的中央处理单元(优选地微处理器)以及相关内存和存储器(只读、可编程只读、随机存取、硬驱动等)、组合逻辑电路、输入/输出电路和器件、适当的信号调节和缓冲器电路以及提供所描述的功能性的其他部件。软件、固件、程序、指令、例行程序、代码、算法和类似术语意味着包括校准和查找表的任何指令集。控制模块包括执行以提供所需功能的控制例行程序集。例行程序诸如由中央处理单元执行,并且可操作以监控来自感测器件和其他联网控制模块的输入,并且执行控制和诊断例行程序以控制致动器的操作。例行程序可以规则的间隔执行,例如在进行的发动机和车辆操作过程中每100微秒、\n3.125微秒、6.25微秒、12.5微秒以及100微秒。替代地,可以响应于事件的发生来执行例行程序。\n[0050] 控制器10、20、30和40中的每一个以可以在对于不同的控制器而言的相同或不同周期的消息传输速率通过CAN总线15跨CAN 50发送和接收消息。CAN消息具有已知的预定格式,所述格式在一个实施例中包括帧开始(SOF)、标识符(11位标识符)、单个远程输送请求(RTR)、主要的单个标识符扩展(IDE)、保留位(r0)、4位数据长度代码(DLC)、高达64位的数据(DATA)、16位循环冗余校验(CDC)、2位确认(ACK)、7位帧结束(EOF)和3位帧间空间(IFS)。\nCAN消息可能由于已知的错误(包括填充错误、格式错误、ACK错误、位1错误、位0错误以及CRC错误)而被破坏。错误用来产生错误警告状态,包括错误主动状态、错误被动状态以及总线关闭错误状态中的一个。错误主动状态、错误被动状态以及总线关闭错误状态是基于检测到的总线错误帧的增加的数量(即,增加的总线错误计数)来分配。已知的CAN总线协议包括提供全网数据一致性,这可能导致本地错误的全球化。这允许有故障的、非静默的控制器破坏CAN总线15上在另一个控制器处起源的消息。\n[0051] 导致CAN总线上的消息丢失的通信故障可能是控制器中的一个中的故障、CAN总线的通信链路中的一个中的故障、电力网的电力链路中的一个中的故障以及接地网的接地链路中的一个中的故障的结果。可以开发出拓扑图,包括通信拓扑、电力拓扑和接地拓扑。对移除了开路链路的拓扑图中的每一个进行可实现性分析。如下参照图2描述拓扑图的可实现性分析的一个实施例。\n[0052] 图2示出用于示例性CAN 200的网络拓扑,所述CAN包括通过如图所示的通信链路\n201、电力链路211和接地链路221连接的控制器ECU1 202、ECU2 204和ECU3 206、监控控制器(监控器)208、电源210、星形蓄电池组212以及接地214。监控器208监测指示各种故障集的征兆,其中每个故障集具有包括非活动的控制器集的相应故障表征。监控功能被展示为由监控器208执行,但是应理解,因为可以在控制器节点中的任一个或所有上监测CAN总线上的任何消息,所以通信总线上的控制器ECU1 202、ECU2 204、ECU3 206以及监控器208中的任一个或所有可以被配置成执行故障诊断。\n[0053] 为网络拓扑产生故障模型,并且故障模型包括由用于多个故障中的每一个的监控控制器和相应的故障表征向量Vf非活动(包括与其相关的观测到的非活动的控制器集)观测到的多个征兆。参照图2描述的与网络拓扑相关的示例性故障模型包括参照表1的以下内容,其中用于CAN 200的网络拓扑包括控制器202[ECU1]、ECU2 204[ECU2]和ECU3 206[ECU3]、监控器208[ECUM]、电源210[PS]、星形蓄电池组212[BS]以及接地214[G]。使用网络拓扑的可实现性分析来获得故障模型,其中个别地引起征兆并且监控通信以确定对于每个征兆而言控制器中的哪一个是非活动的。\n[0054] 表1\n[0055]\n[0056] 第一故障集f1可以包括控制器ECU1 202中的一个与星形蓄电池组212之间的开路电力链路211、控制器ECU1 202与接地214之间的开路接地链路221、控制器ECU1 202与控制器ECU2 204之间的开路通信链路201的征兆以及具有相应的故障表征向量Vf非活动的控制器ECU1 202的故障(包括非活动的控制器ECU1 202)。第二故障集f2可以包括控制器ECU2 204中的一个与蓄电池210之间的开路电力链路211、控制器ECU2 204与接地214之间的开路接地链路221的征兆以及具有相应的故障表征向量Vf非活动的控制器ECU2 204的故障(包括非活动的控制器ECU2 204)。第三故障集f3可以包括控制器ECU3 206中的一个与星形蓄电池组\n212之间的开路电力链路211、控制器ECU3 206与接地214之间的开路接地链路221的征兆以及具有相应的故障表征向量Vf非活动的控制器ECU3 206的故障(包括非活动的控制器ECU3 \n206)。第四故障集f4可以包括控制器ECU2 204与控制器ECU 3 206之间的开路通信链路\n201,以及相应的故障表征向量Vf非活动(包括非活动的控制器ECU1 202和ECU2 204)。第五故障集f5可以包括蓄电池210与星形蓄电池组212之间的开路电力链路211,以及相应的故障表征向量Vf非活动(包括非活动的控制器ECU1 202和ECU3 206)。第六故障集f6可以包括监控器208与控制器ECU 3 206之间的开路通信链路201,以及相应的故障表征向量Vf非活动(包括非活动的控制器ECU1 202、ECU2 204和ECU3 206)。可以使用CAN的拓扑图的可实现性分析根据CAN系统的特定架构来开发出其他故障表征向量Vf非活动。可以在ECU1 202、ECU2 204、ECU3 206和监控器208中的任一个或所有中执行包括故障诊断的监控功能,以识别通信链路201、电力链路211和接地链路221中的故障并识别非活动的控制器(如果存在)。这允许开发适合的故障集和征兆以及相应的故障表征向量Vf非活动来隔离CAN中的单个可以作用的故障。\n[0057] 现在描述用来获得用于车辆内通信网络的CAN的故障表征的车上例行程序。所获得的故障表征使得能够对车辆内通信故障进行故障诊断,包括以一个或多个链路开路故障、控制器故障和链路短路故障形式的与通信链路201、电力链路211和接地链路221相关的故障。该算法与包括连接矩阵的乘法的可实现性分析的已知方法相比需要少得多的内存和CPU时间来进行车上实施。复杂度比较指示具有N个节点的通信网络的复杂度与根据用于已知系统的O(N5)确定的复杂度因数相对比,当使用本文描述的系统时可以根据O(N2)来确定。\n复杂度的此减少导致控制器的车上实施的成本减少和可靠性的相应改进。\n[0058] 图3示意性地示出网络拓扑300,其包括监控控制器(监控器)308和多个通信节点,包括节点k 304、节点j 302以及节点ni 306,即n1, n2, …. nm。可以监测到由与节点j 302与节点k 304之间的链路303中的故障相关的监控器308监测到的故障表征包括在节点ni (i=1,2,…,m) 306与节点j 302之间的链路的故障表征集中的所有控制器和其他节点,因为那些链路通过链路303连接到监控器308。此外,节点j 302在当其是控制器时也在故障表征集中。导致CAN总线上的消息丢失的通信故障可能是控制器中的一个中的故障、CAN总线的通信链路中的一个中的故障、电力网的电力链路中的一个中的故障以及接地网的接地链路中的一个中的故障的结果。\n[0059] 图4示意性地示出用来获得用于可以用在移动系统上的CAN的故障表征的车上例行程序400的一个实施例,CAN包括多个CAN元件,所述CAN元件包括多个联接的节点,节点包括车上监控控制器(监控器)。这包括识别CAN的所有节点之间的通信链路和相关节点。根据每个链路与监控控制器的连接次序来将每个链路分等级。将较低等级分配给通信链路中接近监控控制器的链路并且将较高等级分配给链路中远离监控控制器的链路。另外,对于每个链路,识别出远离监控器的相关节点。车上监控控制器以具有最高等级的链路开始为每个链路确定故障表征,其中每个故障表征包括对于相应链路中的每一个而言相关节点中识别出的远离监控器的节点。在位于对象节点与监控器之间或者介入其间的节点和链路数量的背景下来确定节点与监控控制器的接近度。\n[0060] 车上例行程序400获得用于CAN(例如,参照图1所描述的CAN)的故障表征。最初,将每个链路的等级设置为零(对于i = 1,…,nlink,lrank(i) = 0)。监控器被识别为fnode[0]并且其是被评估的第一个节点。选择等级k=1作为第一等级,并且初始化计数器n(n=0),并且执行迭代过程来对节点进行评估和分等级(405)。\n[0061] 子例行程序410操作以根据所有链路与监控器的接近度和连接次序对其分等级。\n将较低等级分配给链路中接近监控器的链路并且将较高等级分配给链路中远离监控器的链路。参照图4和表2来描述操作以根据所有链路与监控器的连接次序对其分等级的子例行程序410的一个实施例,提供表2作为图解,其中如下阐述数字编号的方框和相应功能。\n[0062] 表2\n[0063]\n[0064] 参数包括计数(n)、索引(m)、节点(node)、故障节点(fnode)、链路等级(lrank)、链路数量(nlink)。可以将计数与链路数量进行比较以确定是否评估了所有链路(nnlink?)(414)。当索引大于链路数量时(414)(1),将计数n增量(n=n+1)(413)并且例行程序重新开始(411)。当索引小于链路数量时(414)(1),查询链路等级以确定其是否为零(lrank[m] =0?)(416),并且如果不是(416)(0),则将索引m增量(m=m+1)(415)并且操作返回到步骤414。如果这样(416)(1),则将第一节点与故障节点进行比较(node1[m] = fnode[n]?)(417),并且如果相等(417)(1),则将下一个节点设置成等于故障节点(node2[m] = fnode[n])(418),并且操作前进到步骤421。否则,(417)(0),将下一个节点与节点2进行比较(node2[m] = fnode[n]?)(419)。\n当下一个节点不等于节点2时(419)(0),将索引m增量(m=m+1)(415)并且操作返回到步骤\n414。如果下一个节点等于节点2(419)(1),则将故障节点设置等于当前节点(fnode[k] = node1[m])(420),并且操作设置链路等级并为k项做索引(lrank[m]=k; rlrank[k]=m; k=k+1)(421)。将k索引与链路数进行比较(k>nlink?)(422),并且如果小于(422)(0),则将索引m增量(m=m+1)(415)并且操作返回到步骤414。否则(422)(1),子例行程序1 410的当前迭代结束并且操作前进到子例行程序2 430。\n[0065] 以此方式,节点fnode[n](除了fnode[0]=监控器之外,fnode[n]被识别为具有等级rank-n, n=1,…,nlink的链路中更加远离监控器的节点)。发现尚未被分等级(lrank[m]=0)并且在节点fnode[n](即,node1[m]=fnode[n]或node2[m]=fnode[n])通过具有等级rank-n的链路连接到监控器的链路(link-m)。在以上链路link-m中更加远离监控器的节点被存储为fnode[k],link-m的等级被设置为rank-k(lrank[m]=k),link-m被设置为具有rank-k的链路(rlrank[k]=m),并且对于有待分等级的下一个链路增量等级k。\n[0066] 在为所有链路分等级(n=nlink)之后,用来产生用于CAN的故障表征的车上例行程序400识别对于每个链路而言节点中的哪一个更加远离监控器。这包括从最远离监控器的链路(k=nlink)开始,并且检查链路中最远离监控器的节点(fnode[k])是否是控制器。如果这样,则将该节点添加到用于具有等级rank-k的链路(即,link-rlrank[k])的链路开路故障的故障表征集。发现具有高于rank-k的等级值(lrank[m]>k)并且通过link-rlrank[k]连接到监控器的所有链路(link-m),并且将用于那些链路的链路开路故障的故障表征集中的控制器添加到用于link-rlrank[k]的链路开路故障的故障表征集。\n[0067] 子例行程序430操作以产生故障表征。在获得所有链路开路故障表征之后,为每个控制器设置ECU故障表征。随后设置用于总线短路故障的故障表征并且子例行程序结束。参照图4和表3来描述子例行程序430的一个实施例,提供表3作为图解,其中如下阐述数字编号的方框和相应功能。\n[0068] 表3\n[0069]\n[0070] 子例行程序2 430包括将索引k初始化为链路数(k=nlink)(431)。检查索引k以确定其是否已达到零(k=0?)(432)。如果否,则指示尚未评估所有节点,评估当前节点(fnode[k])以确定其是否是控制器(fnode[k]是ECU?)(433),并且如果这样(433)(1),则将当前节点(fnode[k])添加到链路rlrank[k]的故障表征集(434)。否则(433)(0),则将索引m初始化为1(m=1)(435)。将索引m与链路数进行比较(m>nlink?)(436),并且如果大于链路数(436)(1),则将索引k减量(k=k-1)(437),并检查索引k以确定其是否已经达到零(k=0?)(432)。如果索引k不大于链路数(436)(0),则评估链路等级以确定其是否大于索引k(438)。如果这样(438)(1),则将索引m增量(m=m+1)(439),并且再次将索引m与链路数进行比较(m>nlink?)(436)。如果不是这样(438)(0),则评估节点1和2以确定它们是否是故障节点(node1[m]=fnode[k]或node2[m]=fnode[k]?)(440)。如果不是(440)(0),则将索引m增量(m=m+1)(439),并且再次将索引m与链路数进行比较(m>nlink?)(436)。如果这样(440)(1),则将link-m的集中的控制器添加到link-rlrank[k]的故障表征集(441),并且将索引m增量(m=m+1)(439),并且再次将索引m与链路数进行比较(m>nlink?)(436)。当索引k已经达到零时(k=0?)(432)(1),子例行程序430的操作结束。因此,在获得所有链路开路故障表征之后,为每个控制器设置ECU故障表征。随后设置用于总线短路故障的故障表征并且例行程序结束。\n[0071] 随后操作包括将每个控制器(ECU)添加到其自己的故障表征集并且将所有控制器添加到总线短路故障的表征集(450),并且将故障表征存储在车上控制器的可编程只读内存中(452),并且执行结束(454)。随后可以使用适合的故障检测和隔离算法,使用故障表征来隔离CAN 500中的故障。这可以包括将故障表征传达到参照图1描述的车外器件45以远程地识别CAN 50中的故障。\n[0072] 图5-1至图5-10示出用来获得用于CAN 500的一个实施例的故障表征的车上例行程序500的执行,包括通过车上例行程序400展示进程以获得故障表征。图5-1至图5-10中的每一个描绘CAN 500的实施例,该CAN包括监控器508、控制器ECU1 501、ECU2 502、ECU3 503和ECU4 504联机连接505以及联机505与ECU3 503之间的通信链路link_1 511、联机505与ECU2 502之间的通信链路link_2 512、监控器508与联机505之间的通信链路link_3 513、ECU1 501与监控器508之间的通信链路link_4 514以及ECU2 502与ECU4 504之间的通信链路link_5 515。输入包括nlink,其是总线链路和对于每个link-i, i=1, …, nlink的节点对(node1[i],node2[i])的总数。\n[0073] 变量优选地包括以下项:\n[0074] lrank[i]——link-i的等级, i=1,…,nlink;\n[0075] rlrank[j]——具有等级j的链路, j=1,…,nlink;\n[0076] fnode[i]——具有rank-i, i=1,…,nlink的链路中更加远离监控器的节点;以及[0077] fnode[0]=监控器\n[0078] 输入优选地包括以下链路和相关节点:\n[0079] nlink=5;\n[0080] link_1=(联机505, ECU3 503);\n[0081] link_2=(联机505, ECU2 502);\n[0082] link_3=(监控器508, 联机505);\n[0083] link_4=(ECU1 501, 监控器508);以及\n[0084] link_5=(ECU2 502, ECU4 504)\n[0085] 变量优选地包括以下项:\n[0086] lrank[m]——link_m的等级, m=1,…,5;\n[0087] rlrank[k]——具有等级k, k=1,…,5的链路,即lrank[rlrank[k]]=k;\n[0088] fnode[k]——具有rank-k, k=1,…,5的链路中更加远离监控器的节点,而fnode[0]=监控器508。\n[0089] 图5-1示出步骤0的结果,其包括对于m=1,…,5且等级 k=1, n=0,最初设置lrank[m]=0。Fnode[0]=监控器508(520)。步骤1包括对于fnode[n](=监控器508,因为n=0),发现尚未被分等级(即,lrank[m]=0)并且连接到fnode[n](=监控器508)的所有链路(link_m)。\n[0090] 图5-2示出在执行图4中的子例行程序410(其中n=0且m=3)之后的步骤2的结果。这包括发现第一链路(其是link_3 513)。其等级被设置为当前等级k (k=1),即,lrank[3]=1且rlrank[1]=3(521),并且将link_3 513中不同于fnode[n](=监控器508)的更加远离监控器508的节点存储到fnode[k],即fnode[1]= 联机505(522),并且将等级k增量,即k=k+1=2。\n[0091] 图5-3示出在执行图4中的子例行程序410(其中n=0且m=4)之后的步骤3的结果。这包括发现下一个链路(其是link_4 514)。其等级被设置为当前等级k (k=2),即,lrank[4]=\n2且rlrank[2]=4(523),并且将link_4 514中不同于fnode[n]的节点(其更加远离监控器\n508)存储到fnode[k],即fnode[2]=ECU1(524),并且将等级k增量,即k=k+1=3。\n[0092] 步骤4包括以下内容。由于没有其他未分等级的链路连接到fnode[0](=监控器\n508),所以将n增量,即n=n+1=1。重复步骤2(其中fnode[n]= fnode[1]=联机505)来发现连接到fnode[n]=联机505的所有未分等级的链路。\n[0093] 图5-4示出在执行图4中的子例行程序410之前的结果,其中n=1并且m=1。\n[0094] 图5-5示出在执行图4中的子例行程序410(其中n=1且m=1)之后的步骤5的结果,其中所发现的第一链路是link_1 511。其等级被设置为当前等级k (k=3),即,lrank[1]=3且rlrank[3]=1(525),并且将link_1 511中不同于fnode[1](=联机505)的节点(其更加远离监控器508)存储到fnode[k],即fnode[3]= ECU3(526),并且将等级k增量,k=k+1=4。\n[0095] 图5-6示出在执行图4中的子例行程序410(其中n=1且m=2)之后的步骤6的结果,其中所发现的下一个链路是link_2 512。其等级被设置为当前等级k (k=4),即,lrank[2]=4且rlrank[4]=2(527),并且将link_2 512中不同于fnode[1]的节点(其更加远离监控器\n508)存储到fnode[k],即fnode[4]= ECU2(528),并且将等级k增量,即k=k+1=5。\n[0096] 图5-7示出在执行图4中的子例行程序410(其中n=2且m=5)之后的步骤7的结果。这包括以下内容。由于没有其他未分等级的链路连接到fnode[1](=联机505),所以将n增量(n=n+1=2),并且重复步骤2(其中fnode[n]= fnode[2]=ECU1)来发现连接到fnode[2]=ECU1的所有未分等级的链路。\n[0097] 图5-8示出在执行图4中的子例行程序410(其中n=3且m=5)之后的步骤8。这包括以下内容。由于没有未分等级的链路连接到fnode[2](=ECU1),所以将n增量(n=n+1=3),并且重复步骤2(其中fnode[n]= fnode[3]=ECU3)来发现连接到fnode[3]= ECU3的所有未分等级的链路。\n[0098] 图5-9示出在执行图4中的子例行程序410(其中n=4且m=1)之前的步骤9。这包括以下内容。由于没有未分等级的链路连接到fnode[3](=ECU3),所以将n增量(n=n+1=4),并且重复步骤2(其中fnode[n]= fnode[4]=ECU2)来发现连接到fnode[4]= ECU2的所有未分等级的链路。\n[0099] 图5-10示出在执行图4中的子例行程序410(其中n=4且m=5)之后的步骤10,其包括以下内容。所发现的第一链路是link_5 515,并且其等级被设置为当前等级k (k=5),即,lrank[5]=5且rlrank[5]=5(529),并且将link_5 515中不同于fnode[4](=ECU2)的节点(其更加远离监控器508)存储到fnode[k],即fnode[5]= ECU4(530),并且将等级k增量,k=k+1=\n6。\n[0100] 步骤11与图4中子例行程序410到子例行程序430的过渡有关,并且包括以下内容。\n由于k=6>nlink=5,所以已经对所有链路分等级。可以通过首先识别对于每个链路而言节点中的哪一个更加远离监控器508来从分级为nlink=5的链路开始获得用于每个链路开路故障的故障表征。\n[0101] 步骤12至16与图4中的子例行程序430的迭代之后获得的结果有关。\n[0102] 步骤12包括以下内容。由于rlrank[5]=5,所以最高等级的链路是link_5 515。因为fnode[5]=ECU4并且其是控制器,所以将ECU4添加到link_5 515开路的故障表征集。由于没有其他链路连接到fnode[5]=ECU4,所以对link_5 515的故障表征没有其他更新,并且用于link_5 515的故障表征是{ECU4}。\n[0103] 步骤13包括以下内容。由于rlrank[4]=2,所以下一个链路是link_2 512。因为fnode[4]=ECU2并且其是控制器,所以将ECU2添加到link_2 512的故障表征集。由于link_5 \n515连接到fnode[4]并且具有高于link_2 512的等级,所以添加link_5 515的故障表征,并且用于link_2 512开路的最终故障表征是{ECU2, ECU4}。\n[0104] 步骤14包括以下内容。由于rlrank[3]=1,所以下一个链路是link_1 511。因为fnode[3]=ECU3并且其是控制器,所以将ECU3添加到link_1 511的故障表征集。由于没有其他链路连接到fnode[3]=ECU3,所以对link_1 511的故障表征没有其他更新,并且用于link_1 511开路的故障表征是{ECU3}。\n[0105] 步骤15包括以下内容。由于rlrank[2]=4,所以下一个链路是link_4 514。因为fnode[2]=ECU1并且其是控制器,所以将ECU1添加到link_4 514的故障表征集。由于没有其他链路连接到fnode[2]=ECU1,所以对link_4 514的故障表征没有其他更新,并且用于link_4 514开路的故障表征是{ECU1}。\n[0106] 步骤16包括以下内容。由于rlrank[1]=3,所以下一个链路是link_3 513。由于fnode[1]=联机505并且其不是控制器,所以无需将其添加到故障表征集。由于link_1 511和link_2 512都连接到fnode[1] =联机505并且都具有高于link_3 513的等级,所以添加link_1 511和link_2 512的故障表征。用于link_3 513开路的最终故障表征是{ECU2, ECU3, ECU4}。\n[0107] 步骤17与图4的子例行程序530的执行相关,并且包括以下内容。将每个控制器添加到其自己的控制器故障表征集,即用于ECU_i故障的故障表征是{ECU_i},i=1,2,3,4。将所有控制器添加到总线短路故障的故障表征,即,用于总线短路故障的故障表征是{ECU_i,i=1,2,3,4}。\n[0108] 可以将故障表征存储在内存中和/或传达到车外器件45,以响应于指示的故障来远程地隔离CAN 50中的故障。隔离CAN 50中的故障包括使用故障表征集来识别发生故障的一个或多个控制器和/或通信链路。\n[0109] 本披露已描述了一些优选实施例和对其的修改。其他人在阅读和理解说明书之后可以想到其他修改和改变。因此,本披露并不意欲限于披露为预期用于实现此披露的最佳模式的具体实施例,而是本披露将包括落入随附权利要求的范围内的所有实施例。