浅谈CAPL语言在LIN总线测试中的应用

2024-09-25 00:00姬楠陆昊楠高茹王晰聪赵跃谷原野
汽车电器 2024年9期

【摘 要】文章首先对LIN总线的发展历史和车载应用场景进行简单介绍,然后对LIN总线的测试环境进行详细描述,并结合实际案例,对CAPL语言在LIN总线测试中的应用进行重点阐述。分析表明,CAPL语言可实现对LIN总线测试内容的全覆盖,即使搭配普通电源,也可实现对测试时间和测试动作的精确控制,有利于减少测试误差,提高测试效率。

【关键词】CAPL;LIN总线;车载网络

中图分类号:U463.6 文献标识码:A 文章编号:1003-8639( 2024 )09-0056-02

Discussion on the Application of CAPL in LIN Bus Test

JI Nan1,LU Haonan1,GAO Ru2,WANG Xicong1,ZHAO Yue1,GU Yuanye1

(1.FAW Bestune Car Co.,Ltd.;2.Changchun Technical University of Automobile,Changchun 130000,China)

【Abstract】Firstly,the development history of LIN bus and vehicle application scenarios are briefly introduced,and then the test environment of LIN bus is described in detail. Combined with actual cases,the application of CAPL language in LIN bus test is emphatically expounded. The analysis shows that CAPL language can achieve full coverage of LIN bus test content,even with ordinary power supply,it can also achieve accurate control of test time and test action,which is conducive to reducing test errors and improving test efficiency.

【Key words】CAPL;LIN bus;vehicle network

目前,车载总线技术主要为CAN/CAN FD(CAN with Flexible Data-rate,速率可变的控制器局域网络)总线、LIN总线等[1]。CAN是一种有效支持分布式控制系统的低成本串行通信网络,且其功能表现多被用户直接感知,直接影响用户驾乘体验和驾驶安全,因此LIN控制器的总线测试至关重要。但是,LIN总线测试对测试动作的执行时间和精确度有着严格的要求,这使得手动测试无法满足测试规范要求,测试人员需要借助自动化测试手段,而CANoe内置的CAPL(Communication Access Programming Language,通信访问编程语言)可实现LIN总线测试自动化。

1 LIN总线协议

LIN是专门为汽车开发的一种低成本串行通信网络,是对CAN等其它汽车通信网络的一种补充,适用于对网络带宽、性能或容错功能没有过高要求的环境。1998年在德国召开的汽车电子会议上,LIN总线被首次提出,并由LIN联盟发展、发布和管理LIN总线规范。2014年LIN总线规范《LIN Specification Package Revision 2.2A》正式成为ISO标准,目前最新的版本为ISO 17987—2016版。LIN控制器主要应用于车窗升降、门锁、方向盘组合开关、阳光雨量传感器、汽车天窗、空调、照明灯等。目前,各个车厂使用的主流LIN总线版本为《LIN Specification Package Revision 2.2A》,或依据此规范结合各家车厂的独特功能设计进行适配开发。

2 CAPL语言

常用的LIN总线测试工具有CANoe、Emulin、LINgate等,LIN测试工具种类繁多,每个硬件工具都具有对应配套的上位机软件。本文主要介绍德国Vector(维克多)公司的CANoe在LIN总线测试的应用。其中,CANoe内置的CAPL语言是基于C语言开发,专门用于CANoe测试环境[2]。CAPL的目标是尽可能简单地解决特定的任务,对接收到的消息或事件做出反应,例如:检查报文信号值、发送消息和设置信号值等。CAPL将自己限制在这些确定的事件上,而不需要任何额外的开销。CAPL语言程序与C语言程序不同的是,CAPL程序是事件触发的,这意味着它们由单独的函数组成,每个函数都会对当前系统中的事件做出反应。例如,要对ID为0x100的报文做出反应,可以使用关键字“On message 0x100{反应的动作}”。CAPL程序不提供任何指针类型,这从源头规避了许多潜在的编程错误和程序崩溃。虽然指针具有容易出错的缺点,但是也具备非常强大的功能,因此CAPL语言提供了一些替代品,例如:联合数组作为动态内存的替代品。

3 CAPL语言在LIN总线测试的应用

3.1 LIN总线测试环境

LIN总线硬件设备主要涉及Vector公司的总线设备、12V直流电源、PC电脑和被测控制器(下文中使用ECU替代)。其中,总线设备型号不受限制,只要具备LIN总线接口和IO控制端口即可,如:VN1640A、VN1630、VN1670等,本文中使用的是VN1640A设备。LIN总线测试硬件环境示意如图1所示,VN1640A设备与PC电脑通过USB数据线连接,ECU的LIN总线接口与VN1640A的LIN总线接口通过DB9插件进行连接。直流电源的正极与VN1640A的IO(输入输出)模块接口中的输入端1连接,IO模块的输出端2与ECU的正极端口3连接,ECU的负极端口4与直流电源的负极进行连接,形成闭合回路。其中,IO端口可以通过上位机软件中的IO模块经CAPL脚本进行控制,实现闭合回路的连通或中断。

