ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

HIL测试中总线与通信协议配置实战:CAN、LIN、EtherCAT与串口

HIL测试中总线与通信协议配置实战:CAN、LIN、EtherCAT与串口 1. HIL测试里那些绕不开的总线与协议到底在测什么做HIL测试的人迟早会撞上同一个问题被测控制器ECU跟台架之间的通信对不上。要么报文收不到要么信号跳变要么干脆整条总线静默。这时候你会发现HIL测试的难点从来不只是模型跑得准不准而是总线与通信协议这一层有没有真正打通。我做了十多年台架和HIL系统集成见过太多项目卡在通信上模型做得漂漂亮亮结果因为一个波特率配置错误整个测试停摆两天。先把概念说清楚。HILHardware-in-the-Loop硬件在环测试本质是把真实的控制器硬件接到一个实时仿真系统上用仿真模型替代真实的被控对象比如发动机、电机、整车动力学让控制器以为自己真的装在一台车上。那控制器怎么跟仿真系统交换信息靠的就是总线与通信协议。CAN、LIN、FlexRay、EtherCAT、串口UART、I2C、SPI这些名字在HIL项目里几乎天天出现。它们各自解决不同层面的问题CAN和LIN管车载网络EtherCAT管高速实时数据回传UART和I2C更多出现在板级或子系统通信里。这篇文章适合谁看如果你刚开始接触HIL测试搞不清CAN报文和信号的关系或者你已经在做台架集成但总在通信配置上反复踩坑那这篇内容就是给你写的。我会从总线选型的底层逻辑讲起把CAN、LIN、EtherCAT、串口这几类在HIL中最常见的通信方式拆开讲清楚它们各自的工作机制、配置要点、常见故障和排查思路。不堆术语尽量用实际项目里的例子说明白。有一点需要提前说明HIL测试中的通信配置核心矛盾永远是实时性和确定性。仿真步长可能是1ms甚至更短如果通信延迟抖动太大控制器收到的信号就是错的测试结论也就没有意义。所以后面讲每一种总线时我都会围绕这个矛盾展开。2. CAN总线HIL测试的绝对主力也是最容易配错的一环2.1 CAN报文、信号与数据库的三角关系CAN总线在HIL测试里的地位短期内没有任何协议能撼动。原因很简单绝大多数车载ECU都用CAN通信你要测它就必须能收发CAN报文。但很多人对CAN的理解停留在“能通就行”这就埋下了隐患。CAN通信的基本单位是报文Frame一条报文包含仲裁域、控制域、数据域、CRC域等。数据域最多8字节CAN FD可以到64字节。而控制器真正关心的不是报文本身而是报文里承载的信号Signal。一个信号可能是车速、转速、温度它占据报文数据域中的某几个bit。信号和报文的对应关系定义在DBC文件或ARXML文件里。这里有个关键点HIL系统要正确解析和发送CAN报文必须加载与ECU一致的DBC文件。我见过项目里DBC版本对不上导致信号偏移量错位车速信号解析出来是负值测试工程师排查了一整天才发现是数据库版本问题。所以每次项目启动第一件事就是确认DBC文件的版本号和校验值跟ECU供应商对齐。2.2 CAN总线的RTR位与SRR位配置时容易忽略的细节热词里出现了“can 总线 rtr 位”和“can总线srr位”这两个确实是CAN配置中容易混淆的地方值得单独说。RTR位Remote Transmission Request用于区分数据帧和远程帧。数据帧的RTR位是显性0远程帧的RTR位是隐性1。远程帧的作用是请求某个节点发送数据但在现代车载网络中已经很少用了。HIL配置时如果你的CAN卡默认把所有帧都当数据帧处理而ECU偶尔发远程帧就可能出现解析异常。大多数情况下建议在HIL的CAN配置里明确设置“只接收数据帧”避免远程帧干扰。SRR位Substitute Remote Request只出现在扩展帧格式中。标准帧和扩展帧的仲裁域结构不同扩展帧在标准帧的RTR位置放了一个SRR位固定为隐性。它的作用是保证标准帧和扩展帧在同一总线上仲裁时不会冲突。对于HIL测试来说你需要确认ECU用的是标准帧还是扩展帧然后在CAN卡配置里选择对应的帧格式。如果ECU用扩展帧而HIL配了标准帧报文根本收不到。提示CAN帧格式标准/扩展和帧类型数据/远程的配置必须在HIL的CAN通道初始化时确定运行中不能动态切换。项目初期就跟ECU供应商确认清楚能省掉大量返工。2.3 CAN总线并联分支长度一个被反复问到的工程问题“can总线并联分支的长度是指哪个长度”这个问题在工程现场被问到的频率极高。CAN总线是总线型拓扑主干线Bus Line上可以引出分支Stub连接到各个节点。分支长度指的是从主干线分叉点到节点收发器之间的那段线长。为什么这个长度重要因为CAN的通信速率和分支长度是相互制约的。速率越高信号波长越短分支上产生的反射越容易干扰通信。一般经验规则是分支长度不超过波特率对应波长的十分之一。比如500kbps时位时间2微秒信号在双绞线上的传播速度约5ns/m一个位时间对应约400米波长十分之一就是40米。但实际工程中500kbps下分支长度通常控制在几米以内1Mbps时更短。HIL台架上CAN节点通常比较集中分支长度不会太长但如果你把ECU放在远离台架的位置用长线连接就要注意这个问题。实测中分支过长会导致CRC错误率上升严重时直接bus off。解决办法要么降低波特率要么缩短分支要么在分支末端加终端电阻匹配。2.4 CAN通信协议实例从配置到验证的完整链路一个典型的HIL CAN通信配置流程是这样的确认物理层参数波特率常见500kbps、250kbps、采样点通常75%~80%、终端电阻120欧姆两端各一个。加载数据库文件DBC或ARXML确认版本与ECU一致。配置CAN通道选择标准帧/扩展帧设置接收过滤规则映射信号到仿真模型变量。编写收发逻辑周期报文的发送周期如10ms、100ms、事件报文的触发条件、超时处理。联调验证用CAN分析仪抓包对比HIL发送的报文和ECU实际收到的报文检查信号值是否一致。我自己的习惯是在联调阶段一定同时用第三方CAN工具比如常见的CAN分析仪抓一路原始报文跟HIL内部的收发记录做交叉比对。这样一旦出问题能快速判断是HIL发错了还是ECU没收对还是物理线路有问题。这个习惯帮我省过很多次扯皮的时间。3. LIN总线低成本子网络HIL里的小角色但有大麻烦3.1 LIN的调度表机制与HIL的从节点模拟LIN总线在车载网络里通常作为CAN的补充用于连接车窗、雨刮、座椅这类对速率要求不高的节点。它的特点是单主多从、低成本、速率最高20kbps。在HIL测试中LIN通常有两种角色一是模拟主节点调度整个LIN网络二是模拟从节点响应主节点的请求。LIN通信的核心是调度表Schedule Table。主节点按照调度表依次发送帧头Header从节点根据帧头里的ID决定是发送响应还是接收数据。HIL系统如果模拟主节点就必须严格按照调度表的时间间隔发送帧头如果模拟从节点就要在收到对应ID的帧头后在规定时间内把响应数据放上总线。这里最容易出的问题是时序。LIN的帧头到响应之间的时间窗口很紧如果HIL的仿真步长太大或者LIN通道的驱动响应慢就会错过响应窗口主节点报超时错误。我的经验是LIN模拟的实时性要求比CAN更高仿真步长最好控制在100微秒以内而且LIN通道要独立于CAN通道处理避免被CAN的大量报文阻塞。3.2 LIN帧的校验与错误处理LIN帧有两种校验方式经典校验Classic Checksum和增强校验Enhanced Checksum。区别在于增强校验把ID也纳入校验计算。如果HIL配置的校验方式和ECU不一致从节点会认为收到的帧无效直接丢弃。排查LIN通信问题时我通常先确认三件事调度表周期对不对、校验方式对不对、从节点的响应时间够不够。这三件事确认完90%的LIN通信问题都能定位。剩下的10%往往是物理层问题比如LIN线对电源短路、地偏移过大这些用示波器看波形就能判断。4. EtherCAT与实时以太网高带宽场景下的HIL通信选择4.1 EtherCAT为什么适合HIL的实时数据回传当HIL系统需要高速采集大量数据比如电机台架上的多路电流电压、振动传感器信号CAN的带宽就不够用了。这时候EtherCATEthernet for Control Automation Technology就成了首选。EtherCAT的特点是主站发送一帧数据从站在帧经过时直接读写数据不需要存储转发因此延迟极低抖动可以控制在微秒级。在HIL架构里EtherCAT通常用于实时仿真机与IO板卡之间的通信或者仿真机与功率级硬件之间的快速闭环。它的通信周期可以做到100微秒甚至更短远优于CAN。但EtherCAT的配置比CAN复杂得多需要配置从站描述文件ESI、过程数据对象PDO映射、分布式时钟DC同步等。4.2 EtherCAT配置中的分布式时钟同步分布式时钟是EtherCAT实现确定性通信的关键。它让所有从站的时钟与主站时钟对齐确保数据采样和输出的时间戳一致。如果DC同步没配好从站之间的采样时刻会有偏差对于多通道同步采集的场景这个偏差会直接导致数据不可用。配置DC时需要设置同步周期和同步窗口。同步周期通常等于通信周期同步窗口则决定了从站时钟允许的偏差范围。窗口设得太小从站可能频繁报同步丢失设得太大又失去了同步的意义。一般建议同步窗口设为通信周期的十分之一左右具体值要根据从站硬件的时钟精度调整。注意EtherCAT的DC同步一旦配置好不要随意改动通信周期。周期变化会导致同步窗口需要重新计算改完必须重新验证所有从站的同步状态。5. 串口、I2C与板级通信协议在HIL中的角色5.1 UART通信协议简单但不容小觑UART通用异步收发传输器在HIL测试中常用于仿真机与某些子系统之间的低速通信比如与电池管理系统的诊断口、与某些传感器的串口输出。UART没有时钟线靠约定的波特率同步所以收发双方的波特率必须严格一致。常见波特率有9600、115200、921600等。UART配置里容易忽略的是数据位、停止位和校验位。默认通常是8数据位、1停止位、无校验但有些设备用7数据位或偶校验。如果HIL的串口配置跟设备不一致收到的就是乱码。我一般会在项目初期用串口助手抓一段原始数据确认帧格式后再配置HIL的串口通道。另外UART是点对点通信没有总线仲裁机制所以不存在冲突问题但也意味着一个串口只能接一个设备。HIL系统如果要跟多个串口设备通信就需要多个串口通道或者串口扩展卡。5.2 I2C通信协议在HIL中的特殊考量I2C是板级通信协议通常用于同一块板卡上芯片之间的通信。在HIL测试中I2C一般不出现在台架的主通信链路上但在某些特殊场景下会用到比如仿真某些传感器芯片的行为或者读取被测板卡上的EEPROM。I2C的难点在于时序。它有时钟线SCL和数据线SDA主设备产生时钟从设备响应。I2C支持多主多从靠地址区分设备。在HIL中模拟I2C从设备时必须在主设备发出时钟后的规定时间内把数据位准备好否则主设备会读到错误数据。这对HIL的实时性要求很高通常需要用FPGA或专用的IO板卡来实现纯软件模拟很难满足时序要求。5.3 通信协议层与硬件层的边界热词里出现了“服务通信协议层”和“网络通信协议层”这两个概念在HIL里对应的是不同层面的问题。硬件层管的是电气信号、电平、时序协议层管的是帧格式、寻址、校验、流控服务层管的是诊断服务、标定服务、刷写服务。HIL测试中如果通信不通排查顺序应该是从硬件层往上走先看物理线路和电平对不对再看帧格式和波特率对不对最后看服务层的数据内容对不对。这个顺序能帮你快速缩小问题范围。6. 总线选型与HIL通信架构设计的实战思路6.1 根据被测对象决定总线类型HIL项目里选什么总线不是拍脑袋决定的而是由被测ECU的实际通信接口决定的。如果ECU只有CAN接口那HIL就必须配CAN如果ECU有CAN和LIN两个接口HIL就要同时支持两种总线并且要处理好两者之间的网关逻辑。我参与过一个项目ECU同时有CAN、LIN和FlexRay三个接口。HIL系统需要同时模拟这三条总线上的其他节点。这种情况下通信架构的设计就很重要三条总线是独立处理还是统一调度我的做法是给每条总线分配独立的处理线程或FPGA资源避免相互阻塞然后在应用层做信号映射和逻辑关联。6.2 实时性预算通信延迟在HIL闭环中的影响HIL测试的核心是闭环。控制器输出控制信号仿真模型计算被控对象响应再把响应反馈给控制器。这个闭环里通信延迟会直接影响闭环稳定性。如果通信延迟太大闭环可能振荡甚至发散。所以在设计HIL通信架构时必须做实时性预算。把整个闭环的延迟拆解成控制器计算延迟、通信发送延迟、仿真模型计算延迟、通信接收延迟。每一部分都要控制在预算范围内。CAN的通信延迟通常在毫秒级EtherCAT可以做到微秒级串口则取决于波特率和数据长度。对于快速闭环比如电机控制必须用EtherCAT或类似的实时以太网对于慢速闭环比如车身控制CAN就足够了。6.3 常见通信故障的排查链路通信故障的排查我总结了一个从底向上的链路排查层级检查内容常用工具物理层线缆连接、终端电阻、电平幅值万用表、示波器链路层波特率、帧格式、校验方式CAN分析仪、LIN分析仪网络层报文ID、调度表、地址分配总线抓包工具应用层信号映射、数据范围、更新周期HIL配置软件、DBC对比服务层诊断服务、标定协议诊断工具、标定工具这个表看起来简单但实际排查时很多人会跳过物理层直接查应用层结果绕一大圈才发现是线松了。我的建议是每次通信故障都从物理层开始查形成习惯后排查效率会高很多。7. 几个实际项目里踩过的通信坑第一个坑是CAN波特率容差。有一次台架通信时好时坏抓包发现错误帧率很高。查了半天发现ECU的晶振精度不够实际波特率跟标称值偏差超过了CAN允许的容差范围。解决办法是换用更高精度的晶振或者在HIL端调整采样点来补偿。这件事让我明白CAN通信不只是软件配置硬件质量同样关键。第二个坑是LIN调度表冲突。项目里HIL模拟主节点同时还有一个真实的LIN从节点。调度表里两个帧的间隔太短从节点还没响应完下一个帧头就来了导致从节点持续报错。后来把调度表周期拉长问题解决。LIN的调度表设计一定要留足响应时间不能只按理论最小值配。第三个坑是EtherCAT从站丢失。台架运行一段时间后某个EtherCAT从站偶尔掉线。查了线缆、接头都没问题最后发现是从站的电源纹波太大导致通信芯片工作不稳定。加了一级滤波后问题消失。EtherCAT对电源质量比CAN敏感得多布线时一定要保证从站供电干净。第四个坑是串口数据粘包。HIL通过串口接收设备数据设备发送频率不固定有时候两帧数据连在一起发过来HIL按固定长度解析就会错位。后来在协议里加了帧头和帧尾标识按标识解析问题解决。串口通信一定要有帧边界定义不能假设每次收到的就是完整一帧。8. 通信协议配置的版本管理与文档化最后说一个容易被忽视但极其重要的事通信配置的版本管理和文档化。HIL项目里DBC文件、LIN调度表、EtherCAT ESI文件、串口协议文档这些配置文件的版本必须跟ECU的软件版本严格对应。我见过项目因为DBC文件更新了但HIL没同步导致测试结果全部作废重新跑了一周。我的做法是在项目仓库里为每个通信配置文件建立版本记录每次ECU软件更新同步更新对应的通信配置文件并在HIL配置里记录当前使用的版本号。测试报告里也要注明通信配置版本这样出了问题能追溯到具体是哪个版本引入的。另外通信矩阵Communication Matrix一定要文档化。哪个报文由哪个节点发送、周期是多少、包含哪些信号、信号的范围和精度是什么这些信息整理成一张表放在项目文档里。新成员加入时看这张表就能快速理解整个通信架构不用去翻DBC文件猜。这些经验听起来琐碎但HIL测试的通信问题往往就是这些琐碎细节决定的。把细节管好通信就稳了测试才能顺利跑下去。
返回列表