软件环境为Vector公司的CANoe11软件,是一款用于网络和ECU开发、测试、分析的专业工具,支持总线网络开发从需求分析到系统实现的整个开发过程。运行环境为Windows10操作系统。在ECU开发的初期,CANoe可以借助自带的CAPL语言实现网络节点仿真。加载ldf文件结合NetworkNode,通过CAPL语言编程实现LIN总线节点仿真和控制[3],如图2所示。

3.2 CAPL常用关键字

CAPL常用的事件处理关键字有On timer、On message、On start等。图3为触发测试系统发送ID为0x100的报文。当工程开始运行时,设置计时器LightTimer时间为100ms并开始计时,当计时器LightTimer计时完成,触发On timer事件中的动作output(DoorState),即发送ID为0x100的报文。如果总线上出现ID为0x123的报文,也会发送ID为0x100的报文。

3.3 CAPL在LIN总线测试应用

3.3.1 报文位电平

LIN规范要求ECU检测到报头的帧格式错误需要做出反馈。这需要测试者仿真LIN报头的格式错误(位电平),使用函数linInvertHeaderBit(byteIndex、bitIndex、level)可以实现对控制器发出的报头结构干扰,改变总线上报头的位电平。其中,byteIndex字段可设置为-1,0,1,分别对应干扰同步间隔场,同步场,标识符场。bitIndex字段为待操作位,可设置为0~8,0对应第1个位,8对应停止位,需要注意的是,0并非对应起始位,因为检测到起始位时就已经错过干扰的时机,即无法再进行干扰。level字段可设置为0或1,用于对高低电平进行干扰切换,高电平干扰成低电平,低电平干扰成高电平。

LIN报文由报头和报文数据组成。报文报头中的位电平可通过上述函数干扰改变,报文数据中的位电平则通过linSetRespDisturbance(frameId、lengthInBits、level、offsetIn-SixteenthBits)函数进行干扰改变。其中frameId字段为所干扰的目标报文ID;lengthInBits字段标识干扰的位长度,以位为单位;level字段用于对位电平的高低干扰;offsetInSixteenthBits字段需要注意的是,计数方式从报头场结束开始计算,并且长度单位为1/16位。

3.3.2 同步间隔与间隔界定符

同步间隔场由同步间隔与间隔界定符组成。LIN规范要求同步间隔的长度为13~26bits,间隔界定符的长度为1~14bits。当主节点的同步间隔和间隔界定符长度在规范要求内的长度时,从节点需要正确识别主节点发送的报头。同步间隔和间隔界定符的长度通过函数linSetBreakLength(syncBreakLen、syncDelLen)改变。其中syncBreakLen字段为同步间隔长度,syncDelLen字段为间隔界定符长度,2个字段的单位均为位。

3.3.3 信号值

主节点需要能够识别到从节点发出的LIN_Error信号,当从节点连续发出3帧LIN_Error=1的信号后,主节点需要记录总线通信错误故障码。这需要更改从节点发出的信号值,而函数setSignal(aSignal、aValue)可实现LIN_Error信号置1。需要注意的是,aSignal字段的内容需要和ldf文件中的信号内容保持一致,aValue根据信号矩阵设置成对应的值。

3.3.4 从节点数据发送控制

LIN规范要求当主节点在规定时间内收不到从节点发送的报文数据时,主节点会记录从节点丢失故障码。为测试此项内容,需要仿真从节点丢失的情况,即仿真从节点报文数据发送的开启和停止,可通过函数linDeactivateResps(nodeName)和linActivateResps(nodeName)来实现从节点数据发送的开启和停止。nodeName字段设置为ldf文件中的节点名称。

4 结论

LIN总线凭借线间干扰小、能节省线束、成本低的优势,仍然存在于各个车厂。CAPL作为CAN总线访问编程语言,可实现对LIN总线测试内容的全部覆盖,其搭配普通电源就可实现对测试时间和动作的精确控制,有利于减少测试误差,保证测试的一致性。

参考文献:

[1] 叶强生,陈书明. 基于CAN/LIN总线的车身网络控制系统[J]. 微计算机信息,2008(24):272-273,292.

[2] 吴光强,张亮修,刘兆勇,等. 汽车自适应巡航控制系统研究现状与发展趋势[J]. 同济大学学报,2017(4):544-553.

[3] 李桂伟,丁健,蔡永祥. 基于CAPL编程的CAN网络仿真模型搭建方法研究[J]. 汽车电器,2002(7):84-87.

(编辑 凌 波)

作者简介姬楠(1989—),男,工程师,硕士;陆昊楠(2000—),男,助理工程师;均从事汽车电器单系统、集成、整车通信测试,以及硬件在环测试系统的设计与应用等工作;高茹(1979—),女,高级工程师,硕士,主要从事汽车智能网联及汽车电器测试技术等教学方向的工作;王晰聪(1991—),男,工程师,硕士;赵跃(1986—),男,工程师,硕士;谷原野(1984—),男,高级工程师,硕士;均从事汽车电气测试、虚拟仿真测试、整车CAN网络和诊断测试、信息安全测试、整车功能测试,以及硬件在环测试系统的设计与应用等工作。